mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-14 11:59:58 +03:00
Add in prearm option for safer arming.
When prearm is used, it must be enabled before arming. Before you can arm again, the prearm switch needs to get toggled. (+3 squashed commit)
This commit is contained in:
parent
5b31ca2916
commit
f8bd089e47
4 changed files with 29 additions and 10 deletions
|
@ -182,6 +182,13 @@ void updateArmingStatus(void)
|
||||||
unsetArmingDisabled(ARMING_DISABLED_CALIBRATING);
|
unsetArmingDisabled(ARMING_DISABLED_CALIBRATING);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
if (isArmingDisabled()) {
|
if (isArmingDisabled()) {
|
||||||
warningLedFlash();
|
warningLedFlash();
|
||||||
} else {
|
} else {
|
||||||
|
@ -237,6 +244,9 @@ void tryArm(void)
|
||||||
|
|
||||||
ENABLE_ARMING_FLAG(ARMED);
|
ENABLE_ARMING_FLAG(ARMED);
|
||||||
ENABLE_ARMING_FLAG(WAS_EVER_ARMED);
|
ENABLE_ARMING_FLAG(WAS_EVER_ARMED);
|
||||||
|
if (isModeActivationConditionPresent(BOXPREARM)) {
|
||||||
|
ENABLE_ARMING_FLAG(WAS_ARMED_WITH_PREARM);
|
||||||
|
}
|
||||||
headFreeModeHold = DECIDEGREES_TO_DEGREES(attitude.values.yaw);
|
headFreeModeHold = DECIDEGREES_TO_DEGREES(attitude.values.yaw);
|
||||||
|
|
||||||
disarmAt = millis() + armingConfig()->auto_disarm_delay * 1000; // start disarm timeout, will be extended when throttle is nonzero
|
disarmAt = millis() + armingConfig()->auto_disarm_delay * 1000; // start disarm timeout, will be extended when throttle is nonzero
|
||||||
|
@ -451,6 +461,10 @@ void processRx(timeUs_t currentTimeUs)
|
||||||
LED1_OFF;
|
LED1_OFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!IS_RC_MODE_ACTIVE(BOXPREARM) && ARMING_FLAG(WAS_ARMED_WITH_PREARM)) {
|
||||||
|
DISABLE_ARMING_FLAG(WAS_ARMED_WITH_PREARM);
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(ACC) || defined(MAG)
|
#if defined(ACC) || defined(MAG)
|
||||||
if (sensors(SENSOR_ACC) || sensors(SENSOR_MAG)) {
|
if (sensors(SENSOR_ACC) || sensors(SENSOR_MAG)) {
|
||||||
#if defined(GPS) || defined(MAG)
|
#if defined(GPS) || defined(MAG)
|
||||||
|
|
|
@ -77,6 +77,7 @@ static const box_t boxes[CHECKBOX_ITEM_COUNT] = {
|
||||||
{ BOXCAMERA2, "CAMERA CONTROL 2", 33},
|
{ BOXCAMERA2, "CAMERA CONTROL 2", 33},
|
||||||
{ BOXCAMERA3, "CAMERA CONTROL 3", 34 },
|
{ BOXCAMERA3, "CAMERA CONTROL 3", 34 },
|
||||||
{ BOXDSHOTREVERSE, "DSHOT REVERSE MOTORS", 35 },
|
{ BOXDSHOTREVERSE, "DSHOT REVERSE MOTORS", 35 },
|
||||||
|
{ BOXPREARM, "PREARM", 36 },
|
||||||
};
|
};
|
||||||
|
|
||||||
// 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
|
||||||
|
@ -147,7 +148,7 @@ void initActiveBoxIds(void)
|
||||||
// macro to enable boxId (BoxidMaskEnable). Reference to ena is hidden, local use only
|
// macro to enable boxId (BoxidMaskEnable). Reference to ena is hidden, local use only
|
||||||
#define BME(boxId) do { bitArraySet(&ena, boxId); } while (0)
|
#define BME(boxId) do { bitArraySet(&ena, boxId); } while (0)
|
||||||
BME(BOXARM);
|
BME(BOXARM);
|
||||||
|
BME(BOXPREARM);
|
||||||
if (!feature(FEATURE_AIRMODE)) {
|
if (!feature(FEATURE_AIRMODE)) {
|
||||||
BME(BOXAIRMODE);
|
BME(BOXAIRMODE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,6 +58,7 @@ typedef enum {
|
||||||
BOXCAMERA2,
|
BOXCAMERA2,
|
||||||
BOXCAMERA3,
|
BOXCAMERA3,
|
||||||
BOXDSHOTREVERSE,
|
BOXDSHOTREVERSE,
|
||||||
|
BOXPREARM,
|
||||||
CHECKBOX_ITEM_COUNT
|
CHECKBOX_ITEM_COUNT
|
||||||
} boxId_e;
|
} boxId_e;
|
||||||
|
|
||||||
|
|
|
@ -19,8 +19,9 @@
|
||||||
|
|
||||||
// FIXME some of these are flight modes, some of these are general status indicators
|
// FIXME some of these are flight modes, some of these are general status indicators
|
||||||
typedef enum {
|
typedef enum {
|
||||||
ARMED = (1 << 0),
|
ARMED = (1 << 0),
|
||||||
WAS_EVER_ARMED = (1 << 1)
|
WAS_EVER_ARMED = (1 << 1),
|
||||||
|
WAS_ARMED_WITH_PREARM = (1 << 2)
|
||||||
} armingFlag_e;
|
} armingFlag_e;
|
||||||
|
|
||||||
extern uint8_t armingFlags;
|
extern uint8_t armingFlags;
|
||||||
|
@ -40,15 +41,17 @@ typedef enum {
|
||||||
ARMING_DISABLED_BOXFAILSAFE = (1 << 3),
|
ARMING_DISABLED_BOXFAILSAFE = (1 << 3),
|
||||||
ARMING_DISABLED_THROTTLE = (1 << 4),
|
ARMING_DISABLED_THROTTLE = (1 << 4),
|
||||||
ARMING_DISABLED_ANGLE = (1 << 5),
|
ARMING_DISABLED_ANGLE = (1 << 5),
|
||||||
ARMING_DISABLED_LOAD = (1 << 6),
|
ARMING_DISABLED_NOPREARM = (1 << 6),
|
||||||
ARMING_DISABLED_CALIBRATING = (1 << 7),
|
ARMING_DISABLED_LOAD = (1 << 7),
|
||||||
ARMING_DISABLED_CLI = (1 << 8),
|
ARMING_DISABLED_CALIBRATING = (1 << 8),
|
||||||
ARMING_DISABLED_CMS_MENU = (1 << 9),
|
ARMING_DISABLED_CLI = (1 << 9),
|
||||||
ARMING_DISABLED_OSD_MENU = (1 << 10),
|
ARMING_DISABLED_CMS_MENU = (1 << 10),
|
||||||
ARMING_DISABLED_BST = (1 << 11)
|
ARMING_DISABLED_OSD_MENU = (1 << 11),
|
||||||
|
ARMING_DISABLED_BST = (1 << 12)
|
||||||
} armingDisableFlags_e;
|
} armingDisableFlags_e;
|
||||||
|
|
||||||
#define NUM_ARMING_DISABLE_FLAGS 12
|
#define NUM_ARMING_DISABLE_FLAGS 13
|
||||||
|
|
||||||
#if defined(OSD) || !defined(MINIMAL_CLI)
|
#if defined(OSD) || !defined(MINIMAL_CLI)
|
||||||
extern const char *armingDisableFlagNames[NUM_ARMING_DISABLE_FLAGS];
|
extern const char *armingDisableFlagNames[NUM_ARMING_DISABLE_FLAGS];
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue