How we fixed USB Audio Class version 1.0



Description of the issue:

Back in 2014, we were developing USB speakphone for a client. This USB speakerphone was based on USB Audio Class 1.0. Windows natively supports USB Audio Class 1.0 which means there is no need to install a 3rd-party device driver.

Our device was based on Linux USB UAC1 gadget.

Our issue was that Windows host did not detect this Linux USB UAC1 gadget.

Challenge:

The challenge was that Windows host was like a black box, there was no way to set a breakpoint at Windows to see the error messages.

Our approach:

Our approach was to use USB analyzer to capture USB traffic for a working microcontroller based headset, we carefully read UAC1 spec, compared the differences between Linux USB UAC1 gadget and microcontroller based headset, changed our code and put the changes to test.

By carefully reading UAC1 spec and comparing USB traffic, we fixed the issue and upstreamed our fix to Linux kernel.