diff --git a/src/main/fc/core.h b/src/main/fc/core.h index 2fa7770afe..2ea825d96d 100644 --- a/src/main/fc/core.h +++ b/src/main/fc/core.h @@ -67,14 +67,10 @@ void updateArmingStatus(void); 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); int8_t calculateThrottlePercent(void); uint8_t calculateThrottlePercentAbs(void); +bool areSticksActive(uint8_t stickPercentLimit); void runawayTakeoffTemporaryDisable(uint8_t disableFlag); bool isAirmodeActivated(); timeUs_t getLastDisarmTimeUs(void); diff --git a/src/main/flight/failsafe.c b/src/main/flight/failsafe.c index a35c05cc5b..58991c6e63 100644 --- a/src/main/flight/failsafe.c +++ b/src/main/flight/failsafe.c @@ -76,8 +76,10 @@ PG_RESET_TEMPLATE(failsafeConfig_t, failsafeConfig, const char * const failsafeProcedureNames[FAILSAFE_PROCEDURE_COUNT] = { "AUTO-LAND", - "DROP", - "GPS-RESCUE" + "DROP" +#ifdef USE_GPS_RESCUE + , "GPS-RESCUE" +#endif }; /* @@ -143,11 +145,12 @@ static void failsafeActivate(void) static void failsafeApplyControlInput(void) { +#ifdef USE_GPS_RESCUE if (failsafeConfig()->failsafe_procedure == FAILSAFE_PROCEDURE_GPS_RESCUE) { ENABLE_FLIGHT_MODE(GPS_RESCUE_MODE); - return; } +#endif for (int i = 0; i < 3; i++) { rcData[i] = rxConfig()->midrc; @@ -229,7 +232,11 @@ void failsafeUpdateState(void) failsafeState.receivingRxDataPeriodPreset = PERIOD_OF_1_SECONDS; // require 1 seconds of valid rxData reprocessState = true; } 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 failsafeActivate(); failsafeState.phase = FAILSAFE_LANDED; // skip auto-landing procedure @@ -266,10 +273,12 @@ void failsafeUpdateState(void) failsafeActivate(); failsafeState.phase = FAILSAFE_LANDED; // skip auto-landing procedure break; +#ifdef USE_GPS_RESCUE case FAILSAFE_PROCEDURE_GPS_RESCUE: failsafeActivate(); failsafeState.phase = FAILSAFE_GPS_RESCUE; break; +#endif } } reprocessState = true; @@ -292,6 +301,7 @@ void failsafeUpdateState(void) reprocessState = true; } break; +#ifdef USE_GPS_RESCUE case FAILSAFE_GPS_RESCUE: if (receivingRxData) { 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; } break; +#endif case FAILSAFE_LANDED: setArmingDisabled(ARMING_DISABLED_FAILSAFE); // To prevent accidently rearming by an intermittent rx link disarm(); diff --git a/src/main/flight/failsafe.h b/src/main/flight/failsafe.h index 9eff9eba05..da32184878 100644 --- a/src/main/flight/failsafe.h +++ b/src/main/flight/failsafe.h @@ -63,7 +63,9 @@ typedef enum { typedef enum { FAILSAFE_PROCEDURE_AUTO_LANDING = 0, FAILSAFE_PROCEDURE_DROP_IT, +#ifdef USE_GPS_RESCUE FAILSAFE_PROCEDURE_GPS_RESCUE, +#endif FAILSAFE_PROCEDURE_COUNT // must be last } failsafeProcedure_e;