I’ve been working on a High Level USB Device Library.
The reason for this is kinda related to the series of posts about the STM32F103 clones I’ve published. The thing is, the STM32Cube* HAL is BSD licensed, but the USB Middleware is SLA044. This means, the HAL can be used on any clone without licensing issues, but the USB Middleware is only licensed to be used on STMicroelectronics products. The HAL is hardware specific, but the USB Middleware, technically, can run on any device, as it is high level, implementing the protocol, nothing hardware specific.
There is the libopenmc3 implementation, which has one high level USB protocol, and several implementation for the various USB supporting microcontrollers. However, libopencm3 is LGPL licensed. On a microcontroller, this is basically GPL. I’d prefer to see a BSD style licensed implementation.
Therefore, I’ve written my own. It’s not quite finished yet, but I’d say it is functional. I’ve made a library, and two test applications, one for the STM32F103C8T6, and one for the nRF52840. For both microcontrollers, the hardware drivers are BSD licensed. I’m happy to see manufacturers using a BSD license for their drivers.