void usb_connection_gui(void) { bool done = false; struct gui_synclist lists; int i, action, selection; FOR_NB_SCREENS(i) viewportmanager_theme_enable(i, true, NULL); gui_synclist_init(&lists, usblist_get_name, NULL, false, 1, NULL); gui_synclist_set_title(&lists, "Usb Connection Menu", Icon_Rockbox); gui_synclist_set_icon_callback(&lists, usblist_get_icon); gui_synclist_set_nb_items(&lists, 10); gui_synclist_select_item(&lists, 0); while (!done) { gui_synclist_draw(&lists); list_do_action(CONTEXT_STD, HZ, &lists, &action, LIST_WRAP_UNLESS_HELD); switch (action) { case ACTION_STD_OK: /* fix the toggles or run the screen */ selection = gui_synclist_get_sel_pos(&lists); switch (selection) { case 0: /* run! */ done = true; break; case 1: /* battery only */ break; case 2: /* headers, do nothing */ case 5: break; case 3: /* storage modes */ case 4: if (!items[selection].enabled) { items[selection==3?4:3].enabled = false; items[selection].enabled = true; } else items[selection].enabled = false; break; case 6: /* HID modes */ case 7: case 8: case 9: if (!items[selection].enabled) { for (i=6;i<=9;i++) { if (i == selection) items[i].enabled = true; else items[i].enabled = false; } } else items[selection].enabled = false; break; } /* switch() */ break; } /* switch(action) */ } #ifdef USB_ENABLE_STORAGE usb_core_enable_driver(USB_DRIVER_MASS_STORAGE, items[3].enabled); splashf(HZ, "MSC %s", items[3].enabled?"Yes":"no"); #endif #ifdef USB_ENABLE_HID bool hid_enabled = false; for (i=6;i<=9;i++) { if (items[i].enabled) hid_enabled = true; } usb_core_enable_driver(USB_DRIVER_HID, hid_enabled); splashf(HZ, "HID %s", hid_enabled?"Yes":"no"); #endif #ifdef USB_ENABLE_CHARGING_ONLY usb_core_enable_driver(USB_DRIVER_CHARGING_ONLY, false); #endif usb_core_enable_driver(USB_DRIVER_MTP, items[4].enabled); splashf(HZ, "MTP %s", items[4].enabled?"Yes":"no"); FOR_NB_SCREENS(i) viewportmanager_theme_undo(i, true); }