aboutsummaryrefslogtreecommitdiff
path: root/lib/usb
diff options
context:
space:
mode:
authorGareth McMullin2011-12-28 21:04:36 +1300
committerGareth McMullin2011-12-28 21:05:41 +1300
commit0731bba610715fd385c0d97237b9c4d00178ab36 (patch)
tree1cb85edc56b2c4c8eeb83c05ec46481d9f669116 /lib/usb
parent651917aeb4b76afbb6c4a859e9a7aab4978b5008 (diff)
usb: Added support for Interface Association descriptors.
Diffstat (limited to 'lib/usb')
-rw-r--r--lib/usb/usb_standard.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/lib/usb/usb_standard.c b/lib/usb/usb_standard.c
index 1021fa8..455d3e7 100644
--- a/lib/usb/usb_standard.c
+++ b/lib/usb/usb_standard.c
@@ -41,10 +41,20 @@ static u16 build_config_descriptor(u8 index, u8 *buf, u16 len)
/* For each interface... */
for (i = 0; i < cfg->bNumInterfaces; i++) {
+ /* Interface Association Descriptor, if any */
+ if (cfg->interface[i].iface_assoc) {
+ const struct usb_iface_assoc_descriptor *assoc =
+ cfg->interface[i].iface_assoc;
+ memcpy(buf, assoc, count = MIN(len, assoc->bLength));
+ buf += count;
+ len -= count;
+ total += count;
+ totallen += assoc->bLength;
+ }
/* For each alternate setting... */
for (j = 0; j < cfg->interface[i].num_altsetting; j++) {
const struct usb_interface_descriptor *iface =
- &cfg->interface[i].altsetting[j];
+ &cfg->interface[i].altsetting[j];
/* Copy interface descriptor. */
memcpy(buf, iface, count = MIN(len, iface->bLength));
buf += count;