diff --git a/openrtx/include/ui.h b/openrtx/include/ui.h index 229e8e6d..33a356df 100644 --- a/openrtx/include/ui.h +++ b/openrtx/include/ui.h @@ -49,6 +49,7 @@ enum uiScreen MENU_GPS, MENU_MACRO, MENU_SETTINGS, + MENU_INFO, SETTINGS_TIMEDATE, SETTINGS_TIMEDATE_SET, SETTINGS_DISPLAY, @@ -124,9 +125,11 @@ extern settings_t settings; extern const char *menu_items[]; extern const char *settings_items[]; extern const char *display_items[]; +extern const char *info_items[]; extern const uint8_t menu_num; extern const uint8_t settings_num; extern const uint8_t display_num; +extern const uint8_t info_num; extern const color_t color_black; extern const color_t color_grey; extern const color_t color_white; diff --git a/openrtx/src/ui/ui.c b/openrtx/src/ui/ui.c index ce66e4d0..590fcc6b 100644 --- a/openrtx/src/ui/ui.c +++ b/openrtx/src/ui/ui.c @@ -92,6 +92,7 @@ extern void _ui_drawMenuZone(ui_state_t* ui_state); extern void _ui_drawMenuChannel(ui_state_t* ui_state); extern void _ui_drawMenuContacts(ui_state_t* ui_state); extern void _ui_drawMenuSettings(ui_state_t* ui_state); +extern void _ui_drawMenuInfo(ui_state_t* ui_state); #ifdef HAS_RTC extern void _ui_drawSettingsTimeDate(state_t* last_state); extern void _ui_drawSettingsTimeDateSet(state_t* last_state, ui_state_t* ui_state); @@ -99,14 +100,15 @@ extern void _ui_drawSettingsTimeDateSet(state_t* last_state, ui_state_t* ui_stat extern void _ui_drawSettingsDisplay(ui_state_t* ui_state); extern bool _ui_drawMacroMenu(state_t* last_state); -const char *menu_items[6] = +const char *menu_items[7] = { "Zone", "Channels", "Contacts", "Messages", "GPS", - "Settings" + "Settings", + "Info" }; #ifdef HAS_RTC @@ -134,6 +136,13 @@ const char *display_items[1] = "Brightness", }; #endif +const char *info_items[4] = +{ + "Model", + "Bat. Voltage", + "Bat. Charge", + "RSSI", +}; // Calculate number of main menu entries const uint8_t menu_num = sizeof(menu_items)/sizeof(menu_items[0]); @@ -141,6 +150,8 @@ const uint8_t menu_num = sizeof(menu_items)/sizeof(menu_items[0]); const uint8_t settings_num = sizeof(settings_items)/sizeof(settings_items[0]); // Calculate number of display settings menu entries const uint8_t display_num = sizeof(display_items)/sizeof(display_items[0]); +// Calculate number of info menu entries +const uint8_t info_num = sizeof(info_items)/sizeof(info_items[0]); const color_t color_black = {0, 0, 0, 255}; const color_t color_grey = {60, 60, 60, 255}; @@ -777,6 +788,9 @@ void ui_updateFSM(event_t event, bool *sync_rtx) case 5: state.ui_screen = MENU_SETTINGS; break; + case 6: + state.ui_screen = MENU_INFO; + break; default: state.ui_screen = MENU_TOP; } @@ -906,6 +920,30 @@ void ui_updateFSM(event_t event, bool *sync_rtx) ui_state.menu_selected = 0; } break; + // Info menu screen + case MENU_INFO: + if(msg.keys & KEY_UP) + { + if(ui_state.menu_selected > 0) + ui_state.menu_selected -= 1; + else + ui_state.menu_selected = info_num-1; + } + else if(msg.keys & KEY_DOWN) + { + if(ui_state.menu_selected < info_num-1) + ui_state.menu_selected += 1; + else + ui_state.menu_selected = 0; + } + else if(msg.keys & KEY_ESC) + { + // Return to top menu + state.ui_screen = MENU_TOP; + // Reset menu selection + ui_state.menu_selected = 0; + } + break; #ifdef HAS_RTC // Time&Date settings screen case SETTINGS_TIMEDATE: @@ -1047,6 +1085,10 @@ void ui_updateGUI(state_t last_state) case MENU_SETTINGS: _ui_drawMenuSettings(&ui_state); break; + // Info menu screen + case MENU_INFO: + _ui_drawMenuInfo(&ui_state); + break; #ifdef HAS_RTC // Time&Date settings screen case SETTINGS_TIMEDATE: diff --git a/openrtx/src/ui/ui_menu.c b/openrtx/src/ui/ui_menu.c index cfe4e105..a37d218b 100644 --- a/openrtx/src/ui/ui_menu.c +++ b/openrtx/src/ui/ui_menu.c @@ -125,6 +125,22 @@ int _ui_getDisplayValueName(char *buf, uint8_t max_len, uint8_t index) return 0; } +int _ui_getInfoEntryName(char *buf, uint8_t max_len, uint8_t index) +{ + if(index >= info_num) return -1; + snprintf(buf, max_len, "%s", info_items[index]); + return 0; +} + +int _ui_getInfoValueName(char *buf, uint8_t max_len, uint8_t index) +{ + if(index >= info_num) return -1; + uint8_t value = 0; + if(strcmp(info_items[index], "Model") == 0) + value = 0; + snprintf(buf, max_len, "%d", value); + return 0; +} int _ui_getZoneName(char *buf, uint8_t max_len, uint8_t index) { zone_t zone; @@ -202,6 +218,17 @@ void _ui_drawMenuSettings(ui_state_t* ui_state) _ui_drawMenuList(layout.line1_left, ui_state->menu_selected, _ui_getSettingsEntryName); } +void _ui_drawMenuInfo(ui_state_t* ui_state) +{ + gfx_clearScreen(); + // Print "Info" on top bar + gfx_print(layout.top_left, "Info", layout.top_font, + TEXT_ALIGN_CENTER, color_white); + // Print menu entries + _ui_drawMenuListValue(layout.line1_left, ui_state->menu_selected, _ui_getInfoEntryName, + _ui_getInfoValueName); +} + void _ui_drawSettingsDisplay(ui_state_t* ui_state) { gfx_clearScreen();