diff --git a/radio/src/hal/key_driver.cpp b/radio/src/hal/key_driver.cpp index dc500167f..a0730e0df 100644 --- a/radio/src/hal/key_driver.cpp +++ b/radio/src/hal/key_driver.cpp @@ -45,4 +45,3 @@ const char* keysGetLabel(EnumKeys key) { return _key_labels[key]; } - diff --git a/radio/src/keys.cpp b/radio/src/keys.cpp index b529c3156..1230aec05 100644 --- a/radio/src/keys.cpp +++ b/radio/src/keys.cpp @@ -446,6 +446,33 @@ static void transpose_trims(uint32_t *keys) } #endif +// Mapping for: +// - quick menu shortcut key on radios with limited keys +// - radios with single PAGE key +// - radios with a SHIFT key +uint16_t keyMapping(uint16_t event) +{ +#if defined(RADIO_PA01) + if (event == EVT_KEY_BREAK(KEY_MODEL)) return EVT_KEY_BREAK(KEY_SYS); +#endif +#if defined(RADIO_ST16) + if (event == EVT_KEY_LONG(KEY_PAGEDN)) return EVT_KEY_BREAK(KEY_SYS); +#endif +#if defined(KEYS_GPIO_REG_PAGEDN) && !defined(KEYS_GPIO_REG_PAGEUP) + // Radio with single PAGEDN key + if (event == EVT_KEY_LONG(KEY_PAGEDN)) { + // Convert long press PAGEDN to short press PAGEUP + killEvents(KEY_PAGEDN); + return EVT_KEY_BREAK(KEY_PAGEUP); + } +#endif +#if defined(KEYS_GPIO_REG_SHIFT) + // SHIFT key should not trigger REPT events + if (event == EVT_KEY_REPT(KEY_SHIFT)) return 0; +#endif + return event; +} + bool keysPollingCycle() { uint32_t trims_input; @@ -466,23 +493,8 @@ bool keysPollingCycle() for (int i = 0; i < MAX_KEYS; i++) { event_t evt = keys[i].input(keys_input & (1 << i)); if (evt) { - evt |= i; -#if defined(KEYS_GPIO_REG_PAGEDN) && !defined(KEYS_GPIO_REG_PAGEUP) - // Radio with single PAGEDN key - if (evt == EVT_KEY_LONG(KEY_PAGEDN)) { - // Convert long press PAGEDN to short press PAGEUP - evt = EVT_KEY_BREAK(KEY_PAGEUP); - killEvents(KEY_PAGEDN); - } -#endif -#if defined(KEYS_GPIO_REG_SHIFT) - // SHIFT key should not trigger REPT events - if (evt != EVT_KEY_REPT(KEY_SHIFT)) { - pushEvent(evt); - } -#else - pushEvent(evt); -#endif + evt = keyMapping(evt | i); + if (evt) pushEvent(evt); } } diff --git a/radio/src/targets/pa01/key_driver.cpp b/radio/src/targets/pa01/key_driver.cpp index e8435d255..6e082fcca 100644 --- a/radio/src/targets/pa01/key_driver.cpp +++ b/radio/src/targets/pa01/key_driver.cpp @@ -70,7 +70,9 @@ enum PhysicalKeys static bool fct_state[4] = {false, false, false, false}; static uint32_t keyState = 0; +#if !defined(BOOT) static uint32_t nonReadCount = 0; +#endif static uint32_t _readKeyMatrix() {