diff options
| author | Christian Gmeiner <christian.gmeiner@gmail.com> | 2007-08-27 16:04:32 +0000 |
|---|---|---|
| committer | Christian Gmeiner <christian.gmeiner@gmail.com> | 2007-08-27 16:04:32 +0000 |
| commit | 8181a0c905a591caef684a2d7487feedbec84c10 (patch) | |
| tree | 3939183e8e73928d1b5dcfc97b40f33b6baa309b /apps | |
| parent | 9305c86f5b8fdfd60882428f884ba29bded8da78 (diff) | |
| download | rockbox-8181a0c905a591caef684a2d7487feedbec84c10.zip rockbox-8181a0c905a591caef684a2d7487feedbec84c10.tar.gz rockbox-8181a0c905a591caef684a2d7487feedbec84c10.tar.bz2 rockbox-8181a0c905a591caef684a2d7487feedbec84c10.tar.xz | |
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')
| -rw-r--r-- | apps/lang/english.lang | 70 | ||||
| -rw-r--r-- | apps/main.c | 9 | ||||
| -rw-r--r-- | apps/menus/settings_menu.c | 89 | ||||
| -rw-r--r-- | apps/settings.c | 10 | ||||
| -rw-r--r-- | apps/settings.h | 4 | ||||
| -rw-r--r-- | apps/settings_list.c | 11 |
6 files changed, 189 insertions, 4 deletions
diff --git a/apps/lang/english.lang b/apps/lang/english.lang index adc3041..2503fa5 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang @@ -11156,3 +11156,73 @@ recording: "" </voice> </phrase> +<phrase> + id: LANG_USBSTACK + desc: in settings_menu + user: + <source> + *: "USB Stack" + </source> + <dest> + *: "USB Stack" + </dest> + <voice> + *: "USB Stack" + </voice> +</phrase> +<phrase> + id: LANG_USBSTACK_MODE + desc: in usbstack settings + user: + <source> + *: "USB Stack Mode" + </source> + <dest> + *: "USB Stack Mode" + </dest> + <voice> + *: "USB Stack Mode" + </voice> +</phrase> +<phrase> + id: LANG_USBSTACK_DEVICE + desc: in usbstack settings + user: + <source> + *: "Device" + </source> + <dest> + *: "Device" + </dest> + <voice> + *: "Device" + </voice> +</phrase> +<phrase> + id: LANG_USBSTACK_HOST + desc: in usbstack settings + user: + <source> + *: "Host" + </source> + <dest> + *: "Host" + </dest> + <voice> + *: "Host" + </voice> +</phrase> +<phrase> + id: LANG_USBSTACK_DEVICE_DRIVER + desc: in usbstack settings + user: + <source> + *: "Device Driver" + </source> + <dest> + *: "Device Driver" + </dest> + <voice> + *: "Device Driver" + </voice> +</phrase>
\ No newline at end of file diff --git a/apps/main.c b/apps/main.c index df25084..54787d6 100644 --- a/apps/main.c +++ b/apps/main.c @@ -99,6 +99,10 @@ #include "lcd-remote.h" #endif +#ifdef HAVE_USBSTACK +#include "usbstack.h" +#endif + #if CONFIG_USBOTG == USBOTG_ISP1362 #include "isp1362.h" #endif @@ -373,7 +377,10 @@ static void init(void) #endif adc_init(); - + +#ifdef HAVE_USBSTACK + usb_stack_init(); +#endif usb_init(); #if CONFIG_USBOTG == USBOTG_ISP1362 isp1362_init(); diff --git a/apps/menus/settings_menu.c b/apps/menus/settings_menu.c index 0399498..5c97ac2 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 */ /***********************************/ diff --git a/apps/settings.c b/apps/settings.c index cd1c252..c7c8772 100644 --- a/apps/settings.c +++ b/apps/settings.c @@ -98,6 +98,10 @@ struct system_status global_status; #include "lcd-remote.h" #endif +#ifdef HAVE_USBSTACK +#include "usbstack.h" +#endif + long lasttime = 0; /** NVRAM stuff, if the target doesnt have NVRAM it is saved in ROCKBOX_DIR /nvram.bin **/ @@ -875,11 +879,13 @@ void settings_apply(void) read_color_theme_file(); #endif +#ifdef HAVE_USBSTACK + usb_controller_select(global_settings.usb_stack_mode); + usb_device_driver_bind(global_settings.usb_stack_device_driver); +#endif } - - /* * reset all settings to their default value */ diff --git a/apps/settings.h b/apps/settings.h index 987709c..c4cb917 100644 --- a/apps/settings.h +++ b/apps/settings.h @@ -748,6 +748,10 @@ struct user_settings int list_accel_start_delay; /* ms before we start increaseing step size */ int list_accel_wait; /* ms between increases */ #endif +#ifdef HAVE_USBSTACK + int usb_stack_mode; /* device or host */ + unsigned char usb_stack_device_driver[32]; /* usb device driver to load */ +#endif }; /** global variables **/ diff --git a/apps/settings_list.c b/apps/settings_list.c index 16c3222..1218dbf 100644 --- a/apps/settings_list.c +++ b/apps/settings_list.c @@ -47,6 +47,9 @@ #include "radio.h" #endif +#ifdef HAVE_USBSTACK +#include "usbstack.h" +#endif #define NVRAM(bytes) (bytes<<F_NVRAM_MASK_SHIFT) /** NOTE: NVRAM_CONFIG_VERSION is in settings_list.h @@ -1260,6 +1263,14 @@ const struct settings_list settings[] = { 3, "list_accel_wait", UNIT_SEC, 1, 10, 1, scanaccel_formatter, scanaccel_getlang, NULL), #endif /* HAVE_SCROLLWHEEL */ +#ifdef HAVE_USBSTACK + CHOICE_SETTING(0, usb_stack_mode, LANG_USBSTACK_MODE, 0, "usb mode", + "device,host", + usb_controller_select, + 2, ID2P(LANG_USBSTACK_DEVICE), ID2P(LANG_USBSTACK_HOST)), + FILENAME_SETTING(0, usb_stack_device_driver, "usb device driver", + "storage", NULL, NULL, 32), +#endif /* HAVE_USBSTACK */ }; const int nb_settings = sizeof(settings)/sizeof(*settings); |