USB Audio Descriptor - multiple devices, one usb connection

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

USB Audio Descriptor - multiple devices, one usb connection

2,382 Views
mrecoskie
Contributor III

Hi,

I am attempting to manually create a USB descriptor for two devices behind a single USB Audio Class 2.0 connection.  Does anyone know whether or not the Terminals, Clock and Unit should all be unique IDs when utilizing multiple Interface Association Descriptors (IAD)?  I would assume so.  Does anyone have a working example of this type of descriptor?  

Below is my attempt however the linux host has complaints.  Is there someone with experience in this area to review the descriptor below?  Thank you.

Mark

 

Bus 001 Device 029: ID 1fc9:00a4 NXP Semiconductors 

Device Descriptor:

  bLength                18

  bDescriptorType         1

  bcdUSB               2.00

  bDeviceClass          239 Miscellaneous Device

  bDeviceSubClass         2 

  bDeviceProtocol         1 Interface Association

  bMaxPacketSize0        64

  idVendor           0x1fc9 NXP Semiconductors

  idProduct          0x00a4 

  bcdDevice            1.01

  iManufacturer           1 

  iProduct                2 

  iSerial                 0 

  bNumConfigurations      1

  Configuration Descriptor:

    bLength                 9

    bDescriptorType         2

    wTotalLength       0x01f3

    bNumInterfaces          6

    bConfigurationValue     1

    iConfiguration          0 

    bmAttributes         0xc0

      Self Powered

    MaxPower              500mA

    Interface Association:

      bLength                 8

      bDescriptorType        11

      bFirstInterface         0

      bInterfaceCount         3

      bFunctionClass          1 Audio

      bFunctionSubClass       0 

      bFunctionProtocol      32 

      iFunction               0 

    Interface Descriptor:

      bLength                 9

      bDescriptorType         4

      bInterfaceNumber        0

      bAlternateSetting       0

      bNumEndpoints           0

      bInterfaceClass         1 Audio

      bInterfaceSubClass      1 Control Device

      bInterfaceProtocol     32 

      iInterface              0 

      AudioControl Interface Descriptor:

        bLength                 9

        bDescriptorType        36

        bDescriptorSubtype      1 (HEADER)

        bcdADC               2.00

        bCategory               4

        wTotalLength       0x006f

        bmControls           0x00

      AudioControl Interface Descriptor:

        bLength                 8

        bDescriptorType        36

        bDescriptorSubtype     10 (CLOCK_SOURCE)

        bClockID               16

        bmAttributes            3 Internal programmable clock 

        bmControls           0x07

          Clock Frequency Control (read/write)

          Clock Validity Control (read-only)

        bAssocTerminal          0

        iClockSource            0 

      AudioControl Interface Descriptor:

        bLength                17

        bDescriptorType        36

        bDescriptorSubtype      2 (INPUT_TERMINAL)

        bTerminalID             1

        wTerminalType      0x0201 Microphone

        bAssocTerminal          0

        bCSourceID             16

        bNrChannels             2

        bmChannelConfig    0x00000003

          Front Left (FL)

          Front Right (FR)

        iChannelNames           0 

        bmControls         0x0000

        iTerminal               0 

      AudioControl Interface Descriptor:

        bLength                18

        bDescriptorType        36

        bDescriptorSubtype      6 (FEATURE_UNIT)

        bUnitID                 2

        bSourceID               1

        bmaControls(0)     0x00000000

        bmaControls(1)     0x00000000

        bmaControls(2)     0x00000000

        iFeature                0 

      AudioControl Interface Descriptor:

        bLength                12

        bDescriptorType        36

        bDescriptorSubtype      3 (OUTPUT_TERMINAL)

        bTerminalID             3

        wTerminalType      0x0101 USB Streaming

        bAssocTerminal          0

        bSourceID               2

        bCSourceID             16

        bmControls         0x0000

        iTerminal               0 

      AudioControl Interface Descriptor:

        bLength                17

        bDescriptorType        36

        bDescriptorSubtype      2 (INPUT_TERMINAL)

        bTerminalID             4

        wTerminalType      0x0101 USB Streaming

        bAssocTerminal          0

        bCSourceID             16

        bNrChannels             2

        bmChannelConfig    0x00000003

          Front Left (FL)

          Front Right (FR)

        iChannelNames           0 

        bmControls         0x0000

        iTerminal               0 

      AudioControl Interface Descriptor:

        bLength                18

        bDescriptorType        36

        bDescriptorSubtype      6 (FEATURE_UNIT)

        bUnitID                 5

        bSourceID               4

        bmaControls(0)     0x0000000f

          Mute Control (read/write)

          Volume Control (read/write)

        bmaControls(1)     0x00000000

        bmaControls(2)     0x00000000

        iFeature                0 

      AudioControl Interface Descriptor:

        bLength                12

        bDescriptorType        36

        bDescriptorSubtype      3 (OUTPUT_TERMINAL)

        bTerminalID             6

        wTerminalType      0x0301 Speaker

        bAssocTerminal          0

        bSourceID               5

        bCSourceID             16

        bmControls         0x0000

        iTerminal               0 

    Interface Descriptor:

      bLength                 9

      bDescriptorType         4

      bInterfaceNumber        1

      bAlternateSetting       0

      bNumEndpoints           0

      bInterfaceClass         1 Audio

      bInterfaceSubClass      2 Streaming

      bInterfaceProtocol     32 

      iInterface              0 

    Interface Descriptor:

      bLength                 9

      bDescriptorType         4

      bInterfaceNumber        1

      bAlternateSetting       1

      bNumEndpoints           1

      bInterfaceClass         1 Audio

      bInterfaceSubClass      2 Streaming

      bInterfaceProtocol     32 

      iInterface              0 

      AudioStreaming Interface Descriptor:

        bLength                16

        bDescriptorType        36

        bDescriptorSubtype      1 (AS_GENERAL)

        bTerminalLink           3

        bmControls           0x00

        bFormatType             1

        bmFormats          0x00000001

          PCM

        bNrChannels             2

        bmChannelConfig    0x00000003

          Front Left (FL)

          Front Right (FR)

        iChannelNames           0 

      AudioStreaming Interface Descriptor:

        bLength                 6

        bDescriptorType        36

        bDescriptorSubtype      2 (FORMAT_TYPE)

        bFormatType             1 (FORMAT_TYPE_I)

        bSubslotSize            2

        bBitResolution         16

      Endpoint Descriptor:

        bLength                 7

        bDescriptorType         5

        bEndpointAddress     0x83  EP 3 IN

        bmAttributes           13

          Transfer Type            Isochronous

          Synch Type               Synchronous

          Usage Type               Data

        wMaxPacketSize     0x00c4  1x 196 bytes

        bInterval               4

        AudioStreaming Endpoint Descriptor:

          bLength                 8

          bDescriptorType        37

          bDescriptorSubtype      1 (EP_GENERAL)

          bmAttributes         0x00

          bmControls           0x00

          bLockDelayUnits         0 Undefined

          wLockDelay         0x0000

    Interface Descriptor:

      bLength                 9

      bDescriptorType         4

      bInterfaceNumber        2

      bAlternateSetting       0

      bNumEndpoints           0

      bInterfaceClass         1 Audio

      bInterfaceSubClass      2 Streaming

      bInterfaceProtocol     32 

      iInterface              0 

    Interface Descriptor:

      bLength                 9

      bDescriptorType         4

      bInterfaceNumber        2

      bAlternateSetting       1

      bNumEndpoints           2

      bInterfaceClass         1 Audio

      bInterfaceSubClass      2 Streaming

      bInterfaceProtocol     32 

      iInterface              0 

      AudioStreaming Interface Descriptor:

        bLength                16

        bDescriptorType        36

        bDescriptorSubtype      1 (AS_GENERAL)

        bTerminalLink           4

        bmControls           0x00

        bFormatType             1

        bmFormats          0x00000001

          PCM

        bNrChannels             2

        bmChannelConfig    0x00000003

          Front Left (FL)

          Front Right (FR)

        iChannelNames           0 

      AudioStreaming Interface Descriptor:

        bLength                 6

        bDescriptorType        36

        bDescriptorSubtype      2 (FORMAT_TYPE)

        bFormatType             1 (FORMAT_TYPE_I)

        bSubslotSize            2

        bBitResolution         16

      Endpoint Descriptor:

        bLength                 7

        bDescriptorType         5

        bEndpointAddress     0x02  EP 2 OUT

        bmAttributes            5

          Transfer Type            Isochronous

          Synch Type               Asynchronous

          Usage Type               Data

        wMaxPacketSize     0x001c  1x 28 bytes

        bInterval               1

        AudioStreaming Endpoint Descriptor:

          bLength                 8

          bDescriptorType        37

          bDescriptorSubtype      1 (EP_GENERAL)

          bmAttributes         0x00

          bmControls           0x00

          bLockDelayUnits         0 Undefined

          wLockDelay         0x0000

      Endpoint Descriptor:

        bLength                 7

        bDescriptorType         5

        bEndpointAddress     0x82  EP 2 IN

        bmAttributes           17

          Transfer Type            Isochronous

          Synch Type               None

          Usage Type               Feedback

        wMaxPacketSize     0x0004  1x 4 bytes

        bInterval               4

    Interface Association:

      bLength                 8

      bDescriptorType        11

      bFirstInterface         3

      bInterfaceCount         3

      bFunctionClass          1 Audio

      bFunctionSubClass       0 

      bFunctionProtocol      32 

      iFunction               0 

    Interface Descriptor:

      bLength                 9

      bDescriptorType         4

      bInterfaceNumber        3

      bAlternateSetting       0

      bNumEndpoints           0

      bInterfaceClass         1 Audio

      bInterfaceSubClass      1 Control Device

      bInterfaceProtocol     32 

      iInterface              0 

      AudioControl Interface Descriptor:

        bLength                 9

        bDescriptorType        36

        bDescriptorSubtype      1 (HEADER)

        bcdADC               2.00

        bCategory               4

        wTotalLength       0x006f

        bmControls           0x00

      AudioControl Interface Descriptor:

        bLength                 8

        bDescriptorType        36

        bDescriptorSubtype     10 (CLOCK_SOURCE)

        bClockID               17

        bmAttributes            3 Internal programmable clock 

        bmControls           0x07

          Clock Frequency Control (read/write)

          Clock Validity Control (read-only)

        bAssocTerminal          0

        iClockSource            0 

      AudioControl Interface Descriptor:

        bLength                17

        bDescriptorType        36

        bDescriptorSubtype      2 (INPUT_TERMINAL)

        bTerminalID             7

        wTerminalType      0x0201 Microphone

        bAssocTerminal          0

        bCSourceID             17

        bNrChannels             2

        bmChannelConfig    0x00000003

          Front Left (FL)

          Front Right (FR)

        iChannelNames           0 

        bmControls         0x0000

        iTerminal               0 

      AudioControl Interface Descriptor:

        bLength                18

        bDescriptorType        36

        bDescriptorSubtype      6 (FEATURE_UNIT)

        bUnitID                 8

        bSourceID               7

        bmaControls(0)     0x0000000f

          Mute Control (read/write)

          Volume Control (read/write)

        bmaControls(1)     0x00000000

        bmaControls(2)     0x00000000

        iFeature                0 

      AudioControl Interface Descriptor:

        bLength                12

        bDescriptorType        36

        bDescriptorSubtype      3 (OUTPUT_TERMINAL)

        bTerminalID             9

        wTerminalType      0x0101 USB Streaming

        bAssocTerminal          0

        bSourceID               8

        bCSourceID             17

        bmControls         0x0000

        iTerminal               0 

      AudioControl Interface Descriptor:

        bLength                17

        bDescriptorType        36

        bDescriptorSubtype      2 (INPUT_TERMINAL)

        bTerminalID            10

        wTerminalType      0x0101 USB Streaming

        bAssocTerminal          0

        bCSourceID             17

        bNrChannels             2

        bmChannelConfig    0x00000003

          Front Left (FL)

          Front Right (FR)

        iChannelNames           0 

        bmControls         0x0000

        iTerminal               0 

      AudioControl Interface Descriptor:

        bLength                18

        bDescriptorType        36

        bDescriptorSubtype      6 (FEATURE_UNIT)

        bUnitID                11

        bSourceID              10

        bmaControls(0)     0x0000000f

          Mute Control (read/write)

          Volume Control (read/write)

        bmaControls(1)     0x00000000

        bmaControls(2)     0x00000000

        iFeature                0 

      AudioControl Interface Descriptor:

        bLength                12

        bDescriptorType        36

        bDescriptorSubtype      3 (OUTPUT_TERMINAL)

        bTerminalID            12

        wTerminalType      0x0301 Speaker

        bAssocTerminal          0

        bSourceID              11

        bCSourceID             17

        bmControls         0x0000

        iTerminal               0 

    Interface Descriptor:

      bLength                 9

      bDescriptorType         4

      bInterfaceNumber        4

      bAlternateSetting       0

      bNumEndpoints           0

      bInterfaceClass         1 Audio

      bInterfaceSubClass      2 Streaming

      bInterfaceProtocol     32 

      iInterface              0 

    Interface Descriptor:

      bLength                 9

      bDescriptorType         4

      bInterfaceNumber        4

      bAlternateSetting       1

      bNumEndpoints           1

      bInterfaceClass         1 Audio

      bInterfaceSubClass      2 Streaming

      bInterfaceProtocol     32 

      iInterface              0 

      AudioStreaming Interface Descriptor:

        bLength                16

        bDescriptorType        36

        bDescriptorSubtype      1 (AS_GENERAL)

        bTerminalLink           9

        bmControls           0x00

        bFormatType             1

        bmFormats          0x00000001

          PCM

        bNrChannels             2

        bmChannelConfig    0x00000003

          Front Left (FL)

          Front Right (FR)

        iChannelNames           0 

      AudioStreaming Interface Descriptor:

        bLength                 6

        bDescriptorType        36

        bDescriptorSubtype      2 (FORMAT_TYPE)

        bFormatType             1 (FORMAT_TYPE_I)

        bSubslotSize            2

        bBitResolution         16

      Endpoint Descriptor:

        bLength                 7

        bDescriptorType         5

        bEndpointAddress     0x85  EP 5 IN

        bmAttributes           13

          Transfer Type            Isochronous

          Synch Type               Synchronous

          Usage Type               Data

        wMaxPacketSize     0x00c0  1x 192 bytes

        bInterval               1

        AudioStreaming Endpoint Descriptor:

          bLength                 8

          bDescriptorType        37

          bDescriptorSubtype      1 (EP_GENERAL)

          bmAttributes         0x00

          bmControls           0x00

          bLockDelayUnits         0 Undefined

          wLockDelay         0x0000

    Interface Descriptor:

      bLength                 9

      bDescriptorType         4

      bInterfaceNumber        5

      bAlternateSetting       0

      bNumEndpoints           0

      bInterfaceClass         1 Audio

      bInterfaceSubClass      2 Streaming

      bInterfaceProtocol     32 

      iInterface              0 

    Interface Descriptor:

      bLength                 9

      bDescriptorType         4

      bInterfaceNumber        5

      bAlternateSetting       1

      bNumEndpoints           2

      bInterfaceClass         1 Audio

      bInterfaceSubClass      2 Streaming

      bInterfaceProtocol     32 

      iInterface              0 

      AudioStreaming Interface Descriptor:

        bLength                16

        bDescriptorType        36

        bDescriptorSubtype      1 (AS_GENERAL)

        bTerminalLink          10

        bmControls           0x00

        bFormatType             1

        bmFormats          0x00000001

          PCM

        bNrChannels             2

        bmChannelConfig    0x00000003

          Front Left (FL)

          Front Right (FR)

        iChannelNames           0 

      AudioStreaming Interface Descriptor:

        bLength                 6

        bDescriptorType        36

        bDescriptorSubtype      2 (FORMAT_TYPE)

        bFormatType             1 (FORMAT_TYPE_I)

        bSubslotSize            2

        bBitResolution         16

      Endpoint Descriptor:

        bLength                 7

        bDescriptorType         5

        bEndpointAddress     0x04  EP 4 OUT

        bmAttributes            5

          Transfer Type            Isochronous

          Synch Type               Asynchronous

          Usage Type               Data

        wMaxPacketSize     0x00c4  1x 196 bytes

        bInterval               1

        AudioStreaming Endpoint Descriptor:

          bLength                 8

          bDescriptorType        37

          bDescriptorSubtype      1 (EP_GENERAL)

          bmAttributes         0x00

          bmControls           0x00

          bLockDelayUnits         0 Undefined

          wLockDelay         0x0000

      Endpoint Descriptor:

        bLength                 7

        bDescriptorType         5

        bEndpointAddress     0x84  EP 4 IN

        bmAttributes           17

          Transfer Type            Isochronous

          Synch Type               None

          Usage Type               Feedback

        wMaxPacketSize     0x0008  1x 8 bytes

        bInterval              16

 

 

Labels (1)
0 Kudos
Reply
5 Replies

2,355 Views
mrecoskie
Contributor III

Below are some of the messages Linux is reporting.  I am digging through the kernel code to try to decode them.

 

[233102.781298] usb 1-7: New USB device found, idVendor=1fc9, idProduct=00a4, bcdDevice= 1.01

[233102.781299] usb 1-7: New USB device strings: Mfr=1, Product=2, SerialNumber=0

[233108.354021] usb 1-7: parse_audio_format_rates_v2v3(): unable to retrieve number of sample rates (clock 16)

[233113.474359] usb 1-7: parse_audio_format_rates_v2v3(): unable to retrieve number of sample rates (clock 16)

[233118.593224] usb 1-7: cannot get ctl value: req = 0x83, wValue = 0x200, wIndex = 0x200, type = 4

[233118.593228] usb 1-7: 2:0: cannot get min/max values for control 2 (id 2)

[233123.714658] usb 1-7: cannot get ctl value: req = 0x83, wValue = 0x200, wIndex = 0x500, type = 4

[233123.714665] usb 1-7: 5:0: cannot get min/max values for control 2 (id 5)

[233123.715896] usb 1-7: 4:1 : bogus bTerminalLink 9

[233124.117917] usb 1-7: 5:1 : bogus bTerminalLink 10

[233129.344734] usb 1-7: cannot get ctl value: req = 0x83, wValue = 0x200, wIndex = 0x803, type = 4

[233129.344739] usb 1-7: 8:3: cannot get min/max values for control 2 (id 8)

[233134.464652] usb 1-7: cannot get ctl value: req = 0x83, wValue = 0x200, wIndex = 0xb03, type = 4

[233134.464657] usb 1-7: 11:3: cannot get min/max values for control 2 (id 11)

[233139.584766] usb 1-7: cannot get ctl value: req = 0x83, wValue = 0x200, wIndex = 0x500, type = 4

[233139.584770] usb 1-7: 5:0: cannot get min/max values for control 2 (id 5)

[233144.704744] usb 1-7: cannot get ctl value: req = 0x83, wValue = 0x200, wIndex = 0x500, type = 4

[233144.704749] usb 1-7: 5:0: cannot get min/max values for control 2 (id 5)

[233149.825169] usb 1-7: cannot get ctl value: req = 0x83, wValue = 0x200, wIndex = 0x500, type = 4

[233149.825173] usb 1-7: 5:0: cannot get min/max values for control 2 (id 5)

[233154.945395] usb 1-7: cannot get ctl value: req = 0x83, wValue = 0x200, wIndex = 0x500, type = 4

[233154.945400] usb 1-7: 5:0: cannot get min/max values for control 2 (id 5)

[233160.065816] usb 1-7: cannot get ctl value: req = 0x83, wValue = 0x200, wIndex = 0x500, type = 4

[233160.065821] usb 1-7: 5:0: cannot get min/max values for control 2 (id 5)

[233165.185114] usb 1-7: cannot get ctl value: req = 0x83, wValue = 0x200, wIndex = 0x500, type = 4

[233165.185119] usb 1-7: 5:0: cannot get min/max values for control 2 (id 5)

[233165.680270] usb 1-7: cannot get ctl value: req = 0x81, wValue = 0x200, wIndex = 0x500, type = 4

[233165.680667] usb 1-7: cannot get ctl value: req = 0x81, wValue = 0x200, wIndex = 0x500, type = 4

[233165.681407] usb 1-7: cannot get ctl value: req = 0x81, wValue = 0x200, wIndex = 0x500, type = 4

[233165.682086] usb 1-7: cannot get ctl value: req = 0x81, wValue = 0x100, wIndex = 0x500, type = 1

[233165.682427] usb 1-7: cannot get ctl value: req = 0x83, wValue = 0x200, wIndex = 0xb03, type = 4

[233165.682430] usb 1-7: 11:3: cannot get min/max values for control 2 (id 11)

 

0 Kudos
Reply

2,361 Views
mrecoskie
Contributor III

True.  However there are multiple Audio Control Interfaces in the definition above - one for each device.  Interface 0 and 3.  In theory the same IDs could be used because they are in different Audio Control interfaces?

    Interface Descriptor:

      bLength                 9

      bDescriptorType         4

      bInterfaceNumber        0

      bAlternateSetting       0

      bNumEndpoints           0

      bInterfaceClass         1 Audio

      bInterfaceSubClass      1 Control Device

      bInterfaceProtocol     32 

      iInterface              0 









    Interface Descriptor:

      bLength                 9

      bDescriptorType         4

      bInterfaceNumber        3

      bAlternateSetting       0

      bNumEndpoints           0

      bInterfaceClass         1 Audio

      bInterfaceSubClass      1 Control Device

      bInterfaceProtocol     32 

      iInterface              0 

 

0 Kudos
Reply

2,347 Views
jingpan
NXP TechSupport
NXP TechSupport

Hi @mrecoskie ,

Yes, I think so.

 

Regards,

Jing

0 Kudos
Reply

2,328 Views
mrecoskie
Contributor III

Hi Jing.  Mirroring the indices from the first device to the second device did in fact work.  

0 Kudos
Reply

2,366 Views
jingpan
NXP TechSupport
NXP TechSupport

Hi @mrecoskie ,

I'm not familiar with UAC. But I see in USB Audio Class 2.0 spec, it says

jingpan_0-1645003557062.png

Regards,

Jing

0 Kudos
Reply