raspberrypi / linux

Kernel source tree for Raspberry Pi-provided kernel builds. Issues unrelated to the linux kernel should be posted on the community forum at https://forums.raspberrypi.com/
Other
11.18k stars 5.02k forks source link

rpi-5.15.y drivers/usb/gadget uac2 not working in windows -> device cannot be started (error 10) #4587

Open JFreyberger opened 3 years ago

JFreyberger commented 3 years ago

Hi all,

I've seen that there have been changes on UAC2 support for running the RPI as an audio usb gadget. I know that there have been problems in former versions and windows didn't properly connect, so you had to use UAC1. Now with the new feedback endpoint this should work, but I still have problems when compiling the latest rpi-5.15.y kernel on my RPI4. Windows detects it correct as UAC2 audio device but still says in device manager the device cannot be started (error 10). Does this work for anybody? Do I miss something when compiling the kernel? I've added the output of USB Device Tree Viewer below.

Thanks and best regards, Johannes

pelwell commented 3 years ago

5.15 isn't finished yet so this isn't a high priority, but if you have a guide to how to configure the Pi to replicate your setup that would increase the chances of it getting looked at (and possibly help somebody more familiar with the topic spot an error).

JFreyberger commented 3 years ago

The problem should be easy to reproduce. Compile the current 5.15 kernel and activate the g_audio module in /boot/cmdline.txt as discussed here:

https://www.audiosciencereview.com/forum/index.php?threads/raspberry-pi-as-usb-to-i2s-adapter.8567/

After compiling and booting with the new kernel connect your Raspberry to a standard W10 PC via USB. The device manager will detect the new audio device but will not start it with error 10 (error: The specified range could not be found in the range list)

I found some hints on the W10 UAC2 requirements here:

https://docs.microsoft.com/en-us/windows-hardware/drivers/audio/usb-2-0-audio-drivers?source=docs

JFreyberger commented 3 years ago

I already did some experiments with using the same endpoint ID for the feedback and the data endpoint which I think is required when looking into the USB 2.0 spec (p272: "A feedback endpoint (explicit or implicit) needs to be associated with one (or more) isochronous data endpoints to which it provides feedback service. The association is based on endpoint number matching. A feedback endpoint always has the opposite direction from the data endpoint(s) it services." But this didn't help. Then I did some changes on bInterval and wMaxPacketSize for the feedback endpoint. But also without luck so far ...

JFreyberger commented 3 years ago

After changing the samplerate to 44100 and doing some other modifications the device windows manager doesn't show any errors but there are no audio endpoints created in windows. My USB descriptor now looks like this:

` =========================== USB Port1 ===========================

Connection Status : 0x01 (Device is connected) Port Chain : 2-4-1-1

  ========================== Summary =========================

Vendor ID : 0x1D6B (The Linux Foundation) Product ID : 0x0101 USB version : 2.00 Port maximum Speed : High-Speed Device maximum Speed : High-Speed Device Connection Speed : High-Speed Self Powered : yes Demanded Current : 0 mA Used Endpoints : 2

  ======================== USB Device ========================

    +++++++++++++++++ Device Information ++++++++++++++++++

Device Description : USB-Verbundgerät Device Path : \?\USB#VID_1D6B&PID_0101#7&319e6f71&0&1#{a5dcbf10-6530-11d2-901f-00c04fb951ed} (GUID_DEVINTERFACE_USB_DEVICE) Kernel Name : \Device\USBPDO-15 Device ID : USB\VID_1D6B&PID_0101\7&319E6F71&0&1 Hardware IDs : USB\VID_1D6B&PID_0101&REV_0515 USB\VID_1D6B&PID_0101 Driver KeyName : {36fc9e60-c465-11cf-8056-444553540000}\0013 (GUID_DEVCLASS_USB) Driver : \SystemRoot\System32\drivers\usbccgp.sys (Version: 10.0.19041.488 Date: 2020-11-06) Driver Inf : C:\WINDOWS\inf\usb.inf Legacy BusType : PNPBus Class : USB Class GUID : {36fc9e60-c465-11cf-8056-444553540000} (GUID_DEVCLASSUSB) Service : usbccgp Enumerator : USB Location Info : Port#0001.Hub_#0010 Location IDs : PCIROOT(0)#PCI(1400)#USBROOT(0)#USB(4)#USB(1)#USB(1), ACPI(SB)#ACPI(PCI0)#ACPI(XHC_)#ACPI(RHUB)#ACPI(HS04)#USB(1)#USB(1) Container ID : {311b6f03-12d1-11ec-9a8b-001b21d47700} Manufacturer Info : (Standard-USB-Hostcontroller) Capabilities : 0x84 (Removable, SurpriseRemovalOK) Status : 0x0180600A (DN_DRIVER_LOADED, DN_STARTED, DN_DISABLEABLE, DN_REMOVABLE, DN_NT_ENUMERATOR, DN_NT_DRIVER) Problem Code : 0 Address : 1 HcDisableSelectiveSuspend: 0 EnableSelectiveSuspend : 0 SelectiveSuspendEnabled : 0 EnhancedPowerMgmtEnabled : 0 IdleInWorkingState : 0 WakeFromSleepState : 0 Power State : D0 (supported: D0, D2, D3, wake from D0, wake from D2) Child Device 1 : Source/Sink (USB Audio 2.0) Device Path 1 : \?\USB#VID_1D6B&PID_0101&MI_00#8&1583d6b2&1&0000#{dda54a40-1e4c-11d1-a050-405705c10000}\msft_topo (STATIC_KSCATEGORY_TOPOLOGY) Device Path 2 : \?\USB#VID_1D6B&PID_0101&MI_00#8&1583d6b2&1&0000#{eb115ffc-10c8-4964-831d-6dcb02e6f23f}\msft_wave (STATIC_KSCATEGORY_REALTIME) Device Path 3 : \?\USB#VID_1D6B&PID_0101&MI_00#8&1583d6b2&1&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\msft_wave (AM_KSCATEGORY_CAPTURE) Device Path 4 : \?\USB#VID_1D6B&PID_0101&MI_00#8&1583d6b2&1&0000#{65e8773e-8f56-11d0-a3b9-00a0c9223196}\msft_wave (AM_KSCATEGORY_RENDER) Device Path 5 : \?\USB#VID_1D6B&PID_0101&MI_00#8&1583d6b2&1&0000#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\msft_wave (AM_KSCATEGORY_AUDIO) Device Path 6 : \?\USB#VID_1D6B&PID_0101&MI_00#8&1583d6b2&1&0000#{dda54a40-1e4c-11d1-a050-405705c10000}\msft_topo (STATIC_KSCATEGORY_TOPOLOGY) Kernel Name : - Device ID : USB\VID_1D6B&PID_0101&MI_00\8&1583D6B2&1&0000 Class : MEDIA Driver KeyName : {4d36e96c-e325-11ce-bfc1-08002be10318}\0011 (GUID_DEVCLASS_MEDIA) Service : usbaudio2 Location : 0000.0014.0000.004.001.001.000.000.000 LocationPaths : PCIROOT(0)#PCI(1400)#USBROOT(0)#USB(4)#USB(1)#USB(1)#USBMI(0) PCIROOT(0)#PCI(1400)#USBROOT(0)#USB(4)#USB(1)#USB(1)#USB(1) ACPI(SB)#ACPI(PCI0)#ACPI(XHC_)#ACPI(RHUB)#ACPI(HS04)#USB(1)#USB(1)#USBMI(0) ACPI(SB)#ACPI(PCI0)#ACPI(XHC_)#ACPI(RHUB)#ACPI(HS04)#USB(1)#USB(1)#USB(1)

    +++++++++++++++++ Registry USB Flags +++++++++++++++++

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags\1D6B01010515 osvc : REG_BINARY 00 00

    ---------------- Connection Information ---------------

Connection Index : 0x01 (Port 1) Connection Status : 0x01 (DeviceConnected) Current Config Value : 0x01 (Configuration 1) Device Address : 0x13 (19) Is Hub : 0x00 (no) Device Bus Speed : 0x02 (High-Speed) Number Of Open Pipes : 0x01 (1 pipe to data endpoints) Pipe[0] : EndpointID=1 Direction=IN ScheduleOffset=0 Type=Interrupt Data (HexDump) : 01 00 00 00 12 01 00 02 EF 02 01 40 6B 1D 01 01 ...........@k... 15 05 01 02 00 01 01 02 00 13 00 01 00 00 00 01 ................ 00 00 00 07 05 81 03 06 00 01 00 00 00 00 ..............

    --------------- Connection Information V2 -------------

Connection Index : 0x01 (1) Length : 0x10 (16 bytes) SupportedUsbProtocols : 0x03 Usb110 : 1 (yes, port supports USB 1.1) Usb200 : 1 (yes, port supports USB 2.0) Usb300 : 0 (no, port not supports USB 3.0) ReservedMBZ : 0x00 Flags : 0x00 DevIsOpAtSsOrHigher : 0 (Device is not operating at SuperSpeed or higher) DevIsSsCapOrHigher : 0 (Device is not SuperSpeed capable or higher) DevIsOpAtSsPlusOrHigher : 0 (Device is not operating at SuperSpeedPlus or higher) DevIsSsPlusCapOrHigher : 0 (Device is not SuperSpeedPlus capable or higher) ReservedMBZ : 0x00 Data (HexDump) : 01 00 00 00 10 00 00 00 03 00 00 00 00 00 00 00 ................

---------------------- Device Descriptor ----------------------

bLength : 0x12 (18 bytes) bDescriptorType : 0x01 (Device Descriptor) bcdUSB : 0x200 (USB Version 2.00) bDeviceClass : 0xEF (Miscellaneous) bDeviceSubClass : 0x02 bDeviceProtocol : 0x01 (IAD - Interface Association Descriptor) bMaxPacketSize0 : 0x40 (64 bytes) idVendor : 0x1D6B (The Linux Foundation) idProduct : 0x0101 bcdDevice : 0x0515 iManufacturer : 0x01 (String Descriptor 1) Language 0x0409 : "Linux 5.15.0-rc1-v7l-R3layPI+ with fe980000.usb" iProduct : 0x02 (String Descriptor 2) Language 0x0409 : "Linux USB Audio Gadget" iSerialNumber : 0x00 (No String Descriptor) bNumConfigurations : 0x01 (1 Configuration) Data (HexDump) : 12 01 00 02 EF 02 01 40 6B 1D 01 01 15 05 01 02 .......@k....... 00 01 ..

------------------ Configuration Descriptor -------------------

bLength : 0x09 (9 bytes) bDescriptorType : 0x02 (Configuration Descriptor) wTotalLength : 0x010D (269 bytes) bNumInterfaces : 0x03 (3 Interfaces) bConfigurationValue : 0x01 (Configuration 1) iConfiguration : 0x00 (No String Descriptor) bmAttributes : 0xC0 D7: Reserved, set 1 : 0x01 D6: Self Powered : 0x01 (yes) D5: Remote Wakeup : 0x00 (no) D4..0: Reserved, set 0 : 0x00 MaxPower : 0x00 (0 mA) Data (HexDump) : 09 02 0D 01 03 01 00 C0 00 08 0B 00 03 01 01 20 ............... 04 09 04 00 00 01 01 01 20 05 09 24 01 00 02 08 ........ ..$.... 77 00 00 08 24 0A 08 01 01 00 06 08 24 0A 07 01 w...$.......$... 01 00 07 11 24 02 01 01 01 00 07 02 03 00 00 00 ....$........... 00 00 00 08 12 24 06 05 01 0F 00 00 00 00 00 00 .....$.......... 00 00 00 00 00 0D 11 24 02 02 00 02 00 08 02 03 .......$........ 00 00 00 00 00 00 09 12 24 06 06 02 0F 00 00 00 ........$....... 00 00 00 00 00 00 00 00 0C 0C 24 03 04 01 01 00 ..........$..... 06 08 00 00 0A 0C 24 03 03 00 03 00 05 07 00 00 ......$......... 0B 07 05 81 03 06 00 01 09 04 01 00 00 01 02 20 ............... 0E 09 04 01 01 02 01 02 20 0F 10 24 01 01 00 01 ........ ..$.... 01 00 00 00 02 03 00 00 00 00 06 24 02 01 02 10 ...........$.... 07 05 01 05 BC 00 01 08 25 01 00 00 00 00 00 07 ........%....... 05 82 11 04 00 01 09 04 02 00 00 01 02 20 10 09 ............. .. 04 02 01 01 01 02 20 11 10 24 01 04 00 01 01 00 ...... ..$...... 00 00 02 03 00 00 00 00 06 24 02 01 02 10 07 05 .........$...... 83 05 B4 00 01 08 25 01 00 00 00 00 00 ......%......

    ------------------- IAD Descriptor --------------------

bLength : 0x08 (8 bytes) bDescriptorType : 0x0B bFirstInterface : 0x00 bInterfaceCount : 0x03 bFunctionClass : 0x01 (Audio) bFunctionSubClass : 0x01 (Audio Control) bFunctionProtocol : 0x20 (AF 2.0) iFunction : 0x04 (String Descriptor 4) Language 0x0409 : "Source/Sink" Data (HexDump) : 08 0B 00 03 01 01 20 04 ...... .

    ---------------- Interface Descriptor -----------------

bLength : 0x09 (9 bytes) bDescriptorType : 0x04 (Interface Descriptor) bInterfaceNumber : 0x00 bAlternateSetting : 0x00 bNumEndpoints : 0x01 (1 Endpoint) bInterfaceClass : 0x01 (Audio) bInterfaceSubClass : 0x01 (Audio Control) bInterfaceProtocol : 0x20 (Device Protocol Version 2.0) iInterface : 0x05 (String Descriptor 5) Language 0x0409 : "Topology Control" Data (HexDump) : 09 04 00 00 01 01 01 20 05 ....... .

    ---- Audio Control Interface Header Descriptor 2.0 ----

bLength : 0x09 (9 bytes) bDescriptorType : 0x24 (Audio Interface Descriptor) bDescriptorSubtype : 0x01 (Header 2.0) bcdADC : 0x0200 (2.0) bCategory : 0x08 (I/O box) wTotalLength : 0x0077 (119 bytes) bmControls : 0x00 D1..0: Latency : 0x00 (not present) D7..2: Reserved : 0x00 Data (HexDump) : 09 24 01 00 02 08 77 00 00 .$....w..

    --- Audio Control Clock Source Unit Descriptor 2.0 ----

bLength : 0x08 (8 bytes) bDescriptorType : 0x24 (Audio Interface Descriptor) bDescriptorSubtype : 0x0A (Clock Source 2.0) bClockID : 0x08 bmAttributes : 0x01 D1..0: Clock Type : 0x01 D2 : Sync to SOF : 0x00 D7..3: Reserved : 0x00 bmControls : 0x01 D1..0: Clock Frequency : 0x01 (read only) D3..2: Clock Validity : 0x00 (not present) D7..4: Reserved : 0x00 bAssocTerminal : 0x00 iClockSource : 0x06 (String Descriptor 6) Language 0x0409 : "44100Hz" Data (HexDump) : 08 24 0A 08 01 01 00 06 .$......

    --- Audio Control Clock Source Unit Descriptor 2.0 ----

bLength : 0x08 (8 bytes) bDescriptorType : 0x24 (Audio Interface Descriptor) bDescriptorSubtype : 0x0A (Clock Source 2.0) bClockID : 0x07 bmAttributes : 0x01 D1..0: Clock Type : 0x01 D2 : Sync to SOF : 0x00 D7..3: Reserved : 0x00 bmControls : 0x01 D1..0: Clock Frequency : 0x01 (read only) D3..2: Clock Validity : 0x00 (not present) D7..4: Reserved : 0x00 bAssocTerminal : 0x00 iClockSource : 0x07 (String Descriptor 7) Language 0x0409 : "44100Hz" Data (HexDump) : 08 24 0A 07 01 01 00 07 .$......

    ----- Audio Control Input Terminal Descriptor 2.0 -----

bLength : 0x11 (17 bytes) bDescriptorType : 0x24 (Audio Interface Descriptor) bDescriptorSubtype : 0x02 (Input Terminal 2.0) bTerminalID : 0x01 wTerminalType : 0x0101 (USB streaming) bAssocTerminal : 0x00 bCSourceID : 0x07 (7) bNrChannels : 0x02 (2 Channels) bmChannelConfig : 0x00000003 (FL, FR) iChannelNames : 0x00 (No String Descriptor) bmControls : 0x0000 D1..0 : Copy Protect : 0x00 (not present) D3..2 : Connector : 0x00 (not present) D5..4 : Overload : 0x00 (not present) D7..6 : Cluster : 0x00 (not present) D9..8 : Underflow : 0x00 (not present) D11..10: Overflow : 0x00 (not present) D15..12: Reserved : 0x00 iTerminal : 0x08 (String Descriptor 8) Language 0x0409 : "USBH Out" Data (HexDump) : 11 24 02 01 01 01 00 07 02 03 00 00 00 00 00 00 .$.............. 08 .

    ------ Audio Control Feature Unit Descriptor 2.0 ------

bLength : 0x12 (18 bytes) bDescriptorType : 0x24 (Audio Interface Descriptor) bDescriptorSubtype : 0x06 (Feature Unit 2.0) bUnitID : 0x05 (5) bSourceID : 0x01 (1) bmaControls[0] : 0x0F, 0x00, 0x00, 0x00 D1..0 : Mute : 0x03 (host programmable) D3..2 : Volume : 0x03 (host programmable) D5..4 : Bass : 0x00 (not present) D7..6 : Mid : 0x00 (not present) D9..8 : Treble : 0x00 (not present) D11..10: Graph Equalizer : 0x00 (not present) D13..12: Automatic Gain : 0x00 (not present) D15..14: Delay : 0x00 (not present) D17..16: Bass Boost : 0x00 (not present) D19..18: Loudness : 0x00 (not present) D21..20: Input Gain : 0x00 (not present) D23..22: Input Gain Pad : 0x00 (not present) D25..24: Phase Inverter : 0x00 (not present) D27..26: Underflow : 0x00 (not present) D29..28: Overflow : 0x00 (not present) D31..30: reserved : 0x00 (not present) bmaControls[1] : 0x00, 0x00, 0x00, 0x00 D1..0 : Mute : 0x00 (not present) D3..2 : Volume : 0x00 (not present) D5..4 : Bass : 0x00 (not present) D7..6 : Mid : 0x00 (not present) D9..8 : Treble : 0x00 (not present) D11..10: Graph Equalizer : 0x00 (not present) D13..12: Automatic Gain : 0x00 (not present) D15..14: Delay : 0x00 (not present) D17..16: Bass Boost : 0x00 (not present) D19..18: Loudness : 0x00 (not present) D21..20: Input Gain : 0x00 (not present) D23..22: Input Gain Pad : 0x00 (not present) D25..24: Phase Inverter : 0x00 (not present) D27..26: Underflow : 0x00 (not present) D29..28: Overflow : 0x00 (not present) D31..30: reserved : 0x00 (not present) bmaControls[2] : 0x00, 0x00, 0x00, 0x00 D1..0 : Mute : 0x00 (not present) D3..2 : Volume : 0x00 (not present) D5..4 : Bass : 0x00 (not present) D7..6 : Mid : 0x00 (not present) D9..8 : Treble : 0x00 (not present) D11..10: Graph Equalizer : 0x00 (not present) D13..12: Automatic Gain : 0x00 (not present) D15..14: Delay : 0x00 (not present) D17..16: Bass Boost : 0x00 (not present) D19..18: Loudness : 0x00 (not present) D21..20: Input Gain : 0x00 (not present) D23..22: Input Gain Pad : 0x00 (not present) D25..24: Phase Inverter : 0x00 (not present) D27..26: Underflow : 0x00 (not present) D29..28: Overflow : 0x00 (not present) D31..30: reserved : 0x00 (not present) iFeature : 0x0D (String Descriptor 13) Language 0x0409 : "Playback Volume" Data (HexDump) : 12 24 06 05 01 0F 00 00 00 00 00 00 00 00 00 00 .$.............. 00 0D ..

    ----- Audio Control Input Terminal Descriptor 2.0 -----

bLength : 0x11 (17 bytes) bDescriptorType : 0x24 (Audio Interface Descriptor) bDescriptorSubtype : 0x02 (Input Terminal 2.0) bTerminalID : 0x02 wTerminalType : 0x0200 (Input Undefined) bAssocTerminal : 0x00 bCSourceID : 0x08 (8) bNrChannels : 0x02 (2 Channels) bmChannelConfig : 0x00000003 (FL, FR) iChannelNames : 0x00 (No String Descriptor) bmControls : 0x0000 D1..0 : Copy Protect : 0x00 (not present) D3..2 : Connector : 0x00 (not present) D5..4 : Overload : 0x00 (not present) D7..6 : Cluster : 0x00 (not present) D9..8 : Underflow : 0x00 (not present) D11..10: Overflow : 0x00 (not present) D15..12: Reserved : 0x00 iTerminal : 0x09 (String Descriptor 9) Language 0x0409 : "USBD Out" Data (HexDump) : 11 24 02 02 00 02 00 08 02 03 00 00 00 00 00 00 .$.............. 09 .

    ------ Audio Control Feature Unit Descriptor 2.0 ------

bLength : 0x12 (18 bytes) bDescriptorType : 0x24 (Audio Interface Descriptor) bDescriptorSubtype : 0x06 (Feature Unit 2.0) bUnitID : 0x06 (6) bSourceID : 0x02 (2) bmaControls[0] : 0x0F, 0x00, 0x00, 0x00 D1..0 : Mute : 0x03 (host programmable) D3..2 : Volume : 0x03 (host programmable) D5..4 : Bass : 0x00 (not present) D7..6 : Mid : 0x00 (not present) D9..8 : Treble : 0x00 (not present) D11..10: Graph Equalizer : 0x00 (not present) D13..12: Automatic Gain : 0x00 (not present) D15..14: Delay : 0x00 (not present) D17..16: Bass Boost : 0x00 (not present) D19..18: Loudness : 0x00 (not present) D21..20: Input Gain : 0x00 (not present) D23..22: Input Gain Pad : 0x00 (not present) D25..24: Phase Inverter : 0x00 (not present) D27..26: Underflow : 0x00 (not present) D29..28: Overflow : 0x00 (not present) D31..30: reserved : 0x00 (not present) bmaControls[1] : 0x00, 0x00, 0x00, 0x00 D1..0 : Mute : 0x00 (not present) D3..2 : Volume : 0x00 (not present) D5..4 : Bass : 0x00 (not present) D7..6 : Mid : 0x00 (not present) D9..8 : Treble : 0x00 (not present) D11..10: Graph Equalizer : 0x00 (not present) D13..12: Automatic Gain : 0x00 (not present) D15..14: Delay : 0x00 (not present) D17..16: Bass Boost : 0x00 (not present) D19..18: Loudness : 0x00 (not present) D21..20: Input Gain : 0x00 (not present) D23..22: Input Gain Pad : 0x00 (not present) D25..24: Phase Inverter : 0x00 (not present) D27..26: Underflow : 0x00 (not present) D29..28: Overflow : 0x00 (not present) D31..30: reserved : 0x00 (not present) bmaControls[2] : 0x00, 0x00, 0x00, 0x00 D1..0 : Mute : 0x00 (not present) D3..2 : Volume : 0x00 (not present) D5..4 : Bass : 0x00 (not present) D7..6 : Mid : 0x00 (not present) D9..8 : Treble : 0x00 (not present) D11..10: Graph Equalizer : 0x00 (not present) D13..12: Automatic Gain : 0x00 (not present) D15..14: Delay : 0x00 (not present) D17..16: Bass Boost : 0x00 (not present) D19..18: Loudness : 0x00 (not present) D21..20: Input Gain : 0x00 (not present) D23..22: Input Gain Pad : 0x00 (not present) D25..24: Phase Inverter : 0x00 (not present) D27..26: Underflow : 0x00 (not present) D29..28: Overflow : 0x00 (not present) D31..30: reserved : 0x00 (not present) iFeature : 0x0C (String Descriptor 12) Language 0x0409 : "Capture Volume" Data (HexDump) : 12 24 06 06 02 0F 00 00 00 00 00 00 00 00 00 00 .$.............. 00 0C ..

    ----- Audio Control Output Terminal Descriptor 2.0 ----

bLength : 0x0C (12 bytes) bDescriptorType : 0x24 (Audio Interface Descriptor) bDescriptorSubtype : 0x03 (Output Terminal 2.0) bTerminalID : 0x04 wTerminalType : 0x0101 (USB streaming) bAssocTerminal : 0x00 (0) bSourceID : 0x06 (6) bCSourceID : 0x08 (8) iTerminal : 0x0A (String Descriptor 10) Language 0x0409 : "USBH In" Data (HexDump) : 0C 24 03 04 01 01 00 06 08 00 00 0A .$..........

    ----- Audio Control Output Terminal Descriptor 2.0 ----

bLength : 0x0C (12 bytes) bDescriptorType : 0x24 (Audio Interface Descriptor) bDescriptorSubtype : 0x03 (Output Terminal 2.0) bTerminalID : 0x03 wTerminalType : 0x0300 (Output Undefined) bAssocTerminal : 0x00 (0) bSourceID : 0x05 (5) bCSourceID : 0x07 (7) iTerminal : 0x0B (String Descriptor 11) Language 0x0409 : "USBD In" Data (HexDump) : 0C 24 03 03 00 03 00 05 07 00 00 0B .$..........

    ----------------- Endpoint Descriptor -----------------

bLength : 0x07 (7 bytes) bDescriptorType : 0x05 (Endpoint Descriptor) bEndpointAddress : 0x81 (Direction=IN EndpointID=1) bmAttributes : 0x03 (TransferType=Interrupt) wMaxPacketSize : 0x0006 Bits 15..13 : 0x00 (reserved, must be zero) Bits 12..11 : 0x00 (0 additional transactions per microframe -> allows 1..1024 bytes per packet) Bits 10..0 : 0x06 (6 bytes per packet) bInterval : 0x01 (1 ms) Data (HexDump) : 07 05 81 03 06 00 01 .......

    ---------------- Interface Descriptor -----------------

bLength : 0x09 (9 bytes) bDescriptorType : 0x04 (Interface Descriptor) bInterfaceNumber : 0x01 bAlternateSetting : 0x00 bNumEndpoints : 0x00 (Default Control Pipe only) bInterfaceClass : 0x01 (Audio) bInterfaceSubClass : 0x02 (Audio Streaming) bInterfaceProtocol : 0x20 (Device Protocol Version 2.0) iInterface : 0x0E (String Descriptor 14) Language 0x0409 : "Playback Inactive" Data (HexDump) : 09 04 01 00 00 01 02 20 0E ....... .

    ---------------- Interface Descriptor -----------------

bLength : 0x09 (9 bytes) bDescriptorType : 0x04 (Interface Descriptor) bInterfaceNumber : 0x01 bAlternateSetting : 0x01 bNumEndpoints : 0x02 (2 Endpoints) bInterfaceClass : 0x01 (Audio) bInterfaceSubClass : 0x02 (Audio Streaming) bInterfaceProtocol : 0x20 (Device Protocol Version 2.0) iInterface : 0x0F (String Descriptor 15) Language 0x0409 : "Playback Active" Data (HexDump) : 09 04 01 01 02 01 02 20 0F ....... .

    ------ Audio Streaming Interface Descriptor 2.0 -------

bLength : 0x10 (16 bytes) bDescriptorType : 0x24 (Audio Interface Descriptor) bDescriptorSubtype : 0x01 (AS General) bTerminalLink : 0x01 (1) bmControls : 0x00 D1..0: Active Alt Settng: 0x00 (not present) D3..2: Valid Alt Settng : 0x00 (not present) D7..4: Reserved : 0x00 bFormatType : 0x01 (FORMAT_TYPE_I) bmFormats : 0x00000001 (PCM) bNrChannels : 0x02 (2 channels) bmChannelConfig : 0x00000003 (FL, FR) iChannelNames : 0x00 (No String Descriptor) Data (HexDump) : 10 24 01 01 00 01 01 00 00 00 02 03 00 00 00 00 .$..............

    ----- Audio Streaming Format Type Descriptor 2.0 ------

bLength : 0x06 (6 bytes) bDescriptorType : 0x24 (Audio Interface Descriptor) bDescriptorSubtype : 0x02 (Format Type) bFormatType : 0x01 (FORMAT_TYPE_I) bSubslotSize : 0x02 (2 bytes) bBitResolution : 0x10 (16 bits) Data (HexDump) : 06 24 02 01 02 10 .$....

    ----------------- Endpoint Descriptor -----------------

bLength : 0x07 (7 bytes) bDescriptorType : 0x05 (Endpoint Descriptor) bEndpointAddress : 0x01 (Direction=OUT EndpointID=1) bmAttributes : 0x05 (TransferType=Isochronous SyncType=Asynchronous EndpointType=Data) wMaxPacketSize : 0x00BC Bits 15..13 : 0x00 (reserved, must be zero) Bits 12..11 : 0x00 (0 additional transactions per microframe -> allows 1..1024 bytes per packet) Bits 10..0 : 0xBC (188 bytes per packet) bInterval : 0x01 (1 ms) Data (HexDump) : 07 05 01 05 BC 00 01 .......

    ----------- Audio Data Endpoint Descriptor ------------

bLength : 0x08 (8 bytes) bDescriptorType : 0x25 (Audio Endpoint Descriptor) bDescriptorSubtype : 0x01 (General) bmAttributes : 0x00 D0 : Sampling Freq : 0x00 (not supported) D1 : Pitch : 0x00 (not supported) D6..2: Reserved : 0x00 D7 : MaxPacketsOnly : 0x00 (no) bLockDelayUnits : 0x00 (Undefined) wLockDelay : 0x0000 Data (HexDump) : 08 25 01 00 00 00 00 00 .%......

    ----------------- Endpoint Descriptor -----------------

bLength : 0x07 (7 bytes) bDescriptorType : 0x05 (Endpoint Descriptor) bEndpointAddress : 0x82 (Direction=IN EndpointID=2) bmAttributes : 0x11 (TransferType=Isochronous SyncType=None EndpointType=Feedback) wMaxPacketSize : 0x0004 Bits 15..13 : 0x00 (reserved, must be zero) Bits 12..11 : 0x00 (0 additional transactions per microframe -> allows 1..1024 bytes per packet) Bits 10..0 : 0x04 (4 bytes per packet) bInterval : 0x01 (1 ms) Data (HexDump) : 07 05 82 11 04 00 01 .......

    ---------------- Interface Descriptor -----------------

bLength : 0x09 (9 bytes) bDescriptorType : 0x04 (Interface Descriptor) bInterfaceNumber : 0x02 bAlternateSetting : 0x00 bNumEndpoints : 0x00 (Default Control Pipe only) bInterfaceClass : 0x01 (Audio) bInterfaceSubClass : 0x02 (Audio Streaming) bInterfaceProtocol : 0x20 (Device Protocol Version 2.0) iInterface : 0x10 (String Descriptor 16) Language 0x0409 : "Capture Inactive" Data (HexDump) : 09 04 02 00 00 01 02 20 10 ....... .

    ---------------- Interface Descriptor -----------------

bLength : 0x09 (9 bytes) bDescriptorType : 0x04 (Interface Descriptor) bInterfaceNumber : 0x02 bAlternateSetting : 0x01 bNumEndpoints : 0x01 (1 Endpoint) bInterfaceClass : 0x01 (Audio) bInterfaceSubClass : 0x02 (Audio Streaming) bInterfaceProtocol : 0x20 (Device Protocol Version 2.0) iInterface : 0x11 (String Descriptor 17) Language 0x0409 : "Capture Active" Data (HexDump) : 09 04 02 01 01 01 02 20 11 ....... .

    ------ Audio Streaming Interface Descriptor 2.0 -------

bLength : 0x10 (16 bytes) bDescriptorType : 0x24 (Audio Interface Descriptor) bDescriptorSubtype : 0x01 (AS General) bTerminalLink : 0x04 (4) bmControls : 0x00 D1..0: Active Alt Settng: 0x00 (not present) D3..2: Valid Alt Settng : 0x00 (not present) D7..4: Reserved : 0x00 bFormatType : 0x01 (FORMAT_TYPE_I) bmFormats : 0x00000001 (PCM) bNrChannels : 0x02 (2 channels) bmChannelConfig : 0x00000003 (FL, FR) iChannelNames : 0x00 (No String Descriptor) Data (HexDump) : 10 24 01 04 00 01 01 00 00 00 02 03 00 00 00 00 .$..............

    ----- Audio Streaming Format Type Descriptor 2.0 ------

bLength : 0x06 (6 bytes) bDescriptorType : 0x24 (Audio Interface Descriptor) bDescriptorSubtype : 0x02 (Format Type) bFormatType : 0x01 (FORMAT_TYPE_I) bSubslotSize : 0x02 (2 bytes) bBitResolution : 0x10 (16 bits) Data (HexDump) : 06 24 02 01 02 10 .$....

    ----------------- Endpoint Descriptor -----------------

bLength : 0x07 (7 bytes) bDescriptorType : 0x05 (Endpoint Descriptor) bEndpointAddress : 0x83 (Direction=IN EndpointID=3) bmAttributes : 0x05 (TransferType=Isochronous SyncType=Asynchronous EndpointType=Data) wMaxPacketSize : 0x00B4 Bits 15..13 : 0x00 (reserved, must be zero) Bits 12..11 : 0x00 (0 additional transactions per microframe -> allows 1..1024 bytes per packet) Bits 10..0 : 0xB4 (180 bytes per packet) bInterval : 0x01 (1 ms) Data (HexDump) : 07 05 83 05 B4 00 01 .......

    ----------- Audio Data Endpoint Descriptor ------------

bLength : 0x08 (8 bytes) bDescriptorType : 0x25 (Audio Endpoint Descriptor) bDescriptorSubtype : 0x01 (General) bmAttributes : 0x00 D0 : Sampling Freq : 0x00 (not supported) D1 : Pitch : 0x00 (not supported) D6..2: Reserved : 0x00 D7 : MaxPacketsOnly : 0x00 (no) bLockDelayUnits : 0x00 (Undefined) wLockDelay : 0x0000 Data (HexDump) : 08 25 01 00 00 00 00 00 .%......

----------------- Device Qualifier Descriptor -----------------

bLength : 0x0A (10 bytes) bDescriptorType : 0x06 (Device_qualifier Descriptor) bcdUSB : 0x200 (USB Version 2.00) bDeviceClass : 0xEF (Miscellaneous) bDeviceSubClass : 0x02 bDeviceProtocol : 0x01 (IAD - Interface Association Descriptor) bMaxPacketSize0 : 0x40 (64 Bytes) bNumConfigurations : 0x01 (1 other-speed configuration) bReserved : 0x00 Data (HexDump) : 0A 06 00 02 EF 02 01 40 01 00 .......@..

------------ Other Speed Configuration Descriptor -------------

bLength : 0x09 (9 bytes) bDescriptorType : 0x07 (Other_speed_configuration Descriptor) wTotalLength : 0x010D (269 bytes) bNumInterfaces : 0x03 (3 Interfaces) bConfigurationValue : 0x01 (Configuration 1) iConfiguration : 0x00 (No String Descriptor) bmAttributes : 0xC0 D7: Reserved, set 1 : 0x01 D6: Self Powered : 0x01 (yes) D5: Remote Wakeup : 0x00 (no) D4..0: Reserved, set 0 : 0x00 MaxPower : 0x00 (0 mA) Data (HexDump) : 09 07 0D 01 03 01 00 C0 00 08 0B 00 03 01 01 20 ............... 04 09 04 00 00 01 01 01 20 05 09 24 01 00 02 08 ........ ..$.... 77 00 00 08 24 0A 08 01 01 00 06 08 24 0A 07 01 w...$.......$... 01 00 07 11 24 02 01 01 01 00 07 02 03 00 00 00 ....$........... 00 00 00 08 12 24 06 05 01 0F 00 00 00 00 00 00 .....$.......... 00 00 00 00 00 0D 11 24 02 02 00 02 00 08 02 03 .......$........ 00 00 00 00 00 00 09 12 24 06 06 02 0F 00 00 00 ........$....... 00 00 00 00 00 00 00 00 0C 0C 24 03 04 01 01 00 ..........$..... 06 08 00 00 0A 0C 24 03 03 00 03 00 05 07 00 00 ......$......... 0B 07 05 81 03 06 00 01 09 04 01 00 00 01 02 20 ............... 0E 09 04 01 01 02 01 02 20 0F 10 24 01 01 00 01 ........ ..$.... 01 00 00 00 02 03 00 00 00 00 06 24 02 01 02 10 ...........$.... 07 05 01 05 BC 00 01 08 25 01 00 00 00 00 00 07 ........%....... 05 82 11 03 00 01 09 04 02 00 00 01 02 20 10 09 ............. .. 04 02 01 01 01 02 20 11 10 24 01 04 00 01 01 00 ...... ..$...... 00 00 02 03 00 00 00 00 06 24 02 01 02 10 07 05 .........$...... 83 05 B4 00 01 08 25 01 00 00 00 00 00 ......%......

    ------------------- IAD Descriptor --------------------

bLength : 0x08 (8 bytes) bDescriptorType : 0x0B bFirstInterface : 0x00 bInterfaceCount : 0x03 bFunctionClass : 0x01 (Audio) bFunctionSubClass : 0x01 (Audio Control) bFunctionProtocol : 0x20 (AF 2.0) iFunction : 0x04 (String Descriptor 4) Language 0x0409 : "Source/Sink" Data (HexDump) : 08 0B 00 03 01 01 20 04 ...... .

    ---------------- Interface Descriptor -----------------

bLength : 0x09 (9 bytes) bDescriptorType : 0x04 (Interface Descriptor) bInterfaceNumber : 0x00 bAlternateSetting : 0x00 bNumEndpoints : 0x01 (1 Endpoint) bInterfaceClass : 0x01 (Audio) bInterfaceSubClass : 0x01 (Audio Control) bInterfaceProtocol : 0x20 (Device Protocol Version 2.0) iInterface : 0x05 (String Descriptor 5) Language 0x0409 : "Topology Control" Data (HexDump) : 09 04 00 00 01 01 01 20 05 ....... .

    ---- Audio Control Interface Header Descriptor 2.0 ----

bLength : 0x09 (9 bytes) bDescriptorType : 0x24 (Audio Interface Descriptor) bDescriptorSubtype : 0x01 (Header 2.0) bcdADC : 0x0200 (2.0) bCategory : 0x08 (I/O box) wTotalLength : 0x0077 (119 bytes) bmControls : 0x00 D1..0: Latency : 0x00 (not present) D7..2: Reserved : 0x00 Data (HexDump) : 09 24 01 00 02 08 77 00 00 .$....w..

    --- Audio Control Clock Source Unit Descriptor 2.0 ----

bLength : 0x08 (8 bytes) bDescriptorType : 0x24 (Audio Interface Descriptor) bDescriptorSubtype : 0x0A (Clock Source 2.0) bClockID : 0x08 bmAttributes : 0x01 D1..0: Clock Type : 0x01 D2 : Sync to SOF : 0x00 D7..3: Reserved : 0x00 bmControls : 0x01 D1..0: Clock Frequency : 0x01 (read only) D3..2: Clock Validity : 0x00 (not present) D7..4: Reserved : 0x00 bAssocTerminal : 0x00 iClockSource : 0x06 (String Descriptor 6) Language 0x0409 : "44100Hz" Data (HexDump) : 08 24 0A 08 01 01 00 06 .$......

    --- Audio Control Clock Source Unit Descriptor 2.0 ----

bLength : 0x08 (8 bytes) bDescriptorType : 0x24 (Audio Interface Descriptor) bDescriptorSubtype : 0x0A (Clock Source 2.0) bClockID : 0x07 bmAttributes : 0x01 D1..0: Clock Type : 0x01 D2 : Sync to SOF : 0x00 D7..3: Reserved : 0x00 bmControls : 0x01 D1..0: Clock Frequency : 0x01 (read only) D3..2: Clock Validity : 0x00 (not present) D7..4: Reserved : 0x00 bAssocTerminal : 0x00 iClockSource : 0x07 (String Descriptor 7) Language 0x0409 : "44100Hz" Data (HexDump) : 08 24 0A 07 01 01 00 07 .$......

    ----- Audio Control Input Terminal Descriptor 2.0 -----

bLength : 0x11 (17 bytes) bDescriptorType : 0x24 (Audio Interface Descriptor) bDescriptorSubtype : 0x02 (Input Terminal 2.0) bTerminalID : 0x01 wTerminalType : 0x0101 (USB streaming) bAssocTerminal : 0x00 bCSourceID : 0x07 (7) bNrChannels : 0x02 (2 Channels) bmChannelConfig : 0x00000003 (FL, FR) iChannelNames : 0x00 (No String Descriptor) bmControls : 0x0000 D1..0 : Copy Protect : 0x00 (not present) D3..2 : Connector : 0x00 (not present) D5..4 : Overload : 0x00 (not present) D7..6 : Cluster : 0x00 (not present) D9..8 : Underflow : 0x00 (not present) D11..10: Overflow : 0x00 (not present) D15..12: Reserved : 0x00 iTerminal : 0x08 (String Descriptor 8) Language 0x0409 : "USBH Out" Data (HexDump) : 11 24 02 01 01 01 00 07 02 03 00 00 00 00 00 00 .$.............. 08 .

    ------ Audio Control Feature Unit Descriptor 2.0 ------

bLength : 0x12 (18 bytes) bDescriptorType : 0x24 (Audio Interface Descriptor) bDescriptorSubtype : 0x06 (Feature Unit 2.0) bUnitID : 0x05 (5) bSourceID : 0x01 (1) bmaControls[0] : 0x0F, 0x00, 0x00, 0x00 D1..0 : Mute : 0x03 (host programmable) D3..2 : Volume : 0x03 (host programmable) D5..4 : Bass : 0x00 (not present) D7..6 : Mid : 0x00 (not present) D9..8 : Treble : 0x00 (not present) D11..10: Graph Equalizer : 0x00 (not present) D13..12: Automatic Gain : 0x00 (not present) D15..14: Delay : 0x00 (not present) D17..16: Bass Boost : 0x00 (not present) D19..18: Loudness : 0x00 (not present) D21..20: Input Gain : 0x00 (not present) D23..22: Input Gain Pad : 0x00 (not present) D25..24: Phase Inverter : 0x00 (not present) D27..26: Underflow : 0x00 (not present) D29..28: Overflow : 0x00 (not present) D31..30: reserved : 0x00 (not present) bmaControls[1] : 0x00, 0x00, 0x00, 0x00 D1..0 : Mute : 0x00 (not present) D3..2 : Volume : 0x00 (not present) D5..4 : Bass : 0x00 (not present) D7..6 : Mid : 0x00 (not present) D9..8 : Treble : 0x00 (not present) D11..10: Graph Equalizer : 0x00 (not present) D13..12: Automatic Gain : 0x00 (not present) D15..14: Delay : 0x00 (not present) D17..16: Bass Boost : 0x00 (not present) D19..18: Loudness : 0x00 (not present) D21..20: Input Gain : 0x00 (not present) D23..22: Input Gain Pad : 0x00 (not present) D25..24: Phase Inverter : 0x00 (not present) D27..26: Underflow : 0x00 (not present) D29..28: Overflow : 0x00 (not present) D31..30: reserved : 0x00 (not present) bmaControls[2] : 0x00, 0x00, 0x00, 0x00 D1..0 : Mute : 0x00 (not present) D3..2 : Volume : 0x00 (not present) D5..4 : Bass : 0x00 (not present) D7..6 : Mid : 0x00 (not present) D9..8 : Treble : 0x00 (not present) D11..10: Graph Equalizer : 0x00 (not present) D13..12: Automatic Gain : 0x00 (not present) D15..14: Delay : 0x00 (not present) D17..16: Bass Boost : 0x00 (not present) D19..18: Loudness : 0x00 (not present) D21..20: Input Gain : 0x00 (not present) D23..22: Input Gain Pad : 0x00 (not present) D25..24: Phase Inverter : 0x00 (not present) D27..26: Underflow : 0x00 (not present) D29..28: Overflow : 0x00 (not present) D31..30: reserved : 0x00 (not present) iFeature : 0x0D (String Descriptor 13) Language 0x0409 : "Playback Volume" Data (HexDump) : 12 24 06 05 01 0F 00 00 00 00 00 00 00 00 00 00 .$.............. 00 0D ..

    ----- Audio Control Input Terminal Descriptor 2.0 -----

bLength : 0x11 (17 bytes) bDescriptorType : 0x24 (Audio Interface Descriptor) bDescriptorSubtype : 0x02 (Input Terminal 2.0) bTerminalID : 0x02 wTerminalType : 0x0200 (Input Undefined) bAssocTerminal : 0x00 bCSourceID : 0x08 (8) bNrChannels : 0x02 (2 Channels) bmChannelConfig : 0x00000003 (FL, FR) iChannelNames : 0x00 (No String Descriptor) bmControls : 0x0000 D1..0 : Copy Protect : 0x00 (not present) D3..2 : Connector : 0x00 (not present) D5..4 : Overload : 0x00 (not present) D7..6 : Cluster : 0x00 (not present) D9..8 : Underflow : 0x00 (not present) D11..10: Overflow : 0x00 (not present) D15..12: Reserved : 0x00 iTerminal : 0x09 (String Descriptor 9) Language 0x0409 : "USBD Out" Data (HexDump) : 11 24 02 02 00 02 00 08 02 03 00 00 00 00 00 00 .$.............. 09 .

    ------ Audio Control Feature Unit Descriptor 2.0 ------

bLength : 0x12 (18 bytes) bDescriptorType : 0x24 (Audio Interface Descriptor) bDescriptorSubtype : 0x06 (Feature Unit 2.0) bUnitID : 0x06 (6) bSourceID : 0x02 (2) bmaControls[0] : 0x0F, 0x00, 0x00, 0x00 D1..0 : Mute : 0x03 (host programmable) D3..2 : Volume : 0x03 (host programmable) D5..4 : Bass : 0x00 (not present) D7..6 : Mid : 0x00 (not present) D9..8 : Treble : 0x00 (not present) D11..10: Graph Equalizer : 0x00 (not present) D13..12: Automatic Gain : 0x00 (not present) D15..14: Delay : 0x00 (not present) D17..16: Bass Boost : 0x00 (not present) D19..18: Loudness : 0x00 (not present) D21..20: Input Gain : 0x00 (not present) D23..22: Input Gain Pad : 0x00 (not present) D25..24: Phase Inverter : 0x00 (not present) D27..26: Underflow : 0x00 (not present) D29..28: Overflow : 0x00 (not present) D31..30: reserved : 0x00 (not present) bmaControls[1] : 0x00, 0x00, 0x00, 0x00 D1..0 : Mute : 0x00 (not present) D3..2 : Volume : 0x00 (not present) D5..4 : Bass : 0x00 (not present) D7..6 : Mid : 0x00 (not present) D9..8 : Treble : 0x00 (not present) D11..10: Graph Equalizer : 0x00 (not present) D13..12: Automatic Gain : 0x00 (not present) D15..14: Delay : 0x00 (not present) D17..16: Bass Boost : 0x00 (not present) D19..18: Loudness : 0x00 (not present) D21..20: Input Gain : 0x00 (not present) D23..22: Input Gain Pad : 0x00 (not present) D25..24: Phase Inverter : 0x00 (not present) D27..26: Underflow : 0x00 (not present) D29..28: Overflow : 0x00 (not present) D31..30: reserved : 0x00 (not present) bmaControls[2] : 0x00, 0x00, 0x00, 0x00 D1..0 : Mute : 0x00 (not present) D3..2 : Volume : 0x00 (not present) D5..4 : Bass : 0x00 (not present) D7..6 : Mid : 0x00 (not present) D9..8 : Treble : 0x00 (not present) D11..10: Graph Equalizer : 0x00 (not present) D13..12: Automatic Gain : 0x00 (not present) D15..14: Delay : 0x00 (not present) D17..16: Bass Boost : 0x00 (not present) D19..18: Loudness : 0x00 (not present) D21..20: Input Gain : 0x00 (not present) D23..22: Input Gain Pad : 0x00 (not present) D25..24: Phase Inverter : 0x00 (not present) D27..26: Underflow : 0x00 (not present) D29..28: Overflow : 0x00 (not present) D31..30: reserved : 0x00 (not present) iFeature : 0x0C (String Descriptor 12) Language 0x0409 : "Capture Volume" Data (HexDump) : 12 24 06 06 02 0F 00 00 00 00 00 00 00 00 00 00 .$.............. 00 0C ..

    ----- Audio Control Output Terminal Descriptor 2.0 ----

bLength : 0x0C (12 bytes) bDescriptorType : 0x24 (Audio Interface Descriptor) bDescriptorSubtype : 0x03 (Output Terminal 2.0) bTerminalID : 0x04 wTerminalType : 0x0101 (USB streaming) bAssocTerminal : 0x00 (0) bSourceID : 0x06 (6) bCSourceID : 0x08 (8) iTerminal : 0x0A (String Descriptor 10) Language 0x0409 : "USBH In" Data (HexDump) : 0C 24 03 04 01 01 00 06 08 00 00 0A .$..........

    ----- Audio Control Output Terminal Descriptor 2.0 ----

bLength : 0x0C (12 bytes) bDescriptorType : 0x24 (Audio Interface Descriptor) bDescriptorSubtype : 0x03 (Output Terminal 2.0) bTerminalID : 0x03 wTerminalType : 0x0300 (Output Undefined) bAssocTerminal : 0x00 (0) bSourceID : 0x05 (5) bCSourceID : 0x07 (7) iTerminal : 0x0B (String Descriptor 11) Language 0x0409 : "USBD In" Data (HexDump) : 0C 24 03 03 00 03 00 05 07 00 00 0B .$..........

    ----------------- Endpoint Descriptor -----------------

bLength : 0x07 (7 bytes) bDescriptorType : 0x05 (Endpoint Descriptor) bEndpointAddress : 0x81 (Direction=IN EndpointID=1) bmAttributes : 0x03 (TransferType=Interrupt) wMaxPacketSize : 0x0006 Bits 15..13 : 0x00 (reserved, must be zero) Bits 12..11 : 0x00 (0 additional transactions per microframe -> allows 1..1024 bytes per packet) Bits 10..0 : 0x06 (6 bytes per packet) bInterval : 0x01 (1 ms) Data (HexDump) : 07 05 81 03 06 00 01 .......

    ---------------- Interface Descriptor -----------------

bLength : 0x09 (9 bytes) bDescriptorType : 0x04 (Interface Descriptor) bInterfaceNumber : 0x01 bAlternateSetting : 0x00 bNumEndpoints : 0x00 (Default Control Pipe only) bInterfaceClass : 0x01 (Audio) bInterfaceSubClass : 0x02 (Audio Streaming) bInterfaceProtocol : 0x20 (Device Protocol Version 2.0) iInterface : 0x0E (String Descriptor 14) Language 0x0409 : "Playback Inactive" Data (HexDump) : 09 04 01 00 00 01 02 20 0E ....... .

    ---------------- Interface Descriptor -----------------

bLength : 0x09 (9 bytes) bDescriptorType : 0x04 (Interface Descriptor) bInterfaceNumber : 0x01 bAlternateSetting : 0x01 bNumEndpoints : 0x02 (2 Endpoints) bInterfaceClass : 0x01 (Audio) bInterfaceSubClass : 0x02 (Audio Streaming) bInterfaceProtocol : 0x20 (Device Protocol Version 2.0) iInterface : 0x0F (String Descriptor 15) Language 0x0409 : "Playback Active" Data (HexDump) : 09 04 01 01 02 01 02 20 0F ....... .

    ------ Audio Streaming Interface Descriptor 2.0 -------

bLength : 0x10 (16 bytes) bDescriptorType : 0x24 (Audio Interface Descriptor) bDescriptorSubtype : 0x01 (AS General) bTerminalLink : 0x01 (1) bmControls : 0x00 D1..0: Active Alt Settng: 0x00 (not present) D3..2: Valid Alt Settng : 0x00 (not present) D7..4: Reserved : 0x00 bFormatType : 0x01 (FORMAT_TYPE_I) bmFormats : 0x00000001 (PCM) bNrChannels : 0x02 (2 channels) bmChannelConfig : 0x00000003 (FL, FR) iChannelNames : 0x00 (No String Descriptor) Data (HexDump) : 10 24 01 01 00 01 01 00 00 00 02 03 00 00 00 00 .$..............

    ----- Audio Streaming Format Type Descriptor 2.0 ------

bLength : 0x06 (6 bytes) bDescriptorType : 0x24 (Audio Interface Descriptor) bDescriptorSubtype : 0x02 (Format Type) bFormatType : 0x01 (FORMAT_TYPE_I) bSubslotSize : 0x02 (2 bytes) bBitResolution : 0x10 (16 bits) Data (HexDump) : 06 24 02 01 02 10 .$....

    ----------------- Endpoint Descriptor -----------------

bLength : 0x07 (7 bytes) bDescriptorType : 0x05 (Endpoint Descriptor) bEndpointAddress : 0x01 (Direction=OUT EndpointID=1) bmAttributes : 0x05 (TransferType=Isochronous SyncType=Asynchronous EndpointType=Data) wMaxPacketSize : 0x00BC Bits 15..13 : 0x00 (reserved, must be zero) Bits 12..11 : 0x00 (0 additional transactions per microframe -> allows 1..1024 bytes per packet) Bits 10..0 : 0xBC (188 bytes per packet) bInterval : 0x01 (1 ms) Data (HexDump) : 07 05 01 05 BC 00 01 .......

    ----------- Audio Data Endpoint Descriptor ------------

bLength : 0x08 (8 bytes) bDescriptorType : 0x25 (Audio Endpoint Descriptor) bDescriptorSubtype : 0x01 (General) bmAttributes : 0x00 D0 : Sampling Freq : 0x00 (not supported) D1 : Pitch : 0x00 (not supported) D6..2: Reserved : 0x00 D7 : MaxPacketsOnly : 0x00 (no) bLockDelayUnits : 0x00 (Undefined) wLockDelay : 0x0000 Data (HexDump) : 08 25 01 00 00 00 00 00 .%......

    ----------------- Endpoint Descriptor -----------------

bLength : 0x07 (7 bytes) bDescriptorType : 0x05 (Endpoint Descriptor) bEndpointAddress : 0x82 (Direction=IN EndpointID=2) bmAttributes : 0x11 (TransferType=Isochronous SyncType=None EndpointType=Feedback) wMaxPacketSize : 0x0003 Bits 15..13 : 0x00 (reserved, must be zero) Bits 12..11 : 0x00 (0 additional transactions per microframe -> allows 1..1024 bytes per packet) Bits 10..0 : 0x03 (3 bytes per packet) bInterval : 0x01 (1 ms) Data (HexDump) : 07 05 82 11 03 00 01 .......

    ---------------- Interface Descriptor -----------------

bLength : 0x09 (9 bytes) bDescriptorType : 0x04 (Interface Descriptor) bInterfaceNumber : 0x02 bAlternateSetting : 0x00 bNumEndpoints : 0x00 (Default Control Pipe only) bInterfaceClass : 0x01 (Audio) bInterfaceSubClass : 0x02 (Audio Streaming) bInterfaceProtocol : 0x20 (Device Protocol Version 2.0) iInterface : 0x10 (String Descriptor 16) Language 0x0409 : "Capture Inactive" Data (HexDump) : 09 04 02 00 00 01 02 20 10 ....... .

    ---------------- Interface Descriptor -----------------

bLength : 0x09 (9 bytes) bDescriptorType : 0x04 (Interface Descriptor) bInterfaceNumber : 0x02 bAlternateSetting : 0x01 bNumEndpoints : 0x01 (1 Endpoint) bInterfaceClass : 0x01 (Audio) bInterfaceSubClass : 0x02 (Audio Streaming) bInterfaceProtocol : 0x20 (Device Protocol Version 2.0) iInterface : 0x11 (String Descriptor 17) Language 0x0409 : "Capture Active" Data (HexDump) : 09 04 02 01 01 01 02 20 11 ....... .

    ------ Audio Streaming Interface Descriptor 2.0 -------

bLength : 0x10 (16 bytes) bDescriptorType : 0x24 (Audio Interface Descriptor) bDescriptorSubtype : 0x01 (AS General) bTerminalLink : 0x04 (4) bmControls : 0x00 D1..0: Active Alt Settng: 0x00 (not present) D3..2: Valid Alt Settng : 0x00 (not present) D7..4: Reserved : 0x00 bFormatType : 0x01 (FORMAT_TYPE_I) bmFormats : 0x00000001 (PCM) bNrChannels : 0x02 (2 channels) bmChannelConfig : 0x00000003 (FL, FR) iChannelNames : 0x00 (No String Descriptor) Data (HexDump) : 10 24 01 04 00 01 01 00 00 00 02 03 00 00 00 00 .$..............

    ----- Audio Streaming Format Type Descriptor 2.0 ------

bLength : 0x06 (6 bytes) bDescriptorType : 0x24 (Audio Interface Descriptor) bDescriptorSubtype : 0x02 (Format Type) bFormatType : 0x01 (FORMAT_TYPE_I) bSubslotSize : 0x02 (2 bytes) bBitResolution : 0x10 (16 bits) Data (HexDump) : 06 24 02 01 02 10 .$....

    ----------------- Endpoint Descriptor -----------------

bLength : 0x07 (7 bytes) bDescriptorType : 0x05 (Endpoint Descriptor) bEndpointAddress : 0x83 (Direction=IN EndpointID=3) bmAttributes : 0x05 (TransferType=Isochronous SyncType=Asynchronous EndpointType=Data) wMaxPacketSize : 0x00B4 Bits 15..13 : 0x00 (reserved, must be zero) Bits 12..11 : 0x00 (0 additional transactions per microframe -> allows 1..1024 bytes per packet) Bits 10..0 : 0xB4 (180 bytes per packet) bInterval : 0x01 (1 ms) Data (HexDump) : 07 05 83 05 B4 00 01 .......

    ----------- Audio Data Endpoint Descriptor ------------

bLength : 0x08 (8 bytes) bDescriptorType : 0x25 (Audio Endpoint Descriptor) bDescriptorSubtype : 0x01 (General) bmAttributes : 0x00 D0 : Sampling Freq : 0x00 (not supported) D1 : Pitch : 0x00 (not supported) D6..2: Reserved : 0x00 D7 : MaxPacketsOnly : 0x00 (no) bLockDelayUnits : 0x00 (Undefined) wLockDelay : 0x0000 Data (HexDump) : 08 25 01 00 00 00 00 00 .%......

  -------------------- String Descriptors -------------------
         ------ String Descriptor 0 ------

bLength : 0x04 (4 bytes) bDescriptorType : 0x03 (String Descriptor) Language ID[0] : 0x0409 (English - United States) Data (HexDump) : 04 03 09 04 .... ------ String Descriptor 1 ------ bLength : 0x60 (96 bytes) bDescriptorType : 0x03 (String Descriptor) Language 0x0409 : "Linux 5.15.0-rc1-v7l-R3layPI+ with fe980000.usb" Data (HexDump) : 60 03 4C 00 69 00 6E 00 75 00 78 00 20 00 35 00 .L.i.n.u.x. .5. 2E 00 31 00 35 00 2E 00 30 00 2D 00 72 00 63 00 ..1.5...0.-.r.c. 31 00 2D 00 76 00 37 00 6C 00 2D 00 52 00 33 00 1.-.v.7.l.-.R.3. 6C 00 61 00 79 00 50 00 49 00 2B 00 20 00 77 00 l.a.y.P.I.+. .w. 69 00 74 00 68 00 20 00 66 00 65 00 39 00 38 00 i.t.h. .f.e.9.8. 30 00 30 00 30 00 30 00 2E 00 75 00 73 00 62 00 0.0.0.0...u.s.b. ------ String Descriptor 2 ------ bLength : 0x2E (46 bytes) bDescriptorType : 0x03 (String Descriptor) Language 0x0409 : "Linux USB Audio Gadget" Data (HexDump) : 2E 03 4C 00 69 00 6E 00 75 00 78 00 20 00 55 00 ..L.i.n.u.x. .U. 53 00 42 00 20 00 41 00 75 00 64 00 69 00 6F 00 S.B. .A.u.d.i.o. 20 00 47 00 61 00 64 00 67 00 65 00 74 00 .G.a.d.g.e.t. ------ String Descriptor 4 ------ bLength : 0x18 (24 bytes) bDescriptorType : 0x03 (String Descriptor) Language 0x0409 : "Source/Sink" Data (HexDump) : 18 03 53 00 6F 00 75 00 72 00 63 00 65 00 2F 00 ..S.o.u.r.c.e./. 53 00 69 00 6E 00 6B 00 S.i.n.k. ------ String Descriptor 5 ------ bLength : 0x22 (34 bytes) bDescriptorType : 0x03 (String Descriptor) Language 0x0409 : "Topology Control" Data (HexDump) : 22 03 54 00 6F 00 70 00 6F 00 6C 00 6F 00 67 00 ".T.o.p.o.l.o.g. 79 00 20 00 43 00 6F 00 6E 00 74 00 72 00 6F 00 y. .C.o.n.t.r.o. 6C 00 l. ------ String Descriptor 6 ------ bLength : 0x10 (16 bytes) bDescriptorType : 0x03 (String Descriptor) Language 0x0409 : "44100Hz" Data (HexDump) : 10 03 34 00 34 00 31 00 30 00 30 00 48 00 7A 00 ..4.4.1.0.0.H.z. ------ String Descriptor 7 ------ bLength : 0x10 (16 bytes) bDescriptorType : 0x03 (String Descriptor) Language 0x0409 : "44100Hz" Data (HexDump) : 10 03 34 00 34 00 31 00 30 00 30 00 48 00 7A 00 ..4.4.1.0.0.H.z. ------ String Descriptor 8 ------ bLength : 0x12 (18 bytes) bDescriptorType : 0x03 (String Descriptor) Language 0x0409 : "USBH Out" Data (HexDump) : 12 03 55 00 53 00 42 00 48 00 20 00 4F 00 75 00 ..U.S.B.H. .O.u. 74 00 t. ------ String Descriptor 9 ------ bLength : 0x12 (18 bytes) bDescriptorType : 0x03 (String Descriptor) Language 0x0409 : "USBD Out" Data (HexDump) : 12 03 55 00 53 00 42 00 44 00 20 00 4F 00 75 00 ..U.S.B.D. .O.u. 74 00 t. ------ String Descriptor 10 ------ bLength : 0x10 (16 bytes) bDescriptorType : 0x03 (String Descriptor) Language 0x0409 : "USBH In" Data (HexDump) : 10 03 55 00 53 00 42 00 48 00 20 00 49 00 6E 00 ..U.S.B.H. .I.n. ------ String Descriptor 11 ------ bLength : 0x10 (16 bytes) bDescriptorType : 0x03 (String Descriptor) Language 0x0409 : "USBD In" Data (HexDump) : 10 03 55 00 53 00 42 00 44 00 20 00 49 00 6E 00 ..U.S.B.D. .I.n. ------ String Descriptor 12 ------ bLength : 0x1E (30 bytes) bDescriptorType : 0x03 (String Descriptor) Language 0x0409 : "Capture Volume" Data (HexDump) : 1E 03 43 00 61 00 70 00 74 00 75 00 72 00 65 00 ..C.a.p.t.u.r.e. 20 00 56 00 6F 00 6C 00 75 00 6D 00 65 00 .V.o.l.u.m.e. ------ String Descriptor 13 ------ bLength : 0x20 (32 bytes) bDescriptorType : 0x03 (String Descriptor) Language 0x0409 : "Playback Volume" Data (HexDump) : 20 03 50 00 6C 00 61 00 79 00 62 00 61 00 63 00 .P.l.a.y.b.a.c. 6B 00 20 00 56 00 6F 00 6C 00 75 00 6D 00 65 00 k. .V.o.l.u.m.e. ------ String Descriptor 14 ------ bLength : 0x24 (36 bytes) bDescriptorType : 0x03 (String Descriptor) Language 0x0409 : "Playback Inactive" Data (HexDump) : 24 03 50 00 6C 00 61 00 79 00 62 00 61 00 63 00 $.P.l.a.y.b.a.c. 6B 00 20 00 49 00 6E 00 61 00 63 00 74 00 69 00 k. .I.n.a.c.t.i. 76 00 65 00 v.e. ------ String Descriptor 15 ------ bLength : 0x20 (32 bytes) bDescriptorType : 0x03 (String Descriptor) Language 0x0409 : "Playback Active" Data (HexDump) : 20 03 50 00 6C 00 61 00 79 00 62 00 61 00 63 00 .P.l.a.y.b.a.c. 6B 00 20 00 41 00 63 00 74 00 69 00 76 00 65 00 k. .A.c.t.i.v.e. ------ String Descriptor 16 ------ bLength : 0x22 (34 bytes) bDescriptorType : 0x03 (String Descriptor) Language 0x0409 : "Capture Inactive" Data (HexDump) : 22 03 43 00 61 00 70 00 74 00 75 00 72 00 65 00 ".C.a.p.t.u.r.e. 20 00 49 00 6E 00 61 00 63 00 74 00 69 00 76 00 .I.n.a.c.t.i.v. 65 00 e. ------ String Descriptor 17 ------ bLength : 0x1E (30 bytes) bDescriptorType : 0x03 (String Descriptor) Language 0x0409 : "Capture Active" Data (HexDump) : 1E 03 43 00 61 00 70 00 74 00 75 00 72 00 65 00 ..C.a.p.t.u.r.e. 20 00 41 00 63 00 74 00 69 00 76 00 65 00 .A.c.t.i.v.e.

JFreyberger commented 3 years ago

After several tests I found out that windows seems to be a little picky about the wTerminalType. After I changed these from UAC_OUTPUT_TERMINAL_UNDEFINED to UAC_OUTPUT_TERMINAL_SPEAKER and from UAC_INPUT_TERMINAL_UNDEFINED to UAC_INPUT_TERMINAL_MICROPHONE it started to work.

pelwell commented 3 years ago

drivers/usb/gadget/function/f_uac2.c, which I think you are referring to, is an unmodified upstream file. If you think there is a problem with it then you'll have to report it to the maintainers.