ruview @ v0.8.2-esp32
integrity
- size
- 61.9 MiB
- downloaded
- last checked
release notes
ESP32-S3 CSI node firmware — fixes the #1135 phantom-LD2410 + sendto ENOMEM loop reported against v0.8.1-esp32.
Fixes (#1135)
- Phantom LD2410 on a floating UART (root cause). Probe-detection matched only the 4-byte head
0xF4F3F2F1, so line noise at 256000 baud on an unconnected UART1 could phantom-detect a sensor and spawn a UART task. Now requires a full validated report frame (head + sane intra-frame length + matching tail0xF8F7F6F5) — the same validate-before-trust gate used for MR60BHA2 in v0.8.1. Extracted tommwave_detect.hand covered by a host unit test (test_mmwave_detect.c). sendto ENOMEMstuck loop. The fixed 100 ms backoff was too short to drain sustained lwIP/WiFi buffer pressure. Now exponential (100→200→…→2000 ms per consecutive ENOMEM, reset on first successful send). Removing the phantom LD2410 task also removes the extra load that tipped tier-2 nodes into the stuck state.
Validation
- All CI green (firmware s3-8mb/4mb + c6, all QEMU configs, fuzzing, security scans).
- Host unit test: the #1135 case (head magic without valid tail) is REJECTED.
- Hardware (ESP32-S3 QFN56 rev v0.2): streams clean at tier-0 and tier-2, correctly reports no mmWave (no phantom), no regression.
- Caveat: the reporter's environment-specific floating-pin noise could not be reproduced on the bench, so the deterministic proof for the phantom case is the unit test. If you hit #1135, please confirm this build clears it.
Flashing (ESP32-S3)
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 boards: esp32-csi-node-s3-4mb.bin @ 0x20000, partition-table-4mb.bin @ 0x8000.
SHA-256
d1dd4143…ee24f7d esp32-csi-node-s3-8mb.bin
958fdd68…a686fcc esp32-csi-node-s3-4mb.bin
4c402ce4…714da509 bootloader.bin
67222c25…054d322b partition-table.bin
4c2cc4ff…e70d81f0 partition-table-4mb.bin
7d2c7ac4…3782c62f ota_data_initial.bin
App version 0.7.0 · ESP-IDF v5.4 · built from main @ 7831f2943.
download
unix · zip
curl -fL -o v0.8.2-esp32.zip https://ratatoskr.space/pkg/ruview/v0.8.2-esp32.zip
printf '%s %s\n' '6750d409ab509983527da65f04769897d1850426a0317e3898b8bfa80a946021' 'v0.8.2-esp32.zip' | sha256sum -c -
windows · zip
$url = "https://ratatoskr.space/pkg/ruview/v0.8.2-esp32.zip"
$out = "v0.8.2-esp32.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "6750d409ab509983527da65f04769897d1850426a0317e3898b8bfa80a946021") { throw "sha256 mismatch" }
unix · tar.gz
curl -fL -o v0.8.2-esp32.tar.gz https://ratatoskr.space/pkg/ruview/v0.8.2-esp32.tar.gz
printf '%s %s\n' 'ac400845245400d2de7c3c7f78b498f83d64700515c8543415aa68e331e6cf1c' 'v0.8.2-esp32.tar.gz' | sha256sum -c -
windows · tar.gz
$url = "https://ratatoskr.space/pkg/ruview/v0.8.2-esp32.tar.gz"
$out = "v0.8.2-esp32.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "ac400845245400d2de7c3c7f78b498f83d64700515c8543415aa68e331e6cf1c") { throw "sha256 mismatch" }
download via yggdrasil mesh
unix · zip
curl -fL -o v0.8.2-esp32.zip http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.8.2-esp32.zip
printf '%s %s\n' '6750d409ab509983527da65f04769897d1850426a0317e3898b8bfa80a946021' 'v0.8.2-esp32.zip' | sha256sum -c -
windows · zip
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.8.2-esp32.zip"
$out = "v0.8.2-esp32.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "6750d409ab509983527da65f04769897d1850426a0317e3898b8bfa80a946021") { throw "sha256 mismatch" }
unix · tar.gz
curl -fL -o v0.8.2-esp32.tar.gz http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.8.2-esp32.tar.gz
printf '%s %s\n' 'ac400845245400d2de7c3c7f78b498f83d64700515c8543415aa68e331e6cf1c' 'v0.8.2-esp32.tar.gz' | sha256sum -c -
windows · tar.gz
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.8.2-esp32.tar.gz"
$out = "v0.8.2-esp32.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "ac400845245400d2de7c3c7f78b498f83d64700515c8543415aa68e331e6cf1c") { throw "sha256 mismatch" }
| artifact | format | size | hashes |
|---|---|---|---|
| v0.8.2-esp32.zip | zip | 61.9 MiB |
blake3-24 f91eeed1ef7650c4da16dd81ced3fefde4ea4c7a559e6a7f
sha256 6750d409ab509983527da65f04769897d1850426a0317e3898b8bfa80a946021
sha1 513ffadcaf18c653a348b3199106dae0cf4148cf
|
| v0.8.2-esp32.tar.gz | tar.gz | 60.1 MiB |
blake3-24 84977bbe9de9eb71c5c264953f3a019c3a4ba1503cfb881d
sha256 ac400845245400d2de7c3c7f78b498f83d64700515c8543415aa68e331e6cf1c
sha1 83f57096036965727135f595602c20393f062c04
|
install
bazel
http_archive(
name = "ruview",
urls = ["https://ratatoskr.space/pkg/ruview/v0.8.2-esp32.tar.gz"],
integrity = "sha256-rEAIRSRUANLefDx/eLSY+D1kcAUVyFQ0Fapo4zHmzxw=",
strip_prefix = "ruview-v0.8.2-esp32",
)
zig
.url = "https://ratatoskr.space/pkg/ruview/v0.8.2-esp32.tar.gz",
install via yggdrasil mesh
bazel
http_archive(
name = "ruview",
urls = ["http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.8.2-esp32.tar.gz"],
integrity = "sha256-rEAIRSRUANLefDx/eLSY+D1kcAUVyFQ0Fapo4zHmzxw=",
strip_prefix = "ruview-v0.8.2-esp32",
)
zig
.url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.8.2-esp32.tar.gz",