I really like the concept of trackpoints that are used in Lenovo Thinkpads. While it's not as precise as a normal computer mouse, the ability to move the cursor or scroll without even moving your fingers is great. Despite visual similarity with a joystick, trackpoint uses a completely different technology. The part underneath the rubber nib is completely rigid. Plastic piece underneath it is directly attached to the PCB. All the flex comes from the rubber nib. The PCB has some pressure sensors printed on it, which are used to determine the direction and force.

Most of the trackpoints are built on a TPM754A chip and use PS/2 protocol. They all have different pinout, but you can find the necessary pins on the flex cable with a multimeter.
Take a look at the datasheet for TPM754A.

I used this image to find the pins TP.DATA, TP_CLK, RST, VCC, GND. The corresponding pin numbers and names of TPM754A are shown on the picture.

Trackpoint pinout

You can connect it directly to the PS/2 of your PC if you want. The only thing you need is a capacitor between VCC and RST and a resistor between GND and RST. That creates a pulse on reset pin when you first turn it on.
But not all PCs have PS/2 connector and the lack of hot-plug functionality is annoying.
To solve that problem you can use an Arduino Pro Micro or any other microcontroller with USB support.
I used this library to communicate with the trackpoint. The only thing you may want to add to is a method to change drift time parameter (0x5F). Just use method "setSensitivityFactor" as an example.
Here is an example sketch that you can use.

I decided to use the trackpoint for scrolling. In the sketch I set the middle button pressed whenever the tackpoint moves. To make the trackpoint scroll whenever the middle button is pressed I added this to my Xorg config

Section "InputClass"
        Identifier "My Mouse"
        MatchIsPointer "on"
        MatchProduct "Arduino LLC Arduino Micro"
        Driver "libinput"
        Option  "ScrollMethod"  "button"
        Option "ScrollButton" "2"
EndSection

Now I can smoothly scroll twitter timeline without having to even move a finger.

Somewhat final result looks like this

Your browser does not support HTML video.


1 Comments latest

  • LeandroCzbr

    this is very cool i had a lenovo and its funny to use it