github ruvnet/RuView v0.6.7-esp32
ESP32 firmware v0.6.7 — C6 LP-core full + soft-AP HE/TWT (ADR-110 P9)

latest releases: v0.7.0-esp32, v0.6.9-esp32, v0.6.8-esp32...
5 hours ago

ESP32 CSI Node firmware v0.6.7

Tag: v0.6.7-esp32
Date: 2026-05-23
Branch: adr-110-esp32c6 (PR #764)
ADR: ADR-110 P9 — software-only unblocks

What's new

Two software-only unblocks for items previously blocked on hardware in WITNESS-LOG-110.md §B. Both new modules default off so v0.6.6 fleets see zero behavior change after an OTA upgrade.

1. Real LP-core motion-gate program (B4 code path complete)

A real RISC-V LP-core program (firmware/esp32-csi-node/main/lp_core/main.c) replaces the v0.6.6 esp_deep_sleep_enable_gpio_wakeup ext1 fallback. When CONFIG_C6_LP_CORE_ENABLE=y the LP coprocessor polls a single LP-IO GPIO at LP-timer cadence (default 10 ms), debounces N consecutive matching samples (default 3), and wakes the HP core via ulp_lp_core_wakeup_main_processor(). HP-side deep-sleep entry uses esp_sleep_enable_ulp_wakeup so esp_sleep_get_wakeup_cause() returns ESP_SLEEP_WAKEUP_ULP.

The LP program exports motion_count and poll_count shared symbols, surfaced to the rest of the firmware as c6_lp_core_motion_count() / c6_lp_core_poll_count() for the witness harness. Once an INA226 / Joulescope is on the bench, B4 ("≤5 µA average for battery seed nodes") is one capture away from a measured number — the code path is now in place.

New Kconfig:

  • CONFIG_C6_LP_POLL_PERIOD_US — LP-timer cadence (default 10000)
  • CONFIG_C6_LP_DEBOUNCE_SAMPLES — consecutive matches required (default 3)

2. Wi-Fi 6 soft-AP with TWT Responder (B1/B2 cheap unblock)

c6_softap_he.{h,c} brings up the C6 in WIFI_MODE_APSTA with WPA2-PSK and HE advertised. Pair two C6 boards — one in CONFIG_C6_SOFTAP_HE_ENABLE=y mode acting as the iTWT-capable AP, the other in default STA mode running c6_twt_setup_default() — and a real iTWT agreement can be negotiated and the resulting CSI cadence measured. No 11ax router needed.

New Kconfig:

  • CONFIG_C6_SOFTAP_HE_ENABLE (default n)
  • CONFIG_C6_SOFTAP_HE_SSID (default ruview-c6-twt)
  • CONFIG_C6_SOFTAP_HE_PSK (default ruviewtwt)
  • CONFIG_C6_SOFTAP_HE_CHANNEL (default 6)

NVS overrides (namespace ruview):

  • softap_ssid (string)
  • softap_psk (string, ≥8 chars)
  • softap_chan (u8, 1–13)

Build artifacts

Both targets compile clean on ESP-IDF v5.4. Default config — LP-core off, soft-AP HE off — so no behavior change vs v0.6.6 for the shipped fleet.

Target Binary Size Partition slack
esp32s3 esp32-csi-node-s3-8mb.bin 1093 KB 47 % (8 MB)
esp32c6 esp32-csi-node-c6-4mb.bin 1019 KB 45 % (4 MB)

SHA-256 sums recorded in SHA256SUMS.txt.

Flash

# ESP32-S3 on COM9 (8 MB)
python -m esptool --chip esp32s3 -p COM9 -b 460800 write_flash \
  0x0     bootloader-s3.bin \
  0x8000  partition-table-s3.bin \
  0xf000  ota_data_initial-s3.bin \
  0x20000 esp32-csi-node-s3-8mb.bin

# ESP32-C6 on COM6 (4 MB)
python -m esptool --chip esp32c6 -p COM6 -b 460800 write_flash \
  0x0     bootloader-c6.bin \
  0x8000  partition-table-c6.bin \
  0xf000  ota_data_initial-c6.bin \
  0x20000 esp32-csi-node-c6-4mb.bin

To enable the new features

LP-core motion gate — bench with a PIR / accelerometer on a wake-capable LP-IO pin:

# In firmware/esp32-csi-node/, append to sdkconfig.defaults.esp32c6:
CONFIG_C6_LP_CORE_ENABLE=y
CONFIG_C6_LP_WAKE_GPIO=4
CONFIG_C6_LP_WAKE_ACTIVE_HIGH=y
CONFIG_C6_LP_POLL_PERIOD_US=10000
CONFIG_C6_LP_DEBOUNCE_SAMPLES=3

# Rebuild + flash, then attach an INA in series with the 3V3 rail to capture
# the average current with the HP core in deep sleep.

Soft-AP HE/TWT bench — two C6 boards, one acts as the AP:

# Board #1 (AP role): append to sdkconfig.defaults.esp32c6:
CONFIG_C6_SOFTAP_HE_ENABLE=y
CONFIG_C6_SOFTAP_HE_SSID="ruview-c6-twt"
CONFIG_C6_SOFTAP_HE_PSK="ruviewtwt"
CONFIG_C6_SOFTAP_HE_CHANNEL=6

# Board #2 (STA role): provision to associate with the SSID above. The existing
# c6_twt_setup_default() runs on connect and now negotiates real iTWT against
# the cooperative C6 AP.

Roll-forward path

  • B4 measurement: solder INA226 between C6 dev board V_BUS and the 3V3
    regulator input, log average current over a 60 s LP-core-armed cycle.
  • B1/B2 measurement: capture beacon from board #1 with a Wireshark-capable
    card (or another C6 in sniffer mode), confirm HE Capabilities IE and
    TWT Responder=1. Then capture iTWT setup exchange and per-frame CSI
    cadence jitter against the negotiated wake interval.

Don't miss a new RuView release

NewReleases is sending notifications on new releases.