1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-14 20:10:18 +03:00

Add box mode to disable stick commands

Adds a `STICK COMMAND DISABLE SW` mode used to prevent inadvertant triggering of controls, calibrations, or settings changes. Useful for USB HID mode when using the flight controller as a joystick (and auto-detect doesn't work), in "team" or "relay" racing where multiple quads might be bound to the same transmitter, or just in general if the user wants prevent stick commands.

Will also prevent stick arming when the mode is active (but not stick disarming).
This commit is contained in:
Bruce Luckcuck 2020-09-15 12:51:19 -04:00
parent de35df8e07
commit 19ece68555
5 changed files with 8 additions and 4 deletions

View file

@ -1214,7 +1214,7 @@ static void cmsUpdate(uint32_t currentTimeUs)
if (!cmsInMenu) { if (!cmsInMenu) {
// Detect menu invocation // Detect menu invocation
if (IS_MID(THROTTLE) && IS_LO(YAW) && IS_HI(PITCH) && !ARMING_FLAG(ARMED)) { if (IS_MID(THROTTLE) && IS_LO(YAW) && IS_HI(PITCH) && !ARMING_FLAG(ARMED) && !IS_RC_MODE_ACTIVE(BOXSTICKCOMMANDDISABLE)) {
cmsMenuOpen(); cmsMenuOpen();
rcDelayMs = BUTTON_PAUSE; // Tends to overshoot if BUTTON_TIME rcDelayMs = BUTTON_PAUSE; // Tends to overshoot if BUTTON_TIME
} }

View file

@ -205,7 +205,7 @@ void processRcStickPositions()
} }
} }
return; return;
} else if (rcSticks == THR_LO + YAW_HI + PIT_CE + ROL_CE) { } else if (rcSticks == THR_LO + YAW_HI + PIT_CE + ROL_CE && !IS_RC_MODE_ACTIVE(BOXSTICKCOMMANDDISABLE)) { // disable stick arming if STICK COMMAND DISABLE SW is active
if (rcDelayMs >= ARM_DELAY_MS && !doNotRepeat) { if (rcDelayMs >= ARM_DELAY_MS && !doNotRepeat) {
doNotRepeat = true; doNotRepeat = true;
if (!ARMING_FLAG(ARMED)) { if (!ARMING_FLAG(ARMED)) {
@ -231,7 +231,7 @@ void processRcStickPositions()
#ifdef USE_USB_CDC_HID #ifdef USE_USB_CDC_HID
// If this target is used as a joystick, we should leave here. // If this target is used as a joystick, we should leave here.
if (cdcDeviceIsMayBeActive()) { if (cdcDeviceIsMayBeActive() || IS_RC_MODE_ACTIVE(BOXSTICKCOMMANDDISABLE)) {
return; return;
} }
#endif #endif

View file

@ -75,6 +75,7 @@ typedef enum {
BOXVTXCONTROLDISABLE, BOXVTXCONTROLDISABLE,
BOXLAUNCHCONTROL, BOXLAUNCHCONTROL,
BOXMSPOVERRIDE, BOXMSPOVERRIDE,
BOXSTICKCOMMANDDISABLE,
CHECKBOX_ITEM_COUNT CHECKBOX_ITEM_COUNT
} boxId_e; } boxId_e;

View file

@ -236,7 +236,7 @@ static void rcdevice5KeySimulationProcess(timeUs_t currentTimeUs)
} }
#endif #endif
if (ARMING_FLAG(ARMED) || (getArmingDisableFlags() & (ARMING_DISABLED_RUNAWAY_TAKEOFF | ARMING_DISABLED_CRASH_DETECTED))) { if (ARMING_FLAG(ARMED) || IS_RC_MODE_ACTIVE(BOXSTICKCOMMANDDISABLE) || (getArmingDisableFlags() & (ARMING_DISABLED_RUNAWAY_TAKEOFF | ARMING_DISABLED_CRASH_DETECTED))) {
return; return;
} }

View file

@ -98,6 +98,7 @@ static const box_t boxes[CHECKBOX_ITEM_COUNT] = {
{ BOXVTXCONTROLDISABLE, "DISABLE VTX CONTROL", 48}, { BOXVTXCONTROLDISABLE, "DISABLE VTX CONTROL", 48},
{ BOXLAUNCHCONTROL, "LAUNCH CONTROL", 49 }, { BOXLAUNCHCONTROL, "LAUNCH CONTROL", 49 },
{ BOXMSPOVERRIDE, "MSP OVERRIDE", 50}, { BOXMSPOVERRIDE, "MSP OVERRIDE", 50},
{ BOXSTICKCOMMANDDISABLE, "STICK COMMAND DISABLE SW", 51}
}; };
// mask of enabled IDs, calculated on startup based on enabled features. boxId_e is used as bit index // mask of enabled IDs, calculated on startup based on enabled features. boxId_e is used as bit index
@ -330,6 +331,8 @@ void initActiveBoxIds(void)
BME(BOXLAUNCHCONTROL); BME(BOXLAUNCHCONTROL);
#endif #endif
BME(BOXSTICKCOMMANDDISABLE);
#undef BME #undef BME
// check that all enabled IDs are in boxes array (check may be skipped when using findBoxById() functions) // check that all enabled IDs are in boxes array (check may be skipped when using findBoxById() functions)
for (boxId_e boxId = 0; boxId < CHECKBOX_ITEM_COUNT; boxId++) for (boxId_e boxId = 0; boxId < CHECKBOX_ITEM_COUNT; boxId++)