From 4b5972629e1684557d738c2d3a41e37b8dab91a9 Mon Sep 17 00:00:00 2001 From: s0up Date: Tue, 17 Jul 2018 11:55:42 -0700 Subject: [PATCH 1/3] fix disarm logic --- src/main/flight/gps_rescue.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/flight/gps_rescue.c b/src/main/flight/gps_rescue.c index 21c11aaba9..2c4c71d06e 100644 --- a/src/main/flight/gps_rescue.c +++ b/src/main/flight/gps_rescue.c @@ -123,6 +123,13 @@ void updateGPSRescueState(void) hoverThrottle = gpsRescueConfig()->throttleHover; } + // Minimum distance detection (100m). Disarm regardless of sanity check configuration. Rescue too close is never a good idea. + if (rescueState.sensor.distanceToHome < 100) { + rescueState.failure = RESCUE_TOO_CLOSE; + setArmingDisabled(ARMING_DISABLED_ARM_SWITCH); + disarm(); + } + rescueState.phase = RESCUE_ATTAIN_ALT; FALLTHROUGH; case RESCUE_ATTAIN_ALT: @@ -284,11 +291,6 @@ void performSanityChecks() if (msI == 5) { rescueState.failure = RESCUE_FLYAWAY; } - - // Minimum distance detection (100m) - if (rescueState.sensor.distanceToHome < 100) { - rescueState.failure = RESCUE_TOO_CLOSE; - } } void rescueStart() From 99f223c2fd8a319ea983e1f21de3b28d178636ed Mon Sep 17 00:00:00 2001 From: s0up Date: Tue, 17 Jul 2018 14:21:04 -0700 Subject: [PATCH 2/3] enable sanity checks by default --- src/main/flight/gps_rescue.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/flight/gps_rescue.c b/src/main/flight/gps_rescue.c index 2c4c71d06e..525e53b8be 100644 --- a/src/main/flight/gps_rescue.c +++ b/src/main/flight/gps_rescue.c @@ -71,7 +71,7 @@ PG_RESET_TEMPLATE(gpsRescueConfig_t, gpsRescueConfig, .throttleMin = 1200, .throttleMax = 1600, .throttleHover = 1280, - .sanityChecks = 0, + .sanityChecks = RESCUE_SANITY_ON, .minSats = 8 ); From b69e97fb23b2e93be0650d3d644d031e2b53d6f5 Mon Sep 17 00:00:00 2001 From: s0up Date: Tue, 17 Jul 2018 15:14:21 -0700 Subject: [PATCH 3/3] fix the logic to be a little bit more user friendly --- src/main/flight/gps_rescue.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/flight/gps_rescue.c b/src/main/flight/gps_rescue.c index 525e53b8be..3ead432096 100644 --- a/src/main/flight/gps_rescue.c +++ b/src/main/flight/gps_rescue.c @@ -125,9 +125,15 @@ void updateGPSRescueState(void) // Minimum distance detection (100m). Disarm regardless of sanity check configuration. Rescue too close is never a good idea. if (rescueState.sensor.distanceToHome < 100) { - rescueState.failure = RESCUE_TOO_CLOSE; - setArmingDisabled(ARMING_DISABLED_ARM_SWITCH); - disarm(); + // Never allow rescue mode to engage as a failsafe within 100 meters or when disarmed. + if (rescueState.isFailsafe || !ARMING_FLAG(ARMED)) { + rescueState.failure = RESCUE_TOO_CLOSE; + setArmingDisabled(ARMING_DISABLED_ARM_SWITCH); + disarm(); + } else { + // Leave it up to the sanity check setting + rescueState.failure = RESCUE_TOO_CLOSE; + } } rescueState.phase = RESCUE_ATTAIN_ALT;