my 2c:
i’d estimate the difficulty a little differently. yes, there are many calls to FTDI I/O functions in monome.c (so yeah that source is not just a parser but is also driving I/O logic.) but it is not complicated to refactor these, and its necessary regardless of what other I/O you want to add.
there are basically 5 I/O functions involved:
- read
- write
- busy?
- connected?
- bytes available?
these would of course have to be refactored in some way for other I/O channels. [in a nutshell, there needs to be a device data structure used by all these functions, which contains FPs to I/O routines.) but that is just a mechanical change, it doesn’t really require any new problem solving.
CDC i’d say is the simplest since its straightforward to add a new USB host driver. @okyeron has this most of the way there but i think could use some assistance with refactoring monome.h/.c.
i2c is pretty much equally easy.
adding hub support to libavr32 is way, way harder. it’s not even really feasible at all with the atmel avr32 middleware stack that we are using. would require extensive and deep rewrites with an expert understanding of the low-level USB spec.
(ok, i don’t actually think i have useful opinions on these “ecosystem” ideas.)