From 360711e7489ca5987ed1e440d757f6846b734b8c Mon Sep 17 00:00:00 2001
From: Serge Bazanski <q3k@q3k.org>
Date: Sun, 6 Aug 2023 23:15:40 +0200
Subject: [PATCH] py: initial bl00mbox stubs

---
 python_payload/apps/demo_melodic/__init__.py  |  2 +-
 python_payload/apps/simple_drums/__init__.py  | 29 ++++++++++--------
 python_payload/mypystubs/bl00mbox.pyi         | 23 --------------
 .../mypystubs/bl00mbox/__init__.pyi           | 23 ++++++++++++++
 python_payload/mypystubs/bl00mbox/patches.pyi | 30 +++++++++++++++++++
 5 files changed, 71 insertions(+), 36 deletions(-)
 delete mode 100644 python_payload/mypystubs/bl00mbox.pyi
 create mode 100644 python_payload/mypystubs/bl00mbox/__init__.pyi
 create mode 100644 python_payload/mypystubs/bl00mbox/patches.pyi

diff --git a/python_payload/apps/demo_melodic/__init__.py b/python_payload/apps/demo_melodic/__init__.py
index 10f4f79ca2..20b02e8930 100644
--- a/python_payload/apps/demo_melodic/__init__.py
+++ b/python_payload/apps/demo_melodic/__init__.py
@@ -12,7 +12,7 @@ from st3m.ui.view import ViewManager
 from ctx import Context
 
 octave = 0
-synths = []
+synths: List[bl00mbox.patches.tinysynth_fm] = []
 scale = [0, 2, 4, 5, 7, 9, 11]
 
 
diff --git a/python_payload/apps/simple_drums/__init__.py b/python_payload/apps/simple_drums/__init__.py
index 31c95f90e4..3abfe34ba6 100644
--- a/python_payload/apps/simple_drums/__init__.py
+++ b/python_payload/apps/simple_drums/__init__.py
@@ -5,17 +5,26 @@ import leds
 
 from st3m.application import Application
 from st3m.input import InputState
+from st3m.goose import Tuple
+from ctx import Context
 
 
 class Dot:
-    def __init__(self, sizex, sizey, imag, real, col):
+    def __init__(
+        self,
+        sizex: float,
+        sizey: float,
+        imag: float,
+        real: float,
+        col: Tuple[float, float, float],
+    ) -> None:
         self.sizex = sizex
         self.sizey = sizey
         self.imag = imag
         self.real = real
         self.col = col
 
-    def draw(self, i, ctx):
+    def draw(self, i: int, ctx: Context) -> None:
         imag = self.imag
         real = self.real
         sizex = self.sizex
@@ -47,14 +56,11 @@ class SimpleDrums(Application):
         self.seq.bpm = 80
         self.blm.background_mute_override = True
 
-    def _highlight_petal(self, num, r, g, b):
+    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)
 
-    def on_foreground(self):
-        pass
-
-    def _track_col(self, track, smol=False):
+    def _track_col(self, track: int) -> Tuple[int, int, int]:
         rgb = (20, 20, 20)
         if track == 0:
             rgb = (0, 255, 0)
@@ -62,11 +68,9 @@ class SimpleDrums(Application):
             rgb = (0, 0, 255)
         elif track == 2:
             rgb = (255, 0, 0)
-        if smol:
-            rgb = [x / 256 for x in rgb]
         return rgb
 
-    def draw(self, ctx):
+    def draw(self, ctx: Context) -> None:
         dots = []
         groupgap = 4
         for i in range(4):
@@ -82,7 +86,8 @@ class SimpleDrums(Application):
                 )
 
         for track in range(3):
-            rgb = self._track_col(track, smol=True)
+            rgb = self._track_col(track)
+            rgbf = (rgb[0] / 256, rgb[1] / 256, rgb[2] / 256)
             y = 12 * (track - 1)
             for i in range(16):
                 trigger_state = self.seq.trigger_state(track, i)
@@ -92,7 +97,7 @@ class SimpleDrums(Application):
                 x = 12 * (7.5 - i)
                 x += groupgap * (1.5 - (i // 4))
                 x = int(x)
-                dots.append(Dot(size, size, x, y, rgb))
+                dots.append(Dot(size, size, x, y, rgbf))
 
         dots.append(Dot(1, 40, 0, 0, (0.5, 0.5, 0.5)))
         dots.append(Dot(1, 40, 4 * 12 + groupgap, 0, (0.5, 0.5, 0.5)))
diff --git a/python_payload/mypystubs/bl00mbox.pyi b/python_payload/mypystubs/bl00mbox.pyi
deleted file mode 100644
index 94437cc0b0..0000000000
--- a/python_payload/mypystubs/bl00mbox.pyi
+++ /dev/null
@@ -1,23 +0,0 @@
-class tinysynth:
-    def __init__(self, note: int) -> None:
-        pass
-    def tone(self, note: int) -> None:
-        pass
-    def start(self) -> None:
-        pass
-    def stop(self) -> None:
-        pass
-    def attack_ms(self, ms: int) -> None:
-        pass
-    def decay_ms(self, ms: int) -> None:
-        pass
-    def sustain_ms(self, ms: int) -> None:
-        pass
-    def release_ms(self, ms: int) -> None:
-        pass
-    def volume(self, v: float) -> None:
-        pass
-    def sustain(self, s: float) -> None:
-        pass
-    def waveform(self, i: int) -> None:
-        pass
diff --git a/python_payload/mypystubs/bl00mbox/__init__.pyi b/python_payload/mypystubs/bl00mbox/__init__.pyi
new file mode 100644
index 0000000000..b1369856a8
--- /dev/null
+++ b/python_payload/mypystubs/bl00mbox/__init__.pyi
@@ -0,0 +1,23 @@
+from bl00mbox import patches
+
+from typing import Optional, TypeVar, Any, Type
+
+patches = patches
+
+class Signal:
+    value: int
+
+class SignalList:
+    def __setattr__(self, name: str, value: Signal) -> None: ...
+    def __getattr__(self, name: str) -> Signal: ...
+
+class Bud:
+    signals: SignalList
+
+T = TypeVar("T")
+P = TypeVar("P", bound=patches._Patch)
+
+class Channel:
+    background_mute_override: bool
+    def new(self, thing: Type[T], init_var: Optional[Any] = None) -> T: ...
+    def new_patch(self, patch: Type[T], init_var: Optional[Any] = None) -> T: ...
diff --git a/python_payload/mypystubs/bl00mbox/patches.pyi b/python_payload/mypystubs/bl00mbox/patches.pyi
new file mode 100644
index 0000000000..4094d0c47f
--- /dev/null
+++ b/python_payload/mypystubs/bl00mbox/patches.pyi
@@ -0,0 +1,30 @@
+import bl00mbox
+
+from typing import List
+
+class _Patch: ...
+
+class tinysynth(_Patch):
+    def decay(self, v: float) -> None: ...
+    def waveform(self, v: int) -> None: ...
+    def attack(self, v: float) -> None: ...
+    def volume(self, v: float) -> None: ...
+    def sustain(self, v: float) -> None: ...
+    def release(self, v: float) -> None: ...
+    def tone(self, v: float) -> None: ...
+    def start(self) -> None: ...
+    def stop(self) -> None: ...
+
+class tinysynth_fm(tinysynth):
+    def fm_waveform(self, v: int) -> None: ...
+    def fm(self, v: float) -> None: ...
+
+class step_sequencer(_Patch):
+    seqs: List[bl00mbox.Bud]
+    bpm: int
+
+    def trigger_state(self, track: int, i: int) -> bool: ...
+    def trigger_toggle(self, track: int, i: int) -> None: ...
+
+class sampler(_Patch):
+    sampler: bl00mbox.Bud
-- 
GitLab