[ltp] Hacking the UltraNav USB keyboard

Richard Neill linux-thinkpad@linux-thinkpad.org
Sat, 19 Jan 2008 16:02:55 +0000


Dear All,

I asked a while ago whether anyone had had any luck making the external 
USB Ultranav Keyboard work with Linux. (It's OK, except that the 
trackpoint sensitivity cannot be turned up to 100%, remaining at the 
default of 30%. This requirement of a forceful press is what I want to 
fix.) I had another go at it today; here's what I found:

1)There is a driver for the USB synaptics part of it.
    http://www.jan-steinhoff.de/linux/synaptics-usb.html
[sadly useless to me though - I have no use for the touchpad]

2)I tried to "reverse-engineer" the Windows driver. The idea was to use 
the  USB Sniffer (SnoopyPro, GPL) to capture packets from the bus; then 
to play back the relevant part of the log on Linux by using USB-Robot 
and libusb.
   http://sourceforge.net/projects/usbsnoop/
   http://usb-robot.sourceforge.net/

3)So, first I booted the TP into WindowsXP, plugged in the Ultranav USB, 
and the driver was installed automatically. Control Panel -> Mouse  and 
there is a tab for the Ultranav USB keyboard, and indeed the sensitivity 
can be adjusted. [Aside: the sensitivity slider has no effect unless the 
keyboard was plugged in at boot time; though it can be hot 
plugged/unplugged thereafter].

4)Now, I used SnoopyPro to install a "sniffer" on the various devices. 
These are:

   Synaptics Composite USB HID Device
   VendorID=06CB, ProductID=0009, MI = 00          #TouchPad

   Synaptics Composite USB HID Device
   VendorID=06CB, ProductID=0009, MI = 01          #TrakStyk


You can also find more info on these from the Windows Device Manager 
(Control Panel -> System)


Once the Snooper is "installed" on these, I restarted the device by 
unplugging/wait 10 sec/replugging. At this point, I could see about 60 
packets going to/from the device, including some configuration data, and 
if I move the mouse or trackpad, I see many more packets.


5)It should now be easy: call up the Ultranav control panel in XP, 
modify the sensitivity setting for the trackpoint, and watch the packets 
that are sent to the hardware.

Unfortunately, Windows doesn't seem to send any packets at all at that 
point! That is rather odd, since the sensitivity of the trackpoint was 
definitely changing when I moved the slider.

6)This means either:
    - I'm looking at the wrong thing
    - The sniffer can't capture certain control packets
    - There's a bug in SnoopyPro
    - There isn't a sensitivity register in the hardware itself, but it's
        all done in software.


Does anyone have any thoughts?

Best wishes,

Richard