11-25-2018, 03:00 PM
I have been trying to understand the trackpad in the pinebook, and this is an attempt to document what I've observed.
The wiki has a link to a trackpad datasheet.
I've setup wireshark's USB capture and attempted to replicate the gestures in the datasheet to understand what's going on.
First, there the USB descriptor. The trackpad identifies its self as a USB mouse consisting of 5 buttons and 4 axes. That's a 5 byte USB HID report consisting of 1 byte of buttons, and 1 byte each of X, Y, Z, and W axes.
Button 1 ("left click") can be activated by single tap or depressing the bottom left corner (there's a physical switch).
Button 2 ("right click") can be activated by double tap or depressing the bottom right corner (again, physical switch).
X and Y axes are the usual single finger drag in X and/or Y axis of the trackpad.
Z axis is two-finger drag up or down.
W axis is two-finger drag left or right.
Pinch-zoom is an interesting case because it first generates a keyboard event of the left control button being depressed, followed by + or - Z axis mouse events, ending with a left control button up keyboard event.
3 and 4 finger taps generate a null mouse report (a report is generated with all buttons up, no movement on any axis). Given the datasheet and the zoom behavior, I would have expected these to generate a keyboard report. IMO, it would be nice if these were buttons 3 and 4.
3 finger drag appears to report the same as 1 finger drag (X and Y axes reported). Given the datasheet, I would have expected these to generate combination keyboard/mouse events as well.
The trackpad does not appear to ever report both buttons being down simultaneously. A button 1 down, button 2 down, should generate a usb report with both buttons down, then button up events as each is released. However, that does not seem to be the case. This seems to make 2 button emulation of a 3rd button not work. This seems like a bug.
Despite the USB descriptor reporting 5 buttons, I could only ever activate 2.
The wiki has a link to a trackpad datasheet.
I've setup wireshark's USB capture and attempted to replicate the gestures in the datasheet to understand what's going on.
First, there the USB descriptor. The trackpad identifies its self as a USB mouse consisting of 5 buttons and 4 axes. That's a 5 byte USB HID report consisting of 1 byte of buttons, and 1 byte each of X, Y, Z, and W axes.
Button 1 ("left click") can be activated by single tap or depressing the bottom left corner (there's a physical switch).
Button 2 ("right click") can be activated by double tap or depressing the bottom right corner (again, physical switch).
X and Y axes are the usual single finger drag in X and/or Y axis of the trackpad.
Z axis is two-finger drag up or down.
W axis is two-finger drag left or right.
Pinch-zoom is an interesting case because it first generates a keyboard event of the left control button being depressed, followed by + or - Z axis mouse events, ending with a left control button up keyboard event.
3 and 4 finger taps generate a null mouse report (a report is generated with all buttons up, no movement on any axis). Given the datasheet and the zoom behavior, I would have expected these to generate a keyboard report. IMO, it would be nice if these were buttons 3 and 4.
3 finger drag appears to report the same as 1 finger drag (X and Y axes reported). Given the datasheet, I would have expected these to generate combination keyboard/mouse events as well.
The trackpad does not appear to ever report both buttons being down simultaneously. A button 1 down, button 2 down, should generate a usb report with both buttons down, then button up events as each is released. However, that does not seem to be the case. This seems to make 2 button emulation of a 3rd button not work. This seems like a bug.
Despite the USB descriptor reporting 5 buttons, I could only ever activate 2.