summaryrefslogtreecommitdiff
path: root/apps
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
parent9305c86f5b8fdfd60882428f884ba29bded8da78 (diff)
downloadrockbox-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.lang70
-rw-r--r--apps/main.c9
-rw-r--r--apps/menus/settings_menu.c89
-rw-r--r--apps/settings.c10
-rw-r--r--apps/settings.h4
-rw-r--r--apps/settings_list.c11
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);