linux-surface / surface-pro-x

Tracking and meta repository for Surface Pro X support.
81 stars 6 forks source link

Support for Multi-Touch #19

Closed qzed closed 2 years ago

qzed commented 2 years ago

Surface touchscreens can operate in two modes:

The basic SPI-HID transport channel for the device is already supported and we are currently running it in single-touch mode. Enabling multi-touch support should be as simple as modifying IPTSd, the user-space touch processing tool used on other Surface devices, to accept standard HID data via hidraw and support AArch64.

gus33000 commented 2 years ago

Hello!

Thought I would add some additional info here. The Surface Duo (that runs android) uses the same digitizer IC as the Surface Pro X (but only surface duo 1, not surface duo 2). It also works in single touch mode by default unless the heat processor is loaded. This heat processor is a thing on Surface Duo 1, in the vendor partition, and is compiled with symbols. This may help you figure out more things. It is different from previous surfaces so far (including on the surface pro x), as it doesn't make use of intel precise touch.

The file you're looking for would be libsurfacetouch.so under /vendor/lib64. The windows equivalent file is TouchPenProcessor0996.dll

(This lib comes with specific data for some surface models as well, I've seen configuration data for the surface pro x in this library as well)

qzed commented 2 years ago

Interesting, thanks!

The differentiation between IPTS and non-IPTS devices isn't that significant for us any more (also, AMD Surface devices use a similar HID-SPI interface without IPTS). We're bypassing the IPTS processing stack on IPTS devices due to GuC (required for that processing) not being available to us any more on Linux (Intel firmware changes, at least on the devices that actually still use it and not the Windows equivalent TouchPenProcessor.dll), which means we're more or less directly communicating with the digitizer IC in all cases. And it seems that they use the same core protocol for everything (although I haven't explicitly verified this on the SPX yet, but I see no reason for them to change it). On the SPI-HID variants (and newer Intel devices using Intel's THC), it's just wrapped in a HID wrapper.

The lib with symbols will definitely come in handy for us.

qzed commented 2 years ago

Thanks to @StollD implementing HID support for IPTSd, we now have multi-touch. As suspected, the raw data format hasn't changed, so it's the same processing stuff. Improvements to processing will be handled at https://github.com/linux-surface/iptsd.