And a shameless plug for an app that I wrote that uses an Arduino to turn your laptop into a keyboard & mouse, so you don't have to carry around an external keyboard for your Raspberry Pi.
In practice I now use CNLohr's EspUSB because it's even smaller. I dug out the old KeyMouSerial code last week to turn a mouse scrollwheel and iPod clickwheel into a rotary encoder.
V-USB can do much more besides: actuators (power switch, DMX), sensors (thermo, hygro), chip programmers, LCD displays... there are 170 projects listed on the Obdev page.
I recently built a force feedback steering wheel from scratch, and used a 32u4 as the MCU. I started the project a few years years ago, but lost interest in favor of picking up 3D printing. It was a lot easier to finish now that I can make arbitrary 3D shapes. I ended up printing an inline 80:1 two stage gear reduction. Thankfully someone in 2020 implemented the HID PID stack for the 32u4. That dropped the firmware work from probably a month to only a few days. The AVR is a bit long in the tooth; I only get a few hundred loops per second while the USB stack is running. It's plenty fast enough for all the haptic effects to feel good, though. It helped to offload the quadrature decoding to a dedicated IC.
Years ago I made a control panel for Kerbal Space Program, and I used a V-USB based MCU to drive two analog voltage meters as fuel gauges. I also had an Arduino Uno in the control panel, but I used up every single IO pin on it doing a button matrix and LEDs. Enumerating the V-USB MCU is touchy, but once it's up it seems reliable enough to gamble Jeb's life with!
Is HID PID fully implemented on Windows / Linux (i.e. does it load a generic driver like USB ACM or USB HID mouse / keyboard). I remember that I looked into this, but couldn't find any recent devices that use this.
Yes, both windows and linux have generic driver support for USB force feedback devices. All the firmware needs to do is provide the appropriate HID descriptor. The tricky bit is that the windows driver doesn't fully comply with the protocol spec, though. So, vendors that rely on the generic driver implement their firmware to be out of spec so that their products work in windows. The linux driver is rather pedantic about the spec, and errors out during initialization if the firmware doesn't conform to it.
In order to get my wheel working on linux, I had to modify the arduino library to comply with the spec. It was clearly written to work with windows. I haven't tried it on windows yet, but I suspect that it wouldn't work. There are smaller wheel vendors with stale customer support tickets regarding linux incompatibility.
I assume this is one of the reasons that larger companies like Logitech provide their own custom drivers, despite being 90% compatible with the generic HID spec.
I'm loosely involved with the HapticsIF (https://hapticsif.org). They are working towards a new haptic usage page. If I remember the sentiment of those meetings correctly, USB PID was considered very old and not easy to work with. Besides that a more recent haptics Usage page was considered limiting (only for single effects).
The USB protocol and driver are more a means for me than an end. What you linked to looks like the userspace facing API, rather than the USB PID driver specifically. My goal was to get Euro Truck Simulator 2 working. Presumably it's using the FF API, either directly or perhaps through a steam proton adaptor.
I got Dirt Rally sorta working too, but it wasn't really playable because the game doesn't seem to support multiple input devices, and I wired up my pedals through a separate 32u4 MCU.
It's on my list of things to do, but I'm about 3 hobby projects behind documenting at the moment. :-)
The most interesting bit is probably the gearbox, since it's an 8:1 stage then a 10:1 planetary stage. It's all printed PLA, stainless steel bolts, and bearings from amazon. There's two motors (to make it look cool, since one motor with the 80:1 reduction is probably already excessive), and a 1024 count encoder on the sun gear, giving 40960 counts per wheel revolution. It's all designed around the mounting holes of the steering wheel I used, too, so it's very pretty.
The electronics are "boring" in that I used an Arduino Leonardo, a quadrature decoder IC, and a 13A rated H-bridge. The trickiest bit was adding a "braking resistor" to keep the power supply voltage from shooting up when applying deceleration torque.
Atmel AVR Microcontrollers are commonly sold as Arduino.
Some chips (not ATMega 328P but ATMega 32U4) have native support for USB. This allows them to be used as USB HID devices: a keyboard and mouse.
Here is someone else's tutorial:
https://codeandlife.com/2012/02/11/v-usb-tutorial-continued-...
And a shameless plug for an app that I wrote that uses an Arduino to turn your laptop into a keyboard & mouse, so you don't have to carry around an external keyboard for your Raspberry Pi.
https://hackaday.com/2015/06/27/keymouserial-solves-your-ras...
In practice I now use CNLohr's EspUSB because it's even smaller. I dug out the old KeyMouSerial code last week to turn a mouse scrollwheel and iPod clickwheel into a rotary encoder.
https://www.youtube.com/watch?v=FPBzOaLbWhM
V-USB can do much more besides: actuators (power switch, DMX), sensors (thermo, hygro), chip programmers, LCD displays... there are 170 projects listed on the Obdev page.
https://www.obdev.at/products/vusb/projects.html