tools: allow measuring single-touch ABS_PRESSURE
authorPeter Hutterer <peter.hutterer@who-t.net>
Tue, 30 Oct 2018 23:55:17 +0000 (09:55 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Tue, 6 Nov 2018 00:24:06 +0000 (00:24 +0000)
Fixes #173

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
tools/libinput-measure-touchpad-pressure.py

index c04d8d6d361eb568d442cb381ab9c8293768f873..a7a2e34b139a906deecc81ceb9c9e614be035504 100755 (executable)
@@ -170,7 +170,12 @@ class Device(object):
         caps = all_caps.get(evdev.ecodes.EV_ABS, [])
         p = [cap[1] for cap in caps if cap[0] == evdev.ecodes.ABS_MT_PRESSURE]
         if not p:
-            raise InvalidDeviceError("device does not have ABS_MT_PRESSURE")
+            p = [cap[1] for cap in caps if cap[0] == evdev.ecodes.ABS_PRESSURE]
+            if not p:
+                raise InvalidDeviceError("device does not have ABS_PRESSURE/ABS_MT_PRESSURE")
+            self.has_mt_pressure = False
+        else:
+            self.has_mt_pressure = True
 
         p = p[0]
         prange = p.max - p.min
@@ -247,7 +252,8 @@ def handle_abs(device, event):
             except IndexError:
                 # If the finger was down at startup
                 pass
-    elif event.code == evdev.ecodes.ABS_MT_PRESSURE:
+    elif ((event.code == evdev.ecodes.ABS_MT_PRESSURE) or
+          (event.code == evdev.ecodes.ABS_PRESSURE and not device.has_mt_pressure)):
         try:
             s = device.current_sequence()
             s.append(Touch(pressure=event.value))