[alsa-devel] Boss GT-001

Keith A. Milner maillist at superlative.org
Thu Oct 8 13:51:54 CEST 2015


On Thursday 08 Oct 2015 09:02:22 Ricard Wanderlof wrote:

> When the Isochronous Synch Type is Asynchronous, there must be a feedback
> channel where the USB device reports back information so that it can
> adjust the output sampling rate
> (http://wiki.osdev.org/Universal_Serial_Bus#Asynchronous_Endpoints).
> 
> I might be barking up the wrong tree here as I'm new to this, but it looks
> as if endpoint 0x8e is providing the feedback data, and there doesn't seem
> to be any other isochronous endpoint defined in the lsusb dump which could
> be used for the actual capture cdata.
> 
> I'm not sure what 'Implicit feedback Data' means exactly though - is the
> feedback data multiplexed with the capture data perhaps?

I'm quite new to this too, but here is my interpretation.

Implicit feedback means "assumed" and, hence, there is actually no feedback 
channel. That would be "explicit feedback".

This seems to be backed up by the article you linked:

"Asynchronous source endpoints imply their data rate by the number of samples 
produced per (micro)frame. "

In this case the endpoint is an IN (with respect to the host) and so the rate 
is controlled by the GT-001's clock, and communicated to the host via the 
samples per microframe (wMaxPacketSize?) and it is the host's job to keep up 
with that.

On the other hand, playback data is different. According to the article:

"Asynchronous sink endpoints must provide explicit feedback to the source 
endpoint. When the source endpoint is the host, it is the responsibility of 
the device driver to process the explicit feedback properly. This feedback 
allows the host and device to make slight adjustments to the data rate in 
order to compensate for any clock drift."

So async playback (OUT) devices *do* seem to need explicit feedback.

My reading of the Interface descriptor data for the GT-001 is as follows:

Interface 1 has an OUT (playback) endpoint number 13 which is Isochronous and 
Asynchronous. The implications is explicit feedback is required from the 
device to the host to control the output rate.

Interface 2 has an IN (record) endpoint number 14 which is Isochronous and 
Asynchronous and uses implicit feedback, so no feedback channel is required.

Interface 3 is MIDI, comprising IN and OUT bulk data endpoints and IN and OUT 
interrupt endpoints. Note that this is a Roland MIDI Interface which has a 
specific quirk, where the endpoints contain multiple MIDI channels as 
specified by the Vendor specific CS_INTERFACE data:

** UNRECOGNIZED:  06 24 f1 02 03 03

This can be read as:
Field               Value   Description
bLength             0x06    Size of this descriptor in bytes
bDescriptorType     0x24    CS_INTERFACE
bDescriptorSubtype  0xf1    Roland specific
UNKNOWN             0x02    MIDI channels
UNKNOWN             0x03    Number of input MIDI channels
UNKNOWN             0x03    Number of output MIDI channels

So, in this case, there are 3 In and 3 OUT MIDI channels associated with this 
Interface.

However, these definitions don't seem to fully align with my configuration 
and, when I used those definitions in the quirk, playback didn't work. I guess 
it's entirely possible the attributes in the descriptor are complete rubbish.

I have some usbmon dumps which I will try to find time to analyze.

Cheers,

Keith


More information about the Alsa-devel mailing list