From 2d0f75151696c263715fe0e7d78bcba9e13948d9 Mon Sep 17 00:00:00 2001
From: Rahix <rahix@rahix.de>
Date: Wed, 16 Aug 2023 23:58:39 +0200
Subject: [PATCH] st3m: wifi: Make camp wifi setting functional

Add a wifi module which manages the interface setup when camp wifi is
enabled.
---
 python_payload/mypystubs/network.pyi | 13 ++++++++++++
 python_payload/st3m/run.py           |  5 ++++-
 python_payload/st3m/wifi.py          | 30 ++++++++++++++++++++++++++++
 sim/fakes/network.py                 | 15 ++++++++++++++
 4 files changed, 62 insertions(+), 1 deletion(-)
 create mode 100644 python_payload/mypystubs/network.pyi
 create mode 100644 python_payload/st3m/wifi.py
 create mode 100644 sim/fakes/network.py

diff --git a/python_payload/mypystubs/network.pyi b/python_payload/mypystubs/network.pyi
new file mode 100644
index 0000000000..13d68ef5c7
--- /dev/null
+++ b/python_payload/mypystubs/network.pyi
@@ -0,0 +1,13 @@
+from st3m.goose import Optional
+
+STA_IF: int
+
+class WLAN:
+    def __init__(self, mode: int) -> None:
+        pass
+    def active(self, active: bool) -> bool:
+        return False
+    def connect(self, ssid: bytes, key: Optional[bytes] = None) -> None:
+        pass
+    def isconnected(self) -> bool:
+        return False
diff --git a/python_payload/st3m/run.py b/python_payload/st3m/run.py
index 8f7dfec2d7..48708f4a77 100644
--- a/python_payload/st3m/run.py
+++ b/python_payload/st3m/run.py
@@ -13,7 +13,7 @@ from st3m.ui.view import View, ViewManager, ViewTransitionBlend
 from st3m.ui.elements.menus import SimpleMenu, SunMenu
 from st3m.application import discover_bundles, BundleMetadata
 from st3m.about import About
-from st3m import settings, logging, processors
+from st3m import settings, logging, processors, wifi
 
 import captouch, audio, leds, gc
 import os
@@ -35,6 +35,9 @@ def _make_reactor() -> Reactor:
 
     settings.onoff_button_swap.subscribe(_onoff_button_swap_update)
     _onoff_button_swap_update()
+
+    settings.onoff_camp_wifi.subscribe(wifi._onoff_camp_wifi_update)
+    wifi._onoff_camp_wifi_update()
     return reactor
 
 
diff --git a/python_payload/st3m/wifi.py b/python_payload/st3m/wifi.py
new file mode 100644
index 0000000000..b30efcaa22
--- /dev/null
+++ b/python_payload/st3m/wifi.py
@@ -0,0 +1,30 @@
+import network
+from st3m import settings
+
+iface = None
+
+
+def setup_camp_wifi() -> None:
+    global iface
+    iface = network.WLAN(network.STA_IF)
+    iface.active(True)
+    iface.connect(b"Camp2023-open")
+
+
+def disable() -> None:
+    if iface is not None:
+        iface.active(False)
+
+
+def is_connected() -> bool:
+    if iface is not None:
+        return iface.isconnected()
+    else:
+        return False
+
+
+def _onoff_camp_wifi_update() -> None:
+    if settings.onoff_camp_wifi.value:
+        setup_camp_wifi()
+    else:
+        disable()
diff --git a/sim/fakes/network.py b/sim/fakes/network.py
new file mode 100644
index 0000000000..1ff7b268e4
--- /dev/null
+++ b/sim/fakes/network.py
@@ -0,0 +1,15 @@
+STA_IF = 1
+
+
+class WLAN:
+    def __init__(self, mode):
+        pass
+
+    def active(self, active):
+        return False
+
+    def connect(self, ssid, key=None):
+        pass
+
+    def isconnected(self):
+        return False
-- 
GitLab