none
USB Select Configuration Request RRS feed

  • Question

  • I am looking into processing the Select Configuration URB of a  audio USB device. The USB device has Audio Control Interface Header Descriptor, Audio Control Input terminal descriptors as part of its Interface descriptors. Total there are four interfaces. I am getting the Select Configuration Request after the Configuration Descriptor request control transfer request.  I understnd that the select configuration URB is represented by the _URB_SELECT_CONFIGURATION structure.

    struct _URB_SELECT_CONFIGURATION {
      struct _URB_HEADER            Hdr;
      PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor;
      USBD_CONFIGURATION_HANDLE     ConfigurationHandle;
      USBD_INTERFACE_INFORMATION    Interface;
    };

    My question is about the USBD_INTERFACE_INFORMATION structure member. I understand that it is an array representing each interface of teh device. 

    typedef struct _USBD_INTERFACE_INFORMATION {
      USHORT                Length;
      UCHAR                 InterfaceNumber;
      UCHAR                 AlternateSetting;
      UCHAR                 Class;
      UCHAR                 SubClass;
      UCHAR                 Protocol;
      UCHAR                 Reserved;
      USBD_INTERFACE_HANDLE InterfaceHandle;
      ULONG                 NumberOfPipes;
      USBD_PIPE_INFORMATION Pipes[1];
    } USBD_INTERFACE_INFORMATION, *PUSBD_INTERFACE_INFORMATION;

    I understand that the structure contains information like Interface Number and Alternate setting. For iterating this structure array(_USBD_INTERFACE_INFORMATION) do I need to consider the Audio control descriptors etc of the device? Is it just

    that this array contains just interface information and not the other audio descriptors? ie. Is it that the array contains only inoforamtion about the interface/end points minums the audio descriptors? Hope my question makes sense.


    Sunday, April 7, 2019 2:23 PM

All replies

  • How are you going to be "processing" the SELECT_CONFIGURATION request?  Are you creating a device, or are you trying to write a filter driver underneath usbaudio.sys for some reason?  What reason?

    The information in the SELECT_CONFIGURATION request doesn't have anything to do with the class-specific audio control descriptors.  It's all created from scratch.  There often isn't a pipe in the audio control interface, so if you have one audio control interface and three audio streaming interfaces each with one pipe, the URB data is going to look like:

        URB_SELECT_CONFIGURATION
            USBD_INTERFACE_INFORMATION
            USBD_INTERFACE_INFORMATION
                USBD_PIPE_INFORMATION

            USBD_INTERFACE_INFORMATION
                USBD_PIPE_INFORMATION

            USBD_INTERFACE_INFORMATION
                USBD_PIPE_INFORMATION


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

    Monday, April 8, 2019 6:09 AM