From 905591215fdad421f9985ad846b082b86a9ed0b7 Mon Sep 17 00:00:00 2001 From: Aidan MacDonald Date: Sat, 5 Mar 2022 09:25:09 +0000 Subject: x1000: bootloader: split off recovery menu code Change-Id: I6c6a25dc248b5dcbca796781f761bef05337431c --- bootloader/x1000.c | 109 ----------------------------------------------------- 1 file changed, 109 deletions(-) (limited to 'bootloader/x1000.c') diff --git a/bootloader/x1000.c b/bootloader/x1000.c index c57ddfff4e..8b1dae3050 100644 --- a/bootloader/x1000.c +++ b/bootloader/x1000.c @@ -56,38 +56,12 @@ #include #include -enum { - MENUITEM_HEADING, - MENUITEM_ACTION, -}; - -struct menuitem { - int type; - const char* text; - void(*action)(void); -}; - void init_lcd(void); void init_usb(void); int init_disk(void); -void recovery_menu(void) __attribute__((noreturn)); - void usb_mode(void); -/* Defines the recovery menu contents */ -const struct menuitem recovery_items[] = { - {MENUITEM_HEADING, "System", NULL}, - {MENUITEM_ACTION, "Start Rockbox", &boot_rockbox}, - {MENUITEM_ACTION, "USB mode", &usb_mode}, - {MENUITEM_ACTION, "Shutdown", &shutdown}, - {MENUITEM_ACTION, "Reboot", &reboot}, - {MENUITEM_HEADING, "Bootloader", NULL}, - {MENUITEM_ACTION, "Install or update", &bootloader_install}, - {MENUITEM_ACTION, "Backup", &bootloader_backup}, - {MENUITEM_ACTION, "Restore", &bootloader_restore}, -}; - /* Flags to indicate if hardware was already initialized */ bool usb_inited = false; bool disk_inited = false; @@ -126,89 +100,6 @@ int init_disk(void) return 0; } -void put_help_line(int line, const char* str1, const char* str2) -{ - int width = LCD_WIDTH / SYSFONT_WIDTH; - lcd_puts(0, line, str1); - lcd_puts(width - strlen(str2), line, str2); -} - -void recovery_menu(void) -{ - const int n_items = sizeof(recovery_items)/sizeof(struct menuitem); - - int selection = 0; - while(recovery_items[selection].type != MENUITEM_ACTION) - ++selection; - - while(1) { - clearscreen(); - putcenter_y(0, "Rockbox recovery menu"); - - int top_line = 2; - - /* draw the menu */ - for(int i = 0; i < n_items; ++i) { - switch(recovery_items[i].type) { - case MENUITEM_HEADING: - lcd_putsf(0, top_line+i, "[%s]", recovery_items[i].text); - break; - - case MENUITEM_ACTION: - lcd_puts(3, top_line+i, recovery_items[i].text); - break; - - default: - break; - } - } - - /* draw the selection marker */ - lcd_puts(0, top_line+selection, "=>"); - - /* draw the help text */ - int line = (LCD_HEIGHT - SYSFONT_HEIGHT)/SYSFONT_HEIGHT - 3; - put_help_line(line++, BL_DOWN_NAME "/" BL_UP_NAME, "move cursor"); - put_help_line(line++, BL_SELECT_NAME, "select item"); - put_help_line(line++, BL_QUIT_NAME, "power off"); - - lcd_update(); - - /* handle input */ - switch(get_button(TIMEOUT_BLOCK)) { - case BL_SELECT: { - if(recovery_items[selection].action) - recovery_items[selection].action(); - } break; - - case BL_UP: - for(int i = selection-1; i >= 0; --i) { - if(recovery_items[i].action) { - selection = i; - break; - } - } - break; - - case BL_DOWN: - for(int i = selection+1; i < n_items; ++i) { - if(recovery_items[i].action) { - selection = i; - break; - } - } - break; - - case BL_QUIT: - shutdown(); - break; - - default: - break; - } - } -} - void usb_mode(void) { init_usb(); -- cgit v1.2.3