wifi-densepose/v2/crates/wifi-densepose-hardware
ruv ab1c90c106 merge: main into adr-110-esp32c6 — resolve lib.rs / esp32_parser / tracker_bridge conflicts
3 conflict points, all clean resolutions:

  v2/crates/wifi-densepose-hardware/src/lib.rs
    Conflict 1: mod declarations.
      HEAD added `pub mod sync_packet;` (iter 14).
      main re-ordered the existing mods alphabetically.
      Resolution: take main's ordering + append sync_packet at the end.

    Conflict 2: re-exports.
      HEAD added `pub use sync_packet::{SyncPacket, …}` block (iter 14).
      main moved bridge::CsiData earlier.
      Resolution: keep main's CsiData position; add my sync_packet
      re-export immediately before the radio_ops re-export.

  v2/crates/wifi-densepose-hardware/src/esp32_parser.rs
    HEAD has ADR-110 byte 18-19 PpduType + Adr018Flags parsing (iter 14).
    main still has the pre-ADR-110 "Reserved (offset 18, 2 bytes)" skip.
    Resolution: take HEAD — main hasn't pulled in ADR-110 work yet,
    that's exactly why this PR exists.

  v2/crates/wifi-densepose-sensing-server/src/tracker_bridge.rs
    HEAD has my iter-35 import cleanup (use { TrackLifecycleState, TrackId,
    NUM_KEYPOINTS }).
    main has the equivalent cleanup with a different import ordering
    (use { TrackId, TrackLifecycleState, NUM_KEYPOINTS }) + the
    pose_tracker::PoseTracker import on the line above.
    Resolution: take main's version — same end state, no behavioral
    difference, less diff churn.

Verification:
  cargo check -p wifi-densepose-hardware -p wifi-densepose-sensing-server
    --no-default-features → green
  cargo test -p wifi-densepose-hardware --no-default-features --lib sync_packet
    → 15/15 passed (122 filtered)

The 38-iter ADR-110 work is intact post-merge.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-05-23 15:34:29 -04:00
..
benches fix(security): audit — fix RUSTSEC vulns, clippy warnings, dead code (#769) 2026-05-23 05:36:13 -04:00
src merge: main into adr-110-esp32c6 — resolve lib.rs / esp32_parser / tracker_bridge conflicts 2026-05-23 15:34:29 -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