summaryrefslogtreecommitdiffstats
path: root/apps/menus/settings_menu.c
diff options
context:
space:
mode:
authorChristian Gmeiner <christian.gmeiner@gmail.com>2007-08-27 16:04:32 +0000
committerChristian Gmeiner <christian.gmeiner@gmail.com>2007-08-27 16:04:32 +0000
commit8181a0c905a591caef684a2d7487feedbec84c10 (patch)
tree3939183e8e73928d1b5dcfc97b40f33b6baa309b /apps/menus/settings_menu.c
parent9305c86f5b8fdfd60882428f884ba29bded8da78 (diff)
downloadrockbox-8181a0c905a591caef684a2d7487feedbec84c10.tar.gz
rockbox-8181a0c905a591caef684a2d7487feedbec84c10.zip
Usb Stack: only setup packet handling, and not enabled by default as there is a lot to do.
* settings code is not fully ready -> changing device driver has no effect * clean ups * check copyriths * find a way to detect IN transfers * support for full and highspeed * ... git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14470 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/menus/settings_menu.c')
-rw-r--r--apps/menus/settings_menu.c89
1 files changed, 88 insertions, 1 deletions
diff --git a/apps/menus/settings_menu.c b/apps/menus/settings_menu.c
index 039949835b..5c97ac21db 100644
--- a/apps/menus/settings_menu.c
+++ b/apps/menus/settings_menu.c
@@ -42,6 +42,13 @@
#include "radio.h"
#endif
+#ifdef HAVE_USBSTACK
+#include "list.h"
+#include "usbstack.h"
+#include "statusbar.h"
+#include "misc.h"
+#endif
+
/***********************************/
/* TAGCACHE MENU */
#ifdef HAVE_TAGCACHE
@@ -442,6 +449,82 @@ MAKE_MENU(voice_settings_menu, ID2P(LANG_VOICE), 0, Icon_Voice,
/* VOICE MENU */
/***********************************/
+#ifdef HAVE_USBSTACK
+/***********************************/
+/* USB STACK MENU */
+char drivers[16][32];
+static char* usb_menu_getname(int item, void * data, char *buffer)
+{
+ (void)data; (void)buffer;
+ return drivers[item];
+}
+int usbdriver_menuitem(void)
+{
+ struct gui_synclist lists;
+ int action, count = 0;
+ char *s = device_driver_names, *e;
+ do {
+ e = strchr(s, ',');
+ if (e)
+ {
+ strncpy(drivers[count++], s, e-s);
+ s = e+1;
+ }
+ } while (e && count < 16);
+ if (count < 16)
+ strcpy(drivers[count++], s);
+ for (action=0; action<count; action++)
+ {
+ if (!strcmp(drivers[action],
+ global_settings.usb_stack_device_driver))
+ break;
+ }
+
+ gui_synclist_init(&lists, usb_menu_getname, drivers, false, 1);
+ gui_synclist_set_title(&lists, str(LANG_USBSTACK_DEVICE_DRIVER), NOICON);
+ gui_synclist_set_icon_callback(&lists, NULL);
+ gui_synclist_set_nb_items(&lists, count);
+ gui_synclist_select_item(&lists, action==count?0:action);
+ gui_synclist_draw(&lists);
+
+ while(1)
+ {
+ gui_syncstatusbar_draw(&statusbars, true);
+ action = get_action(CONTEXT_STD, HZ/5);
+ if (gui_synclist_do_button(&lists, action, LIST_WRAP_UNLESS_HELD))
+ continue;
+ if (action == ACTION_STD_CANCEL)
+ {
+ // setting was canceled
+ break;
+ }
+ else if (action == ACTION_STD_OK)
+ {
+ // setting was accepted... save
+ strcpy(global_settings.usb_stack_device_driver,
+ drivers[gui_synclist_get_sel_pos(&lists)]);
+ break;
+ }
+ else if (action == ACTION_REDRAW)
+ gui_synclist_draw(&lists);
+ else if(default_event_handler(action) == SYS_USB_CONNECTED)
+ return true;
+ }
+ return false;
+}
+
+MENUITEM_SETTING(usbstack_mode, &global_settings.usb_stack_mode, NULL);
+MENUITEM_FUNCTION(usbdriver, 0, ID2P(LANG_USBSTACK_DEVICE_DRIVER),
+ usbdriver_menuitem, 0, NULL, Icon_NOICON);
+
+MAKE_MENU(usbstack_menu, ID2P(LANG_USBSTACK), 0, Icon_NOICON,
+ &usbstack_mode, &usbdriver);
+/* USB STACK MENU */
+/***********************************/
+#endif
+
+/***********************************/
+
/***********************************/
/* SETTINGS MENU */
static int language_browse(void)
@@ -458,6 +541,10 @@ MAKE_MENU(settings_menu_item, ID2P(LANG_GENERAL_SETTINGS), 0,
&tagcache_menu,
#endif
&display_menu, &system_menu,
- &bookmark_settings_menu, &browse_langs, &voice_settings_menu );
+ &bookmark_settings_menu, &browse_langs, &voice_settings_menu
+#ifdef HAVE_USBSTACK
+ , &usbstack_menu
+#endif
+ );
/* SETTINGS MENU */
/***********************************/