mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-15 12:25:20 +03:00
Merge pull request #3681 from DanNixon/rx_failsafe_disable_arming
Disable arming as soon as an RX link is lost
This commit is contained in:
commit
5b31ca2916
4 changed files with 31 additions and 11 deletions
|
@ -31,7 +31,7 @@ static uint32_t enabledSensors = 0;
|
|||
|
||||
#if defined(OSD) || !defined(MINIMAL_CLI)
|
||||
const char *armingDisableFlagNames[]= {
|
||||
"NOGYRO", "FAILSAFE", "BOXFAILSAFE", "THROTTLE",
|
||||
"NOGYRO", "FAILSAFE", "RX LOSS", "BOXFAILSAFE", "THROTTLE",
|
||||
"ANGLE", "LOAD", "CALIB", "CLI", "CMS", "OSD", "BST"
|
||||
};
|
||||
#endif
|
||||
|
|
|
@ -36,18 +36,19 @@ extern uint8_t armingFlags;
|
|||
typedef enum {
|
||||
ARMING_DISABLED_NO_GYRO = (1 << 0),
|
||||
ARMING_DISABLED_FAILSAFE = (1 << 1),
|
||||
ARMING_DISABLED_BOXFAILSAFE = (1 << 2),
|
||||
ARMING_DISABLED_THROTTLE = (1 << 3),
|
||||
ARMING_DISABLED_ANGLE = (1 << 4),
|
||||
ARMING_DISABLED_LOAD = (1 << 5),
|
||||
ARMING_DISABLED_CALIBRATING = (1 << 6),
|
||||
ARMING_DISABLED_CLI = (1 << 7),
|
||||
ARMING_DISABLED_CMS_MENU = (1 << 8),
|
||||
ARMING_DISABLED_OSD_MENU = (1 << 9),
|
||||
ARMING_DISABLED_BST = (1 << 10),
|
||||
ARMING_DISABLED_RX_FAILSAFE = (1 << 2),
|
||||
ARMING_DISABLED_BOXFAILSAFE = (1 << 3),
|
||||
ARMING_DISABLED_THROTTLE = (1 << 4),
|
||||
ARMING_DISABLED_ANGLE = (1 << 5),
|
||||
ARMING_DISABLED_LOAD = (1 << 6),
|
||||
ARMING_DISABLED_CALIBRATING = (1 << 7),
|
||||
ARMING_DISABLED_CLI = (1 << 8),
|
||||
ARMING_DISABLED_CMS_MENU = (1 << 9),
|
||||
ARMING_DISABLED_OSD_MENU = (1 << 10),
|
||||
ARMING_DISABLED_BST = (1 << 11)
|
||||
} armingDisableFlags_e;
|
||||
|
||||
#define NUM_ARMING_DISABLE_FLAGS 11
|
||||
#define NUM_ARMING_DISABLE_FLAGS 12
|
||||
#if defined(OSD) || !defined(MINIMAL_CLI)
|
||||
extern const char *armingDisableFlagNames[NUM_ARMING_DISABLE_FLAGS];
|
||||
#endif
|
||||
|
|
|
@ -154,11 +154,13 @@ void failsafeOnValidDataReceived(void)
|
|||
failsafeState.validRxDataReceivedAt = millis();
|
||||
if ((failsafeState.validRxDataReceivedAt - failsafeState.validRxDataFailedAt) > PERIOD_RXDATA_RECOVERY) {
|
||||
failsafeState.rxLinkState = FAILSAFE_RXLINK_UP;
|
||||
unsetArmingDisabled(ARMING_DISABLED_RX_FAILSAFE);
|
||||
}
|
||||
}
|
||||
|
||||
void failsafeOnValidDataFailed(void)
|
||||
{
|
||||
setArmingDisabled(ARMING_DISABLED_RX_FAILSAFE); // To prevent arming with no RX link
|
||||
failsafeState.validRxDataFailedAt = millis();
|
||||
if ((failsafeState.validRxDataFailedAt - failsafeState.validRxDataReceivedAt) > failsafeState.rxDataFailurePeriod) {
|
||||
failsafeState.rxLinkState = FAILSAFE_RXLINK_DOWN;
|
||||
|
|
|
@ -405,6 +405,23 @@ TEST(FlightFailsafeTest, TestFailsafeNotActivatedWhenDisarmedAndRXLossIsDetected
|
|||
EXPECT_EQ(false, failsafeIsActive());
|
||||
EXPECT_EQ(FAILSAFE_IDLE, failsafePhase());
|
||||
EXPECT_EQ(1, CALL_COUNTER(COUNTER_MW_DISARM));
|
||||
EXPECT_TRUE(isArmingDisabled());
|
||||
|
||||
// given
|
||||
// enough valid data is received
|
||||
uint32_t sysTickTarget = sysTickUptime + PERIOD_RXDATA_RECOVERY;
|
||||
for (; sysTickUptime < sysTickTarget; sysTickUptime++) {
|
||||
failsafeOnValidDataReceived();
|
||||
failsafeUpdateState();
|
||||
|
||||
EXPECT_TRUE(isArmingDisabled());
|
||||
}
|
||||
|
||||
// and
|
||||
sysTickUptime++; // adjust time to point just past the failure time to
|
||||
failsafeOnValidDataReceived(); // cause link recovery
|
||||
|
||||
// then
|
||||
EXPECT_FALSE(isArmingDisabled());
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue