From 3f849bd8a19a81f09ef3bb70d3f03569a3d3aa0b Mon Sep 17 00:00:00 2001 From: Mathis Schmieder Date: Sun, 30 Oct 2022 20:53:47 +0100 Subject: [PATCH] Module17 UI: call sign input using arrows --- openrtx/src/ui/module17/ui.c | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/openrtx/src/ui/module17/ui.c b/openrtx/src/ui/module17/ui.c index e0788801..c1cb7423 100644 --- a/openrtx/src/ui/module17/ui.c +++ b/openrtx/src/ui/module17/ui.c @@ -167,6 +167,8 @@ static const char *symbols_ITU_T_E161_callsign[] = "" }; +static const char symbols_callsign[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890/- "; + // Calculate number of menu entries const uint8_t menu_num = sizeof(menu_items)/sizeof(menu_items[0]); const uint8_t settings_num = sizeof(settings_items)/sizeof(settings_items[0]); @@ -695,6 +697,29 @@ void _ui_textInputKeypad(char *buf, uint8_t max_len, kbd_msg_t msg, bool callsig ui_state.last_keypress = now; } +void _ui_textInputArrows(char *buf, uint8_t max_len, kbd_msg_t msg) +{ + if(ui_state.input_position >= max_len) + return; + + uint8_t num_symbols = 0; + num_symbols = strlen(symbols_callsign); + + if (msg.keys & KEY_RIGHT) + { + ui_state.input_position = (ui_state.input_position + 1) % max_len; + ui_state.input_set = 0; + } + else if (msg.keys & KEY_LEFT) + ui_state.input_position = (ui_state.input_position - 1) % max_len; + else if (msg.keys & KEY_UP) + ui_state.input_set = (ui_state.input_set + 1) % num_symbols; + else if (msg.keys & KEY_DOWN) + ui_state.input_set = ui_state.input_set==0 ? num_symbols-1 : ui_state.input_set-1; + + buf[ui_state.input_position] = symbols_callsign[ui_state.input_set]; +} + void _ui_textInputConfirm(char *buf) { buf[ui_state.input_position + 1] = '\0'; @@ -1184,9 +1209,7 @@ void ui_updateFSM(bool *sync_rtx) ui_state.edit_mode = false; else if(msg.keys & KEY_UP || msg.keys & KEY_DOWN || msg.keys & KEY_LEFT || msg.keys & KEY_RIGHT) - _ui_textInputDel(ui_state.new_callsign); - else if(input_isNumberPressed(msg)) - _ui_textInputKeypad(ui_state.new_callsign, 9, msg, true); + _ui_textInputArrows(ui_state.new_callsign, 9, msg); } else {