About

In mid February my Thinkpad t42’s display became corrupted and within two weeks I had bought a new MacBook Pro. The brand new model featured modest upgrades including the multitouch technology previously found only in the iPhone, iPod Touch and MacBook Air. I dual booted it and got everything but the keyboard keys working. However, I could only use the touchpad as single pointer.

Over the next few weeks I managed to reverse engineer parts of the multitouch usb protocol. To do this I first needed to capture the usb traffic from a working driver which I could then emulate. I achieved this by utilizing usbmon and windows vista in vmware. (I’m making it sound easier than it was to figure out.) Once I had all of the data logged from a number of different scenarios, I wrote some Python scripts to interpret this data in specific ways which I could then use to determine what bytes were what. In my visualizer.py I finally noticed somewhat x/y and dx/dy patterns. Once I did this I wrote touchview.py to visualize incoming/logged data in the form of touches. I managed to coax the multitouch chip to send me the data through pyusb control commands copied from the windows driver.

My next step was to determine how best to integrate multitouch support into Linux.