From 98641cde75944679ca26fd6e754b9f4c38b85e4c Mon Sep 17 00:00:00 2001 From: Bruce Luckcuck Date: Sun, 4 Nov 2018 09:38:36 -0500 Subject: [PATCH] Suppress OSD stats if disarming from crash-flip or untriggered launch control The OSD stats provide no meaningful information and are just an annoyance when exiting these special states. For Launch Control the stats will be displayed if the launch is triggered and normal flight occurrred. --- src/main/fc/core.c | 10 ++++++++++ src/main/io/osd.c | 7 +++++++ src/main/io/osd.h | 1 + src/test/unit/arming_prevention_unittest.cc | 1 + src/test/unit/vtx_unittest.cc | 1 + 5 files changed, 20 insertions(+) diff --git a/src/main/fc/core.c b/src/main/fc/core.c index e7ad31794e..52f9dbfc98 100644 --- a/src/main/fc/core.c +++ b/src/main/fc/core.c @@ -67,6 +67,7 @@ #include "io/beeper.h" #include "io/gps.h" #include "io/motors.h" +#include "io/osd.h" #include "io/pidaudio.h" #include "io/servos.h" #include "io/serial.h" @@ -332,6 +333,12 @@ void disarm(void) DISABLE_ARMING_FLAG(ARMED); lastDisarmTimeUs = micros(); +#ifdef USE_OSD + if (flipOverAfterCrashActive || isLaunchControlActive()) { + osdSuppressStats(true); + } +#endif + #ifdef USE_BLACKBOX if (blackboxConfig()->device && blackboxConfig()->mode != BLACKBOX_MODE_ALWAYS_ON) { // Close the log upon disarm except when logging mode is ALWAYS ON blackboxFinish(); @@ -408,6 +415,9 @@ void tryArm(void) } #endif +#ifdef USE_OSD + osdSuppressStats(false); +#endif ENABLE_ARMING_FLAG(ARMED); ENABLE_ARMING_FLAG(WAS_EVER_ARMED); diff --git a/src/main/io/osd.c b/src/main/io/osd.c index 7e57f72680..636e417297 100644 --- a/src/main/io/osd.c +++ b/src/main/io/osd.c @@ -152,6 +152,8 @@ static bool lastArmState; static displayPort_t *osdDisplayPort; +static bool suppressStatsDisplay = false; + #ifdef USE_ESC_SENSOR static escSensorData_t *escDataCombined; #endif @@ -1665,6 +1667,7 @@ STATIC_UNIT_TESTED void osdRefresh(timeUs_t currentTimeUs) osdShowArmed(); resumeRefreshAt = currentTimeUs + (REFRESH_1S / 2); } else if (isSomeStatEnabled() + && !suppressStatsDisplay && (!(getArmingDisableFlags() & ARMING_DISABLED_RUNAWAY_TAKEOFF) || !VISIBLE(osdConfig()->item_pos[OSD_WARNINGS]))) { // suppress stats if runaway takeoff triggered disarm and WARNINGS element is visible osdStatsEnabled = true; @@ -1796,4 +1799,8 @@ void osdUpdate(timeUs_t currentTimeUs) #endif } +void osdSuppressStats(bool flag) +{ + suppressStatsDisplay = flag; +} #endif // USE_OSD diff --git a/src/main/io/osd.h b/src/main/io/osd.h index a1eb0fc53b..cd80383034 100644 --- a/src/main/io/osd.h +++ b/src/main/io/osd.h @@ -218,5 +218,6 @@ void osdStatSetState(uint8_t statIndex, bool enabled); bool osdStatGetState(uint8_t statIndex); void osdWarnSetState(uint8_t warningIndex, bool enabled); bool osdWarnGetState(uint8_t warningIndex); +void osdSuppressStats(bool flag); diff --git a/src/test/unit/arming_prevention_unittest.cc b/src/test/unit/arming_prevention_unittest.cc index a979c0d4fa..7c45f05af3 100644 --- a/src/test/unit/arming_prevention_unittest.cc +++ b/src/test/unit/arming_prevention_unittest.cc @@ -851,4 +851,5 @@ extern "C" { bool usbCableIsInserted(void) { return false; } bool usbVcpIsConnected(void) { return false; } void pidSetAntiGravityState(bool) {} + void osdSuppressStats(bool) {} } diff --git a/src/test/unit/vtx_unittest.cc b/src/test/unit/vtx_unittest.cc index 0ebd069169..4a90be274d 100644 --- a/src/test/unit/vtx_unittest.cc +++ b/src/test/unit/vtx_unittest.cc @@ -173,4 +173,5 @@ extern "C" { bool usbCableIsInserted(void) { return false; } bool usbVcpIsConnected(void) { return false; } void pidSetAntiGravityState(bool newState) { UNUSED(newState); } + void osdSuppressStats(bool) {} }