Emulator: multiboot slots from the page, flash controller, portable tests

flash controller: store ACR/OPTKEYR instead of swallowing them, which is what stopped the factory bootloader from starting

slots over the firmware's own serial protocol (0x0720 family); uvk5_socket/uvk5_testenv so a fresh checkout skips instead of failing; web UI slot table and Multiboot button; quick start, CONTRIBUTING, and stop tracking firmware images and radio dumps
This commit is contained in:
mckero committed 2026-10-01 14:54:34 +08:00
1 parent ee80939c78
commit 2667e046e8
54 files changed
+5345 -347

No files matched your search

+6
View File
@@ -3,6 +3,8 @@
import os
import socket
import unittest
import uvk5_socket
import unittest.mock
from uvk5_supervisor import Supervisor
@@ -216,6 +218,8 @@ class TestWaitForSocket(unittest.TestCase):
import shutil
shutil.rmtree(self.dir, ignore_errors=True)
@unittest.skipUnless(uvk5_socket.can_use_unix(),
"needs unix sockets, which a Windows QEMU cannot create")
def test_returns_false_for_a_stale_socket_file(self):
from uvk5_supervisor import wait_for_socket
# A socket file with nothing listening: bind then close.
@@ -225,6 +229,8 @@ class TestWaitForSocket(unittest.TestCase):
self.assertTrue(os.path.exists(self.path), "need a leftover file")
self.assertFalse(wait_for_socket(self.path, timeout=0.5))
@unittest.skipUnless(uvk5_socket.can_use_unix(),
"needs unix sockets, which a Windows QEMU cannot create")
def test_returns_true_when_something_is_listening(self):
from uvk5_supervisor import wait_for_socket
srv = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)