ruview @ v0.8.1-esp32
integrity
- size
- 61.9 MiB
- downloaded
- last checked
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 bare0x01bytes, 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.
download
unix · zip
curl -fL -o v0.8.1-esp32.zip https://ratatoskr.space/pkg/ruview/v0.8.1-esp32.zip
printf '%s %s\n' '2065960beb3327838859d172b7e5eee6443339391f47b3459887683476810ffb' 'v0.8.1-esp32.zip' | sha256sum -c -
windows · zip
$url = "https://ratatoskr.space/pkg/ruview/v0.8.1-esp32.zip"
$out = "v0.8.1-esp32.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "2065960beb3327838859d172b7e5eee6443339391f47b3459887683476810ffb") { throw "sha256 mismatch" }
unix · tar.gz
curl -fL -o v0.8.1-esp32.tar.gz https://ratatoskr.space/pkg/ruview/v0.8.1-esp32.tar.gz
printf '%s %s\n' '4adc2ca509b5a6ba7c810448755e9b2923e0bedc1f8664c7b575d72a10888e30' 'v0.8.1-esp32.tar.gz' | sha256sum -c -
windows · tar.gz
$url = "https://ratatoskr.space/pkg/ruview/v0.8.1-esp32.tar.gz"
$out = "v0.8.1-esp32.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "4adc2ca509b5a6ba7c810448755e9b2923e0bedc1f8664c7b575d72a10888e30") { throw "sha256 mismatch" }
download via yggdrasil mesh
unix · zip
curl -fL -o v0.8.1-esp32.zip http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.8.1-esp32.zip
printf '%s %s\n' '2065960beb3327838859d172b7e5eee6443339391f47b3459887683476810ffb' 'v0.8.1-esp32.zip' | sha256sum -c -
windows · zip
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.8.1-esp32.zip"
$out = "v0.8.1-esp32.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "2065960beb3327838859d172b7e5eee6443339391f47b3459887683476810ffb") { throw "sha256 mismatch" }
unix · tar.gz
curl -fL -o v0.8.1-esp32.tar.gz http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.8.1-esp32.tar.gz
printf '%s %s\n' '4adc2ca509b5a6ba7c810448755e9b2923e0bedc1f8664c7b575d72a10888e30' 'v0.8.1-esp32.tar.gz' | sha256sum -c -
windows · tar.gz
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.8.1-esp32.tar.gz"
$out = "v0.8.1-esp32.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "4adc2ca509b5a6ba7c810448755e9b2923e0bedc1f8664c7b575d72a10888e30") { throw "sha256 mismatch" }
| artifact | format | size | hashes |
|---|---|---|---|
| v0.8.1-esp32.zip | zip | 61.9 MiB |
blake3-24 25f321bc61f33c385a445bd67def6f8167827a9778d61aaf
sha256 2065960beb3327838859d172b7e5eee6443339391f47b3459887683476810ffb
sha1 79520869751fe55b413ecc88363b3e1683976180
|
| v0.8.1-esp32.tar.gz | tar.gz | 60.1 MiB |
blake3-24 879ab43f836da40fca22c3eaee2b9a0ca236289d17af8b6c
sha256 4adc2ca509b5a6ba7c810448755e9b2923e0bedc1f8664c7b575d72a10888e30
sha1 565075915853db88b065ff9b257c070a9326acf8
|
install
bazel
http_archive(
name = "ruview",
urls = ["https://ratatoskr.space/pkg/ruview/v0.8.1-esp32.tar.gz"],
integrity = "sha256-StwspQm1prp8gQRIdV6bKSPgvtwfhmTHtXXXKhCIjjA=",
strip_prefix = "ruview-v0.8.1-esp32",
)
zig
.url = "https://ratatoskr.space/pkg/ruview/v0.8.1-esp32.tar.gz",
install via yggdrasil mesh
bazel
http_archive(
name = "ruview",
urls = ["http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.8.1-esp32.tar.gz"],
integrity = "sha256-StwspQm1prp8gQRIdV6bKSPgvtwfhmTHtXXXKhCIjjA=",
strip_prefix = "ruview-v0.8.1-esp32",
)
zig
.url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.8.1-esp32.tar.gz",