diff --git a/Core/Inc/usbd_descriptors.h b/Core/Inc/usbd_descriptors.h index 6ab5b36..8a023c8 100644 --- a/Core/Inc/usbd_descriptors.h +++ b/Core/Inc/usbd_descriptors.h @@ -21,8 +21,8 @@ UCHAR device_framework_fs[] = { /* Configuration descriptor size=9 */ 0x09, // bLength 0x02, // bDescriptorType - 0x6F, 0x00, // wTotalLength !! 9 + 8 + 9 + 9 + 8 + 8 + 8 + 9 + 14 + 17 + 12 + ... - 0x01, // bNumInterfaces + 0xA4, 0x00, // wTotalLength !! 9 + 8 + 9 + 85 + 9 + 16 + 6 + 8 + 7 + 7 ... + 0x02, // bNumInterfaces 0x01, // bConfigurationValue 0x00, // iConfiguration 0x80, // bmAttributes !! Bus powered @@ -92,11 +92,11 @@ UCHAR device_framework_fs[] = { 0x09, // bLength 0x24, // bDescriptorType !! CS_INTERFACE 0x0B, // bDescriptorSubType !! CLOCK_SELECTOR - 0x18, // bClockID !! - 0x02, // bNrInPins !! 2 input pins - 0x10, // baCSourceID(1) !! From Clock Source CID=0x10 - 0x11, // baCSourceID(2) !! From Clock Source CID=0x11 - 0x03, // bmControls !! + 0x18, // bClockID !! + 0x02, // bNrInPins !! 2 input pins + 0x10, // baCSourceID(1) !! From Clock Source CID=0x10 + 0x11, // baCSourceID(2) !! From Clock Source CID=0x11 + 0x03, // bmControls !! Windows UAC 2.0 driver does not support SET_CUR. 0x00, // iClockSelector /* Audio Control Feature Unit descriptor UID=0 size=14 */ @@ -114,7 +114,7 @@ UCHAR device_framework_fs[] = { 0x24, // bDescriptorType 0x02, // bDescriptorSubType 0x20, // bTerminalID !! TID=0x20 - 0x01, 0x01, // wTerminalType !! Should be an OUT EP + 0x01, 0x01, // wTerminalType !! USB Streaming - 0x0101 0x00, // bAssocTerminal !! 0x12, // bCSourceID !! From Clock Selector CID=0x12 0x02, // bNrChannels @@ -128,12 +128,68 @@ UCHAR device_framework_fs[] = { 0x24, // bDescriptorType 0x03, // bDescriptorSubType 0x21, // bTerminalID !! TID=0x21 - 0x01, 0x03, // wTerminalType !! Should be a speaker + 0x02, 0x03, // wTerminalType !! Headphones - 0x0302 0x00, // bAssocTerminal 0x30, // bSourceID !! From Feature Unit UID=0x30 0x18, // bCSourceID !! Associate with Clock selector at id=0x18 0x00, 0x00, // bmControls !! TBD 0x00, // iTerminal + + /* Audio Streaming Interface descriptor size=9 */ + 0x09, // bLength + 0x04, // bDescriptorType + 0x01, // bInterfaceNumber + 0x00, // bAlternateSetting + 0x02, // bNumEndpoints + 0x01, // bInterfaceClass + 0x02, // bInterfaceSubClass + 0x20, // bInterfaceProtocol + 0x00, // iInterface + + /* Audio Streaming Class Specific Interface descriptor size=16 */ + 0x10, // bLength + 0x24, // bDescriptorType + 0x01, // bDescriptorSubType + 0x20, // bTerminalLink !! Link to Input Terminal TID=0x20 + 0x00, // bmControls + 0x01, // bFormatType + 0x01, 0x00, 0x00, 0x00, // bmFormats + 0x02, // bNrChannels + 0x00, 0x00, 0x00, 0x00, // bmChannelConfig + 0x00, // iChannelNames + + /* Audio Streaming Format Type descriptor size=6 */ + 0x06, // bLength + 0x24, // bDescriptorType + 0x02, // bDescriptorSubType + 0x01, // bFormatType + 0x02, // bSubslotSize + 0x10, // bBitResolution !! - 16bits + + /* Audio Streaming Class Specific Data Endpoint descriptor size=8 */ + 0x08, // bLength + 0x25, // bDescriptorType + 0x01, // bDescriptorSubType + 0x00, // bmAttributes + 0x00, // bmControls + 0x00, // bLockDelayUnits + 0x00, 0x00, // wLockDelay + + /* Endpoint descriptor size=7 */ + 0x07, // bLength + 0x05, // bDescriptorType + 0x01, // bEndpointAddress + 0x05, // bmAttributes + 0x00, 0x01, // wMaxPacketSize + 0x04, // bInterval + + /* Endpoint descriptor size=7 */ + 0x07, // bLength + 0x05, // bDescriptorType + 0x81, // bEndpointAddress + 0x11, // bmAttributes + 0x00, 0x01, // wMaxPacketSize + 0x04, // bInterval }; UCHAR device_framework_hs[] = {