Learned a lot about the USB HID spec tonight as I turned a raspberry pi zero into an emulated keyboard that is controlled by a http api. I have it hooked up to my kvm switch’s keyboard hotkey port, which means I can now actuate the kvm switch over my network, effectively making a “dumb” kvm switch into a smart one. This was all done to work around a limitation that prevents me from using my usb keyboard’s built-in trackpad when it was plugged into the hotkey port, but I think this toy could be applicable for all kinds of things. Frankly I love the idea of making more USB gadgets like these, all kids of device classes can be emulated, and making dumb devices smart (but not too smart) becomes trivial
An interesting idea for my next related project is to emulate a mass storage device: my Pi loads up the file system from my home server over NFS (from wifi, but could also do something really fancy like over a 4G modem so that it truly works from anywhere), and presents its contents to the USB host as if it were just a regular portable hard drive. That would open up a lot of possibilities for giving totally unexpected devices access to things they were never designed for!