summaryrefslogtreecommitdiff
path: root/firmware/usbstack
diff options
context:
space:
mode:
authorFrank Gevaerts <frank@gevaerts.be>2008-02-26 18:02:26 +0000
committerFrank Gevaerts <frank@gevaerts.be>2008-02-26 18:02:26 +0000
commit97d7f39680ff973468c600d91ace1c7adf2773fd (patch)
treee4d5210ec4432103b4796491bd2c0dfcca24ea73 /firmware/usbstack
parenta36dbaa2c4c755c28269396f22b4b50dbfbb6e39 (diff)
downloadrockbox-97d7f39680ff973468c600d91ace1c7adf2773fd.zip
rockbox-97d7f39680ff973468c600d91ace1c7adf2773fd.tar.gz
rockbox-97d7f39680ff973468c600d91ace1c7adf2773fd.tar.bz2
rockbox-97d7f39680ff973468c600d91ace1c7adf2773fd.tar.xz
added support for USB port test modes, which are (a) required by the spec, and (b) needed for electrical (i.e. signal quality) testing
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16427 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/usbstack')
-rw-r--r--firmware/usbstack/usb_core.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/firmware/usbstack/usb_core.c b/firmware/usbstack/usb_core.c
index d7473e4..38797bc 100644
--- a/firmware/usbstack/usb_core.c
+++ b/firmware/usbstack/usb_core.c
@@ -571,11 +571,24 @@ static void usb_core_control_request_handler(struct usb_ctrlrequest* req)
case USB_REQ_SET_FEATURE:
logf("usb_core: SET_FEATURE");
- if (req->wValue)
- usb_drv_stall(req->wIndex & 0xf, true,(req->wIndex & 0x80) !=0);
- else
- usb_drv_stall(req->wIndex & 0xf, false,(req->wIndex & 0x80) !=0);
- ack_control(req);
+ switch(req->bRequestType & 0x0f){
+ case 0: /* Device */
+ if(req->wValue == 2) { /* TEST_MODE */
+ int mode=req->wIndex>>8;
+ ack_control(req);
+ usb_drv_set_test_mode(mode);
+ }
+ break;
+ case 2: /* Endpoint */
+ if (req->wValue)
+ usb_drv_stall(req->wIndex & 0xf, true,(req->wIndex & 0x80) !=0);
+ else
+ usb_drv_stall(req->wIndex & 0xf, false,(req->wIndex & 0x80) !=0);
+ ack_control(req);
+ break;
+ default:
+ break;
+ }
break;
case USB_REQ_SET_ADDRESS: {