none
Speed Requirements for USB Audio Device with HID Controls (UAC1 Basic Audio Device) RRS feed

  • Question

  • I am working on a device that enumerates perfectly using Windows 10 inbox class drivers in the following configuration:

    High-Speed USB Composite Device
    -> USB Video Class (UVC 1.1) Camera
    -> USB Audio Class (UAC 1) Speaker/Microphone (Without HID Controls)

    The issue occurs when I add a HID interface and endpoint to the UAC device, in compliance with the UAC1 Basic Audio Device specification (reference here).  Once added, the audio portion of my device is no longer recognized by Windows 10 and I get the following error in Device Manager:

    This device cannot start (Code 10)

    The I/O device is configured incorrectly or the configuration parameters to the driver are incorrect.

    Some additional data points:
    - This device functions as expected on other operating systems with the HID interface added.  This leads me to believe that something Windows-specific is going wrong.
    - Though the UAC device fails to enumerate on Win10, the UVC device still works as expected.
    - A reference UAC1 Basic Audio Device with no camera works as expected, although it enumerates at USB Full-Speed; my device requires USB High-Speed to accommodate the high-resolution video.

    I have reviewed my device against the reference but the only real differences appear to be:
    1- My device uses Interface Association Descriptors to describe each component (as required by the USB Video Class specification)
    2- My device runs at USB High-Speed while the reference UAC-only device uses USB Full-Speed

    My question is - does usbaudio.sys have some hidden speed requirement when adding HID controls to a UAC device?  If so, how is this design intended to co-exist with UVC devices that require High-Speed operation?  Is there anything else going on here that would prevent my UAC device from enumerating once a class-compliant HID interface/endpoint is added?

    Thanks in advance for any clarity you can provide!  Of course, if I have posted this thread in the wrong forum, please move as appropriate.

    Wednesday, February 20, 2019 12:01 AM

Answers

  • Your IAD for the audio section has bInterfaceCount = 4, but there are only three interfaces (2, 3, and 4).

    Tim Roberts | Driver MVP Emeritus | Providenza & Boekelheide, Inc.

    Friday, February 22, 2019 1:29 AM

All replies

  • Can you post your descriptors from usbview or usbtreeview?  There are a lot of ways to get the descriptors wrong.


    Tim Roberts | Driver MVP Emeritus | Providenza & Boekelheide, Inc.

    Thursday, February 21, 2019 8:11 AM
  • Hi Tim,

    Thanks for your reply!  I have been poring over these descriptors bit-by-bit and found no issues, huge kudos if you can find something I missed :)

    <Trimmed>

    I can grab the USBView capture of the UAC-only device that works as well, if that helps!

    Best Regards,

    Chris


    Thursday, February 21, 2019 5:35 PM
  • Your IAD for the audio section has bInterfaceCount = 4, but there are only three interfaces (2, 3, and 4).

    Tim Roberts | Driver MVP Emeritus | Providenza &amp; Boekelheide, Inc.

    Friday, February 22, 2019 1:29 AM
  • Your IAD for the audio section has bInterfaceCount = 4, but there are only three interfaces (2, 3, and 4).

    Tim Roberts | Driver MVP Emeritus | Providenza &amp; Boekelheide, Inc.

    Wow, all of the examples I have seen are either a lone UAC device + HID or a UVC + UAC with no HID.  The lone UAC device doesn't use an IAD, so I went with the idea that the HID device was supposed to be part of the UAC collection (i.e. bNumInterfaces from the Configuration Descriptor of a UAC Basic Audio Device == bNumInterfaces of the IAD in a UVC/UAC composite device).  I really appreciate the extra set of eyes, been looking at this for quite a while and kept glossing over that part!
    Friday, February 22, 2019 4:37 AM