mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-23 16:25:31 +03:00
First-cut of a refactored failsafe system.
* fixes issue where indicators would flash when SBus RX entered failsafe mode. * fixes bug where turning off a TX for an SBus RX would instantly disarm when using a switch to arm when the channel went outside the arming range. * introduces failsafe phases to make the system more understandable. * allows the system to ask if rxSignalIsBeing received for all RX systems: PPM/PWM/SerialRX/MSP. Also works when a serial data signal is still being received but the data stream indicates a failsafe condition - e.g. SBus failsafe flags. * failsafe settings are no-longer per-profile. Untested: Sumd/Sumh/XBus/MSP (!) Tested: SBus X8R, Lemon RX Sat, X8R in PWM, Spektrum PPM.
This commit is contained in:
parent
37e551db11
commit
c8c0c85656
14 changed files with 260 additions and 145 deletions
|
@ -49,9 +49,9 @@ static void beep_code(char first, char second, char third, char pause);
|
|||
static uint8_t toggleBeep = 0;
|
||||
|
||||
typedef enum {
|
||||
FAILSAFE_IDLE = 0,
|
||||
FAILSAFE_LANDING,
|
||||
FAILSAFE_FIND_ME
|
||||
FAILSAFE_WARNING_NONE = 0,
|
||||
FAILSAFE_WARNING_LANDING,
|
||||
FAILSAFE_WARNING_FIND_ME
|
||||
} failsafeBeeperWarnings_e;
|
||||
|
||||
void beepcodeInit(void)
|
||||
|
@ -64,7 +64,7 @@ void beepcodeUpdateState(batteryState_e batteryState)
|
|||
#ifdef GPS
|
||||
static uint8_t warn_noGPSfix = 0;
|
||||
#endif
|
||||
static failsafeBeeperWarnings_e warn_failsafe = FAILSAFE_IDLE;
|
||||
static failsafeBeeperWarnings_e warn_failsafe = FAILSAFE_WARNING_NONE;
|
||||
|
||||
//===================== BeeperOn via rcOptions =====================
|
||||
if (IS_RC_MODE_ACTIVE(BOXBEEPERON)) { // unconditional beeper on via AUXn switch
|
||||
|
@ -74,20 +74,19 @@ void beepcodeUpdateState(batteryState_e batteryState)
|
|||
}
|
||||
//===================== Beeps for failsafe =====================
|
||||
if (feature(FEATURE_FAILSAFE)) {
|
||||
if (failsafeShouldForceLanding(ARMING_FLAG(ARMED))) {
|
||||
warn_failsafe = FAILSAFE_LANDING;
|
||||
|
||||
if (failsafeShouldHaveCausedLandingByNow()) {
|
||||
warn_failsafe = FAILSAFE_FIND_ME;
|
||||
}
|
||||
switch (failsafePhase()) {
|
||||
case FAILSAFE_LANDING:
|
||||
warn_failsafe = FAILSAFE_WARNING_LANDING;
|
||||
break;
|
||||
case FAILSAFE_LANDED:
|
||||
warn_failsafe = FAILSAFE_WARNING_FIND_ME;
|
||||
break;
|
||||
default:
|
||||
warn_failsafe = FAILSAFE_WARNING_NONE;
|
||||
}
|
||||
|
||||
if (failsafeHasTimerElapsed() && !ARMING_FLAG(ARMED)) {
|
||||
warn_failsafe = FAILSAFE_FIND_ME;
|
||||
}
|
||||
|
||||
if (failsafeIsIdle()) {
|
||||
warn_failsafe = FAILSAFE_IDLE; // turn off alarm if TX is okay
|
||||
if (rxIsReceivingSignal()) {
|
||||
warn_failsafe = FAILSAFE_WARNING_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue