[wdmaudiodev] Re: UAC2 on Creator's: locked to 44.1?

  • From: Børge Strand-Bergesen <borge.strand@xxxxxxxxx>
  • To: wdmaudiodev@xxxxxxxxxxxxx
  • Date: Mon, 5 Jun 2017 20:24:52 +0200

Hi Tsai and Matthew,

Is there a way to run the Windows driver in debug mode?

In the firmware I can see the various requests the driver makes, but I
can't see if the Host is happy with them or not.

While the firmware was written to work with the UAC2 specification, it has
been tested practically on Linux, iOS, Android, OS X and a homebrew ASIO
driver. Our UAC1 implementation failed on OS X because volume control
wasn't implemented. I have no idea exactly what attribute Windows C.A.
requests and receives wrong. But if that is indeed the case, a list of
requests, or a log from the driver would be very handy indeed.


Best,
Børge

On Mon, Jun 5, 2017 at 4:55 AM, Tsai Tzung-Dar <dmarc-noreply@xxxxxxxxxxxxx>
wrote:

Hi Borge:
Please check your sample rate table. According the ADC 2.0 spec section
5.2.1 the sample rate table your provide is illegal. You can not provide a
sample rate range declare that has overlay. Your 6 discrete sample triplets
look like a correct declare.Please check it again.

BR,
Tzung-Dar Tsai


------------------------------
*寄件者:* Børge Strand-Bergesen <borge.strand@xxxxxxxxx>
*收件者:* wdmaudiodev@xxxxxxxxxxxxx
*寄件日期:* 2017/6/3 (週六) 7:42 PM

*主旨:* [wdmaudiodev] Re: UAC2 on Creator's: locked to 44.1?

Hi Tzung-Dar Tsai and Matthew,

Thanks a lot for your help!


Changing the clock type from 0b01 to 0b10 to mark it as internal and
variable did not unlock the other frequencies in the UAC2 driver in C.U. Do
I have a wrong definition of available clock speeds? Other drivers are able
to set the sample rate. Or is there a poll by the OS where the device
perhaps responds with the wrong answer or not at all?

Could the sample rate definition be wrong?

The report generating code is here, CSD_ID_2 = 0x05:
https://github.com/borgestrand/sdr-widget/blob/
audio-widget-experimental/src/uac2_usb_specific_request.c#L112
and
https://github.com/borgestrand/sdr-widget/blob/
audio-widget-experimental/src/uac2_usb_specific_request.c#L979

Around L112 I have tried both two ranges (44.1:44.1:176.4 and 48:48:192)
and six discrete values. (The _1 and _2 postfixes aren't used anymore.)
With the six discrete values C.U. doesn't recognize the DAC, and the DIY
ASIO driver recognizes all frequencies but 192. With two ranges, C.U.
recognizes the DAC and locks it to 44.1


Matthew,
are you aware of all the clock / frequency / sample rate queries the
Windows UAC2 driver makes? I suspect the firmware is under-reporting
something. (I've seen this before, when iOS refused to play on UAC1 FW
which didn't report all its volume control settings.)



Today's product stems from one which has both microphone and speakers, but
only implements speakers. Setting bNrChannels and bmChannelConfig to 0 is
no problem in the input terminal descriptor, but in the output terminal
descriptor this at least fails with the ASIO driver which comes with the
project. Now, it may very well be that the ASIO driver and the firmware
share a bug here.

Is input terminal 0x11 a big deal? There are quite a few terminals
defined, and I'd have to renumber quite a few to change from 0x11.


Thanks,
Børge


On Sat, Jun 3, 2017 at 10:40 AM, Tsai Tzung-Dar <
dmarc-noreply@xxxxxxxxxxxxx> wrote:

Hi Borge:
I think I find the reason why you only get 44.1 sample rate. Because your
clock unit declare it is internal fixed clock . It means the sample rate
can not be change. By the way I also find your input terminal unit 0x11 is
not correct. The field of bNrChannls and bmChannelConfig should set to 0.

BR,
Tzung-Dar Tsai


------------------------------
*寄件者:* Børge Strand-Bergesen <borge.strand@xxxxxxxxx>
*收件者:* wdmaudiodev@xxxxxxxxxxxxx
*寄件日期:* 2017/6/3 (週六) 3:40 PM

*主旨:* [wdmaudiodev] Re: UAC2 on Creator's: locked to 44.1?

OK, here it is. Camptured with the Thesycon Descriptor Dumper.

If I remember correctly (the descriptor wasn't written by me, but I can
edit it), the frequencies are not given as discrete values but as a range
start, end, and increment.

Thanks,
Børge


Information for device Henry Audio USB DAC 128 mkII (VID=0x16D0
PID=0x075D):

Connection Information:
------------------------------
Connection status: Device connected
Device actual bus speed: HighSpeed
Device supports USB 1.1 specification
Device supports USB 2.0 specification
Device is hub: No
Device address: 0x000A
Current configuration value: 0x01
Number of open pipes: 2

Device Descriptor:
------------------------------
0x12 bLength
0x01 bDescriptorType
0x0200 bcdUSB
0xEF bDeviceClass   (Miscellaneous device)
0x02 bDeviceSubClass
0x01 bDeviceProtocol
0x40 bMaxPacketSize0   (64 Bytes)
0x16D0 idVendor
0x075D idProduct
0x1000 bcdDevice
0x01 iManufacturer   "Audio-Widget"
0x02 iProduct   "Henry Audio USB DAC 128 mkII"
0x03 iSerialNumber   "2017042900BSB"
0x01 bNumConfigurations

Device Qualifier Descriptor:
------------------------------
0x0A bLength
0x06 bDescriptorType
0x0200 bcdUSB
0xEF bDeviceClass   (Miscellaneous device)
0x02 bDeviceSubClass
0x01 bDeviceProtocol
0x40 bMaxPacketSize0   (64 Bytes)
0x01 bNumConfigurations
0x00 bReserved

Configuration Descriptor:
------------------------------
0x09 bLength
0x02 bDescriptorType
0x00C1 wTotalLength   (193 Bytes)
0x04 bNumInterfaces
0x01 bConfigurationValue
0x00 iConfiguration
0x80 bmAttributes   (Bus-powered Device)
0xFA bMaxPower   (500 mA)

Interface Descriptor:
------------------------------
0x09 bLength
0x04 bDescriptorType
0x00 bInterfaceNumber
0x00 bAlternateSetting
0x00 bNumEndPoints
0x00 bInterfaceClass
0x00 bInterfaceSubClass
0x00 bInterfaceProtocol
0x00 iInterface

Interface Association Descriptor:
------------------------------
0x08 bLength
0x0B bDescriptorType
0x01 bFirstInterface
0x02 bInterfaceCount
0x01 bFunctionClass   (Audio Device Class)
0x00 bFunctionSubClass
0x20 bFunctionProtocol
0x00 iFunction

Interface Descriptor:
------------------------------
0x09 bLength
0x04 bDescriptorType
0x01 bInterfaceNumber
0x00 bAlternateSetting
0x00 bNumEndPoints
0x01 bInterfaceClass   (Audio Device Class)
0x01 bInterfaceSubClass   (Audio Control Interface)
0x20 bInterfaceProtocol
0x07 iInterface   "Henry Audio USB DAC 128 mkII"

AC Interface Header Descriptor:
------------------------------
0x09 bLength
0x24 bDescriptorType
0x01 bDescriptorSubtype
0x0200 bcdADC
0x04 bCategory   (HEADSET)
0x0040 wTotalLength   (64 Bytes)
0x00 bmControls

AC Clock Source Descriptor:
------------------------------
0x08 bLength
0x24 bDescriptorType
0x0A bDescriptorSubtype
0x05 bClockID
0x01 bmAttributes
0x07 bmControls
0x03 bAssocTerminal
0x05 iClockSource   "Clock 2"

AC Input Terminal Descriptor:
------------------------------
0x11 bLength
0x24 bDescriptorType
0x02 bDescriptorSubtype
0x11 bTerminalID
0x0101 wTerminalType   (USB Streaming)
0x00 bAssocTerminal
0x05 bCSourceID
0x02 bNrChannels   (2 Channels)
0x00000003 bmChannelConfig
0x00 iChannelNames
0x00 bmControls
0x08 iTerminal   "Audio-widget"

AC Feature Unit Descriptor:
------------------------------
0x12 bLength
0x24 bDescriptorType
0x06 bDescriptorSubtype
0x12 bUnitID
0x11 bSourceID
0x00000003 bmaControls(0)
0x0000000C bmaControls(1)
0x0000000C bmaControls(2)
0x00 iFeature

AC Output Terminal Descriptor:
------------------------------
0x0C bLength
0x24 bDescriptorType
0x03 bDescriptorSubtype
0x13 bTerminalID
0x0602 wTerminalType   (Digital audio interface)
0x00 bAssocTerminal
0x12 bSourceID
0x05 bCSourceID
0x0000 bmControls
0x00 iTerminal

Interface Descriptor:
------------------------------
0x09 bLength
0x04 bDescriptorType
0x02 bInterfaceNumber
0x00 bAlternateSetting
0x00 bNumEndPoints
0x01 bInterfaceClass   (Audio Device Class)
0x02 bInterfaceSubClass   (Audio Streaming Interface)
0x20 bInterfaceProtocol
0x00 iInterface

Interface Descriptor:
------------------------------
0x09 bLength
0x04 bDescriptorType
0x02 bInterfaceNumber
0x01 bAlternateSetting
0x02 bNumEndPoints
0x01 bInterfaceClass   (Audio Device Class)
0x02 bInterfaceSubClass   (Audio Streaming Interface)
0x20 bInterfaceProtocol
0x00 iInterface

AS Interface Descriptor:
------------------------------
0x10 bLength
0x24 bDescriptorType
0x01 bDescriptorSubtype
0x11 bTerminalLink
0x07 bmControls
0x01 bFormatType   (FORMAT_TYPE_1)
0x00000001 bmFormats
0x02 bNrChannels   (2 Channels)
0x00000003 bmChannelConfig
0x00 iChannelNames

AS Format Type 1 Descriptor:
------------------------------
0x06 bLength
0x24 bDescriptorType
0x02 bDescriptorSubtype
0x01 bFormatType   (FORMAT_TYPE_1)
0x04 bSubslotSize
0x18 bBitResolution   (24 Bits/sample)

Endpoint Descriptor:
------------------------------
0x07 bLength
0x05 bDescriptorType
0x02 bEndpointAddress   (OUT Endpoint)
0x05 bmAttributes (Transfer: Isochronous / Synch: Asynchronous / Usage:
Data)
0x0188 wMaxPacketSize   (392 Bytes)
0x02 bInterval

AS Isochronous Data Endpoint Descriptor:
------------------------------
0x08 bLength
0x25 bDescriptorType
0x01 bDescriptorSubtype
0x00 bmAttributes
0x00 bmControls
0x00 bLockDelayUnits   (Undefined)
0x0000 wLockDelay

Endpoint Descriptor:
------------------------------
0x07 bLength
0x05 bDescriptorType
0x81 bEndpointAddress   (IN Endpoint)
0x11 bmAttributes (Transfer: Isochronous / Synch: None / Usage: Feedback)
0x0004 wMaxPacketSize   (4 Bytes)
0x04 bInterval

Interface Descriptor:
------------------------------
0x09 bLength
0x04 bDescriptorType
0x03 bInterfaceNumber
0x00 bAlternateSetting
0x02 bNumEndPoints
0x03 bInterfaceClass   (Human Interface Device Class)
0x00 bInterfaceSubClass
0x00 bInterfaceProtocol
0x00 iInterface

HID Descriptor:
------------------------------
0x09 bLength
0x21 bDescriptorType
0x0111 bcdHID
0x00 bCountryCode
0x01 bNumDescriptors
0x22 bDescriptorType   (Report descriptor)
0x0043 bDescriptorLength

Endpoint Descriptor:
------------------------------
0x07 bLength
0x05 bDescriptorType
0x84 bEndpointAddress   (IN Endpoint)
0x03 bmAttributes (Transfer: Interrupt / Synch: None / Usage: Data)
0x0008 wMaxPacketSize   (8 Bytes)
0x05 bInterval

Endpoint Descriptor:
------------------------------
0x07 bLength
0x05 bDescriptorType
0x05 bEndpointAddress   (OUT Endpoint)
0x03 bmAttributes (Transfer: Interrupt / Synch: None / Usage: Data)
0x0008 wMaxPacketSize   (8 Bytes)
0x05 bInterval

Other Speed Configuration Descriptor:
------------------------------
0x09 bLength
0x07 bDescriptorType
0x00C1 wTotalLength   (193 Bytes)
0x04 bNumInterfaces
0x01 bConfigurationValue
0x00 iConfiguration
0x80 bmAttributes   (Bus-powered Device)
0xFA bMaxPower   (500 mA)

Interface Descriptor:
------------------------------
0x09 bLength
0x04 bDescriptorType
0x00 bInterfaceNumber
0x00 bAlternateSetting
0x00 bNumEndPoints
0x00 bInterfaceClass
0x00 bInterfaceSubClass
0x00 bInterfaceProtocol
0x00 iInterface

Interface Association Descriptor:
------------------------------
0x08 bLength
0x0B bDescriptorType
0x01 bFirstInterface
0x02 bInterfaceCount
0x01 bFunctionClass   (Audio Device Class)
0x01 bFunctionSubClass   (Audio Control Interface)
0x20 bFunctionProtocol
0x07 iFunction   "Henry Audio USB DAC 128 mkII"

Interface Descriptor:
------------------------------
0x09 bLength
0x04 bDescriptorType
0x01 bInterfaceNumber
0x00 bAlternateSetting
0x00 bNumEndPoints
0x01 bInterfaceClass   (Audio Device Class)
0x01 bInterfaceSubClass   (Audio Control Interface)
0x20 bInterfaceProtocol
0x07 iInterface   "Henry Audio USB DAC 128 mkII"

AC Interface Header Descriptor:
------------------------------
0x09 bLength
0x24 bDescriptorType
0x01 bDescriptorSubtype
0x0200 bcdADC
0x04 bCategory   (HEADSET)
0x0040 wTotalLength   (64 Bytes)
0x00 bmControls

AC Clock Source Descriptor:
------------------------------
0x08 bLength
0x24 bDescriptorType
0x0A bDescriptorSubtype
0x05 bClockID
0x01 bmAttributes
0x07 bmControls
0x01 bAssocTerminal
0x00 iClockSource

AC Input Terminal Descriptor:
------------------------------
0x11 bLength
0x24 bDescriptorType
0x02 bDescriptorSubtype
0x11 bTerminalID
0x0101 wTerminalType   (USB Streaming)
0x00 bAssocTerminal
0x05 bCSourceID
0x02 bNrChannels   (2 Channels)
0x00000003 bmChannelConfig
0x00 iChannelNames
0x00 bmControls
0x00 iTerminal

AC Feature Unit Descriptor:
------------------------------
0x12 bLength
0x24 bDescriptorType
0x06 bDescriptorSubtype
0x12 bUnitID
0x11 bSourceID
0x00000003 bmaControls(0)
0x0000000C bmaControls(1)
0x0000000C bmaControls(2)
0x00 iFeature

AC Output Terminal Descriptor:
------------------------------
0x0C bLength
0x24 bDescriptorType
0x03 bDescriptorSubtype
0x13 bTerminalID
0x0602 wTerminalType   (Digital audio interface)
0x00 bAssocTerminal
0x12 bSourceID
0x05 bCSourceID
0x0000 bmControls
0x00 iTerminal

Interface Descriptor:
------------------------------
0x09 bLength
0x04 bDescriptorType
0x02 bInterfaceNumber
0x00 bAlternateSetting
0x00 bNumEndPoints
0x01 bInterfaceClass   (Audio Device Class)
0x02 bInterfaceSubClass   (Audio Streaming Interface)
0x20 bInterfaceProtocol
0x00 iInterface

Interface Descriptor:
------------------------------
0x09 bLength
0x04 bDescriptorType
0x02 bInterfaceNumber
0x01 bAlternateSetting
0x02 bNumEndPoints
0x01 bInterfaceClass   (Audio Device Class)
0x02 bInterfaceSubClass   (Audio Streaming Interface)
0x20 bInterfaceProtocol
0x00 iInterface

AS Interface Descriptor:
------------------------------
0x10 bLength
0x24 bDescriptorType
0x01 bDescriptorSubtype
0x11 bTerminalLink
0x07 bmControls
0x01 bFormatType   (FORMAT_TYPE_1)
0x00000001 bmFormats
0x02 bNrChannels   (2 Channels)
0x00000003 bmChannelConfig
0x00 iChannelNames

AS Format Type 1 Descriptor:
------------------------------
0x06 bLength
0x24 bDescriptorType
0x02 bDescriptorSubtype
0x01 bFormatType   (FORMAT_TYPE_1)
0x04 bSubslotSize
0x18 bBitResolution   (24 Bits/sample)

Endpoint Descriptor:
------------------------------
0x07 bLength
0x05 bDescriptorType
0x02 bEndpointAddress   (OUT Endpoint)
0x05 bmAttributes (Transfer: Isochronous / Synch: Asynchronous / Usage:
Data)
0x0188 wMaxPacketSize   (392 Bytes)
0x01 bInterval

AS Isochronous Data Endpoint Descriptor:
------------------------------
0x08 bLength
0x25 bDescriptorType
0x01 bDescriptorSubtype
0x00 bmAttributes
0x00 bmControls
0x00 bLockDelayUnits   (Undefined)
0x0000 wLockDelay

Endpoint Descriptor:
------------------------------
0x07 bLength
0x05 bDescriptorType
0x81 bEndpointAddress   (IN Endpoint)
0x11 bmAttributes (Transfer: Isochronous / Synch: None / Usage: Feedback)
0x0004 wMaxPacketSize   (4 Bytes)
0x01 bInterval

Interface Descriptor:
------------------------------
0x09 bLength
0x04 bDescriptorType
0x03 bInterfaceNumber
0x00 bAlternateSetting
0x02 bNumEndPoints
0x03 bInterfaceClass   (Human Interface Device Class)
0x00 bInterfaceSubClass
0x00 bInterfaceProtocol
0x00 iInterface

HID Descriptor:
------------------------------
0x09 bLength
0x21 bDescriptorType
0x0111 bcdHID
0x00 bCountryCode
0x01 bNumDescriptors
0x22 bDescriptorType   (Report descriptor)
0x0043 bDescriptorLength

Endpoint Descriptor:
------------------------------
0x07 bLength
0x05 bDescriptorType
0x84 bEndpointAddress   (IN Endpoint)
0x03 bmAttributes (Transfer: Interrupt / Synch: None / Usage: Data)
0x0008 wMaxPacketSize   (8 Bytes)
0x05 bInterval

Endpoint Descriptor:
------------------------------
0x07 bLength
0x05 bDescriptorType
0x05 bEndpointAddress   (OUT Endpoint)
0x03 bmAttributes (Transfer: Interrupt / Synch: None / Usage: Data)
0x0008 wMaxPacketSize   (8 Bytes)
0x05 bInterval

Microsoft OS Descriptor is not available. Error code: 0x0000001F

String Descriptor Table
------------------------------ --
Index  LANGID  String
0x00   0x0000  0x0409
0x01   0x0409  "Audio-Widget"
0x02   0x0409  "Henry Audio USB DAC 128 mkII"
0x03   0x0409  "2017042900BSB"
0x07   0x0409  "Henry Audio USB DAC 128 mkII"
0x05   0x0409  "Clock 2"
0x08   0x0409  "Audio-widget"

------------------------------

Connection path for device:
USB xHCI Compliant Host Controller
Root Hub
Henry Audio USB DAC 128 mkII (VID=0x16D0 PID=0x075D) Port: 2

Running on: Windows 10 or greater

Brought to you by TDD v1.84.0, Dec 14 2015, 09:19:38


On Sat, Jun 3, 2017 at 3:54 AM, Tsai Tzung-Dar <
dmarc-noreply@xxxxxxxxxxxxx> wrote:

Hi Borge:
Could you provide you descriptor? I had product which use XMOS and C-Media
solution that can list all sample rate. I think maybe your descriptor has
some problem on it.

BR,
Tzung-Dar Tsai


------------------------------
*寄件者:* Børge Strand-Bergesen <borge.strand@xxxxxxxxx>
*收件者:* wdmaudiodev@xxxxxxxxxxxxx
*寄件日期:* 2017/6/2 (週五) 9:15 PM
*主旨:* [wdmaudiodev] Re: UAC2 on Creator's: locked to 44.1?

OK, just did. I hope you see it from the other side :-)

https://aka.ms/Af3tvq

I have full access to firmware and descriptors on the device.


Thanks,
Børge

On Fri, Jun 2, 2017 at 2:35 PM, Matthew van Eerde <
dmarc-noreply@xxxxxxxxxxxxx> wrote:

No, the USB Audio 2.0 class driver should support all common sample rates.
Can you file a problem report in Feedback Hub from the computer in question?

https://blogs.msdn.microsoft. com/matthew_van_eerde/2016/09/
26/report-problems-with-logs- and-suggest-features-with-the- feedback-hub/
<https://blogs.msdn.microsoft.com/matthew_van_eerde/2016/09/26/report-problems-with-logs-and-suggest-features-with-the-feedback-hub/>

Use the “Share” widget to grab a direct link to the problem report in
question.

Send me the link.

*From: *Børge Strand-Bergesen <borge.strand@xxxxxxxxx>
*Sent: *Friday, June 2, 2017 3:11 AM
*To: *wdmaudiodev@xxxxxxxxxxxxx
*Subject: *[wdmaudiodev] UAC2 on Creator's: locked to 44.1?

Hi,

I have a test computer with a fresh installation of Win10 Creator's
update. UAC2 is recognized, but sample rate is locked to 44.1.

Is that on purpose? The same DAC (which I sell from www.henryaudio.com
<https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.henryaudio.com&data=02%7C01%7CMatthew.van.Eerde%40microsoft.com%7C1cac8a1c27054d34be0108d4a99fc0e7%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636319950994370015&sdata=BQeX2bPYVam1MzBUon%2F49Znb7W15f1Nkjch3JtTzl6A%3D&reserved=0>)
works with all rates from 44.1 to 192 on other OSes.


Best regards,
Børge













Other related posts: