From 8ebf85df68d4e7a40c4a09c0891179a720f1cb0d Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Fri, 30 Jun 2023 14:37:01 -0700 Subject: [PATCH] anomalous touch logger (#147) * anomalous touch logger * service * add evdev * rename * Update userspace/files/phantom_touch_logger.service --- userspace/files/phantom_touch_logger.service | 10 ++++++ userspace/services.sh | 1 + userspace/usr/comma/phantom_touch_logger.py | 35 ++++++++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 userspace/files/phantom_touch_logger.service create mode 100755 userspace/usr/comma/phantom_touch_logger.py diff --git a/userspace/files/phantom_touch_logger.service b/userspace/files/phantom_touch_logger.service new file mode 100644 index 0000000..68ca8f1 --- /dev/null +++ b/userspace/files/phantom_touch_logger.service @@ -0,0 +1,10 @@ +[Unit] +After=multi-user.target + +[Service] +User=comma +Restart=no +ExecStart=/usr/local/pyenv/shims/python -u /usr/comma/phantom_touch_logger.py + +[Install] +WantedBy=multi-user.target diff --git a/userspace/services.sh b/userspace/services.sh index 2b0bcc7..900ba9b 100755 --- a/userspace/services.sh +++ b/userspace/services.sh @@ -25,6 +25,7 @@ systemctl enable ssh-param-watcher.service systemctl enable home.mount systemctl enable logrotate-hourly.timer systemctl enable set_time.service +systemctl enable phantom_touch_logger.service # Disable some of our services systemctl disable serial-hostname.service diff --git a/userspace/usr/comma/phantom_touch_logger.py b/userspace/usr/comma/phantom_touch_logger.py new file mode 100755 index 0000000..c3fd07f --- /dev/null +++ b/userspace/usr/comma/phantom_touch_logger.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python3 +import sys +from collections import deque +from evdev import InputDevice, ecodes + +def log(msg): + # TODO: keep buffer of touch events + coords and dump after log + print(msg, file=sys.stderr) + +if __name__ == "__main__": + touch_starts = deque([0.]*20, maxlen=20) + + dev = InputDevice('/dev/input/by-path/platform-894000.i2c-event') + for event in dev.read_loop(): + #print(event.type, event.code, event.value) + + # TODO: consider multitouch events + if event.type == ecodes.EV_KEY and event.code == ecodes.BTN_TOUCH: + if event.value == 1: + touch_starts.append(event.timestamp()) + + avg_touch_dt = (max(touch_starts) - min(touch_starts)) / len(touch_starts) + avg_touch_freq = 1 / (avg_touch_dt + 0.0001) + if avg_touch_freq > 15: + log(f"Quick touch frequency {avg_touch_freq:.2f}s / {event}") + + if len(touch_starts) > 2: + dt = (touch_starts[-1] - touch_starts[-2]) + if dt < 0.02: + log(f"Quick consecutive touches {dt:.2f}s / {event}") + elif event.value == 0: + if len(touch_starts): + dt = event.timestamp() - touch_starts[-1] + if dt > 10.: + log(f"Touch point persisted for {dt:.2f}s / {event}")