1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-17 21:35:44 +03:00

USE_GPS_RESCUE condition is now used in failsafe.c

This commit is contained in:
Tony Cabello 2019-04-14 14:11:21 +02:00
parent d829563179
commit 7480552a62
3 changed files with 18 additions and 9 deletions

View file

@ -67,14 +67,10 @@ void updateArmingStatus(void);
void taskMainPidLoop(timeUs_t currentTimeUs); void taskMainPidLoop(timeUs_t currentTimeUs);
#if defined(USE_RUNAWAY_TAKEOFF) || defined(USE_GPS_RESCUE)
// determine if the R/P/Y stick deflection exceeds the specified limit - integer math is good enough here.
bool areSticksActive(uint8_t stickPercentLimit);
#endif
bool isFlipOverAfterCrashActive(void); bool isFlipOverAfterCrashActive(void);
int8_t calculateThrottlePercent(void); int8_t calculateThrottlePercent(void);
uint8_t calculateThrottlePercentAbs(void); uint8_t calculateThrottlePercentAbs(void);
bool areSticksActive(uint8_t stickPercentLimit);
void runawayTakeoffTemporaryDisable(uint8_t disableFlag); void runawayTakeoffTemporaryDisable(uint8_t disableFlag);
bool isAirmodeActivated(); bool isAirmodeActivated();
timeUs_t getLastDisarmTimeUs(void); timeUs_t getLastDisarmTimeUs(void);

View file

@ -76,8 +76,10 @@ PG_RESET_TEMPLATE(failsafeConfig_t, failsafeConfig,
const char * const failsafeProcedureNames[FAILSAFE_PROCEDURE_COUNT] = { const char * const failsafeProcedureNames[FAILSAFE_PROCEDURE_COUNT] = {
"AUTO-LAND", "AUTO-LAND",
"DROP", "DROP"
"GPS-RESCUE" #ifdef USE_GPS_RESCUE
, "GPS-RESCUE"
#endif
}; };
/* /*
@ -143,11 +145,12 @@ static void failsafeActivate(void)
static void failsafeApplyControlInput(void) static void failsafeApplyControlInput(void)
{ {
#ifdef USE_GPS_RESCUE
if (failsafeConfig()->failsafe_procedure == FAILSAFE_PROCEDURE_GPS_RESCUE) { if (failsafeConfig()->failsafe_procedure == FAILSAFE_PROCEDURE_GPS_RESCUE) {
ENABLE_FLIGHT_MODE(GPS_RESCUE_MODE); ENABLE_FLIGHT_MODE(GPS_RESCUE_MODE);
return; return;
} }
#endif
for (int i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
rcData[i] = rxConfig()->midrc; rcData[i] = rxConfig()->midrc;
@ -229,7 +232,11 @@ void failsafeUpdateState(void)
failsafeState.receivingRxDataPeriodPreset = PERIOD_OF_1_SECONDS; // require 1 seconds of valid rxData failsafeState.receivingRxDataPeriodPreset = PERIOD_OF_1_SECONDS; // require 1 seconds of valid rxData
reprocessState = true; reprocessState = true;
} else if (!receivingRxData) { } else if (!receivingRxData) {
if (millis() > failsafeState.throttleLowPeriod && failsafeConfig()->failsafe_procedure != FAILSAFE_PROCEDURE_GPS_RESCUE) { if (millis() > failsafeState.throttleLowPeriod
#ifdef USE_GPS_RESCUE
&& failsafeConfig()->failsafe_procedure != FAILSAFE_PROCEDURE_GPS_RESCUE
#endif
) {
// JustDisarm: throttle was LOW for at least 'failsafe_throttle_low_delay' seconds // JustDisarm: throttle was LOW for at least 'failsafe_throttle_low_delay' seconds
failsafeActivate(); failsafeActivate();
failsafeState.phase = FAILSAFE_LANDED; // skip auto-landing procedure failsafeState.phase = FAILSAFE_LANDED; // skip auto-landing procedure
@ -266,10 +273,12 @@ void failsafeUpdateState(void)
failsafeActivate(); failsafeActivate();
failsafeState.phase = FAILSAFE_LANDED; // skip auto-landing procedure failsafeState.phase = FAILSAFE_LANDED; // skip auto-landing procedure
break; break;
#ifdef USE_GPS_RESCUE
case FAILSAFE_PROCEDURE_GPS_RESCUE: case FAILSAFE_PROCEDURE_GPS_RESCUE:
failsafeActivate(); failsafeActivate();
failsafeState.phase = FAILSAFE_GPS_RESCUE; failsafeState.phase = FAILSAFE_GPS_RESCUE;
break; break;
#endif
} }
} }
reprocessState = true; reprocessState = true;
@ -292,6 +301,7 @@ void failsafeUpdateState(void)
reprocessState = true; reprocessState = true;
} }
break; break;
#ifdef USE_GPS_RESCUE
case FAILSAFE_GPS_RESCUE: case FAILSAFE_GPS_RESCUE:
if (receivingRxData) { if (receivingRxData) {
if ((failsafeState.validRxDataReceivedAt - failsafeState.validRxDataFailedAt) > (failsafeConfig()->failsafe_recovery_delay * MILLIS_PER_TENTH_SECOND + PERIOD_RXDATA_RECOVERY)) { if ((failsafeState.validRxDataReceivedAt - failsafeState.validRxDataFailedAt) > (failsafeConfig()->failsafe_recovery_delay * MILLIS_PER_TENTH_SECOND + PERIOD_RXDATA_RECOVERY)) {
@ -310,6 +320,7 @@ void failsafeUpdateState(void)
reprocessState = true; reprocessState = true;
} }
break; break;
#endif
case FAILSAFE_LANDED: case FAILSAFE_LANDED:
setArmingDisabled(ARMING_DISABLED_FAILSAFE); // To prevent accidently rearming by an intermittent rx link setArmingDisabled(ARMING_DISABLED_FAILSAFE); // To prevent accidently rearming by an intermittent rx link
disarm(); disarm();

View file

@ -63,7 +63,9 @@ typedef enum {
typedef enum { typedef enum {
FAILSAFE_PROCEDURE_AUTO_LANDING = 0, FAILSAFE_PROCEDURE_AUTO_LANDING = 0,
FAILSAFE_PROCEDURE_DROP_IT, FAILSAFE_PROCEDURE_DROP_IT,
#ifdef USE_GPS_RESCUE
FAILSAFE_PROCEDURE_GPS_RESCUE, FAILSAFE_PROCEDURE_GPS_RESCUE,
#endif
FAILSAFE_PROCEDURE_COUNT // must be last FAILSAFE_PROCEDURE_COUNT // must be last
} failsafeProcedure_e; } failsafeProcedure_e;