diff --git a/src/main/cli/settings.c b/src/main/cli/settings.c index d193b5dbab..2d744a9c0f 100644 --- a/src/main/cli/settings.c +++ b/src/main/cli/settings.c @@ -890,8 +890,10 @@ const clivalue_t valueTable[] = { { "gps_rescue_min_sats", VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned = { 5, 50 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, minSats) }, { "gps_rescue_min_dth", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 50, 1000 }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, minRescueDth) }, { "gps_rescue_allow_arming_without_fix", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, allowArmingWithoutFix) }, +#ifdef USE_MAG { "gps_rescue_use_mag", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_GPS_RESCUE, offsetof(gpsRescueConfig_t, useMag) }, #endif +#endif #endif { "deadband", VAR_UINT8 | MASTER_VALUE, .config.minmaxUnsigned = { 0, 32 }, PG_RC_CONTROLS_CONFIG, offsetof(rcControlsConfig_t, deadband) }, diff --git a/src/main/flight/gps_rescue.c b/src/main/flight/gps_rescue.c index 0edc34ff8f..e9645a861a 100644 --- a/src/main/flight/gps_rescue.c +++ b/src/main/flight/gps_rescue.c @@ -120,6 +120,12 @@ typedef struct { #define GPS_RESCUE_RATE_SCALE_DEGREES 45 // Scale the commanded yaw rate when the error is less then this angle #define GPS_RESCUE_SLOWDOWN_DISTANCE_M 200 // distance from home to start decreasing speed +#ifdef USE_MAG +#define GPS_RESCUE_USE_MAG true +#else +#define GPS_RESCUE_USE_MAG false +#endif + PG_REGISTER_WITH_RESET_TEMPLATE(gpsRescueConfig_t, gpsRescueConfig, PG_GPS_RESCUE, 1); PG_RESET_TEMPLATE(gpsRescueConfig_t, gpsRescueConfig, @@ -141,7 +147,7 @@ PG_RESET_TEMPLATE(gpsRescueConfig_t, gpsRescueConfig, .minSats = 8, .minRescueDth = 100, .allowArmingWithoutFix = false, - .useMag = true + .useMag = GPS_RESCUE_USE_MAG, ); static uint16_t rescueThrottle; @@ -371,12 +377,15 @@ static void performSanityChecks() lastDistanceToHomeM = rescueState.sensor.distanceToHomeM; if (secondsFlyingAway == 10) { +#ifdef USE_MAG //If there is a mag and has not been disabled, we have to assume is healthy and has been used in imu.c if (sensors(SENSOR_MAG) && gpsRescueConfig()->useMag && !magForceDisable) { //Try again with mag disabled magForceDisable = true; secondsFlyingAway = 0; - } else { + } else +#endif + { rescueState.failure = RESCUE_FLYAWAY; } } @@ -639,9 +648,11 @@ bool gpsRescueIsDisabled(void) return (!STATE(GPS_FIX_HOME)); } +#ifdef USE_MAG bool gpsRescueDisableMag(void) { return ((!gpsRescueConfig()->useMag || magForceDisable) && (rescueState.phase >= RESCUE_INITIALIZE) && (rescueState.phase <= RESCUE_LANDING)); } #endif +#endif