Re: [PATCH 0/8] USB Audio Gadget part 2: Feedback endpoint, Volume/Mute support

From: Johannes Freyberger
Date: Mon Mar 01 2021 - 14:24:05 EST


Hi Ruslan,

thanks for all your efforts to make the USB Audio Gadget work in Win10 using
UAC2. Meanwhile I managed to apply and compile your previous modifications
and now my Raspberry PI shows up in the Windows Device Manager as a valid
UAC2 audio device. Unfortunately it still doesn't work to transfer any audio
as it seems the audio endpoints or the topology is not working. I checked it
with some tools and found one providing some information on the USB part
(it's called UVCview.exe and is part of the Windows Driver Kit). Here's the
output which I hope can give some hints on the problems still existing in
this driver:

---===>Device Information<===---
English product name: "Linux USB Audio Gadget"

ConnectionStatus:
Current Config Value: 0x01 -> Device Bus Speed: High
Device Address: 0x0F
Open Pipes: 0
*!*ERROR: No open pipes!

===>Device Descriptor<===
bLength: 0x12
bDescriptorType: 0x01
bcdUSB: 0x0200
bDeviceClass: 0xEF -> This is a Multi-interface
Function Code Device
bDeviceSubClass: 0x02 -> This is the Common Class Sub
Class
bDeviceProtocol: 0x01 -> This is the Interface
Association Descriptor protocol
bMaxPacketSize0: 0x40 = (64) Bytes
idVendor: 0x1D6B = The Linux Foundation
idProduct: 0x0101
bcdDevice: 0x0510
iManufacturer: 0x01
English (United States) "Linux 5.10.17-v7l-R3LAY_TEST+ with
fe980000.usb"
iProduct: 0x02
English (United States) "Linux USB Audio Gadget"
iSerialNumber: 0x00
bNumConfigurations: 0x01

===>Configuration Descriptor<===
bLength: 0x09
bDescriptorType: 0x02
wTotalLength: 0x00E2 -> Validated
bNumInterfaces: 0x03
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0xC0 -> Bus Powered
MaxPower: 0x01 = 2 mA

===>IAD Descriptor<===
bLength: 0x08
bDescriptorType: 0x0B
bFirstInterface: 0x00
bInterfaceCount: 0x03
bFunctionClass: 0x01 -> Audio Interface Class
bFunctionSubClass: 0x00
*!*CAUTION: This appears to be an invalid bFunctionSubClass
bFunctionProtocol: 0x20
iFunction: 0x04
English (United States) "R3lay PI"

===>Interface Descriptor<===
bLength: 0x09
bDescriptorType: 0x04
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x00
bInterfaceClass: 0x01 -> Audio Interface Class
bInterfaceSubClass: 0x01 -> Audio Control Interface SubClass
bInterfaceProtocol: 0x20
CAUTION: This may be an invalid bInterfaceProtocol
iInterface: 0x05
English (United States) "Topology Control"

===>Audio Control Interface Header Descriptor<===
bLength: 0x09
bDescriptorType: 0x24
bDescriptorSubtype: 0x01
bcdADC: 0x0200
wTotalLength: 0x5308
bInCollection: 0x00

===>Descriptor Hex Dump<===
bLength: 0x08
bDescriptorType: 0x24
08 24 0A 06 01 01 00 06

===>Descriptor Hex Dump<===
bLength: 0x08
bDescriptorType: 0x24
08 24 0A 05 01 01 00 07

===>Descriptor Hex Dump<===
bLength: 0x11
bDescriptorType: 0x24
11 24 02 01 01 01 00 05 02 03 00 00 00 00 03 00
08

===>Descriptor Hex Dump<===
bLength: 0x11
bDescriptorType: 0x24
11 24 02 02 00 02 00 06 02 03 00 00 00 00 03 00
09

===>Descriptor Hex Dump<===
bLength: 0x0C
bDescriptorType: 0x24
0C 24 03 04 01 01 00 02 06 03 00 0A

===>Descriptor Hex Dump<===
bLength: 0x0C
bDescriptorType: 0x24
0C 24 03 03 00 03 00 01 05 03 00 0B

===>Interface Descriptor<===
bLength: 0x09
bDescriptorType: 0x04
bInterfaceNumber: 0x01
bAlternateSetting: 0x00
bNumEndpoints: 0x00
bInterfaceClass: 0x01 -> Audio Interface Class
bInterfaceSubClass: 0x02 -> Audio Streaming Interface
SubClass
bInterfaceProtocol: 0x20
CAUTION: This may be an invalid bInterfaceProtocol
iInterface: 0x0C
English (United States) "Playback Inactive"

===>Interface Descriptor<===
bLength: 0x09
bDescriptorType: 0x04
bInterfaceNumber: 0x01
bAlternateSetting: 0x01
bNumEndpoints: 0x02
bInterfaceClass: 0x01 -> Audio Interface Class
bInterfaceSubClass: 0x02 -> Audio Streaming Interface
SubClass
bInterfaceProtocol: 0x20
CAUTION: This may be an invalid bInterfaceProtocol
iInterface: 0x0D
English (United States) "Playback Active"

===>Descriptor Hex Dump<===
bLength: 0x10
bDescriptorType: 0x24
10 24 01 01 00 01 01 00 00 00 02 03 00 00 00 00

===>Audio Streaming Format Type Descriptor<===
bLength: 0x06
bDescriptorType: 0x24
bDescriptorSubtype: 0x02
bFormatType: 0x01
bNrChannels: 0x02
bSubframeSize: 0x10
bBitResolution: 0x07
bSamFreqType: 0x05
tSamFreq[1]: 0x380501 (3671297 Hz)
tSamFreq[2]: 0x080401 (525313 Hz)
tSamFreq[3]: 0x000125 (293 Hz)
tSamFreq[4]: 0x000000 (0 Hz)
tSamFreq[5]: 0x050700 (329472 Hz)

===>Endpoint Descriptor<===
bLength: 0x07
bDescriptorType: 0x05
bEndpointAddress: 0x01 -> Direction: OUT - EndpointID: 1
bmAttributes: 0x05 -> Isochronous Transfer Type
Synchronization Type = Asynchronous
Bulk Transfer Type
wMaxPacketSize: 0x0138 = 1 transactions per microframe,
0x138 max bytes
bInterval: 0x04

===>Descriptor Hex Dump<===
bLength: 0x08
bDescriptorType: 0x25
08 25 01 00 00 00 00 00

===>Endpoint Descriptor<===
bLength: 0x07
bDescriptorType: 0x05
bEndpointAddress: 0x81 -> Direction: IN - EndpointID: 1
bmAttributes: 0x11 -> Isochronous Transfer Type
Synchronization Type = No Synchronization
Bulk Transfer Type
wMaxPacketSize: 0x0004 = 1 transactions per microframe,
0x04 max bytes
bInterval: 0x04

===>Interface Descriptor<===
bLength: 0x09
bDescriptorType: 0x04
bInterfaceNumber: 0x02
bAlternateSetting: 0x00
bNumEndpoints: 0x00
bInterfaceClass: 0x01 -> Audio Interface Class
bInterfaceSubClass: 0x02 -> Audio Streaming Interface
SubClass
bInterfaceProtocol: 0x20
CAUTION: This may be an invalid bInterfaceProtocol
iInterface: 0x0E
English (United States) "Capture Inactive"

===>Interface Descriptor<===
bLength: 0x09
bDescriptorType: 0x04
bInterfaceNumber: 0x02
bAlternateSetting: 0x01
bNumEndpoints: 0x01
bInterfaceClass: 0x01 -> Audio Interface Class
bInterfaceSubClass: 0x02 -> Audio Streaming Interface
SubClass
bInterfaceProtocol: 0x20
CAUTION: This may be an invalid bInterfaceProtocol
iInterface: 0x0F
English (United States) "Capture Active"

===>Descriptor Hex Dump<===
bLength: 0x10
bDescriptorType: 0x24
10 24 01 04 00 01 01 00 00 00 02 03 00 00 00 00

===>Audio Streaming Format Type Descriptor<===
bLength: 0x06
bDescriptorType: 0x24
bDescriptorSubtype: 0x02
bFormatType: 0x01
bNrChannels: 0x02
bSubframeSize: 0x10
bBitResolution: 0x07
bSamFreqType: 0x05
tSamFreq[1]: 0xC40582 (12846466 Hz)
tSamFreq[2]: 0x080400 (525312 Hz)
tSamFreq[3]: 0x000125 (293 Hz)
tSamFreq[4]: 0x000000 (0 Hz)
tSamFreq[5]: 0x000000 (0 Hz)

===>Endpoint Descriptor<===
bLength: 0x07
bDescriptorType: 0x05
bEndpointAddress: 0x82 -> Direction: IN - EndpointID: 2
bmAttributes: 0x05 -> Isochronous Transfer Type
Synchronization Type = Asynchronous
Bulk Transfer Type
wMaxPacketSize: 0x00C4 = 1 transactions per microframe,
0xC4 max bytes
bInterval: 0x04

===>Descriptor Hex Dump<===
bLength: 0x08
bDescriptorType: 0x25
08 25 01 00 00 00 00 00