From 48824accb9cc1f1d8e26ec87d0cf44f528727a65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Izzo?= Date: Sun, 13 Mar 2022 00:21:52 +0100 Subject: [PATCH] Add flash backup and restore menu Add flash backup and flash restore entries to menu system, to access these functionalities from the radio itself. TG-428 --- openrtx/include/core/ui.h | 12 +++++++++ openrtx/src/ui/ui.c | 52 +++++++++++++++++++++++++++++++++++++++ openrtx/src/ui/ui_menu.c | 45 +++++++++++++++++++++++++++++++++ 3 files changed, 109 insertions(+) diff --git a/openrtx/include/core/ui.h b/openrtx/include/core/ui.h index 7f1a0aa1..5873f1a1 100644 --- a/openrtx/include/core/ui.h +++ b/openrtx/include/core/ui.h @@ -48,6 +48,9 @@ enum uiScreen MENU_CONTACTS, MENU_GPS, MENU_SETTINGS, + MENU_BACKUP_RESTORE, + MENU_BACKUP, + MENU_RESTORE, MENU_INFO, MENU_ABOUT, SETTINGS_TIMEDATE, @@ -76,6 +79,7 @@ enum menuItems M_GPS, #endif M_SETTINGS, + M_BACKUP_RESTORE, M_INFO, M_ABOUT }; @@ -93,6 +97,12 @@ enum settingsItems ,S_RESET2DEFAULTS }; +enum backupRestoreItems +{ + BR_BACKUP = 0, + BR_RESTORE +}; + enum displayItems { D_BRIGHTNESS = 0 @@ -185,12 +195,14 @@ extern const char *menu_items[]; extern const char *settings_items[]; extern const char *display_items[]; extern const char *settings_gps_items[]; +extern const char *backup_restore_items[]; extern const char *info_items[]; extern const char *authors[]; extern const uint8_t menu_num; extern const uint8_t settings_num; extern const uint8_t display_num; extern const uint8_t settings_gps_num; +extern const uint8_t backup_restore_num; extern const uint8_t info_num; extern const uint8_t author_num; extern const color_t color_black; diff --git a/openrtx/src/ui/ui.c b/openrtx/src/ui/ui.c index 214edc1f..bddddadc 100644 --- a/openrtx/src/ui/ui.c +++ b/openrtx/src/ui/ui.c @@ -98,6 +98,9 @@ extern void _ui_drawMenuGPS(); extern void _ui_drawSettingsGPS(ui_state_t* ui_state); #endif extern void _ui_drawMenuSettings(ui_state_t* ui_state); +extern void _ui_drawMenuBackupRestore(ui_state_t* ui_state); +extern void _ui_drawMenuBackup(ui_state_t* ui_state); +extern void _ui_drawMenuRestore(ui_state_t* ui_state); extern void _ui_drawMenuInfo(ui_state_t* ui_state); extern void _ui_drawMenuAbout(); #ifdef HAS_RTC @@ -118,6 +121,7 @@ const char *menu_items[] = "GPS", #endif "Settings", + "Backup & Restore", "Info", "About" }; @@ -153,6 +157,12 @@ const char *settings_gps_items[] = }; #endif +const char *backup_restore_items[] = +{ + "Backup", + "Restore" +}; + const char *info_items[] = { "", @@ -213,6 +223,7 @@ const uint8_t display_num = sizeof(display_items)/sizeof(display_items[0]); #ifdef HAS_GPS const uint8_t settings_gps_num = sizeof(settings_gps_items)/sizeof(settings_gps_items[0]); #endif +const uint8_t backup_restore_num = sizeof(backup_restore_items)/sizeof(backup_restore_items[0]); const uint8_t info_num = sizeof(info_items)/sizeof(info_items[0]); const uint8_t author_num = sizeof(authors)/sizeof(authors[0]); @@ -1268,6 +1279,9 @@ void ui_updateFSM(event_t event, bool *sync_rtx) case M_SETTINGS: state.ui_screen = MENU_SETTINGS; break; + case M_BACKUP_RESTORE: + state.ui_screen = MENU_BACKUP_RESTORE; + break; case M_INFO: state.ui_screen = MENU_INFO; break; @@ -1400,6 +1414,32 @@ void ui_updateFSM(event_t event, bool *sync_rtx) else if(msg.keys & KEY_ESC) _ui_menuBack(MENU_TOP); break; + // Flash backup and restore menu screen + case MENU_BACKUP_RESTORE: + if(msg.keys & KEY_UP || msg.keys & KNOB_LEFT) + _ui_menuUp(settings_num); + else if(msg.keys & KEY_DOWN || msg.keys & KNOB_RIGHT) + _ui_menuDown(settings_num); + else if(msg.keys & KEY_ENTER) + { + + switch(ui_state.menu_selected) + { + case BR_BACKUP: + state.ui_screen = MENU_BACKUP; + break; + case BR_RESTORE: + state.ui_screen = MENU_RESTORE; + break; + default: + state.ui_screen = MENU_BACKUP_RESTORE; + } + // Reset menu selection + ui_state.menu_selected = 0; + } + else if(msg.keys & KEY_ESC) + _ui_menuBack(MENU_TOP); + break; // Info menu screen case MENU_INFO: if(msg.keys & KEY_UP || msg.keys & KNOB_LEFT) @@ -1686,6 +1726,18 @@ void ui_updateGUI() case MENU_SETTINGS: _ui_drawMenuSettings(&ui_state); break; + // Flash backup and restore screen + case MENU_BACKUP_RESTORE: + _ui_drawMenuBackupRestore(&ui_state); + break; + // Flash backup screen + case MENU_BACKUP: + _ui_drawMenuBackup(&ui_state); + break; + // Flash restore screen + case MENU_RESTORE: + _ui_drawMenuRestore(&ui_state); + break; // Info menu screen case MENU_INFO: _ui_drawMenuInfo(&ui_state); diff --git a/openrtx/src/ui/ui_menu.c b/openrtx/src/ui/ui_menu.c index 28ef760a..d2d66775 100644 --- a/openrtx/src/ui/ui_menu.c +++ b/openrtx/src/ui/ui_menu.c @@ -198,6 +198,13 @@ int _ui_getSettingsGPSValueName(char *buf, uint8_t max_len, uint8_t index) } #endif +int _ui_getBackupRestoreEntryName(char *buf, uint8_t max_len, uint8_t index) +{ + if(index >= backup_restore_num) return -1; + snprintf(buf, max_len, "%s", backup_restore_items[index]); + return 0; +} + int _ui_getInfoEntryName(char *buf, uint8_t max_len, uint8_t index) { if(index >= info_num) return -1; @@ -424,6 +431,44 @@ void _ui_drawMenuSettings(ui_state_t* ui_state) _ui_drawMenuList(ui_state->menu_selected, _ui_getSettingsEntryName); } +void _ui_drawMenuBackupRestore(ui_state_t* ui_state) +{ + gfx_clearScreen(); + // Print "Backup & Restore" on top bar + gfx_print(layout.top_pos, layout.top_font, TEXT_ALIGN_CENTER, + color_white, "Backup & Restore"); + // Print menu entries + _ui_drawMenuList(ui_state->menu_selected, _ui_getBackupRestoreEntryName); +} + +void _ui_drawMenuBackup(ui_state_t* ui_state) +{ + gfx_clearScreen(); + // Print "Flash Backup" on top bar + gfx_print(layout.top_pos, layout.top_font, TEXT_ALIGN_CENTER, + color_white, "Flash Backup"); + // Print backup message + gfx_print(layout.line2_pos, layout.line2_font, TEXT_ALIGN_CENTER, + color_white, "Connect to RTXTool"); + gfx_print(layout.line3_pos, layout.line2_font, TEXT_ALIGN_CENTER, + color_white, "to backup flash."); + // TODO: Add call to xmodem send function +} + +void _ui_drawMenuRestore(ui_state_t* ui_state) +{ + gfx_clearScreen(); + // Print "Flash Backup" on top bar + gfx_print(layout.top_pos, layout.top_font, TEXT_ALIGN_CENTER, + color_white, "Flash Restore"); + // Print backup message + gfx_print(layout.line2_pos, layout.line2_font, TEXT_ALIGN_CENTER, + color_white, "Connect to RTXTool"); + gfx_print(layout.line3_pos, layout.line2_font, TEXT_ALIGN_CENTER, + color_white, "to restore flash."); + // TODO: Add call to xmodem receive function +} + void _ui_drawMenuInfo(ui_state_t* ui_state) { gfx_clearScreen();