diff options
| author | Frank Gevaerts <frank@gevaerts.be> | 2008-03-04 19:32:23 +0000 |
|---|---|---|
| committer | Frank Gevaerts <frank@gevaerts.be> | 2008-03-04 19:32:23 +0000 |
| commit | 1e6d550087d195032495e9648d3c305a1fd80044 (patch) | |
| tree | 06917f921dc4c9842ec5577389a5dd1cb7efa379 /firmware/usbstack/usb_core.c | |
| parent | c8d2a2458d34ece46e69bb910734074c1637b39a (diff) | |
| download | rockbox-1e6d550087d195032495e9648d3c305a1fd80044.zip rockbox-1e6d550087d195032495e9648d3c305a1fd80044.tar.gz rockbox-1e6d550087d195032495e9648d3c305a1fd80044.tar.bz2 rockbox-1e6d550087d195032495e9648d3c305a1fd80044.tar.xz | |
handle interface-specific control requests a bit more cleanly
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16519 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/usbstack/usb_core.c')
| -rw-r--r-- | firmware/usbstack/usb_core.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/firmware/usbstack/usb_core.c b/firmware/usbstack/usb_core.c index 883d3d6..96a5994 100644 --- a/firmware/usbstack/usb_core.c +++ b/firmware/usbstack/usb_core.c @@ -647,16 +647,28 @@ static void usb_core_control_request_handler(struct usb_ctrlrequest* req) break; } /* USB_REQ_GET_DESCRIPTOR */ - default: + default: { + bool handled=false; + if((req->bRequestType & 0x1f) == 1) /* Interface */ + { #ifdef USB_STORAGE - /* does usb_storage know this request? */ - if (!usb_storage_control_request(req)) + /* does usb_storage know this request? */ + if(req->wIndex == mass_storage_interface_descriptor.bInterfaceNumber) + { + handled = usb_storage_control_request(req); + } #endif #ifdef USB_SERIAL - /* does usb_serial know this request? */ - if (!usb_serial_control_request(req)) + /* does usb_serial know this request? */ + if(req->wIndex == serial_interface_descriptor.bInterfaceNumber) + { + handled = usb_serial_control_request(req); + } + #endif + } + if(!handled) { /* nope. flag error */ logf("usb bad req %d", req->bRequest); @@ -664,6 +676,7 @@ static void usb_core_control_request_handler(struct usb_ctrlrequest* req) ack_control(req); } break; + } } logf("control handled"); } |