diff options
author | Frank Gevaerts <frank@gevaerts.be> | 2013-11-26 22:03:20 +0100 |
---|---|---|
committer | Frank Gevaerts <frank@gevaerts.be> | 2014-02-09 20:39:18 +0100 |
commit | bde5394f5a4cc40478f28911cdcde6cec85f1b6d (patch) | |
tree | 751499deb477b44e0ceaa389e6ab57bbeb40cd34 | |
parent | f723ca58055a6acc7c4c2e8eff8709bd8fdc32b1 (diff) | |
download | rockbox-bde5394f5a4cc40478f28911cdcde6cec85f1b6d.tar.gz rockbox-bde5394f5a4cc40478f28911cdcde6cec85f1b6d.zip |
Return a valid USB string descriptor for index 0xEE.
Windows will try to retrieve such a descriptor on first connect.
If the device returns STALL or a regular string descriptor (i.e.
not one that follows the Microsoft OS Descriptor spec), things
will continue normally.
Unfortunately some of our low-level USB drivers have issues with
STALL so any other valid descriptor is the next best solution.
Change-Id: I59eb09eea157e4e14bec0197a898be378a5559f2
Reviewed-on: http://gerrit.rockbox.org/680
Reviewed-by: Frank Gevaerts <frank@gevaerts.be>
Tested: Frank Gevaerts <frank@gevaerts.be>
-rw-r--r-- | firmware/usbstack/usb_core.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/firmware/usbstack/usb_core.c b/firmware/usbstack/usb_core.c index e4ecc90e63..dc69628c13 100644 --- a/firmware/usbstack/usb_core.c +++ b/firmware/usbstack/usb_core.c | |||
@@ -643,6 +643,13 @@ static void request_handler_device_get_descriptor(struct usb_ctrlrequest* req) | |||
643 | size = usb_strings[index]->bLength; | 643 | size = usb_strings[index]->bLength; |
644 | ptr = usb_strings[index]; | 644 | ptr = usb_strings[index]; |
645 | } | 645 | } |
646 | else if(index == 0xee) { | ||
647 | // We don't have a real OS descriptor, and we don't handle | ||
648 | // STALL correctly on some devices, so we return any valid | ||
649 | // string (we arbitrarily pick the manufacturer name) | ||
650 | size = usb_string_iManufacturer.bLength; | ||
651 | ptr = &usb_string_iManufacturer; | ||
652 | } | ||
646 | else { | 653 | else { |
647 | logf("bad string id %d", index); | 654 | logf("bad string id %d", index); |
648 | usb_drv_stall(EP_CONTROL, true, true); | 655 | usb_drv_stall(EP_CONTROL, true, true); |