i can probably help with pointers to the libavr32 USB stuff if that is helpful.
it is atmel code, which is deep and weird, and then it was somewhat messily adapted. could use a scrub of dead code.
anyway, it is not really too hard to add a driver:
here, we tell usb host stack about the different USB host interfaces:
https://github.com/monome/libavr32/blob/main/conf/conf_usb_host.h#L16
you would add a new interface UHI_CDC or whatever
the driver code itself woud go in a new directory here:
https://github.com/monome/libavr32/tree/main/src/usb
you would mirror the structure of the existing drivers; in particular the configuration header expects a struct like this:
https://github.com/monome/libavr32/blob/main/src/usb/ftdi/uhi_ftdi.h#L18-L23
lets see, looks like we put atmel host interface glue stuff in usb/uhi_foo.h/c and business logic in usb/foo.h/c. in the FTDI case we just keep a static buffer of RX bytes and call the monome serial parsing protocol when there is enough stuff in the buffer:
https://github.com/monome/libavr32/blob/main/src/usb/ftdi/ftdi.c
we strip status bytes by appliying an offset to the rx buf accessor:
https://github.com/monome/libavr32/blob/main/src/usb/ftdi/ftdi.c#L138
so, the BL stuff is straightforward. the protocol stuff is nastier, e.g. these control requests for FTDI on connection:
https://github.com/monome/libavr32/blob/main/src/usb/ftdi/uhi_ftdi.c
i think CDC protocol would be easier to deal with. but it still would probably be better to teack down some atmel demo code than to try and figure it out from first principles and sitting down with the USB spec.
(… to be continued? LMK)
it does seem like writing a new driver for libavr32 would be more efficient than making a new hardware thing, and then having to write drivers for that thing anyways.