diff options
| author | Christian Gmeiner <christian.gmeiner@gmail.com> | 2007-08-29 11:55:23 +0000 |
|---|---|---|
| committer | Christian Gmeiner <christian.gmeiner@gmail.com> | 2007-08-29 11:55:23 +0000 |
| commit | 57c2a5fa5a8b57a094e6e89aafa1702b76218da7 (patch) | |
| tree | 771b8223b85c279c88eaf7d9efe06686a14f63b3 | |
| parent | 17f2dd5c13cda7447da74227099b852ee55e1dd6 (diff) | |
| download | rockbox-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.c | 11 | ||||
| -rw-r--r-- | firmware/usbstack/drivers/device/usb_serial.c | 7 | ||||
| -rw-r--r-- | firmware/usbstack/drivers/device/usb_serial.h | 1 | ||||
| -rw-r--r-- | firmware/usbstack/drivers/device/usb_storage.c | 7 | ||||
| -rw-r--r-- | firmware/usbstack/drivers/device/usb_storage.h | 1 |
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); |