wifi-densepose/v2/crates/wifi-densepose-hardware
ruv 3959fabf31 feat(rust): host-side decode for ADR-018 byte 18-19 (ADR-110 closure)
Parse the C6 firmware's HE PPDU type + bandwidth/flags from ADR-018
bytes 18-19 (previously discarded as _reserved). Adds two types to
CsiMetadata: ppdu_type (HtLegacy/HeSu/HeMu/HeTb/Unknown) and
adr018_flags (bw40/stbc/ldpc/ieee802154_sync_valid).

Pre-ADR-110 firmware sends zeros which round-trip as HtLegacy +
default flags — fully backwards compatible.

6 new deterministic unit tests:
- Pre-ADR-110 backwards compat
- HE-SU / HE-MU / HE-TB decode
- Unknown PPDU byte -> Unknown
- All-bits-set flags round-trip
- PpduType byte round-trip

Result: 122 wifi-densepose-hardware tests pass, 0 fail. Host decoder
now matches the firmware encoder bit-for-bit — HE-LTF metadata path
works end-to-end the moment an 11ax AP is in range.

Ref: ruvnet/RuView#762

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-05-22 22:42:49 -04:00
..
benches chore(repo): rename rust-port/wifi-densepose-rs → v2/ (flatten to one level) (#427) 2026-04-25 21:28:13 -04:00
src feat(rust): host-side decode for ADR-018 byte 18-19 (ADR-110 closure) 2026-05-22 22:42:49 -04:00
Cargo.toml chore(deps): bump thiserror from 1.0.69 to 2.0.18 in /v2 (#469) 2026-05-17 18:09:54 -04:00
README.md chore(repo): rename rust-port/wifi-densepose-rs → v2/ (flatten to one level) (#427) 2026-04-25 21:28:13 -04:00

README.md

wifi-densepose-hardware

Crates.io Documentation License

Hardware interface abstractions for WiFi CSI sensors (ESP32, Intel 5300, Atheros).

Overview

wifi-densepose-hardware provides platform-agnostic parsers for WiFi CSI data from multiple hardware sources. All parsing operates on byte buffers with no C FFI or hardware dependencies at compile time, making the crate fully portable and deterministic -- the same bytes in always produce the same parsed output.

Features

  • ESP32 binary parser -- Parses ADR-018 binary CSI frames streamed over UDP from ESP32 and ESP32-S3 devices.
  • UDP aggregator -- Receives and aggregates CSI frames from multiple ESP32 nodes (ADR-018 Layer 2). Provided as a standalone binary.
  • Bridge -- Converts hardware CsiFrame into the CsiData format expected by the detection pipeline (ADR-018 Layer 3).
  • No mock data -- Parsers either parse real bytes or return explicit ParseError values. There are no synthetic fallbacks.
  • Pure byte-buffer parsing -- No FFI to ESP-IDF or kernel modules. Safe to compile and test on any platform.

Feature flags

Flag Default Description
std yes Standard library support
esp32 no ESP32 serial CSI frame parsing
intel5300 no Intel 5300 CSI Tool log parsing
linux-wifi no Linux WiFi interface for commodity sensing

Quick Start

use wifi_densepose_hardware::{CsiFrame, Esp32CsiParser, ParseError};

// Parse ESP32 CSI data from raw UDP bytes
let raw_bytes: &[u8] = &[/* ADR-018 binary frame */];
match Esp32CsiParser::parse_frame(raw_bytes) {
    Ok((frame, consumed)) => {
        println!("Parsed {} subcarriers ({} bytes)",
                 frame.subcarrier_count(), consumed);
        let (amplitudes, phases) = frame.to_amplitude_phase();
        // Feed into detection pipeline...
    }
    Err(ParseError::InsufficientData { needed, got }) => {
        eprintln!("Need {} bytes, got {}", needed, got);
    }
    Err(e) => eprintln!("Parse error: {}", e),
}

Architecture

wifi-densepose-hardware/src/
  lib.rs            -- Re-exports: CsiFrame, Esp32CsiParser, ParseError, CsiData
  csi_frame.rs      -- CsiFrame, CsiMetadata, SubcarrierData, Bandwidth, AntennaConfig
  esp32_parser.rs   -- Esp32CsiParser (ADR-018 binary protocol)
  error.rs          -- ParseError
  bridge.rs         -- CsiData bridge to detection pipeline
  aggregator/       -- UDP multi-node frame aggregator (binary)
Crate Role
wifi-densepose-core Foundation types (CsiFrame definitions)
wifi-densepose-signal Consumes parsed CSI data for processing
wifi-densepose-mat Uses hardware adapters for disaster detection
wifi-densepose-vitals Vital sign extraction from parsed frames

License

MIT OR Apache-2.0