I still do not see the equivalency of usb-audio and usb-ethernet. The audio function can be used by any player, it is a regular soundcard. The ethernet function requires a very different playback chain involving some network streaming tool. Its only advantage compared to regular ethernet/network card is the separate segment with automatic IP configuration.
Back to the usb-audio gadget.
Async output should have the feedback endpoint http://dl.project-voodoo.org/usb-audio-spec/USB Audio v2.0/Audio20 final.pdf ch. 4.10.2. That is obvious, async stream without feedback is not async. But why does the gadget define the output endpoint as asynchronous in the first place? There is no independent clock involved. When the amount of data transfered to the gadget from the host reaches the alsa device period size, the gadget will call the alsa method snd_pcm_period_elapsed which is an IRQ callback by a regular soundcard (IRQ is thrown by the soundcard when its DMA pointer reaches the boundary of period in the RAM buffer - the very same behaviour)
linux/u_audio.c at 6f0d349d922ba44e4348a17a78ea51b7135965b1 * torvalds/linux * GitHub
linux/u_audio.c at 6f0d349d922ba44e4348a17a78ea51b7135965b1 * torvalds/linux * GitHub
Therefore the timing fully depends on the data rate controlled by the USB host - the adaptive mode.
IMO if the output endpoint was defined as adaptive, it could work properly. A simple change
fullspeed out endpoint descriptor:
linux/f_uac2.c at 6f0d349d922ba44e4348a17a78ea51b7135965b1 * torvalds/linux * GitHub
USB_ENDPOINT_SYNC_ASYNC -> USB_ENDPOINT_SYNC_ADAPTIVE
highspeed out endpoint descriptor:
linux/f_uac2.c at 6f0d349d922ba44e4348a17a78ea51b7135965b1 * torvalds/linux * GitHub
USB_ENDPOINT_SYNC_ASYNC -> USB_ENDPOINT_SYNC_ADAPTIVE
Perhaps some adaptive clock lock delay should be defined (it cannot hurt):
https://github.com/torvalds/linux/b...5b1/drivers/usb/gadget/function/f_uac2.c#L299
.bLockDelayUnits = 0,
.wLockDelay = 0,
to 1 millisecond
.bLockDelayUnits = 1,
.wLockDelay = 1,
Unfortunately I do not have a way to test it. It would involve only recompiling the kernel for RPI with these trivial changes. lsusb -v will show if the change worked. IMO it could fix the windows driver problem.
Back to the usb-audio gadget.
Async output should have the feedback endpoint http://dl.project-voodoo.org/usb-audio-spec/USB Audio v2.0/Audio20 final.pdf ch. 4.10.2. That is obvious, async stream without feedback is not async. But why does the gadget define the output endpoint as asynchronous in the first place? There is no independent clock involved. When the amount of data transfered to the gadget from the host reaches the alsa device period size, the gadget will call the alsa method snd_pcm_period_elapsed which is an IRQ callback by a regular soundcard (IRQ is thrown by the soundcard when its DMA pointer reaches the boundary of period in the RAM buffer - the very same behaviour)
linux/u_audio.c at 6f0d349d922ba44e4348a17a78ea51b7135965b1 * torvalds/linux * GitHub
linux/u_audio.c at 6f0d349d922ba44e4348a17a78ea51b7135965b1 * torvalds/linux * GitHub
Therefore the timing fully depends on the data rate controlled by the USB host - the adaptive mode.
IMO if the output endpoint was defined as adaptive, it could work properly. A simple change
fullspeed out endpoint descriptor:
linux/f_uac2.c at 6f0d349d922ba44e4348a17a78ea51b7135965b1 * torvalds/linux * GitHub
USB_ENDPOINT_SYNC_ASYNC -> USB_ENDPOINT_SYNC_ADAPTIVE
highspeed out endpoint descriptor:
linux/f_uac2.c at 6f0d349d922ba44e4348a17a78ea51b7135965b1 * torvalds/linux * GitHub
USB_ENDPOINT_SYNC_ASYNC -> USB_ENDPOINT_SYNC_ADAPTIVE
Perhaps some adaptive clock lock delay should be defined (it cannot hurt):
https://github.com/torvalds/linux/b...5b1/drivers/usb/gadget/function/f_uac2.c#L299
.bLockDelayUnits = 0,
.wLockDelay = 0,
to 1 millisecond
.bLockDelayUnits = 1,
.wLockDelay = 1,
Unfortunately I do not have a way to test it. It would involve only recompiling the kernel for RPI with these trivial changes. lsusb -v will show if the change worked. IMO it could fix the windows driver problem.
I still do not see the equivalency of usb-audio and usb-ethernet. The audio function can be used by any player, it is a regular soundcard. The ethernet function requires a very different playback chain involving some network streaming tool. Its only advantage compared to regular ethernet/network card is the separate segment with automatic IP configuration.
Back to the usb-audio gadget.
Async output should have the feedback endpoint http://dl.project-voodoo.org/usb-audio-spec/USB Audio v2.0/Audio20 final.pdf ch. 4.10.2. That is obvious, async stream without feedback is not async. But why does the gadget define the output endpoint as asynchronous in the first place? There is no independent clock involved. When the amount of data transfered to the gadget from the host reaches the alsa device period size, the gadget will call the alsa method snd_pcm_period_elapsed which is an IRQ callback by a regular soundcard (IRQ is thrown by the soundcard when its DMA pointer reaches the boundary of period in the RAM buffer - the very same behaviour)
linux/u_audio.c at 6f0d349d922ba44e4348a17a78ea51b7135965b1 * torvalds/linux * GitHub
linux/u_audio.c at 6f0d349d922ba44e4348a17a78ea51b7135965b1 * torvalds/linux * GitHub
Therefore the timing fully depends on the data rate controlled by the USB host - the adaptive mode.
IMO if the output endpoint was defined as adaptive, it could work properly. A simple change
fullspeed out endpoint descriptor:
linux/f_uac2.c at 6f0d349d922ba44e4348a17a78ea51b7135965b1 * torvalds/linux * GitHub
USB_ENDPOINT_SYNC_ASYNC -> USB_ENDPOINT_SYNC_ADAPTIVE
highspeed out endpoint descriptor:
linux/f_uac2.c at 6f0d349d922ba44e4348a17a78ea51b7135965b1 * torvalds/linux * GitHub
USB_ENDPOINT_SYNC_ASYNC -> USB_ENDPOINT_SYNC_ADAPTIVE
Perhaps some adaptive clock lock delay should be defined (it cannot hurt):
https://github.com/torvalds/linux/b...5b1/drivers/usb/gadget/function/f_uac2.c#L299
.bLockDelayUnits = 0,
.wLockDelay = 0,
to 1 millisecond
.bLockDelayUnits = 1,
.wLockDelay = 1,
Unfortunately I do not have a way to test it. It would involve only recompiling the kernel for RPI with these trivial changes. lsusb -v will show if the change worked. IMO it could fix the windows driver problem.
I have the Pi 4 and can make some time to test this out. I will send you a PM about it.
phofman:
Code:
charlie@ZBOX-CI329-1:~$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM]
Subdevices: 8/8
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
Subdevice #2: subdevice #2
Subdevice #3: subdevice #3
Subdevice #4: subdevice #4
Subdevice #5: subdevice #5
Subdevice #6: subdevice #6
Subdevice #7: subdevice #7
card 0: Loopback [Loopback], device 1: Loopback PCM [Loopback PCM]
Subdevices: 8/8
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
Subdevice #2: subdevice #2
Subdevice #3: subdevice #3
Subdevice #4: subdevice #4
Subdevice #5: subdevice #5
Subdevice #6: subdevice #6
Subdevice #7: subdevice #7
card 1: PCH [HDA Intel PCH], device 0: ALC892 Analog [ALC892 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: PCH [HDA Intel PCH], device 2: ALC892 Alt Analog [ALC892 Alt Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 2: Gadget [Linux USB Audio Gadget], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
When I check the device parameters, the sample rate is not correct. I set up c_srate=96000 as an option when the g_audio module is loaded on the Pi, but on the Linux host the rate is shown as 48000:
Code:
charlie@ZBOX-CI329-1:~$ arecord -D hw:2,0 --dump-hw-params
Recording WAVE 'stdin' : Unsigned 8 bit, Rate 8000 Hz, Mono
HW Params of device "hw:2,0":
--------------------
ACCESS: MMAP_INTERLEAVED RW_INTERLEAVED
FORMAT: S16_LE
SUBFORMAT: STD
SAMPLE_BITS: 16
FRAME_BITS: 32
CHANNELS: 2
RATE: 48000
PERIOD_TIME: [1000 2730667)
PERIOD_SIZE: [48 131072]
PERIOD_BYTES: [192 524288]
PERIODS: [2 1024]
BUFFER_TIME: [2000 5461334)
BUFFER_SIZE: [96 262144]
BUFFER_BYTES: [384 1048576]
TICK_TIME: ALL
--------------------
arecord: set_params:1299: Sample format non available
Available formats:
- S16_LE
OK, first let's disable the whole capture part. We need playback part from the host POW, aplay on the host (arecord on the PI4), param p_srate.
You have it in my PM, set c_chmask to zero. Please post here modinfo MODULENAME.ko so that we see the actual param names.
So far, I am only able to get silence. I used gstreamer pipelines on both sides. It has a built in tone generator. Both pipelines appear to be running fine, etc. but no sound comes out.
I had set the bit depth to 32 bits on the Pi. AM now trying 16 bits.
OK, that doesn't produce sound either. Hmmmm.
I had set the bit depth to 32 bits on the Pi. AM now trying 16 bits.
OK, that doesn't produce sound either. Hmmmm.
Last edited:
I wonder why you go the gstreamer route when there is a windows soundcard driver with RTP support available: GitHub - duncanthrax/scream: Virtual network sound card for Microsoft Windows
Using pulseaudio with an RTP sink on the RPi side would simplify the whole setup even more... just my 2ct.
Using pulseaudio with an RTP sink on the RPi side would simplify the whole setup even more... just my 2ct.
I wonder why you go the gstreamer route when there is a windows soundcard driver with RTP support available: GitHub - duncanthrax/scream: Virtual network sound card for Microsoft Windows
Using pulseaudio with an RTP sink on the RPi side would simplify the whole setup even more... just my 2ct.
You can't use something you don't know about...
Thanks for the tip! I will check it (scream) out.
OTOH, I will stick with Gstreamer on the Pi. That does both RX of the stream, implements all the LADSPA I need, and sends the audio out via ALSA. I tend to avoid Pulseaudio...
EDIT: I looked at scream. It's basically doing the same thing. I would definitely not multicast. That doesn't work over Wifi anyway from what I recall. I can do the same thing with Gstreamer, which I already have in place.
I was never trying to say that Gstreamer was the ONLY way to push audio over the g_ether connection, it's just a platform that I know pretty well and I knew it could work in this scenario.
Last edited:
So far, I am only able to get silence.
OK, please let's proceed systematically to avoid any misunderstanding.
Did you succeed in disabling the capture side? Did the rate setup work?
On host:
aplay -l must list the soundcard
arecord -l must NOT list the soundcard
Please let's use the simpliest possible playback and capture tools - aplay, arecord. Gstreamer is in my eyes too complicated to rely upon when troubleshooting the underlaying problems.
aplay --dump-hw-params on host side must list correct samplerate, channel count, bitsize. The same for arecord --dump-hw-params on gadget side.
You can't use something you don't know about...
Thanks for the tip! I will check it (scream) out.
OTOH, I will stick with Gstreamer on the Pi. That does both RX of the stream, implements all the LADSPA I need, and sends the audio out via ALSA. I tend to avoid Pulseaudio...
EDIT: I looked at scream. It's basically doing the same thing. I would definitely not multicast. That doesn't work over Wifi anyway from what I recall. I can do the same thing with Gstreamer, which I already have in place.
I was never trying to say that Gstreamer was the ONLY way to push audio over the g_ether connection, it's just a platform that I know pretty well and I knew it could work in this scenario.
Just meant that it would probably be easier for other people to set it up on the windows side. If gstreamer works for you, that's of course fine. If you're writing a howto you might include the link as an alternative, up to you.
Btw. you can also use RTP with unicast addresses. And you should also be able to replace the fixed IP address with 0.0.0.0 (listen on any ip address) on the receiver side and with a host name (how it's resolved doesn't really matter, zeroconf, DNS, whatever) on the sender side.
OK, please let's proceed systematically to avoid any misunderstanding.
Did you succeed in disabling the capture side? Did the rate setup work?
On host:
aplay -l must list the soundcard
arecord -l must NOT list the soundcard
Please let's use the simpliest possible playback and capture tools - aplay, arecord. Gstreamer is in my eyes too complicated to rely upon when troubleshooting the underlaying problems.
aplay --dump-hw-params on host side must list correct samplerate, channel count, bitsize. The same for arecord --dump-hw-params on gadget side.
dump hw params all looks good.
no sound.
Sorry, I am out of time for today...
UPDATE:
After doing some sleuthing of the system (the Pi machine) I found that I had somehow broken the onboard audio including the HDMI output and the jack on the Pi. So I decided to start over with a fresh install. Then I went about modifying the bcm2835-pcm.c file to get the HDMI working in 24bit format to make sure that didn't break anything. All is good.
I also set up the USB audio gadget and tested it out using a connection between another computer (the "host", a CI329 running Xubuntu) and the Pi (running Raspbian). This is a Linux to Linux connection, and that is known to work with the stock USB audio gadget driver. Sure enough, it does work. I set up the format specifier on the Pi for the gadget as 96k, 32bit. I could send, receive, and listen to audio from the host on the Pi using headphones connected to the HDMI HAT. On both machines, when I dump-hw-params from aplay I see the correct audio rate and format.
At this point I can move on to modifying the driver for the USB audio gadget with the help of phofman.
After doing some sleuthing of the system (the Pi machine) I found that I had somehow broken the onboard audio including the HDMI output and the jack on the Pi. So I decided to start over with a fresh install. Then I went about modifying the bcm2835-pcm.c file to get the HDMI working in 24bit format to make sure that didn't break anything. All is good.
I also set up the USB audio gadget and tested it out using a connection between another computer (the "host", a CI329 running Xubuntu) and the Pi (running Raspbian). This is a Linux to Linux connection, and that is known to work with the stock USB audio gadget driver. Sure enough, it does work. I set up the format specifier on the Pi for the gadget as 96k, 32bit. I could send, receive, and listen to audio from the host on the Pi using headphones connected to the HDMI HAT. On both machines, when I dump-hw-params from aplay I see the correct audio rate and format.
At this point I can move on to modifying the driver for the USB audio gadget with the help of phofman.
And if you are ambitious there is a set of proposed patches to add multiple rate support here: [3/3] usb: gadget: f_uac*: Support multiple sampling rates - Patchwork might require some fixes for the latest kernels.
And if you are ambitious there is a set of proposed patches to add multiple rate support here: [3/3] usb: gadget: f_uac*: Support multiple sampling rates - Patchwork might require some fixes for the latest kernels.
The conversations I saw about that proposed change indicated that it would mess up a bunch of other changes that another developer was implementing. While multiple sample rates would be great, at this point I don't want to make any more changes that I have to...
phofman: below is the output from lsusb -v on the host, only for the audio gadget
Code:
Bus 001 Device 019: ID 1d6b:0101 Linux Foundation Audio Gadget
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 239 Miscellaneous Device
bDeviceSubClass 2 ?
bDeviceProtocol 1 Interface Association
bMaxPacketSize0 64
idVendor 0x1d6b Linux Foundation
idProduct 0x0101 Audio Gadget
bcdDevice 4.19
iManufacturer 1 Linux 4.19.67-v7l+ with fe980000.usb
iProduct 2 Linux USB Audio Gadget
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 219
bNumInterfaces 3
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xc0
Self Powered
MaxPower 2mA
Interface Association:
bLength 8
bDescriptorType 11
bFirstInterface 0
bInterfaceCount 3
bFunctionClass 1 Audio
bFunctionSubClass 0
bFunctionProtocol 32
iFunction 4 Source/Sink
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 1 Control Device
bInterfaceProtocol 32
iInterface 5 Topology Control
AudioControl Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 1 (HEADER)
bcdADC 2.00
bCategory 8
wTotalLength 83
bmControl 0x00
AudioControl Interface Descriptor:
bLength 8
bDescriptorType 36
bDescriptorSubtype 10 (CLOCK_SOURCE)
bClockID 6
bmAttributes 0x01 Internal fixed Clock
bmControls 0x01
Clock Frequency Control (read-only)
bAssocTerminal 0
iClockSource 6 48000Hz
AudioControl Interface Descriptor:
bLength 8
bDescriptorType 36
bDescriptorSubtype 10 (CLOCK_SOURCE)
bClockID 5
bmAttributes 0x01 Internal fixed Clock
bmControls 0x01
Clock Frequency Control (read-only)
bAssocTerminal 0
iClockSource 7 96000Hz
AudioControl Interface Descriptor:
bLength 17
bDescriptorType 36
bDescriptorSubtype 2 (INPUT_TERMINAL)
bTerminalID 1
wTerminalType 0x0101 USB Streaming
bAssocTerminal 0
bCSourceID 5
bNrChannels 2
bmChannelConfig 0x00000003
Front Left (FL)
Front Right (FR)
bmControls 0x0003
Copy Protect Control (read/write)
iChannelNames 0
iTerminal 8 USBH Out
AudioControl Interface Descriptor:
bLength 17
bDescriptorType 36
bDescriptorSubtype 2 (INPUT_TERMINAL)
bTerminalID 2
wTerminalType 0x0200 Input Undefined
bAssocTerminal 0
bCSourceID 6
bNrChannels 2
bmChannelConfig 0x00000003
Front Left (FL)
Front Right (FR)
bmControls 0x0003
Copy Protect Control (read/write)
iChannelNames 0
iTerminal 9 USBD Out
AudioControl Interface Descriptor:
bLength 12
bDescriptorType 36
bDescriptorSubtype 3 (OUTPUT_TERMINAL)
bTerminalID 4
wTerminalType 0x0101 USB Streaming
bAssocTerminal 0
bSourceID 2
bCSourceID 6
bmControls 0x0003
Copy Protect Control (read/write)
iTerminal 10 USBH In
AudioControl Interface Descriptor:
bLength 12
bDescriptorType 36
bDescriptorSubtype 3 (OUTPUT_TERMINAL)
bTerminalID 3
wTerminalType 0x0300 Output Undefined
bAssocTerminal 0
bSourceID 1
bCSourceID 5
bmControls 0x0003
Copy Protect Control (read/write)
iTerminal 11 USBD In
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 32
iInterface 12 Playback Inactive
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 1
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 32
iInterface 13 Playback Active
AudioStreaming Interface Descriptor:
bLength 16
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 1
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 4
bBitResolution 32
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 9
Transfer Type Isochronous
Synch Type Adaptive
Usage Type Data
wMaxPacketSize 0x0300 1x 768 bytes
bInterval 4
AudioControl Endpoint Descriptor:
bLength 8
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bmControls 0x00
bLockDelayUnits 1 Milliseconds
wLockDelay 1
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 32
iInterface 14 Capture Inactive
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 1
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 32
iInterface 15 Capture Active
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 0x81 EP 1 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x00c0 1x 192 bytes
bInterval 4
AudioControl Endpoint Descriptor:
bLength 8
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bmControls 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0
Device Qualifier (for other device speed):
bLength 10
bDescriptorType 6
bcdUSB 2.00
bDeviceClass 239 Miscellaneous Device
bDeviceSubClass 2 ?
bDeviceProtocol 1 Interface Association
bMaxPacketSize0 64
bNumConfigurations 1
Device Status: 0x0000
(Bus Powered)
Last edited:
phofman: here is lsusb -v output on the Pi, for the audio gadget:
Code:
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 1 Single TT
bMaxPacketSize0 64
idVendor 0x1d6b Linux Foundation
idProduct 0x0002 2.0 root hub
bcdDevice 4.19
iManufacturer 3 Linux 4.19.67-v7l+ dwc2_hsotg
iProduct 2 DWC OTG Controller
iSerial 1 fe980000.usb
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x0019
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xe0
Self Powered
Remote Wakeup
MaxPower 0mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0004 1x 4 bytes
bInterval 12
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 1
wHubCharacteristic 0x0008
Ganged power switching
Per-port overcurrent protection
TT think time 8 FS bits
bPwrOn2PwrGood 1 * 2 milli seconds
bHubContrCurrent 0 milli Ampere
DeviceRemovable 0x00
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0000
can't get device qualifier: Resource temporarily unavailable
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0001
Self Powered
@phofman: see output you requested below
Code:
pi@Pi4gadget:/proc/asound/UAC2Gadget/pcm0c/sub0 $ lsusb -t
/: [B][COLOR="Blue"]Bus 03.Port 1: Dev 1, Class=root_hub, Driver=dwc2/1p, 480M[/COLOR][/B]
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
Code:
pi@Pi4gadget:/proc/asound/UAC2Gadget/pcm0c/sub0 $ sudo lsusb -v
[B][COLOR="Blue"]Bus 003 Device 001:[/COLOR][/B] ID 1d6b:0002 Linux Foundation 2.0 root hub
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 1 Single TT
bMaxPacketSize0 64
idVendor 0x1d6b Linux Foundation
idProduct 0x0002 2.0 root hub
bcdDevice 4.19
iManufacturer 3 Linux 4.19.67-v7l+ dwc2_hsotg
iProduct 2 DWC OTG Controller
iSerial 1 fe980000.usb
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x0019
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xe0
Self Powered
Remote Wakeup
MaxPower 0mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0004 1x 4 bytes
bInterval 12
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 1
wHubCharacteristic 0x0008
Ganged power switching
Per-port overcurrent protection
TT think time 8 FS bits
bPwrOn2PwrGood 1 * 2 milli seconds
bHubContrCurrent 0 milli Ampere
DeviceRemovable 0x00
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0000
can't get device qualifier: Resource temporarily unavailable
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0001
Self Powered
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 3.00
bDeviceClass 9 Hub
bDeviceSubClass 0
bDeviceProtocol 3
bMaxPacketSize0 9
idVendor 0x1d6b Linux Foundation
idProduct 0x0003 3.0 root hub
bcdDevice 4.19
iManufacturer 3 Linux 4.19.67-v7l+ xhci-hcd
iProduct 2 xHCI Host Controller
iSerial 1 0000:01:00.0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x001f
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xe0
Self Powered
Remote Wakeup
MaxPower 0mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0004 1x 4 bytes
bInterval 12
bMaxBurst 0
Hub Descriptor:
bLength 12
bDescriptorType 42
nNbrPorts 4
wHubCharacteristic 0x0009
Per-port power switching
Per-port overcurrent protection
bPwrOn2PwrGood 10 * 2 milli seconds
bHubContrCurrent 0 milli Ampere
bHubDecLat 0.0 micro seconds
wHubDelay 0 nano seconds
DeviceRemovable 0x00
Hub Port Status:
Port 1: 0000.02a0 5Gbps power Rx.Detect
Port 2: 0000.02a0 5Gbps power Rx.Detect
Port 3: 0000.02a0 5Gbps power Rx.Detect
Port 4: 0000.02a0 5Gbps power Rx.Detect
Binary Object Store Descriptor:
bLength 5
bDescriptorType 15
wTotalLength 0x000f
bNumDeviceCaps 1
SuperSpeed USB Device Capability:
bLength 10
bDescriptorType 16
bDevCapabilityType 3
bmAttributes 0x02
Latency Tolerance Messages (LTM) Supported
wSpeedsSupported 0x0008
Device can operate at SuperSpeed (5Gbps)
bFunctionalitySupport 3
Lowest fully-functional device speed is SuperSpeed (5Gbps)
bU1DevExitLat 4 micro seconds
bU2DevExitLat 231 micro seconds
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0001
Self Powered
- Home
- Source & Line
- PC Based
- using a Raspberry Pi 4 as a USB DSP-DAC