src.nth.io/

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Hoersten <[email protected]>2026-06-14 12:20:18 -0500
committerLuke Hoersten <[email protected]>2026-06-14 12:20:18 -0500
commit14c94c7e9e90322d5486100687c5096213ab04db (patch)
treeacca0c3e764049993e69b5f655dd02c7d238ee30
parent220ee4cdc9b372e2a2b41ee48471ad0893b3a68a (diff)
M1 + M2 hardware-verified 2026-06-14 (Waveshare ESP32-P4-ETH)
First end-to-end bench verification. Board is the Waveshare ESP32-P4-ETH (Amazon B0FN7JQ2V8), 32 MB PSRAM, 32 MB flash silkscreen, ESP-IDF v5.4.1. No panel attached, just board on USB power + LAN. What passed ----------- M1 — Ethernet driver up; DHCP lease landed at 10.0.13.83 (gw 10.0.13.1, netmask 255.255.255.0). MAC e8:f6:0a:e0:90:94. 31.7 MB PSRAM free. Boot completes in ~4s after the kernel handoff. M2 — GET http://10.0.13.83/state returns the full spec JSON shape (name=null, configured=false, state=unconfigured, resolution=480x800, ip=10.0.13.83, free_heap=520995, free_psram=31730048, all counters at 0). mDNS browse from macOS (dns-sd -B _scrypted-viewport._tcp local.) finds one instance named "viewport" within ~100ms. Bare-board behavior (Ethernet unplugged) verified too: boot completes cleanly with summary line `boot complete — subsystems [EMHdJ-B] ip=(no link)`. Lowercase d = display down because no panel attached; - for touch because it shares the panel I²C bus. README status snapshot updated to reflect M1+M2 ✅ on hardware; TESTING.md M1 and M2 sections gain the 2026-06-14 verification note plus the three fixes that bring-up exposed (RXD0/RXD1 swap, mDNS hostname order, elegant subsystem degradation — already shipped in commit 220ee4c).
-rw-r--r--README.md2
-rw-r--r--TESTING.md18
2 files changed, 13 insertions, 7 deletions
diff --git a/README.md b/README.md
index 17d346c..e301c88 100644
--- a/README.md
+++ b/README.md
@@ -30,7 +30,7 @@ Scrypted Viewport owns Ethernet, JPEG decode, display, touch input and outbound
| Layer | Where we are | What's pending |
| --- | --- | --- |
-| Firmware (`main/`) | M1–M8 implemented; binary ~870 KB; builds clean against ESP-IDF 5.4 for `esp32p4`. | M9 (`POST /stream`) not started. **Zero milestones verified on hardware yet.** |
+| Firmware (`main/`) | M1–M8 implemented; binary ~870 KB; builds clean against ESP-IDF 5.4 for `esp32p4`. **M1 + M2 ✅ verified on hardware** (2026-06-14, Ethernet + `GET /state` + mDNS browse). | M9 (`POST /stream`) not started. M3–M8 still 🟡 (panel not yet attached). |
| Scrypted side (`scrypted/`) | v1 Script — DeviceProvider with per-viewport child devices, camera picker, mDNS auto-resolve. | v2 plugin (packaged + FFmpeg streaming to `/stream`) not started. Script unverified end-to-end. |
| Hardware | Ethernet pin map confirmed (Waveshare wiki + ESPHome). Hosyond panel architecture confirmed (Pi 7"-style, TC358762 bridge + ATTINY MCU at I²C `0x45`). Jumper wiring documented. | Schematic confirmation needed for DSI FPC pin count, I²C GPIO mapping, BOOT button GPIO, flash size. All gated by [`TESTING.md`'s Hardware prerequisites](TESTING.md#hardware-prerequisites). |
diff --git a/TESTING.md b/TESTING.md
index b3500ef..3350611 100644
--- a/TESTING.md
+++ b/TESTING.md
@@ -20,8 +20,8 @@ Status legend:
| # | Milestone | Code | HW |
| --- | --- | --- | --- |
-| M1 | Board Bring-Up — Ethernet + DHCP | ✅ | 🟡 |
-| M2 | HTTP + mDNS (`GET /state`) | ✅ | 🟡 |
+| M1 | Board Bring-Up — Ethernet + DHCP | ✅ | ✅ |
+| M2 | HTTP + mDNS (`GET /state`) | ✅ | ✅ |
| M3 | Display Bring-Up (Hosyond panel) | ✅ | 🟡 |
| M4 | Config Persistence (NVS, partial updates) | ✅ | 🟡 |
| M5 | JPEG Frame Push (`POST /frame`) | ✅ | 🟡 |
@@ -122,9 +122,10 @@ Cross-check from another host:
ping 192.168.x.x
```
-**Status**: 🟡 builds clean against ESP-IDF 5.4 (commit e2ac22e). Not yet flashed to hardware — awaiting first board run.
-
-> Combined hardware verification of M1+M2 is fine — they both run from the same flash session.
+**Status**: ✅ verified 2026-06-14 on Waveshare ESP32-P4-ETH (Amazon B0FN7JQ2V8, 32 MB PSRAM, 32 MB flash silkscreen, IDF v5.4.1). DHCP lease landed at 10.0.13.83. Three fixes were needed during bring-up — see commit 220ee4c:
+> 1. **RXD0 / RXD1 GPIO swap**: ESP32-P4 EMAC iomux fixes RXD0=29, RXD1=30. The original pin map had them transposed.
+> 2. **mDNS hostname order**: `mdns_service_add()` returns INVALID_ARG if hostname isn't set yet. Now init → hostname → service_add → TXT.
+> 3. **`app_main` best-effort everywhere**: any one missing subsystem (no LAN, no panel) used to abort the boot. Now each is independent; final log line summarizes which letters of `EMHDJTB` came up.
---
@@ -170,7 +171,12 @@ Expected `/state` body on a fresh device (unconfigured):
Expected mDNS browse output should show a `_scrypted-viewport._tcp` instance with TXT records `version=`, `resolution=`, `orientation=`, `name=` (empty for `name`).
-**Status**: 🟡 builds clean against ESP-IDF 5.4 with espressif/mdns managed component. Awaiting first board run.
+**Status**: ✅ verified 2026-06-14 alongside M1.
+
+- `GET http://10.0.13.83/state` returned the full spec JSON: `name=null, configured=false, state=unconfigured, resolution=480x800, ip=10.0.13.83, free_psram=31730048, ...`.
+- `dns-sd -B _scrypted-viewport._tcp local.` on macOS surfaced one instance named `viewport`.
+
+Bare-board behavior (no panel, no ethernet) was also verified — the device boots cleanly and prints a summary like `boot complete — subsystems [EMHdJ-B] ip=(no link)` (lowercase `d` = display down because no panel attached; `-` for touch because it shares the panel I²C bus).
---