STRUCT TP_FINGER(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

🌸 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 last crc16 field. 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