|
@@ -200,21 +200,23 @@ int usb_desc_endpoint(const USBDescEndpoint *ep, uint8_t *dest, size_t len)
|
|
{
|
|
{
|
|
uint8_t bLength = ep->is_audio ? 0x09 : 0x07;
|
|
uint8_t bLength = ep->is_audio ? 0x09 : 0x07;
|
|
uint8_t extralen = ep->extra ? ep->extra[0] : 0;
|
|
uint8_t extralen = ep->extra ? ep->extra[0] : 0;
|
|
|
|
+ USBDescriptor *d = (void *)dest;
|
|
|
|
|
|
if (len < bLength + extralen) {
|
|
if (len < bLength + extralen) {
|
|
return -1;
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
|
|
- dest[0x00] = bLength;
|
|
|
|
- dest[0x01] = USB_DT_ENDPOINT;
|
|
|
|
- dest[0x02] = ep->bEndpointAddress;
|
|
|
|
- dest[0x03] = ep->bmAttributes;
|
|
|
|
- dest[0x04] = usb_lo(ep->wMaxPacketSize);
|
|
|
|
- dest[0x05] = usb_hi(ep->wMaxPacketSize);
|
|
|
|
- dest[0x06] = ep->bInterval;
|
|
|
|
|
|
+ d->bLength = bLength;
|
|
|
|
+ d->bDescriptorType = USB_DT_ENDPOINT;
|
|
|
|
+
|
|
|
|
+ d->u.endpoint.bEndpointAddress = ep->bEndpointAddress;
|
|
|
|
+ d->u.endpoint.bmAttributes = ep->bmAttributes;
|
|
|
|
+ d->u.endpoint.wMaxPacketSize_lo = usb_lo(ep->wMaxPacketSize);
|
|
|
|
+ d->u.endpoint.wMaxPacketSize_hi = usb_hi(ep->wMaxPacketSize);
|
|
|
|
+ d->u.endpoint.bInterval = ep->bInterval;
|
|
if (ep->is_audio) {
|
|
if (ep->is_audio) {
|
|
- dest[0x07] = ep->bRefresh;
|
|
|
|
- dest[0x08] = ep->bSynchAddress;
|
|
|
|
|
|
+ d->u.endpoint.bRefresh = ep->bRefresh;
|
|
|
|
+ d->u.endpoint.bSynchAddress = ep->bSynchAddress;
|
|
}
|
|
}
|
|
if (ep->extra) {
|
|
if (ep->extra) {
|
|
memcpy(dest + bLength, ep->extra, extralen);
|
|
memcpy(dest + bLength, ep->extra, extralen);
|