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
This commit is contained in:
Niccolò Izzo 2022-03-13 00:21:52 +01:00
parent 7e3131d9d1
commit 48824accb9
3 changed files with 109 additions and 0 deletions

View File

@ -48,6 +48,9 @@ enum uiScreen
MENU_CONTACTS, MENU_CONTACTS,
MENU_GPS, MENU_GPS,
MENU_SETTINGS, MENU_SETTINGS,
MENU_BACKUP_RESTORE,
MENU_BACKUP,
MENU_RESTORE,
MENU_INFO, MENU_INFO,
MENU_ABOUT, MENU_ABOUT,
SETTINGS_TIMEDATE, SETTINGS_TIMEDATE,
@ -76,6 +79,7 @@ enum menuItems
M_GPS, M_GPS,
#endif #endif
M_SETTINGS, M_SETTINGS,
M_BACKUP_RESTORE,
M_INFO, M_INFO,
M_ABOUT M_ABOUT
}; };
@ -93,6 +97,12 @@ enum settingsItems
,S_RESET2DEFAULTS ,S_RESET2DEFAULTS
}; };
enum backupRestoreItems
{
BR_BACKUP = 0,
BR_RESTORE
};
enum displayItems enum displayItems
{ {
D_BRIGHTNESS = 0 D_BRIGHTNESS = 0
@ -185,12 +195,14 @@ extern const char *menu_items[];
extern const char *settings_items[]; extern const char *settings_items[];
extern const char *display_items[]; extern const char *display_items[];
extern const char *settings_gps_items[]; extern const char *settings_gps_items[];
extern const char *backup_restore_items[];
extern const char *info_items[]; extern const char *info_items[];
extern const char *authors[]; extern const char *authors[];
extern const uint8_t menu_num; extern const uint8_t menu_num;
extern const uint8_t settings_num; extern const uint8_t settings_num;
extern const uint8_t display_num; extern const uint8_t display_num;
extern const uint8_t settings_gps_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 info_num;
extern const uint8_t author_num; extern const uint8_t author_num;
extern const color_t color_black; extern const color_t color_black;

View File

@ -98,6 +98,9 @@ extern void _ui_drawMenuGPS();
extern void _ui_drawSettingsGPS(ui_state_t* ui_state); extern void _ui_drawSettingsGPS(ui_state_t* ui_state);
#endif #endif
extern void _ui_drawMenuSettings(ui_state_t* ui_state); 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_drawMenuInfo(ui_state_t* ui_state);
extern void _ui_drawMenuAbout(); extern void _ui_drawMenuAbout();
#ifdef HAS_RTC #ifdef HAS_RTC
@ -118,6 +121,7 @@ const char *menu_items[] =
"GPS", "GPS",
#endif #endif
"Settings", "Settings",
"Backup & Restore",
"Info", "Info",
"About" "About"
}; };
@ -153,6 +157,12 @@ const char *settings_gps_items[] =
}; };
#endif #endif
const char *backup_restore_items[] =
{
"Backup",
"Restore"
};
const char *info_items[] = const char *info_items[] =
{ {
"", "",
@ -213,6 +223,7 @@ const uint8_t display_num = sizeof(display_items)/sizeof(display_items[0]);
#ifdef HAS_GPS #ifdef HAS_GPS
const uint8_t settings_gps_num = sizeof(settings_gps_items)/sizeof(settings_gps_items[0]); const uint8_t settings_gps_num = sizeof(settings_gps_items)/sizeof(settings_gps_items[0]);
#endif #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 info_num = sizeof(info_items)/sizeof(info_items[0]);
const uint8_t author_num = sizeof(authors)/sizeof(authors[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: case M_SETTINGS:
state.ui_screen = MENU_SETTINGS; state.ui_screen = MENU_SETTINGS;
break; break;
case M_BACKUP_RESTORE:
state.ui_screen = MENU_BACKUP_RESTORE;
break;
case M_INFO: case M_INFO:
state.ui_screen = MENU_INFO; state.ui_screen = MENU_INFO;
break; break;
@ -1400,6 +1414,32 @@ void ui_updateFSM(event_t event, bool *sync_rtx)
else if(msg.keys & KEY_ESC) else if(msg.keys & KEY_ESC)
_ui_menuBack(MENU_TOP); _ui_menuBack(MENU_TOP);
break; 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 // Info menu screen
case MENU_INFO: case MENU_INFO:
if(msg.keys & KEY_UP || msg.keys & KNOB_LEFT) if(msg.keys & KEY_UP || msg.keys & KNOB_LEFT)
@ -1686,6 +1726,18 @@ void ui_updateGUI()
case MENU_SETTINGS: case MENU_SETTINGS:
_ui_drawMenuSettings(&ui_state); _ui_drawMenuSettings(&ui_state);
break; 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 // Info menu screen
case MENU_INFO: case MENU_INFO:
_ui_drawMenuInfo(&ui_state); _ui_drawMenuInfo(&ui_state);

View File

@ -198,6 +198,13 @@ int _ui_getSettingsGPSValueName(char *buf, uint8_t max_len, uint8_t index)
} }
#endif #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) int _ui_getInfoEntryName(char *buf, uint8_t max_len, uint8_t index)
{ {
if(index >= info_num) return -1; 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); _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) void _ui_drawMenuInfo(ui_state_t* ui_state)
{ {
gfx_clearScreen(); gfx_clearScreen();