Repository navigation
TEST BUILD — B&W mode + magenta-cast detection
Pre-release
Pre-release
TEST PRERELEASE — not for the fleet. No `latest.json` is included and this is marked prerelease, so the companion app will NOT offer it; production stays on v1.0.1.81. Built from `loop-firmware` branch `combo/bw-mode-magenta-catch` (= docs/bw-mode-research cb361b4 + investigate/magenta-cam-frames 407c03d, merged clean).
What's in it
B&W Mode (docs/black-and-white-mode.md)
- Settings → slot 6 "B&W Mode" toggle: the 4 S3 cams shoot grayscale (OV5640 SDE, post-warmup wedge-guarded apply — a marginal sensor reverts to color rather than wedge) AND the viewfinder goes gray (ISP saturation 0; user saturation restored on toggle-off).
- Camera-entry reconcile keeps cams in sync (IDLE byte 73); mode persists across sleep/reboot on both sides (NVS).
- Serial:
set_bw on|off,get_bw,cam_bw_get. e2e test 101. - Validated: reconcile 4/4 both directions, capture 4/4, pixel-proof pure gray (max|R−G|=0), JPEGs ~15% smaller on a dim bench, encode 68s vs 75s.
- The cams need the embedded S3 blob — the boot reconcile auto-OTAs them on first boot of this image.
Magenta-cast detection (docs/magenta-cam-investigation.md)
- Per-capture telemetry:
lps cast posN: rg=±X bg=±Yper cam on every encode +MAGENTA-CAST suspect posNWARN when the magenta signature (rg>22 && bg>22) appears — catches the "one cam goes magenta until restart" field bug in the act with cam attribution. - On-device
cast_check <path>probe +tests/e2e/_cast_scan.pyhistorical sweep. - Baseline (117 JPEGs): all cams median rg +13/+14, bg≈0; zero suspects. If you see magenta: the logs will name the cam —
cam_sensor_soft_reset N(~150 ms) should clear it; please note whether it does (that confirms the remediation for auto-heal).
Flashing
- P4X:
loop.bin/loop-p4x.bin— USB esptool, orscripts/ota_serial.py --image/ the app's chunked/firmware/install. - Plain P4 (v1.3):
loop-p4.bin(+loop-p4-bootloader.binif bootloader flash needed).