This is one of my more esoteric projects. Back in 2008, someone on the classiccmp mailing lists acquired a large number of IBM 6094-020 Lighted Program Function Keyboards. Given that Codeninja had already reverse engineered the LPFK and documented the protocol, I figured the LPFK would be a nice, easy project.
Bzzzkt! Wrong! GOTO 10 and try again.
Turns out Codeninja's LPFK didn't use the same protocol as mine. Thankfully, Michael Brutman got hold of some IBM documents detailing the functions of the LPFK and its control protocol, and did what any self-respecting hacker would: he summarised them and put them online :)
Internally the LPFK consists of a (code-protected) Intel 8051 microcontroller and some support circuitry. Power consumption is about 500mA with all the lights on. I used an FTDI TTL232 cable and a MAX232 to drive the LPFK -- this means the power is taken directly from the PC. I also reprogrammed the FT232's EEPROM so that it declared its need for 500mA of power to the host PC.
liblpfk is an implementation of the LPFK protocol for Linux (and probably BSD as well, though this hasn't been tested). The API is pretty simple -- connect, disconnect, enable/disable keypress notification, set/clear LEDs, and get keypress. I've included a few demos -- Ethan Dicks's "LPFK Binary Clock", and my "LPFK Life" (an implementation of Conway's Game of Life which uses the LPFK lights and keys). Also included are a ton of comments in the source, which can be converted into HTML documentation using Doxygen. Simples!