1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-15 20:35:33 +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:
Michael Keller 2017-07-31 03:28:42 +08:00 committed by GitHub
commit 5b31ca2916
4 changed files with 31 additions and 11 deletions

View file

@ -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

View file

@ -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

View file

@ -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;

View file

@ -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());
}