[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