From 79af48dfdf40854324bb6f22bd9dcd47a632c60a Mon Sep 17 00:00:00 2001
From: schneider <schneider@blinkenlichts.net>
Date: Sat, 5 Aug 2023 00:22:50 +0200
Subject: [PATCH] imu: make available via standard input state

---
 python_payload/mypystubs/imu.pyi |  5 +++++
 python_payload/st3m/input.py     | 17 +++++++++++++++++
 sim/run.py                       |  1 +
 3 files changed, 23 insertions(+)

diff --git a/python_payload/mypystubs/imu.pyi b/python_payload/mypystubs/imu.pyi
index 8c23c49b3f..5809088f55 100644
--- a/python_payload/mypystubs/imu.pyi
+++ b/python_payload/mypystubs/imu.pyi
@@ -5,6 +5,11 @@ def acc_read() -> Tuple[float, float, float]:
     Returns current x, y, z accelerations in m/s**2.
     """
     ...
+def gyro_read() -> Tuple[float, float, float]:
+    """
+    Returns current pressure in Pa and temperature in degree C.
+    """
+    ...
 
 def pressure_read() -> Tuple[float, float]:
     """
diff --git a/python_payload/st3m/input.py b/python_payload/st3m/input.py
index 6842b50839..405388d66b 100644
--- a/python_payload/st3m/input.py
+++ b/python_payload/st3m/input.py
@@ -3,6 +3,7 @@ from st3m.ui.ctx import Ctx
 
 import hardware
 import captouch
+import imu
 
 import math
 
@@ -327,6 +328,19 @@ class TriSwitchState:
         self.middle._ignore_pressed()
         self.right._ignore_pressed()
 
+class IMUState:
+    __slots__ = ("acc", "gyro", "pressure", "temperature")
+
+    def __init__(self) -> None:
+        self.acc = (0., 0., 0.)
+        self.gyro = (0., 0., 0.)
+        self.pressure = 0.
+        self.temperature = 0.
+
+    def _update(self, ts: int, hr: InputState) -> None:
+        self.acc = imu.acc_read()
+        self.gyro = imu.gyro_read()
+        self.pressure, self.temperature = imu.pressure_read()
 
 class InputController:
     """
@@ -344,6 +358,7 @@ class InputController:
         "captouch",
         "left_shoulder",
         "right_shoulder",
+        "imu",
         "_ts",
     )
 
@@ -351,6 +366,7 @@ class InputController:
         self.captouch = CaptouchState()
         self.left_shoulder = TriSwitchState(TriSwitchHandedness.left)
         self.right_shoulder = TriSwitchState(TriSwitchHandedness.right)
+        self.imu = IMUState()
         self._ts = 0
 
     def think(self, hr: InputState, delta_ms: int) -> None:
@@ -358,6 +374,7 @@ class InputController:
         self.captouch._update(self._ts, hr)
         self.left_shoulder._update(self._ts, hr)
         self.right_shoulder._update(self._ts, hr)
+        self.imu._update(self._ts, hr)
 
     def _ignore_pressed(self) -> None:
         """
diff --git a/sim/run.py b/sim/run.py
index 7b8e92cda1..e133ed19d7 100644
--- a/sim/run.py
+++ b/sim/run.py
@@ -1,4 +1,5 @@
 import importlib
+import importlib.abc
 import importlib.machinery
 from importlib.machinery import PathFinder, BuiltinImporter
 import importlib.util
-- 
GitLab