From 945870089fb81a06d4db88b7cb9ba19d62f89b37 Mon Sep 17 00:00:00 2001 From: Dan Nixon Date: Sat, 5 Aug 2017 18:07:04 +0100 Subject: [PATCH] Require the arm switch to be off before arming Requires that the arm switch must be moved from off to on after all arming disable flags are unset. Prevents accidental arming due to arm switch being left in the on position. --- src/main/fc/fc_core.c | 13 +++++++++++-- src/main/fc/runtime_config.c | 3 ++- src/main/fc/runtime_config.h | 15 ++++++++------- 3 files changed, 21 insertions(+), 10 deletions(-) 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];