Windows 10 UAC2 native driver summary

Technical discussions related to any XMOS development kit or reference design. Eg XK-1A, sliceKIT, etc.
bearcat
Respected Member
Posts: 270
Joined: Fri Mar 19, 2010 4:49 am

Windows 10 UAC2 native driver summary

Postby bearcat » Thu Jul 05, 2018 6:54 am

Here's my summary of usage of the USB Audio 2.0 reference with the Windows 10 UAC2 native driver:

Reference software works with only item #1. I tested the XS1-L1 HS Audio Development, and a custom board correctly with Windows 10 April 2018 version.

Notes:

1 - Explicit Feedback only. This is more compatible anyways. Windows Native, Linux good. Apple prefers implicit.
Need to add this to customdefines.h:
#define UAC_FORCE_FEEDBACK_EP

2 - Windows installation.
Plugging in the device will load the native driver automatically, good. But if you are changing any enumeration, or option,
you must uninstall the driver in device manager, unplug the device, update the firmware or debugger, then
plug back in. Windows will not automatically reconfigure for the new settings, and comes up in an unknown state upon changes.

3 - Recommend using different PIDs and product names if debugging for each configuration.
Use #ifdefines for product and PIDs for each different option. Such as testing between 2 channels / 8 channels.
Windows will start enumerating if names are the same (1 - product name).
Using different PIDs keeps it operating without uninstalls, as long as the configuration doesn't change.

4 - Native driver supports more than 2 channels!
I enumerated and tested a custom board with 4 inputs and 8 outputs just fine.

5 - Bit Perfect.
If you use the WASAPI audio interface, the output is bit perfect, phase correct, and will change frequencies with the source material.

6 - Audio stop.
The USB stream will start and stop with the source. It does not stay running.

7 - 24 Bit supported.
Probably 32 also, but did not test.

8 - Works through a hub.

9 - Appears to support the full 16.16 range for feedback. I did not mask the 3 lowest bits and works correctly.

10 - Volumes.
Not sure here. With enumerated as 7.1 surround, playback lower. As 2 channel it was correct. Probably a windows item.

11 - Limitations.
1 - No clock selector (i.e. SPDIF, ADAT, etc). They allow one, but will not provide a means to change it. Support a clock interrupt (not a selector).
2 - No DFU. Need your own solution.
3 - Not sure about HID, did not test.
4 - No ASIO. But see #5 above.
User avatar
akp
XCore Addict
Posts: 209
Joined: Thu Nov 26, 2015 11:47 pm

Postby akp » Thu Jul 05, 2018 1:41 pm

Great information! Thanks. Have you tried an inputs only config? That is generally the application I would be interested in. Would be interested to know the max channels -- especially on an inputs only config. I believe it is 8 if I understood the Microsoft document correctly.
bearcat
Respected Member
Posts: 270
Joined: Fri Mar 19, 2010 4:49 am

Postby bearcat » Thu Jul 05, 2018 4:17 pm

Inputs only is fine. If you do inputs only, then #1 is applied without needing any changes. I did not test above 8 outputs, so not sure of the limit.

12 - Mixer not tested. I did not enable or test using the mixer option for the reference software.
bearcat
Respected Member
Posts: 270
Joined: Fri Mar 19, 2010 4:49 am

Postby bearcat » Fri Jul 06, 2018 5:14 am

Let me correct myself above. I did not try an inputs only configuration. So I can't answer that one.

If you do outputs only (which I tried), it will then apply #1 automatically and does work.
User avatar
akp
XCore Addict
Posts: 209
Joined: Thu Nov 26, 2015 11:47 pm

Postby akp » Fri Jul 06, 2018 9:22 am

OK, thanks. For my work I typically want lots of inputs but usually don't need any outputs (sometimes want one or two outputs). I suppose if it needs outputs I could redirect to /dev/null so to speak ;-)
User avatar
infiniteimprobability
XCore Legend
Posts: 1116
Joined: Thu May 27, 2010 10:08 am
Contact:

Postby infiniteimprobability » Tue Sep 04, 2018 10:26 am

@bearcat - Thanks for your excellent work in this area and comprehensive compatibility notes. They will be useful for many users.

As correctly pointed out the key to making the current UAC2 (USB audio class 2) reference design work "driverless" on Windows 10 1703 onwards is:

Code: Select all

-DUAC_FORCE_FEEDBACK_EP=1
in the Makefile.

Failure to do that will get an entry in the windows system log saying "The driver could not find a feedback endpoint for an asynchronous data OUT endpoint on device \Device\xxxxxx".

Who is online

Users browsing this forum: No registered users and 160 guests