1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-17 05:15:25 +03:00

Disable arming as soon as an RX link is lost

This commit is contained in:
Dan Nixon 2017-07-30 15:48:02 +01:00
parent 94e3273415
commit 312a7d73b9
4 changed files with 23 additions and 2 deletions

View file

@ -32,7 +32,8 @@ static uint32_t enabledSensors = 0;
#if defined(OSD) || !defined(MINIMAL_CLI)
const char *armingDisableFlagNames[]= {
"NOGYRO", "FAILSAFE", "BOXFAILSAFE", "THROTTLE",
"ANGLE", "LOAD", "CALIB", "CLI", "CMS", "OSD", "BST"
"ANGLE", "LOAD", "CALIB", "CLI", "CMS", "OSD", "BST",
"RX LOSS"
};
#endif

View file

@ -45,9 +45,10 @@ typedef enum {
ARMING_DISABLED_CMS_MENU = (1 << 8),
ARMING_DISABLED_OSD_MENU = (1 << 9),
ARMING_DISABLED_BST = (1 << 10),
ARMING_DISABLED_RX_FAILSAFE = (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());
}