Information here is outdated. Look instead at the Latest Progress.
The new toy I got for christmas was a novation Launchpad. It’s a Midi controller developed specifically for ableton live, and is able to both generate midi data or trigger program actions.
Since my current computer is running ubuntu, I was planning to use it in that context, but the device uses its own protocol to communicate at the USB level. Luckily, the protocol is not a difficult one, in that it is stateless, and consists entirely of sending specific 3-byte sequences to the device. With that in mind, I started reading through documentation to figure out what it would take to develop a linux driver that was compatible with the protocol.
Two days later I have a reasonably stable kernel module, and a basic midi driver for the launchpad running under linux. I’ve placed the work as a google code project, and it is available for perusal: http://code.google.com/p/launchpadd/
The coding was really interesting, since it was my first experience writing a kernel module. The kernel environment has always scared me and perhaps rightly so, since I did cause several hard crashes while I was developing this code, but overall it was not unpleasant. The device did almost everything I wanted using the skeleton USB driver provided in the kernel source, with the one exception that the included driver did not support polling for events. Since I wanted to allow for non-blocking reads to the device I switched it’s queues so that it would properly hook up with the character device polling interface.
My eventual goal is to use the launchpad as a control device for my computer, showing and allowing for control of things like virtual desktop, volume, email, battery, and clipboards. I’ve already written a couple of these functions, and hope to have it essentially finished by the end of winter break when I go back to school. This has been one of the most fun programming projects I’ve undertaken in a while, since I get the excuse to write in several different contexts, and bring in several of the concepts like sockets and selecting that I got excited by in the fall.