mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-17 05:15:25 +03:00
USE_GPS_RESCUE condition is now used in failsafe.c
This commit is contained in:
parent
d829563179
commit
7480552a62
3 changed files with 18 additions and 9 deletions
|
@ -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);
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue