ruview @ v0.6.9-esp32
integrity
- size
- 59.4 MiB
- downloaded
- last checked
release notes
ESP32 CSI Node firmware v0.6.9
Tag: v0.6.9-esp32
Date: 2026-05-23
Branch: adr-110-esp32c6 (PR #764)
ADR: ADR-110 §A0.11 + §A0.12 — sync-packet wired
What's new vs v0.6.8
Sync packet now emits from every CSI node. New 32-byte UDP packet
(magic 0xC511A110) carries the mesh-aligned epoch + sequence
high-water for the host aggregator to pair against incoming CSI
frames. Closes the §A0.11 wiring gap so downstream ADR-029/030
multistatic CSI fusion can recover mesh time for every frame.
Field layout (LE little-endian, total 32 bytes):
| Offset | Field |
|---|---|
[0..3] |
magic 0xC511A110 (distinct from CSI frame magic 0xC5110001) |
[4] |
node_id |
[5] |
proto_ver 0x01 |
[6] |
flags (bit 0 = leader, bit 1 = sync valid, bit 2 = smoothed_used) |
[7] |
reserved |
[8..15] |
local esp_timer_get_time() (u64) |
[16..23] |
mesh-aligned epoch = local + EMA-smoothed offset (u64) |
[24..27] |
high-water CSI sequence (u32) — pairing key |
[28..31] |
reserved |
Live verified in WITNESS-LOG-110 §A0.12: both C6 boards on the
bench emit at the design cadence, follower's local − epoch matches
the §A0.10 measured offset within 285 µs.
New operator knob
CONFIG_C6_SYNC_EVERY_N_FRAMES (default 20). At the bench's observed
10 fps CSI rate that's ~2 s between sync packets. Raise to 50 for
~5 s (less wire overhead, slower convergence); lower to 5 for ~0.5 s
(heavier wire, tighter multistatic alignment window).
Build artifacts
| Target | Binary | Size | Partition slack |
|---|---|---|---|
esp32s3 (8 MB) |
esp32-csi-node-s3-8mb.bin |
1094 KB | 47 % |
esp32c6 (4 MB) |
esp32-csi-node-c6-4mb.bin |
1019 KB | 45 % |
SHA-256 sums in SHA256SUMS.txt. Backwards-compatible at the wire
level: old aggregators that don't know about magic 0xC511A110 drop
the new packets on the magic-mismatch path that already exists for
the CSI parser.
What's still on the table
- Host-side parser for the new sync packet in
wifi-densepose-sensing-server— pairs(node_id, sequence)across the two UDP streams to recover mesh-aligned timestamps per CSI frame. Outside the firmware tree, future release. - IDF v5.4 soft-AP HE/TWT-Responder advertise (WITNESS-LOG-110 §A0.6) — no public API on C6 in this IDF release. Blocked on upstream.
- 5 µA LP-core hibernation measurement (§B4) — code path complete, needs INA226/Joulescope on the bench.
download
curl -fL -o v0.6.9-esp32.zip https://ratatoskr.space/pkg/ruview/v0.6.9-esp32.zip
printf '%s %s\n' 'd981bf78f2aa04449b40672c004839fb6c4c11afc467412a544fb80c964a5b49' 'v0.6.9-esp32.zip' | sha256sum -c -
$url = "https://ratatoskr.space/pkg/ruview/v0.6.9-esp32.zip"
$out = "v0.6.9-esp32.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "d981bf78f2aa04449b40672c004839fb6c4c11afc467412a544fb80c964a5b49") { throw "sha256 mismatch" }
curl -fL -o v0.6.9-esp32.tar.gz https://ratatoskr.space/pkg/ruview/v0.6.9-esp32.tar.gz
printf '%s %s\n' '53666e04dbbc0d3869cae96bc757385135cd5b06b214bda65940ebadefe0d469' 'v0.6.9-esp32.tar.gz' | sha256sum -c -
$url = "https://ratatoskr.space/pkg/ruview/v0.6.9-esp32.tar.gz"
$out = "v0.6.9-esp32.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "53666e04dbbc0d3869cae96bc757385135cd5b06b214bda65940ebadefe0d469") { throw "sha256 mismatch" }
download via yggdrasil mesh
curl -fL -o v0.6.9-esp32.zip http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.6.9-esp32.zip
printf '%s %s\n' 'd981bf78f2aa04449b40672c004839fb6c4c11afc467412a544fb80c964a5b49' 'v0.6.9-esp32.zip' | sha256sum -c -
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.6.9-esp32.zip"
$out = "v0.6.9-esp32.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "d981bf78f2aa04449b40672c004839fb6c4c11afc467412a544fb80c964a5b49") { throw "sha256 mismatch" }
curl -fL -o v0.6.9-esp32.tar.gz http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.6.9-esp32.tar.gz
printf '%s %s\n' '53666e04dbbc0d3869cae96bc757385135cd5b06b214bda65940ebadefe0d469' 'v0.6.9-esp32.tar.gz' | sha256sum -c -
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.6.9-esp32.tar.gz"
$out = "v0.6.9-esp32.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "53666e04dbbc0d3869cae96bc757385135cd5b06b214bda65940ebadefe0d469") { throw "sha256 mismatch" }
| artifact | format | size | hashes |
|---|---|---|---|
| v0.6.9-esp32.zip | zip | 59.4 MiB |
blake3-24 1d1fb003518cffc5c5cd3c56ace23070c620a6247119855e
sha256 d981bf78f2aa04449b40672c004839fb6c4c11afc467412a544fb80c964a5b49
sha1 7dc0e233489dc0f9bd47cb141107953139b29081
|
| v0.6.9-esp32.tar.gz | tar.gz | 57.9 MiB |
blake3-24 cc70072ed9e19d8a498f1b65f3f7667ff9df601ab52cfa94
sha256 53666e04dbbc0d3869cae96bc757385135cd5b06b214bda65940ebadefe0d469
sha1 04cc88c7e6126a09f3c64553cbbdc1b611699261
|
install
http_archive(
name = "ruview",
urls = ["https://ratatoskr.space/pkg/ruview/v0.6.9-esp32.tar.gz"],
integrity = "sha256-U2ZuBNu8DThpyulrx1c4UTXNWwayFL2mWUDrre/g1Gk=",
strip_prefix = "ruview-v0.6.9-esp32",
)
.url = "https://ratatoskr.space/pkg/ruview/v0.6.9-esp32.tar.gz",
install via yggdrasil mesh
http_archive(
name = "ruview",
urls = ["http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.6.9-esp32.tar.gz"],
integrity = "sha256-U2ZuBNu8DThpyulrx1c4UTXNWwayFL2mWUDrre/g1Gk=",
strip_prefix = "ruview-v0.6.9-esp32",
)
.url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.6.9-esp32.tar.gz",