hardwared: log touch events (#34225)

* touch

* touch

* touch

* touch

* this

* valid

* better
pull/34234/head
Maxime Desroches 4 months ago committed by GitHub
parent da2c70e097
commit 64db514d41
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 11
      cereal/log.capnp
  2. 1
      cereal/services.py
  3. 30
      system/hardware/hardwared.py

@ -2440,6 +2440,14 @@ struct Microphone {
filteredSoundPressureWeightedDb @2 :Float32; filteredSoundPressureWeightedDb @2 :Float32;
} }
struct Touch {
sec @0 :Int64;
usec @1 :Int64;
type @2 :UInt8;
code @3 :Int32;
value @4 :Int32;
}
struct Event { struct Event {
logMonoTime @0 :UInt64; # nanoseconds logMonoTime @0 :UInt64; # nanoseconds
valid @67 :Bool = true; valid @67 :Bool = true;
@ -2520,6 +2528,9 @@ struct Event {
logMessage @18 :Text; logMessage @18 :Text;
errorLogMessage @85 :Text; errorLogMessage @85 :Text;
# touch frame
touch @135 :List(Touch);
# navigation # navigation
navInstruction @82 :NavInstruction; navInstruction @82 :NavInstruction;
navRoute @83 :NavRoute; navRoute @83 :NavRoute;

@ -22,6 +22,7 @@ _services: dict[str, tuple] = {
"temperatureSensor2": (True, 2., 200), "temperatureSensor2": (True, 2., 200),
"gpsNMEA": (True, 9.), "gpsNMEA": (True, 9.),
"deviceState": (True, 2., 1), "deviceState": (True, 2., 1),
"touch": (True, 20.),
"can": (True, 100., 2053), # decimation gives ~3 msgs in a full segment "can": (True, 100., 2053), # decimation gives ~3 msgs in a full segment
"controlsState": (True, 100., 10), "controlsState": (True, 100., 10),
"selfdriveState": (True, 100., 10), "selfdriveState": (True, 100., 10),

@ -2,6 +2,7 @@
import os import os
import json import json
import queue import queue
import struct
import threading import threading
import time import time
from collections import OrderedDict, namedtuple from collections import OrderedDict, namedtuple
@ -59,6 +60,32 @@ def set_offroad_alert_if_changed(offroad_alert: str, show_alert: bool, extra_tex
prev_offroad_states[offroad_alert] = (show_alert, extra_text) prev_offroad_states[offroad_alert] = (show_alert, extra_text)
set_offroad_alert(offroad_alert, show_alert, extra_text) set_offroad_alert(offroad_alert, show_alert, extra_text)
def touch_thread(end_event):
pm = messaging.PubMaster(["touch"])
event_format = "llHHi"
event_size = struct.calcsize(event_format)
event_frame = []
with open("/dev/input/by-path/platform-894000.i2c-event", "rb") as event_file:
while not end_event.is_set():
event = event_file.read(event_size)
if event:
(sec, usec, etype, code, value) = struct.unpack(event_format, event)
if etype != 0 or code != 0 or value != 0:
touch = log.Touch.new_message()
touch.sec = sec
touch.usec = usec
touch.type = etype
touch.code = code
touch.value = value
event_frame.append(touch)
else: # end of frame, push new log
msg = messaging.new_message('touch', len(event_frame), valid=True)
msg.touch = event_frame
pm.send('touch', msg)
event_frame = []
def hw_state_thread(end_event, hw_queue): def hw_state_thread(end_event, hw_queue):
"""Handles non critical hardware state, and sends over queue""" """Handles non critical hardware state, and sends over queue"""
@ -420,6 +447,9 @@ def main():
threading.Thread(target=hardware_thread, args=(end_event, hw_queue)), threading.Thread(target=hardware_thread, args=(end_event, hw_queue)),
] ]
if TICI:
threads.append(threading.Thread(target=touch_thread, args=(end_event,)))
for t in threads: for t in threads:
t.start() t.start()

Loading…
Cancel
Save