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:
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)
|
#if defined(OSD) || !defined(MINIMAL_CLI)
|
||||||
const char *armingDisableFlagNames[]= {
|
const char *armingDisableFlagNames[]= {
|
||||||
"NOGYRO", "FAILSAFE", "BOXFAILSAFE", "THROTTLE",
|
"NOGYRO", "FAILSAFE", "RX LOSS", "BOXFAILSAFE", "THROTTLE",
|
||||||
"ANGLE", "LOAD", "CALIB", "CLI", "CMS", "OSD", "BST"
|
"ANGLE", "LOAD", "CALIB", "CLI", "CMS", "OSD", "BST"
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -36,18 +36,19 @@ extern uint8_t armingFlags;
|
||||||
typedef enum {
|
typedef enum {
|
||||||
ARMING_DISABLED_NO_GYRO = (1 << 0),
|
ARMING_DISABLED_NO_GYRO = (1 << 0),
|
||||||
ARMING_DISABLED_FAILSAFE = (1 << 1),
|
ARMING_DISABLED_FAILSAFE = (1 << 1),
|
||||||
ARMING_DISABLED_BOXFAILSAFE = (1 << 2),
|
ARMING_DISABLED_RX_FAILSAFE = (1 << 2),
|
||||||
ARMING_DISABLED_THROTTLE = (1 << 3),
|
ARMING_DISABLED_BOXFAILSAFE = (1 << 3),
|
||||||
ARMING_DISABLED_ANGLE = (1 << 4),
|
ARMING_DISABLED_THROTTLE = (1 << 4),
|
||||||
ARMING_DISABLED_LOAD = (1 << 5),
|
ARMING_DISABLED_ANGLE = (1 << 5),
|
||||||
ARMING_DISABLED_CALIBRATING = (1 << 6),
|
ARMING_DISABLED_LOAD = (1 << 6),
|
||||||
ARMING_DISABLED_CLI = (1 << 7),
|
ARMING_DISABLED_CALIBRATING = (1 << 7),
|
||||||
ARMING_DISABLED_CMS_MENU = (1 << 8),
|
ARMING_DISABLED_CLI = (1 << 8),
|
||||||
ARMING_DISABLED_OSD_MENU = (1 << 9),
|
ARMING_DISABLED_CMS_MENU = (1 << 9),
|
||||||
ARMING_DISABLED_BST = (1 << 10),
|
ARMING_DISABLED_OSD_MENU = (1 << 10),
|
||||||
|
ARMING_DISABLED_BST = (1 << 11)
|
||||||
} armingDisableFlags_e;
|
} armingDisableFlags_e;
|
||||||
|
|
||||||
#define NUM_ARMING_DISABLE_FLAGS 11
|
#define NUM_ARMING_DISABLE_FLAGS 12
|
||||||
#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
|
||||||
|
|
|
@ -154,11 +154,13 @@ void failsafeOnValidDataReceived(void)
|
||||||
failsafeState.validRxDataReceivedAt = millis();
|
failsafeState.validRxDataReceivedAt = millis();
|
||||||
if ((failsafeState.validRxDataReceivedAt - failsafeState.validRxDataFailedAt) > PERIOD_RXDATA_RECOVERY) {
|
if ((failsafeState.validRxDataReceivedAt - failsafeState.validRxDataFailedAt) > PERIOD_RXDATA_RECOVERY) {
|
||||||
failsafeState.rxLinkState = FAILSAFE_RXLINK_UP;
|
failsafeState.rxLinkState = FAILSAFE_RXLINK_UP;
|
||||||
|
unsetArmingDisabled(ARMING_DISABLED_RX_FAILSAFE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void failsafeOnValidDataFailed(void)
|
void failsafeOnValidDataFailed(void)
|
||||||
{
|
{
|
||||||
|
setArmingDisabled(ARMING_DISABLED_RX_FAILSAFE); // To prevent arming with no RX link
|
||||||
failsafeState.validRxDataFailedAt = millis();
|
failsafeState.validRxDataFailedAt = millis();
|
||||||
if ((failsafeState.validRxDataFailedAt - failsafeState.validRxDataReceivedAt) > failsafeState.rxDataFailurePeriod) {
|
if ((failsafeState.validRxDataFailedAt - failsafeState.validRxDataReceivedAt) > failsafeState.rxDataFailurePeriod) {
|
||||||
failsafeState.rxLinkState = FAILSAFE_RXLINK_DOWN;
|
failsafeState.rxLinkState = FAILSAFE_RXLINK_DOWN;
|
||||||
|
|
|
@ -405,6 +405,23 @@ TEST(FlightFailsafeTest, TestFailsafeNotActivatedWhenDisarmedAndRXLossIsDetected
|
||||||
EXPECT_EQ(false, failsafeIsActive());
|
EXPECT_EQ(false, failsafeIsActive());
|
||||||
EXPECT_EQ(FAILSAFE_IDLE, failsafePhase());
|
EXPECT_EQ(FAILSAFE_IDLE, failsafePhase());
|
||||||
EXPECT_EQ(1, CALL_COUNTER(COUNTER_MW_DISARM));
|
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());
|
EXPECT_FALSE(isArmingDisabled());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue