Wire controller messages through new modules (background tasks, runtime state, startup) and add binary envelope handling. Co-authored-by: Cursor <cursoragent@cursor.com>
54 lines
1.5 KiB
Python
54 lines
1.5 KiB
Python
import gc
|
|
import machine
|
|
import network
|
|
import utime
|
|
|
|
from presets import Presets
|
|
from settings import Settings
|
|
|
|
|
|
def initialize_runtime():
|
|
machine.freq(160000000)
|
|
|
|
settings = Settings()
|
|
print(settings)
|
|
|
|
wdt = machine.WDT(timeout=10000)
|
|
wdt.feed()
|
|
|
|
gc.collect()
|
|
print("mem before presets:", {"free": gc.mem_free(), "alloc": gc.mem_alloc()})
|
|
|
|
presets = Presets(settings["led_pin"], settings["num_leds"])
|
|
presets.load(settings)
|
|
presets.b = settings.get("brightness", 255)
|
|
presets.debug = bool(settings.get("debug", False))
|
|
gc.collect()
|
|
print("mem after presets:", {"free": gc.mem_free(), "alloc": gc.mem_alloc()})
|
|
|
|
default_preset = settings.get("default", "")
|
|
if default_preset and default_preset in presets.presets:
|
|
if presets.select(default_preset):
|
|
print("Selected startup preset:", default_preset)
|
|
else:
|
|
print("Startup preset failed (invalid pattern?):", default_preset)
|
|
|
|
# On ESP32-C3, soft reboots can leave Wi-Fi driver state allocated.
|
|
# Reset both interfaces and collect before bringing STA up.
|
|
ap_if = network.WLAN(network.AP_IF)
|
|
ap_if.active(False)
|
|
sta_if = network.WLAN(network.STA_IF)
|
|
if sta_if.active():
|
|
sta_if.active(False)
|
|
utime.sleep_ms(100)
|
|
gc.collect()
|
|
sta_if.active(True)
|
|
sta_if.config(pm=network.WLAN.PM_NONE)
|
|
sta_if.connect(settings["ssid"], settings["password"])
|
|
while not sta_if.isconnected():
|
|
utime.sleep(1)
|
|
wdt.feed()
|
|
|
|
print(sta_if.ifconfig())
|
|
return settings, presets, wdt, sta_if
|