mirror of
https://github.com/ruvnet/RuView.git
synced 2026-04-26 13:10:40 +00:00
The Rust port lived two directories deep (rust-port/wifi-densepose-rs/) without any sibling under rust-port/ that warranted the extra level. Move the whole workspace up to v2/ to match v1/ (Python) at the same depth and shorten every cd / build command across the repo. git mv preserves history for all tracked files. 60 files updated for path references (CI workflows, ADRs, docs, scripts, READMEs, internal .claude-flow state). Two manual fixes for relative-cd paths in CLAUDE.md and ADR-043 that became wrong after the depth change (cd ../.. → cd ..). Validated: - cargo check --workspace --no-default-features → clean (after target/ nuke; the gitignored target/ was carried by the OS rename and had hard-coded old paths in build scripts) - cargo test --workspace --no-default-features → 1,539 passed, 0 failed, 8 ignored (same totals as pre-rename) - ESP32-S3 on COM7 → still streaming live CSI (cb #40300, RSSI -64 dBm) After-merge follow-up: contributors should `rm -rf v2/target` once and let cargo regenerate from the new path. |
||
|---|---|---|
| .. | ||
| adaptive-learning.md | ||
| ai-security.md | ||
| autonomous.md | ||
| building.md | ||
| core.md | ||
| esp32_boot_log.txt | ||
| exotic.md | ||
| industrial.md | ||
| medical.md | ||
| README.md | ||
| retail.md | ||
| security.md | ||
| signal-intelligence.md | ||
| spatial-temporal.md | ||
Edge Intelligence Modules — WiFi-DensePose
60 WASM modules that run directly on an ESP32 sensor. No internet needed, no cloud fees, instant response. Each module is a tiny file (5-30 KB) that reads WiFi signal data and makes decisions locally in under 10 ms.
Quick Start
# Build all modules for ESP32
cd v2/crates/wifi-densepose-wasm-edge
cargo build --target wasm32-unknown-unknown --release
# Run all 632 tests
cargo test --features std
# Upload a module to your ESP32
python scripts/wasm_upload.py --port COM7 --module target/wasm32-unknown-unknown/release/module_name.wasm
Module Categories
| Category | Modules | Tests | Documentation | |
|---|---|---|---|---|
| Core | 7 | 81 | core.md | |
| Medical & Health | 5 | 38 | medical.md | |
| Security & Safety | 6 | 42 | security.md | |
| Smart Building | 5 | 38 | building.md | |
| Retail & Hospitality | 5 | 38 | retail.md | |
| Industrial | 5 | 38 | industrial.md | |
| Exotic & Research | 10 | ~60 | exotic.md | |
| Signal Intelligence | 6 | 54 | signal-intelligence.md | |
| Adaptive Learning | 4 | 42 | adaptive-learning.md | |
| Spatial & Temporal | 6 | 56 | spatial-temporal.md | |
| AI Security | 2 | 20 | ai-security.md | |
| Quantum & Autonomous | 4 | 30 | autonomous.md | |
| Total | 65 | 632 |
How It Works
- WiFi signals bounce off people and objects in a room, creating a unique pattern
- The ESP32 chip reads these patterns as Channel State Information (CSI) — 52 numbers that describe how each WiFi channel changed
- WASM modules analyze the patterns to detect specific things: someone fell, a room is occupied, breathing rate changed
- Events are emitted locally — no cloud round-trip, response time under 10 ms
Architecture
WiFi Router ──── radio waves ────→ ESP32-S3 Sensor
│
▼
┌──────────────┐
│ Tier 0-2 │ C firmware: phase unwrap,
│ DSP Engine │ stats, top-K selection
└──────┬───────┘
│ CSI frame (52 subcarriers)
▼
┌──────────────┐
│ WASM3 │ Tiny interpreter
│ Runtime │ (60 KB overhead)
└──────┬───────┘
│
┌───────────┼───────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Module A │ │ Module B │ │ Module C │
│ (5-30KB) │ │ (5-30KB) │ │ (5-30KB) │
└────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │
└───────────┼───────────┘
▼
Events + Alerts
(UDP to aggregator or local)
Host API
Every module talks to the ESP32 through 12 functions:
| Function | Returns | Description |
|---|---|---|
csi_get_phase(i) |
f32 |
WiFi signal phase angle for subcarrier i |
csi_get_amplitude(i) |
f32 |
Signal strength for subcarrier i |
csi_get_variance(i) |
f32 |
How much subcarrier i fluctuates |
csi_get_bpm_breathing() |
f32 |
Breathing rate (BPM) |
csi_get_bpm_heartrate() |
f32 |
Heart rate (BPM) |
csi_get_presence() |
i32 |
Is anyone there? (0/1) |
csi_get_motion_energy() |
f32 |
Overall movement level |
csi_get_n_persons() |
i32 |
Estimated number of people |
csi_get_timestamp() |
i32 |
Current timestamp (ms) |
csi_emit_event(id, val) |
— | Send a detection result to the host |
csi_log(ptr, len) |
— | Log a message to serial console |
csi_get_phase_history(buf, max) |
i32 |
Past phase values for trend analysis |
Event ID Registry
| Range | Category | Example Events |
|---|---|---|
| 0-99 | Core | Gesture detected, coherence score, anomaly |
| 100-199 | Medical | Apnea, bradycardia, tachycardia, seizure |
| 200-299 | Security | Intrusion, perimeter breach, loitering, panic |
| 300-399 | Smart Building | Zone occupied, HVAC, lighting, elevator, meeting |
| 400-499 | Retail | Queue length, dwell zone, customer flow, turnover |
| 500-599 | Industrial | Proximity warning, confined space, vibration |
| 600-699 | Exotic | Sleep stage, emotion, gesture language, rain |
| 700-729 | Signal Intelligence | Attention, coherence gate, compression, recovery |
| 730-759 | Adaptive Learning | Gesture learned, attractor, adaptation, EWC |
| 760-789 | Spatial Reasoning | Influence, HNSW match, spike tracking |
| 790-819 | Temporal Analysis | Pattern, LTL violation, GOAP goal |
| 820-849 | AI Security | Replay attack, injection, jamming, behavior |
| 850-879 | Quantum-Inspired | Entanglement, decoherence, hypothesis |
| 880-899 | Autonomous | Inference, rule fired, mesh reconfigure |
Module Development
Adding a New Module
-
Create
src/your_module.rsfollowing the pattern:#![cfg_attr(not(feature = "std"), no_std)] #[cfg(not(feature = "std"))] use libm::fabsf; pub struct YourModule { /* fixed-size fields only */ } impl YourModule { pub const fn new() -> Self { /* ... */ } pub fn process_frame(&mut self, /* inputs */) -> &[(i32, f32)] { /* ... */ } } -
Add
pub mod your_module;tolib.rs -
Add event constants to
event_typesinlib.rs -
Add tests with
#[cfg(test)] mod tests { ... } -
Run
cargo test --features std
Constraints
- No heap allocation: Use fixed-size arrays, not
VecorString - No
std: Uselibmfor math functions - Budget tiers: L (<2ms), S (<5ms), H (<10ms) per frame
- Binary size: Each module should be 5-30 KB as WASM
References
- ADR-039 — Edge processing tiers
- ADR-040 — WASM runtime design
- ADR-041 — Full module specification
- Source code