diff --git a/radio/src/keys.cpp b/radio/src/keys.cpp index eddf6c341..a6adb6e91 100644 --- a/radio/src/keys.cpp +++ b/radio/src/keys.cpp @@ -159,6 +159,7 @@ void killEvents(uint8_t event) } } +#if defined(CPUARM) bool clearKeyEvents() { #if defined(PCBSKY9X) @@ -167,7 +168,7 @@ bool clearKeyEvents() // loop until all keys are up #if !defined(BOOT) - tmr10ms_t deadline = get_tmr10ms() + 300; // wait no more than 3 seconds + tmr10ms_t start = get_tmr10ms(); #endif while (keyDown()) { @@ -178,12 +179,8 @@ bool clearKeyEvents() wdt_reset(); #endif -#if defined(PCBSTD) && defined(ROTARY_ENCODER_NAVIGATION) && !defined(TELEMETREZ) - rotencPoll(); -#endif - #if !defined(BOOT) - if (get_tmr10ms() >= deadline) { + if ((get_tmr10ms() - start) >= 300) { // wait no more than 3 seconds //timeout expired, at least one key stuck return false; } @@ -194,3 +191,26 @@ bool clearKeyEvents() putEvent(0); return true; } +#else // #if defined(CPUARM) +void clearKeyEvents() +{ + // loop until all keys are up + while (keyDown()) { + +#if defined(SIMU) + SIMU_SLEEP(1/*ms*/); +#else + wdt_reset(); +#endif + +#if defined(PCBSTD) && defined(ROTARY_ENCODER_NAVIGATION) && !defined(TELEMETREZ) + rotencPoll(); +#endif + } + + memclear(keys, sizeof(keys)); + putEvent(0); +} +#endif // #if defined(CPUARM) + + diff --git a/radio/src/keys.h b/radio/src/keys.h index 09c603177..3d910a229 100644 --- a/radio/src/keys.h +++ b/radio/src/keys.h @@ -269,13 +269,14 @@ extern uint8_t s_evt; #define putEvent(evt) s_evt = evt -bool clearKeyEvents(); void pauseEvents(uint8_t enuk); void killEvents(uint8_t enuk); #if defined(CPUARM) + bool clearKeyEvents(); uint8_t getEvent(bool trim=false); #else + void clearKeyEvents(); uint8_t getEvent(); #endif diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 1de6279a8..8023cc91e 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -1116,6 +1116,7 @@ void checkAll() } #endif +#if defined(CPUARM) if (!clearKeyEvents()) { displayPopup(STR_KEYSTUCK); tmr10ms_t tgtime = get_tmr10ms() + 500; @@ -1128,6 +1129,9 @@ void checkAll() wdt_reset(); } } +#else // #if defined(CPUARM) + clearKeyEvents(); +#endif // #if defined(CPUARM) START_SILENCE_PERIOD(); }