From 97d7f39680ff973468c600d91ace1c7adf2773fd Mon Sep 17 00:00:00 2001 From: Frank Gevaerts Date: Tue, 26 Feb 2008 18:02:26 +0000 Subject: 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 --- firmware/usbstack/usb_core.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'firmware/usbstack') 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: { -- cgit v1.1