v0.8.1-esp32

OpenReplicant/ProtoReplicantv0.8.1-esp32Jun 17, 2026by ruvnet

AI Summary

Fixes critical field-reported bugs in ESP32-S3 CSI node firmware, specifically addressing display initialization issues and mmwave sensor false detection on bare hardware.

Key Highlights

  • Fixed CSI starvation on display-less DevKits by gating CSI with touch controller readback
  • Resolved false MR60BHA2 sensor detection causing ENOMEM errors via UART header validation
  • Validated on real ESP32-S3 QFN56 rev v0.2 hardware with clean boot logs
  • CSI filter successfully upgrades to MGMT+DATA mode when no display is present

Full Release Notes

ESP32-S3 CSI node firmware — two field-reported sensing bugs fixed and **validated on real hardware** (ESP32-S3 QFN56 rev v0.2, 8MB flash / 2MB PSRAM).

## Fixes
- **#1000 — no CSI on a bare/display-less DevKit.** The SH8601 QSPI AMOLED is write-only, so panel init "succeeds" even with no panel attached; that false-positive left `display_is_active()` true and starved CSI at MGMT-only frames. Now the readable FT3168 touch controller gates it: no touch readback → run headless → CSI upgrades to **MGMT+DATA**. (PR #1121)
- **#1107 — false MR60BHA2 detection → ENOMEM.** UART probe now requires a validated MR60 header (8-byte SOF + checksum + type `0x0A__`/`0x0F09`) instead of counting bare `0x01` bytes, so an empty UART no longer false-detects a sensor. (PR #1119)

## Hardware validation (boot log, rev v0.2 silicon)
```
disp_hal: SH8601 panel init OK (368x448)            # write-only panel "succeeds" on bare board
disp_hal: FT3168 not found (ret=ESP_FAIL)           # touch readback fails — no real panel
disp_task: ... running headless so CSI captures (#1000)
csi_collector: CSI filter upgraded to MGMT+DATA (no display, RuView#893)
mmwave: No mmWave sensor detected (CSI-only mode)   # no false detect on empty UART
```
CSI streamed cleanly (frames len 128→384/256), 600 callbacks / 22s, zero crash or watchdog.

## Flashing
ESP32-S3, esptool offsets:
```
esptool --chip esp32s3 -p <PORT> -b 460800 write_flash \
  0x0 bootloader.bin  0x8000 partition-table.bin \
  0xf000 ota_data_initial.bin  0x20000 esp32-csi-node-s3-8mb.bin
```
4MB (no-display) boards: use `esp32-csi-node-s3-4mb.bin` @ `0x20000` and `partition-table-4mb.bin` @ `0x8000`.

## SHA-256
```
0a66190d…36822  esp32-csi-node-s3-8mb.bin
b818e358…f6e7c2  esp32-csi-node-s3-4mb.bin
dda279df…d8a216  bootloader.bin
67222c25…4d322b  partition-table.bin
4c2cc4ff…0d81f0  partition-table-4mb.bin
7d2c7ac4…82c62f  ota_data_initial.bin
```
App version 0.7.0 · ESP-IDF v5.4 · built from `main` @ 65e29ef47. Binaries are the exact bytes flashed during hardware validation.