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) {} }