This question is likely rhetorical, but here goes.
Has anyone had any success in implementing a USB device using a class other than the handful which are supported by the Tiva USB library?
The library is crazy. Multiple levels of redirection, structures within structures, and while there is some documentation on how to do this, it's not very helpful.
Specifically, I want to implement the USB MIDI Device class. This is a subset of the Audio Class (which has "support" in the Tiva USB library but no examples are provided). Since it has two interfaces, it should be configured as a composite device, with the Audio Control interface (over the control endpoint) and the MIDI Streaming interface (which uses two bulk endpoints, one in each direction).
I started with the provided bulk example, because that appears to be close to what I need. But jeez, can it be any more complicated? Just the way the descriptors are set up, with the tConfigSection, and then an array of them, and then the tConfigHeaders and then an array of them -- why? Why not just let the descriptors be two structures, one for the device descriptor and one for the entire configuration descriptor?
There is a structure defined called tUSBBulkDevice which gets passed around a lot, and this has a private member structure tBulkInstance and just unwrapping this all is difficult because nowhere is it documented why this is all set up as it is. (The great failing of doxygen!)
(I notice that this is all pretty much the same for the MSP432 devices.)
I implemented this device class on the Silicon Labs EFM8UB2 and also on their EFM32GG11, using their provided USB device library, and the whole process was straightforward and took less than a week.