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_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;

View File

@ -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);

View File

@ -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();