Share via

USB Audio Device Does Not Receive A Set Interface Request From Windows When Playback Starts

Anonymous
2024-12-13T20:29:26+00:00

I've been working on writing a custom USB audio speaker device which is currently working when I use a Linux OS with the device. For ease of use reasons, I tried testing the device on Windows 10 and have been unable to get any audio through the device on Windows. Windows device manager recognizes the device as a Sound, video and game controller device and an Audio inputs and outputs device, and shows no errors or warnings with starting the device. However, it is unable to produce any sound. Using a USB traffic analyzer software, I noticed that Windows is not sending a Set Interface request to the Audio Streaming endpoint to set the alternate setting to 1 and enable the endpoint (USB specification requires that audio devices have alternate setting 0 with no endpoint and alternate setting 1 with endpoints included) when playback starts. I also tried testing the sound from right clicking the sound icon on the taskbar, Sounds > Playback, select the device Properties > Advanced and clicking Test. This results in a pop up that says "Error! The format is not supported by this device". I've tried looking at other USB audio device descriptors to see what was different but found nothing and I've tried playing around with the sample rate, but it still doesn't work. Here is the USB descriptor that the device is using (As USB View sees it):

[Port3] : USB Composite Device

Is Port User Connectable: yes

Is Port Debug Capable: no

Companion Port Number: 0

Companion Hub Symbolic Link Name:

Protocols Supported:

USB 1.1: yes

USB 2.0: yes

USB 3.0: no

Device Power State: PowerDeviceD0

   ---===Device Information===---

English product name: "Riverdi Display Keypad"

ConnectionStatus:

Current Config Value: 0x01 - Device Bus Speed: Full (is not SuperSpeed or higher capable)

Device Address: 0x0F

Open Pipes: 4

      ===Device Descriptor===

bLength: 0x12

bDescriptorType: 0x01

bcdUSB: 0x0200

bDeviceClass: 0x00 - This is an Interface Class Defined Device

bDeviceSubClass: 0x00

bDeviceProtocol: 0x00

bMaxPacketSize0: 0x08 = (8) Bytes

idVendor: 0x04D8 = Microchip Technology Inc.

idProduct: 0x0055

bcdDevice: 0x0001

iManufacturer: 0x01

 English (United States)  "TMV Control System Inc."

iProduct: 0x02

 English (United States)  "Riverdi Display Keypad"

iSerialNumber: 0x00

bNumConfigurations: 0x01

      ---===Open Pipes===---

      ===Endpoint Descriptor===

bLength: 0x07

bDescriptorType: 0x05

bEndpointAddress: 0x81 - Direction: IN - EndpointID: 1

bmAttributes: 0x03 - Interrupt Transfer Type

wMaxPacketSize: 0x0008 = 0x08 bytes

bInterval: 0x01

      ===Endpoint Descriptor===

bLength: 0x07

bDescriptorType: 0x05

bEndpointAddress: 0x01 - Direction: OUT - EndpointID: 1

bmAttributes: 0x03 - Interrupt Transfer Type

wMaxPacketSize: 0x0008 = 0x08 bytes

bInterval: 0x01

      ===Endpoint Descriptor===

bLength: 0x07

bDescriptorType: 0x05

bEndpointAddress: 0x82 - Direction: IN - EndpointID: 2

bmAttributes: 0x03 - Interrupt Transfer Type

wMaxPacketSize: 0x0040 = 0x40 bytes

bInterval: 0x01

      ===Endpoint Descriptor===

bLength: 0x07

bDescriptorType: 0x05

bEndpointAddress: 0x02 - Direction: OUT - EndpointID: 2

bmAttributes: 0x03 - Interrupt Transfer Type

wMaxPacketSize: 0x0040 = 0x40 bytes

bInterval: 0x01

   ---===Full Configuration Descriptor===---

      ===Configuration Descriptor===

bLength: 0x09

bDescriptorType: 0x02

wTotalLength: 0x00AD - Validated

bNumInterfaces: 0x04

bConfigurationValue: 0x01

iConfiguration: 0x00

bmAttributes: 0xC0 - Self Powered

MaxPower: 0x32 = 100 mA

      ===Interface Descriptor===

bLength: 0x09

bDescriptorType: 0x04

bInterfaceNumber: 0x00

bAlternateSetting: 0x00

bNumEndpoints: 0x02

bInterfaceClass: 0x03 - HID Interface Class

bInterfaceSubClass: 0x01

bInterfaceProtocol: 0x01

iInterface: 0x00

      ===HID Descriptor===

bLength: 0x09

bDescriptorType: 0x21

bcdHID: 0x0111

bCountryCode: 0x00

bNumDescriptors: 0x01

bDescriptorType: 0x22 (Report Descriptor)

wDescriptorLength: 0x003F

      ===Endpoint Descriptor===

bLength: 0x07

bDescriptorType: 0x05

bEndpointAddress: 0x81 - Direction: IN - EndpointID: 1

bmAttributes: 0x03 - Interrupt Transfer Type

wMaxPacketSize: 0x0008 = 0x08 bytes

bInterval: 0x01

      ===Endpoint Descriptor===

bLength: 0x07

bDescriptorType: 0x05

bEndpointAddress: 0x01 - Direction: OUT - EndpointID: 1

bmAttributes: 0x03 - Interrupt Transfer Type

wMaxPacketSize: 0x0008 = 0x08 bytes

bInterval: 0x01

      ===Interface Descriptor===

bLength: 0x09

bDescriptorType: 0x04

bInterfaceNumber: 0x01

bAlternateSetting: 0x00

bNumEndpoints: 0x02

bInterfaceClass: 0x03 - HID Interface Class

bInterfaceSubClass: 0x00

bInterfaceProtocol: 0x00

iInterface: 0x00

      ===HID Descriptor===

bLength: 0x09

bDescriptorType: 0x21

bcdHID: 0x0111

bCountryCode: 0x00

bNumDescriptors: 0x01

bDescriptorType: 0x22 (Report Descriptor)

wDescriptorLength: 0x001D

      ===Endpoint Descriptor===

bLength: 0x07

bDescriptorType: 0x05

bEndpointAddress: 0x82 - Direction: IN - EndpointID: 2

bmAttributes: 0x03 - Interrupt Transfer Type

wMaxPacketSize: 0x0040 = 0x40 bytes

bInterval: 0x01

      ===Endpoint Descriptor<===

bLength: 0x07

bDescriptorType: 0x05

bEndpointAddress: 0x02 - Direction: OUT - EndpointID: 2

bmAttributes: 0x03 - Interrupt Transfer Type

wMaxPacketSize: 0x0040 = 0x40 bytes

bInterval: 0x01

      ===Interface Descriptor===

bLength: 0x09

bDescriptorType: 0x04

bInterfaceNumber: 0x02

bAlternateSetting: 0x00

bNumEndpoints: 0x00

bInterfaceClass: 0x01 -Audio Interface Class

bInterfaceSubClass: 0x01 - Audio Control Interface SubClass

bInterfaceProtocol: 0x00

iInterface: 0x00

      ===Audio Control Interface Header Descriptor===

bLength: 0x09

bDescriptorType: 0x24 (CS_INTERFACE)

bDescriptorSubtype: 0x01 (HEADER)

bcdADC: 0x0100

wTotalLength: 0x001E

bInCollection: 0x01

baInterfaceNr[1]: 0x03

      ===Audio Control Input Terminal Descriptor===

bLength: 0x0C

bDescriptorType: 0x24 (CS_INTERFACE)

bDescriptorSubtype: 0x02 (INPUT_TERMINAL)

bTerminalID: 0x01

wTerminalType: 0x0101 (USB streaming)

bAssocTerminal: 0x00

bNrChannels: 0x01

wChannelConfig: 0x0001

                             (Left Front (L))

iChannelNames: 0x00

iTerminal: 0x00

      ===Audio Control Output Terminal Descriptor===

bLength: 0x09

bDescriptorType: 0x24 (CS_INTERFACE)

bDescriptorSubtype: 0x03 (OUTPUT_TERMINAL)

bTerminalID: 0x02

wTerminalType: 0x0301 (Speaker)

bAssocTerminal: 0x00

bSourceID: 0x01

iTerminal: 0x00

      ===Interface Descriptor===

bLength: 0x09

bDescriptorType: 0x04

bInterfaceNumber: 0x03

bAlternateSetting: 0x00

bNumEndpoints: 0x00

bInterfaceClass: 0x01 - Audio Interface Class

bInterfaceSubClass: 0x02 - Audio Streaming Interface SubClass

bInterfaceProtocol: 0x00

iInterface: 0x00

      ===Interface Descriptor===

bLength: 0x09

bDescriptorType: 0x04

bInterfaceNumber: 0x03

bAlternateSetting: 0x01

bNumEndpoints: 0x02

bInterfaceClass: 0x01 -Audio Interface Class

bInterfaceSubClass: 0x02 - Audio Streaming Interface SubClass

bInterfaceProtocol: 0x00

iInterface: 0x00

      ===Audio Streaming Class Specific Interface Descriptor===

bLength: 0x07

bDescriptorType: 0x24 (CS_INTERFACE)

bDescriptorSubtype: 0x01 (AS_GENERAL)

bTerminalLink: 0x01

bDelay: 0x01

wFormatTag: 0x0001 (PCM)

      ===Audio Streaming Format Type Descriptor===

bLength: 0x0B

bDescriptorType: 0x24 (CS_INTERFACE)

bDescriptorSubtype: 0x02 (FORMAT_TYPE)

bFormatType: 0x01 (FORMAT_TYPE_I)

bNrChannels: 0x01

bSubframeSize: 0x02

bBitResolution: 0x10 (16)

bSamFreqType: 0x01 (Discrete)

tSamFreq[1]: 0x00C350 (50000 Hz)

      ===Endpoint Descriptor===

bLength: 0x09

bDescriptorType: 0x05

bEndpointAddress: 0x03 - Direction: OUT - EndpointID: 3

bmAttributes: 0x09 - Isochronous Transfer Type, Synchronization Type = Adaptive, Usage Type = Data Endpoint

wMaxPacketSize: 0x0180 = 0x180 bytes

wInterval: 0x0001

bSyncAddress: 0x83

      ===Audio Streaming Class Specific Audio Data Endpoint Descriptor===

bLength: 0x07

bDescriptorType: 0x25 (CS_ENDPOINT)

bDescriptorSubtype: 0x01 (EP_GENERAL)

bmAttributes: 0x01

                               (Sampling Frequency control)

bLockDelayUnits: 0x00 (Undefined)

wLockDelay: 0x0000

      ===Endpoint Descriptor===

bLength: 0x09

bDescriptorType: 0x05

bEndpointAddress: 0x83 - Direction: IN - EndpointID: 3

bmAttributes: 0x15 - Isochronous Transfer Type, Synchronization Type = Asynchronous, Usage Type = Feedback Endpoint

wMaxPacketSize: 0x0003 = 0x03 bytes

wInterval: 0x0001

bSyncAddress: 0x00

Windows for home | Windows 10 | Devices and drivers

Locked Question. This question was migrated from the Microsoft Support Community. You can vote on whether it's helpful, but you can't add comments or replies or follow the question.

0 comments No comments

2 answers

Sort by: Most helpful
  1. Anonymous
    2024-12-17T14:17:31+00:00

    Microsoft learn keeps automatically deleting my question as soon as I post it there. I think it's because there is no section / tag for USB devices.

    Was this answer helpful?

    0 comments No comments
  2. Anonymous
    2024-12-14T11:41:35+00:00

    Hello Bradley Vanderkooy and welcome to the Microsoft Community!

    Thanks for visiting Microsoft Community.  

    I wish I could handle your problem, however, it is more suitable for publishing on Microsoft Learn (English only), more users post these issues there, you can click on "Ask a question", there are experts who can provide more professional solutions in that place.  

    Here is a link to the forum where you can raise specific scenarios and share your idea to help solve the problem.  

    Sincerely hope that your question will be dealt with appropriately after contact the correct department. Thank you for your understanding! 

    We hope you find the above information helpful

    Kirito|Microsoft Community Support Specialist

    Was this answer helpful?

    0 comments No comments