diff --git a/src/main/fc/fc_core.c b/src/main/fc/fc_core.c index f715f75ef9..f977661d88 100644 --- a/src/main/fc/fc_core.c +++ b/src/main/fc/fc_core.c @@ -182,11 +182,20 @@ void updateArmingStatus(void) unsetArmingDisabled(ARMING_DISABLED_CALIBRATING); } - if ((isModeActivationConditionPresent(BOXPREARM) && IS_RC_MODE_ACTIVE(BOXPREARM) && !ARMING_FLAG(WAS_ARMED_WITH_PREARM)) + if ((isModeActivationConditionPresent(BOXPREARM) && IS_RC_MODE_ACTIVE(BOXPREARM) && !ARMING_FLAG(WAS_ARMED_WITH_PREARM)) || !isModeActivationConditionPresent(BOXPREARM)) { unsetArmingDisabled(ARMING_DISABLED_NOPREARM); } else { - setArmingDisabled(ARMING_DISABLED_NOPREARM); + setArmingDisabled(ARMING_DISABLED_NOPREARM); + } + + if (!isUsingSticksForArming()) { + // If arming is disabled and the ARM switch is on + if (isArmingDisabled() && IS_RC_MODE_ACTIVE(BOXARM)) { + setArmingDisabled(ARMING_DISABLED_ARM_SWITCH); + } else if (!IS_RC_MODE_ACTIVE(BOXARM)) { + unsetArmingDisabled(ARMING_DISABLED_ARM_SWITCH); + } } if (isArmingDisabled()) { diff --git a/src/main/fc/runtime_config.c b/src/main/fc/runtime_config.c index cba63c3f4e..5b69b4ef01 100644 --- a/src/main/fc/runtime_config.c +++ b/src/main/fc/runtime_config.c @@ -32,7 +32,8 @@ static uint32_t enabledSensors = 0; #if defined(OSD) || !defined(MINIMAL_CLI) const char *armingDisableFlagNames[]= { "NOGYRO", "FAILSAFE", "RX LOSS", "BOXFAILSAFE", "THROTTLE", - "ANGLE", "NO PREARM", "LOAD", "CALIB", "CLI", "CMS", "OSD", "BST" + "ANGLE", "NO PREARM", "ARM SWITCH", "LOAD", "CALIB", "CLI", + "CMS", "OSD", "BST" }; #endif diff --git a/src/main/fc/runtime_config.h b/src/main/fc/runtime_config.h index e2653c8df3..664fee4253 100644 --- a/src/main/fc/runtime_config.h +++ b/src/main/fc/runtime_config.h @@ -42,15 +42,16 @@ typedef enum { ARMING_DISABLED_THROTTLE = (1 << 4), ARMING_DISABLED_ANGLE = (1 << 5), ARMING_DISABLED_NOPREARM = (1 << 6), - ARMING_DISABLED_LOAD = (1 << 7), - ARMING_DISABLED_CALIBRATING = (1 << 8), - ARMING_DISABLED_CLI = (1 << 9), - ARMING_DISABLED_CMS_MENU = (1 << 10), - ARMING_DISABLED_OSD_MENU = (1 << 11), - ARMING_DISABLED_BST = (1 << 12) + ARMING_DISABLED_ARM_SWITCH = (1 << 7), + ARMING_DISABLED_LOAD = (1 << 8), + ARMING_DISABLED_CALIBRATING = (1 << 9), + ARMING_DISABLED_CLI = (1 << 10), + ARMING_DISABLED_CMS_MENU = (1 << 11), + ARMING_DISABLED_OSD_MENU = (1 << 12), + ARMING_DISABLED_BST = (1 << 13) } armingDisableFlags_e; -#define NUM_ARMING_DISABLE_FLAGS 13 +#define NUM_ARMING_DISABLE_FLAGS 14 #if defined(OSD) || !defined(MINIMAL_CLI) extern const char *armingDisableFlagNames[NUM_ARMING_DISABLE_FLAGS];