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