STRUCT TP_FINGER(9)
πΈ struct tp_finger(9) β the kernel API manual, but make it bestie-friendly πΈ
Okay so this is a page from the Kernel API Manual, and it's all about struct tp_finger β literally the single trackpad finger structure, and it's le16-aligned (iykyk, that's little-endian 16-bit alignment, the little detail that makes everything work). Get into it. π
β¨ SYNOPSIS β¨
struct tp_finger {
__le16 origin;
__le16 abs_x;
__le16 abs_y;
__le16 rel_x;
__le16 rel_y;
__le16 tool_major;
__le16 tool_minor;
__le16 orientation;
__le16 touch_major;
__le16 touch_minor;
__le16 unused[2];
__le16 pressure;
__le16 multi;
__le16 crc16;
};
That's the whole squad, bestie. Now let's meet the members one by one β no skipping, every single one ate. π«Ά
π Members π
originβ this one's zero when you're switching track finger. Basically its little "new finger, who dis" signal. πabs_xβ the absolute x coordinate. Where you at, horizontally? π₯abs_yβ the absolute y coordinate. Up-down realness. β¨rel_xβ relative x coordinate. Like, how much did you move from last time. πΈrel_yβ relative y coordinate. Same vibe, vertical edition. π¦tool_majorβ tool area, major axis. Fancy. πtool_minorβ tool area, minor axis. The supporting character. πorientationβ it's 16384 when it's a point, otherwise it's an 15 bit angle. I know. Just trust the math bestie. π’touch_majorβ touch area, major axis. Your fingertip but make it official. β¨touch_minorβ touch area, minor axis. The other axis of your fingertip. πunusedβ zeros. That's the whole description. They're just there, being zero, vibing. πpressureβ the pressure on the forcetouch touchpad. Yes, it feels you. πmultiβ one finger: varies. more fingers: constant. That's the rule, don't @ me. πcrc16β okay this one's important. On the last finger it's the crc over the whole message struct (i.e. message header + this struct) minus the lastcrc16field. It's unknown on all other fingers β like, nobody knows. It's giving mystery. π
Real talk though: that crc16 situation is a whole vibe check β last finger only, and it covers everything except itself. Don't forget the message header in that count, bestie. π§
π SEE ALSO π
Kernel file ./drivers/input/keyboard/applespi.c struct keyboard_protocol(9), struct touchpad_protocol(9), struct command_protocol_tp_info(9), struct touchpad_info_protocol(9), struct command_protocol_mt_init(9), struct command_protocol_capsl(9), struct command_protocol_bl(9), struct message(9), struct spi_packet(9) β go read your friends, they're iconic too. πβ¨
Kernel source file ./drivers/input/keyboard β dated October 2026. That's the sign-off babes, mwah. π«Άπ
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms