From 82cd658e7d76f33589ae2647e051f970f520b72a Mon Sep 17 00:00:00 2001
From: Serge Bazanski <q3k@q3k.org>
Date: Tue, 8 Aug 2023 17:58:55 +0200
Subject: [PATCH] py: use InputController in simple_drums

---
 python_payload/apps/simple_drums/__init__.py | 32 ++++++++++++--------
 1 file changed, 20 insertions(+), 12 deletions(-)

diff --git a/python_payload/apps/simple_drums/__init__.py b/python_payload/apps/simple_drums/__init__.py
index 96896c2dcb..cdc387ee41 100644
--- a/python_payload/apps/simple_drums/__init__.py
+++ b/python_payload/apps/simple_drums/__init__.py
@@ -52,7 +52,6 @@ class SimpleDrums(Application):
         self.hat.sampler.signals.trigger = self.seq.seqs[1].signals.output
         self.snare.sampler.signals.trigger = self.seq.seqs[2].signals.output
         self.track_names = ["kick", "hihat", "snare"]
-        self.ct_prev = captouch.read()
         self.track = 0
         self.seq.bpm = 80
         self.blm.background_mute_override = True
@@ -61,6 +60,14 @@ class SimpleDrums(Application):
         self.stopped = False
         self.bpm = self.seq.bpm
 
+        # True if a given track should be highlighted, when a corresponding
+        # petal is pressed.
+        self._group_highlight = [False for _ in range(4)]
+
+        # Disable repeat functionality as we want to detect long holds.
+        for i in range(10):
+            self.input.captouch.petals[i].whole.repeat_disable()
+
     def _highlight_petal(self, num: int, r: int, g: int, b: int) -> None:
         for i in range(5):
             leds.set_rgb((4 * num - i + 2) % 40, r, g, b)
@@ -79,7 +86,7 @@ class SimpleDrums(Application):
         dots = []
         groupgap = 4
         for i in range(4):
-            if self.ct_prev.petals[4 - i].pressed:
+            if self._group_highlight[i]:
                 dots.append(
                     Dot(
                         48 + groupgap,
@@ -162,17 +169,19 @@ class SimpleDrums(Application):
         self._highlight_petal(4 - (st // 4), *rgb)
         self._highlight_petal(6 + (st % 4), *rgb)
         leds.update()
-        ct = captouch.read()
+
+        petals = self.input.captouch.petals
+
+        self._group_highlight = [False for _ in range(4)]
         for i in range(4):
-            if ct.petals[4 - i].pressed:
+            if petals[4 - i].whole.down:
+                self._group_highlight[i] = True
                 for j in range(4):
-                    if ct.petals[6 + j].pressed and not (
-                        self.ct_prev.petals[6 + j].pressed
-                    ):
+                    if petals[6 + j].whole.pressed:
                         self.seq.trigger_toggle(self.track, i * 4 + j)
-        if ct.petals[5].pressed and not (self.ct_prev.petals[5].pressed):
-            self.track = (self.track + 1) % 3
-        if ct.petals[0].pressed and not (self.ct_prev.petals[0].pressed):
+        if petals[5].whole.pressed:
+            self.track = (self.track - 1) % 3
+        if petals[0].whole.pressed:
             if self.stopped:
                 self.seq.bpm = self.bpm
                 self.stopped = False
@@ -183,7 +192,7 @@ class SimpleDrums(Application):
                     self.bpm = bpm
             self.delta_acc = 0
 
-        if ct.petals[0].pressed:
+        if petals[0].whole.down:
             if self.tap_tempo_press_counter > 500:
                 self.seq.bpm = 0
                 self.stopped = True
@@ -194,4 +203,3 @@ class SimpleDrums(Application):
 
         if self.delta_acc < 3000:
             self.delta_acc += delta_ms
-        self.ct_prev = ct
-- 
GitLab