On USB HID, Keyboard LEDs, and device emulation (2024)

DIY keyboard lights and mouse moves spark gamer wheel drama

TLDR: An open-source FPGA project added simple USB keyboard/mouse support and is hacking in control for keyboard lights. Commenters cheered the progress but warned that sending commands back to devices—like force feedback on racing wheels—is the hard part, especially with big brands keeping docs secret.

An open‑source tinkerer just made keyboards and mice talk to his FPGA toy box, then took a victory lap by trying to make the keyboard lights obey. He skipped the heavy USB software stuff and used a tiny core that handles the basics, then dove into the USB rulebook to get Caps Lock to glow on command. It’s nerd magic, but the crowd’s reaction is the real show.

The loudest voice? A racing‑wheel hacker who said reading data from gadgets is easy, but sending commands back is where the pain begins—especially when big brands keep their manuals locked away. That set the tone: folks are impressed by the “it just works” keyboard and mouse, but warn that device control (like LEDs and force feedback) is where dragons live. Memes rolled in about “finally giving Caps Lock the respect it deserves,” while cautious readers pointed out that the project uses the simpler “Boot Protocol,” a BIOS-era mode that not every modern device supports.

People loved the no‑frills setup—just wire the USB pins to a Machdyne PMOD and go—and cheered the plan to build a keyboard/mouse emulator for testing. Verdict: bold, fun, and very hacker‑core, with a side of vendor‑docs drama.

Key Points

  • BoxLambda gained USB keyboard/mouse support using the NAND2Mario usb_hid_host core, with a Wishbone frontend and CDC bridging 12MHz USB to a 50MHz system clock.
  • The usb_hid_host core lacks keyboard LED control; adding it required studying the core and USB spec and building a keyboard/mouse emulator for simulation.
  • BoxLambda’s current components include Ibex RISC-V, Wishbone, DDR3 via Litex, OpenOCD/Verilator debug, VERA graphics, YM2149 audio, SD + FatFs, PicoRV32 PDMA, and Picolibc.
  • The usb_hid_host core handles enumeration via an internal 4-bit UKP, needs no USB PHY, uses a Machdyne USB Host PMOD, and exposes device/type/report and HID signals.
  • The core implements the USB HID Boot Protocol; not all devices support it, so basic devices are more likely to work; tested with Dell KB212-B keyboard and OCJ339 mouse.

Hottest takes

"Parsing the incoming HID data is easy, sending force feedback commands back to the wheel is a different story." — platevoltage
"A lot of USB sniffing had to be done given Logitech and MOZA’s lack of documentation." — platevoltage
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.