yggvault ratatoskr-space connected via regular web
Color theme
also available via yggdrasil mesh http://[203:b338:2a84:a18f:986:47ae:1a4:d8d3]/pkg/ruview/v0.6.7-esp32
vault / ruview / v0.6.7-esp32

ruview @ v0.6.7-esp32

integrity

size
59.4 MiB
downloaded
last checked
source https://github.com/ruvnet/RuView · available · github

release notes

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:

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:

NVS overrides (namespace ruview):

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

download

unix · zip
curl -fL -o v0.6.7-esp32.zip https://ratatoskr.space/pkg/ruview/v0.6.7-esp32.zip
                    printf '%s  %s\n' '380fba983620724ef23a8bc0a1cabb9d40818ab620797893a66124a53446605a' 'v0.6.7-esp32.zip' | sha256sum -c -
windows · zip
$url = "https://ratatoskr.space/pkg/ruview/v0.6.7-esp32.zip"
$out = "v0.6.7-esp32.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "380fba983620724ef23a8bc0a1cabb9d40818ab620797893a66124a53446605a") { throw "sha256 mismatch" }
unix · tar.gz
curl -fL -o v0.6.7-esp32.tar.gz https://ratatoskr.space/pkg/ruview/v0.6.7-esp32.tar.gz
                    printf '%s  %s\n' '9c3d1ba5699703293a5ff01f57a627efc394abbe4725ec2af65e37a5afee989c' 'v0.6.7-esp32.tar.gz' | sha256sum -c -
windows · tar.gz
$url = "https://ratatoskr.space/pkg/ruview/v0.6.7-esp32.tar.gz"
$out = "v0.6.7-esp32.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "9c3d1ba5699703293a5ff01f57a627efc394abbe4725ec2af65e37a5afee989c") { throw "sha256 mismatch" }
download via yggdrasil mesh
unix · zip
curl -fL -o v0.6.7-esp32.zip http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.6.7-esp32.zip
                    printf '%s  %s\n' '380fba983620724ef23a8bc0a1cabb9d40818ab620797893a66124a53446605a' 'v0.6.7-esp32.zip' | sha256sum -c -
windows · zip
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.6.7-esp32.zip"
$out = "v0.6.7-esp32.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "380fba983620724ef23a8bc0a1cabb9d40818ab620797893a66124a53446605a") { throw "sha256 mismatch" }
unix · tar.gz
curl -fL -o v0.6.7-esp32.tar.gz http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.6.7-esp32.tar.gz
                    printf '%s  %s\n' '9c3d1ba5699703293a5ff01f57a627efc394abbe4725ec2af65e37a5afee989c' 'v0.6.7-esp32.tar.gz' | sha256sum -c -
windows · tar.gz
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.6.7-esp32.tar.gz"
$out = "v0.6.7-esp32.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "9c3d1ba5699703293a5ff01f57a627efc394abbe4725ec2af65e37a5afee989c") { throw "sha256 mismatch" }
artifact format size hashes
v0.6.7-esp32.zip zip 59.4 MiB
blake3-24 82216a4de44d2dac694b9d5ea2db2865b14f9dedef2aa7fd
sha256 380fba983620724ef23a8bc0a1cabb9d40818ab620797893a66124a53446605a
sha1 f7636b089e0e1d440624f73b824568d2d3a8a3be
v0.6.7-esp32.tar.gz tar.gz 57.9 MiB
blake3-24 fde95845dcb2146a34cf907929746f7dfd46ff2ba0eb0980
sha256 9c3d1ba5699703293a5ff01f57a627efc394abbe4725ec2af65e37a5afee989c
sha1 b19d17a6151c3466e103905974afe08a445e1303

install

bazel
http_archive(
    name = "ruview",
    urls = ["https://ratatoskr.space/pkg/ruview/v0.6.7-esp32.tar.gz"],
    integrity = "sha256-nD0bpWmXAyk6X/AfV6Yn78OUq75HJewq9l43pa/umJw=",
    strip_prefix = "ruview-v0.6.7-esp32",
)
zig
.url = "https://ratatoskr.space/pkg/ruview/v0.6.7-esp32.tar.gz",
install via yggdrasil mesh
bazel
http_archive(
    name = "ruview",
    urls = ["http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.6.7-esp32.tar.gz"],
    integrity = "sha256-nD0bpWmXAyk6X/AfV6Yn78OUq75HJewq9l43pa/umJw=",
    strip_prefix = "ruview-v0.6.7-esp32",
)
zig
.url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.6.7-esp32.tar.gz",
← v0.6.8-esp32v1136 →