From dc11cdc6252ce7f7588700af9a25e8a50b041ad8 Mon Sep 17 00:00:00 2001
From: Sebastian Krzyszkowiak <dos@dosowisko.net>
Date: Sun, 12 Nov 2023 21:36:42 +0100
Subject: [PATCH] sim: fakes: Add more stubs

---
 sim/fakes/_sim.py        | 17 +++++++++++++++++
 sim/fakes/audio.py       | 24 ++++++++++++++++++++++-
 sim/fakes/ctx.py         |  8 ++++++++
 sim/fakes/leds.py        |  9 +++++++++
 sim/fakes/machine.py     |  8 ++++++++
 sim/fakes/network.py     | 12 +++++++++++-
 sim/fakes/sys_colors.py  | 16 +---------------
 sim/fakes/sys_display.py | 41 ++++++++++++++++++++++++++++++++++++++++
 sim/fakes/sys_kernel.py  | 17 +++++++++++++++++
 sim/fakes/sys_scope.py   |  5 ++++-
 10 files changed, 139 insertions(+), 18 deletions(-)

diff --git a/sim/fakes/_sim.py b/sim/fakes/_sim.py
index 82678dd6f4..087dcd2bc8 100644
--- a/sim/fakes/_sim.py
+++ b/sim/fakes/_sim.py
@@ -25,6 +25,23 @@ SCREENSHOT = False
 SCREENSHOT_DELAY = 5
 
 
+def path_replace(p):
+    simpath = "/tmp/flow3r-sim"
+    projectpath = os.path.dirname(
+        os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
+    )
+    if p.startswith("/flash/sys"):
+        p = p[len("/flash/sys") :]
+        p = projectpath + "/python_payload" + p
+        return p
+    if p.startswith("/flash"):
+        p = p[len("/flash") :]
+        p = simpath + p
+        return p
+
+    return p
+
+
 class Input:
     """
     Input implements an input overlay (for petals or buttons) that can be
diff --git a/sim/fakes/audio.py b/sim/fakes/audio.py
index 1bcae08891..bd49202836 100644
--- a/sim/fakes/audio.py
+++ b/sim/fakes/audio.py
@@ -1,6 +1,12 @@
 _volume = 0
 _muted = False
 
+INPUT_SOURCE_NONE = None
+INPUT_SOURCE_AUTO = None
+INPUT_SOURCE_HEADSET_MIC = None
+INPUT_SOURCE_LINE_IN = None
+INPUT_SOURCE_ONBOARD_MIC = None
+
 
 def set_volume_dB(v: float) -> None:
     global _volume
@@ -13,7 +19,7 @@ def get_volume_dB() -> float:
 
 
 def get_volume_relative() -> float:
-    return 0
+    return (_volume + 47) / (47 + 14)
 
 
 def headphones_set_volume_dB(v: float) -> None:
@@ -125,3 +131,19 @@ def line_in_get_allowed() -> bool:
 
 def onboard_mic_to_speaker_get_allowed() -> bool:
     return False
+
+
+def input_thru_set_source(source):
+    pass
+
+
+def input_thru_get_source():
+    return None
+
+
+def input_engines_get_source_avail(source):
+    return False
+
+
+def headset_mic_get_allowed():
+    return False
diff --git a/sim/fakes/ctx.py b/sim/fakes/ctx.py
index 925271793f..c282c8bc3b 100644
--- a/sim/fakes/ctx.py
+++ b/sim/fakes/ctx.py
@@ -134,6 +134,14 @@ class Context:
     def text_baseline(self, v):
         self._emit(f"textBaseline {v}")
 
+    @property
+    def compositing_mode(self):
+        return None
+
+    @compositing_mode.setter
+    def compositing_mode(self, v):
+        self._emit(f"compositingMode {v}")
+
     @property
     def line_width(self):
         return None
diff --git a/sim/fakes/leds.py b/sim/fakes/leds.py
index aadca2394f..c8b78d8dc1 100644
--- a/sim/fakes/leds.py
+++ b/sim/fakes/leds.py
@@ -37,10 +37,19 @@ def set_hsv(ix, h, s, v):
     set_rgb(ix, color.r / 255, color.g / 255, color.b / 255)
 
 
+def set_all_hsv(h, s, v):
+    for i in range(40):
+        set_hsv(i, h, s, v)
+
+
 def set_slew_rate(b: int):
     pass  # Better a no-op than not implemented at all.
 
 
+def get_slew_rate():
+    return 255
+
+
 def update():
     _sim.leds_update()
     pygame.event.post(pygame.event.Event(pygame.USEREVENT, {}))
diff --git a/sim/fakes/machine.py b/sim/fakes/machine.py
index 34d8eb7610..aa74ae1821 100644
--- a/sim/fakes/machine.py
+++ b/sim/fakes/machine.py
@@ -22,6 +22,14 @@ class ADC:
         return 3.8e6 / 2
 
 
+class I2C:
+    def __init__(self, chan, freq=None):
+        pass
+
+    def scan(self):
+        return []
+
+
 def reset():
     print("beep boop i have reset")
     sys.exit(0)
diff --git a/sim/fakes/network.py b/sim/fakes/network.py
index b0f7197f80..894b585b24 100644
--- a/sim/fakes/network.py
+++ b/sim/fakes/network.py
@@ -1,4 +1,5 @@
 STA_IF = 1
+STAT_CONNECTING = 0
 
 
 def hostname(hostname: str) -> None:
@@ -9,7 +10,7 @@ class WLAN:
     def __init__(self, mode):
         pass
 
-    def active(self, active):
+    def active(self, active=True):
         return True
 
     def scan(self):
@@ -18,5 +19,14 @@ class WLAN:
     def connect(self, ssid, key=None):
         pass
 
+    def disconnect(self):
+        pass
+
     def isconnected(self):
         return True
+
+    def status(self, mode=None):
+        return STAT_CONNECTING
+
+    def config(self, a):
+        return None
diff --git a/sim/fakes/sys_colors.py b/sim/fakes/sys_colors.py
index 6bed207714..636b2a519c 100644
--- a/sim/fakes/sys_colors.py
+++ b/sim/fakes/sys_colors.py
@@ -1,15 +1 @@
-from typing import Tuple
-
-
-def hsv_to_rgb(h: float, s: float, v: float) -> Tuple[float, float, float]:
-    """
-    Not implemented in sim.
-    """
-    return (0.0, 0.0, 0.0)
-
-
-def rgb_to_hsv(r: float, g: float, b: float) -> Tuple[float, float, float]:
-    """
-    Not implemented in sim.
-    """
-    return (0.0, 0.0, 0.0)
+from colorsys import hsv_to_rgb, rgb_to_hsv
diff --git a/sim/fakes/sys_display.py b/sim/fakes/sys_display.py
index a3e2016773..a967825791 100644
--- a/sim/fakes/sys_display.py
+++ b/sim/fakes/sys_display.py
@@ -21,6 +21,22 @@ def set_mode(no):
     pass
 
 
+def set_default_mode(no):
+    pass
+
+
+def set_palette(pal):
+    pass
+
+
+def fb(mode):
+    return (bytearray(240 * 240 * 4), 240, 240, 240 * 4)
+
+
+def fps():
+    return 60.0
+
+
 update = _sim.display_update
 get_ctx = _sim.get_ctx
 get_overlay_ctx = _sim.get_overlay_ctx
@@ -33,3 +49,28 @@ def ctx(foo):
 
 def set_backlight(a):
     pass
+
+
+def fbconfig(a, b, c, d):
+    pass
+
+
+default = 0
+rgb332 = 0
+sepia = 0
+cool = 0
+low_latency = 0
+direct_ctx = 0
+lock = 0
+EXPERIMENTAL_think_per_draw = 0
+smart_redraw = 0
+x2 = 0
+x3 = 0
+x4 = 0
+bpp1 = 0
+bpp2 = 0
+bpp4 = 0
+bpp8 = 0
+bpp16 = 0
+bpp24 = 0
+palette = 0
diff --git a/sim/fakes/sys_kernel.py b/sim/fakes/sys_kernel.py
index e134708eb7..632c8e59b6 100644
--- a/sim/fakes/sys_kernel.py
+++ b/sim/fakes/sys_kernel.py
@@ -35,3 +35,20 @@ def i2c_scan():
 
 def battery_charging():
     return True
+
+
+def firmware_version():
+    return "0.0.0"
+
+
+def hardware_version():
+    return "simulator"
+
+
+class FakeSchedulerSnapshot:
+    def __init__(self):
+        self.tasks = []
+
+
+def scheduler_snapshot():
+    return FakeSchedulerSnapshot()
diff --git a/sim/fakes/sys_scope.py b/sim/fakes/sys_scope.py
index fb446bef77..2802761d56 100644
--- a/sim/fakes/sys_scope.py
+++ b/sim/fakes/sys_scope.py
@@ -1,2 +1,5 @@
+from st3m.goose import Optional
+
+
 def get_buffer_x() -> Optional[memoryview]:
-    return None
+    return memoryview(b"")
-- 
GitLab