summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Gmeiner <christian.gmeiner@gmail.com>2007-08-29 11:55:23 +0000
committerChristian Gmeiner <christian.gmeiner@gmail.com>2007-08-29 11:55:23 +0000
commit57c2a5fa5a8b57a094e6e89aafa1702b76218da7 (patch)
tree771b8223b85c279c88eaf7d9efe06686a14f63b3
parent17f2dd5c13cda7447da74227099b852ee55e1dd6 (diff)
downloadrockbox-57c2a5fa5a8b57a094e6e89aafa1702b76218da7.zip
rockbox-57c2a5fa5a8b57a094e6e89aafa1702b76218da7.tar.gz
rockbox-57c2a5fa5a8b57a094e6e89aafa1702b76218da7.tar.bz2
rockbox-57c2a5fa5a8b57a094e6e89aafa1702b76218da7.tar.xz
add support to switch device driver at runtime
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14508 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/menus/settings_menu.c11
-rw-r--r--firmware/usbstack/drivers/device/usb_serial.c7
-rw-r--r--firmware/usbstack/drivers/device/usb_serial.h1
-rw-r--r--firmware/usbstack/drivers/device/usb_storage.c7
-rw-r--r--firmware/usbstack/drivers/device/usb_storage.h1
5 files changed, 21 insertions, 6 deletions
diff --git a/apps/menus/settings_menu.c b/apps/menus/settings_menu.c
index 5c97ac2..a85024e 100644
--- a/apps/menus/settings_menu.c
+++ b/apps/menus/settings_menu.c
@@ -479,7 +479,7 @@ int usbdriver_menuitem(void)
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);
@@ -495,14 +495,17 @@ int usbdriver_menuitem(void)
continue;
if (action == ACTION_STD_CANCEL)
{
- // setting was canceled
+ /* setting was canceled */
break;
}
else if (action == ACTION_STD_OK)
{
- // setting was accepted... save
- strcpy(global_settings.usb_stack_device_driver,
+ /* setting was accepted... save */
+ strcpy(global_settings.usb_stack_device_driver,
drivers[gui_synclist_get_sel_pos(&lists)]);
+
+ /* switch device driver */
+ usb_device_driver_bind(drivers[gui_synclist_get_sel_pos(&lists)]);
break;
}
else if (action == ACTION_REDRAW)
diff --git a/firmware/usbstack/drivers/device/usb_serial.c b/firmware/usbstack/drivers/device/usb_serial.c
index 578e9a1..c243821 100644
--- a/firmware/usbstack/drivers/device/usb_serial.c
+++ b/firmware/usbstack/drivers/device/usb_serial.c
@@ -25,7 +25,7 @@ static struct usb_dcd_controller_ops* ops;
struct usb_device_driver usb_serial_driver = {
.name = "serial",
.bind = usb_serial_driver_bind,
- .unbind = NULL,
+ .unbind = usb_serial_driver_unbind,
.request = usb_serial_driver_request,
.suspend = NULL,
.resume = NULL,
@@ -212,6 +212,11 @@ autoconf_fail:
return -EOPNOTSUPP;
}
+void usb_serial_driver_unbind(void) {
+
+ /* disable endpoints... */
+}
+
int usb_serial_driver_request(struct usb_ctrlrequest* request)
{
int ret = -EOPNOTSUPP;
diff --git a/firmware/usbstack/drivers/device/usb_serial.h b/firmware/usbstack/drivers/device/usb_serial.h
index 8b9d968..cc5d9c4 100644
--- a/firmware/usbstack/drivers/device/usb_serial.h
+++ b/firmware/usbstack/drivers/device/usb_serial.h
@@ -26,6 +26,7 @@
void usb_serial_driver_init(void);
int usb_serial_driver_bind(void* controller_ops);
+void usb_serial_driver_unbind(void);
int usb_serial_driver_request(struct usb_ctrlrequest* req);
void usb_serial_driver_speed(enum usb_device_speed speed);
diff --git a/firmware/usbstack/drivers/device/usb_storage.c b/firmware/usbstack/drivers/device/usb_storage.c
index 88129cd..9133c85 100644
--- a/firmware/usbstack/drivers/device/usb_storage.c
+++ b/firmware/usbstack/drivers/device/usb_storage.c
@@ -27,7 +27,7 @@ static struct usb_dcd_controller_ops* ops;
struct usb_device_driver usb_storage_driver = {
.name = "storage",
.bind = usb_storage_driver_bind,
- .unbind = NULL,
+ .unbind = usb_storage_driver_unbind,
.request = usb_storage_driver_request,
.suspend = NULL,
.resume = NULL,
@@ -194,6 +194,11 @@ autoconf_fail:
return -EOPNOTSUPP;
}
+void usb_storage_driver_unbind(void) {
+
+ /* disable endpoints... */
+}
+
int usb_storage_driver_request(struct usb_ctrlrequest* request)
{
int ret = -EOPNOTSUPP;
diff --git a/firmware/usbstack/drivers/device/usb_storage.h b/firmware/usbstack/drivers/device/usb_storage.h
index efd20fe..de53a06 100644
--- a/firmware/usbstack/drivers/device/usb_storage.h
+++ b/firmware/usbstack/drivers/device/usb_storage.h
@@ -26,6 +26,7 @@
void usb_storage_driver_init(void);
int usb_storage_driver_bind(void* controller_ops);
+void usb_storage_driver_unbind(void);
int usb_storage_driver_request(struct usb_ctrlrequest* req);
void usb_storage_driver_speed(enum usb_device_speed speed);