Expand description
WiFi-DensePose hardware interface abstractions.
This crate provides platform-agnostic types and parsers for WiFi CSI data from various hardware sources:
- ESP32/ESP32-S3: Parses ADR-018 binary CSI frames streamed over UDP
- UDP Aggregator: Receives frames from multiple ESP32 nodes (ADR-018 Layer 2)
- Bridge: Converts CsiFrame → CsiData for the detection pipeline (ADR-018 Layer 3)
§Design Principles
- No mock data: All parsers either parse real bytes or return explicit errors
- No hardware dependency at compile time: Parsing is done on byte buffers, not through FFI to ESP-IDF or kernel modules
- Deterministic: Same bytes in → same parsed output, always
§Example
use wifi_densepose_hardware::{CsiFrame, Esp32CsiParser, ParseError};
// Parse ESP32 CSI data from 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),
}Re-exports§
pub use radio_ops::crc32_ieee;pub use radio_ops::decode_anomaly_alert;pub use radio_ops::decode_mesh;pub use radio_ops::decode_node_status;pub use radio_ops::encode_health;pub use radio_ops::AnomalyAlert;pub use radio_ops::AuthClass;pub use radio_ops::CaptureProfile;pub use radio_ops::MeshError;pub use radio_ops::MeshHeader;pub use radio_ops::MeshMsgType;pub use radio_ops::MeshRole;pub use radio_ops::MockRadio;pub use radio_ops::NodeStatus;pub use radio_ops::RadioError;pub use radio_ops::RadioHealth;pub use radio_ops::RadioMode;pub use radio_ops::RadioOps;pub use radio_ops::MESH_HEADER_SIZE;pub use radio_ops::MESH_MAGIC;pub use radio_ops::MESH_MAX_PAYLOAD;pub use radio_ops::MESH_VERSION;pub use mediatek_csi::ChipsetProfile as MediatekChipsetProfile;pub use mediatek_csi::CsiFlags as MediatekCsiFlags;pub use mediatek_csi::CsiFrame as MediatekCsiFrame;pub use mediatek_csi::CsiParseError as MediatekCsiParseError;pub use mediatek_csi::CsiPayload as MediatekCsiPayload;pub use mediatek_csi::ElementFormat as MediatekElementFormat;pub use mediatek_csi::PpduType as MediatekPpduType;pub use mediatek_csi::ReportKind as MediatekReportKind;pub use mediatek_csi::MEDIATEK_CSI_HEADER_LEN;pub use mediatek_csi::MEDIATEK_CSI_MAGIC;pub use mediatek_csi::MEDIATEK_CSI_VERSION;pub use qualcomm_csi::ChipsetProfile as QualcommChipsetProfile;pub use qualcomm_csi::CsiFlags as QualcommCsiFlags;pub use qualcomm_csi::CsiFrame as QualcommCsiFrame;pub use qualcomm_csi::CsiParseError as QualcommCsiParseError;pub use qualcomm_csi::CsiPayload as QualcommCsiPayload;pub use qualcomm_csi::ElementFormat as QualcommElementFormat;pub use qualcomm_csi::PpduType as QualcommPpduType;pub use qualcomm_csi::ReportKind as QualcommReportKind;pub use qualcomm_csi::QUALCOMM_CSI_HEADER_LEN;pub use qualcomm_csi::QUALCOMM_CSI_MAGIC;pub use qualcomm_csi::QUALCOMM_CSI_VERSION;pub use rtl8720f::ElementFormat as Rtl8720fElementFormat;pub use rtl8720f::RadarFlags as Rtl8720fRadarFlags;pub use rtl8720f::RadarFrame as Rtl8720fRadarFrame;pub use rtl8720f::RadarParseError as Rtl8720fRadarParseError;pub use rtl8720f::RadarPayload as Rtl8720fRadarPayload;pub use rtl8720f::ReportType as Rtl8720fReportType;pub use rtl8720f::RTL8720F_RADAR_HEADER_LEN;pub use rtl8720f::RTL8720F_RADAR_MAGIC;pub use rtl8720f::RTL8720F_RADAR_VERSION;pub use sync_packet::SyncPacket;pub use sync_packet::SyncPacketFlags;pub use sync_packet::SYNC_PACKET_MAGIC;pub use sync_packet::SYNC_PACKET_PROTO_VER;pub use sync_packet::SYNC_PACKET_SIZE;pub use vendor_rf::ProviderAvailability;pub use vendor_rf::ProviderDescriptor;pub use vendor_rf::RfCapability;pub use vendor_rf::VendorEventError;pub use vendor_rf::VendorId;pub use vendor_rf::VendorRfEvent;pub use vendor_rf::VendorRfProvider;
Modules§
- aggregator
- UDP aggregator for ESP32 CSI nodes (ADR-018 Layer 2).
- esp32
- ESP32 hardware protocol modules.
- ieee80211bf
- IEEE 802.11bf-2025 WLAN sensing — forward-compatibility protocol model (ADR-153, amending ADR-152 §2.4).
- mediatek_
csi - ADR-267 vendor-neutral MediaTek Filogic MIMO CSI framing and simulator. Vendor-neutral MediaTek Filogic MIMO CSI transport and deterministic simulator. This is not a MediaTek firmware ABI; see ADR-266/267.
- qualcomm_
csi - ADR-269 vendor-neutral Qualcomm Atheros CSI framing and simulator. Vendor-neutral Qualcomm Atheros MIMO CSI transport and deterministic simulator. This is not a Qualcomm firmware ABI; see ADR-268/269.
- radio_
ops - ADR-081 Layer 1 Rust mirror + Layer 3 mesh-plane decoder.
- rtl8720f
- ADR-264 host-side framing for Realtek RTL8720F CFR and FMCW radar reports. This module has no dependency on the vendor SDK. ADR-264 transport-neutral framing for Realtek RTL8720F radar reports.
- sync_
packet - ADR-110 §A0.12 sync packet decoder (firmware v0.6.9+).
- vendor_
rf - ADR-270 capability-safe vendor RF provider contract. ADR-270 vendor RF provider contract.
Structs§
- Adr018
Flags - Flags encoded in ADR-018 byte 19 (ADR-110 extension).
- Antenna
Config - Antenna configuration for MIMO.
- CsiData
- Pipeline-ready CSI data with amplitude and phase vectors (ADR-018).
- CsiFrame
- A parsed CSI frame containing subcarrier data and metadata.
- CsiMetadata
- Metadata associated with a CSI frame (ADR-018 format).
- Esp32
CsiParser - Parser for ESP32 CSI binary frames (ADR-018 format).
- Subcarrier
Data - A single subcarrier’s I/Q data.
Enums§
- Bandwidth
- WiFi channel bandwidth.
- Parse
Error - Errors that can occur when parsing CSI data from hardware.
- Ppdu
Type - PPDU type encoded in ADR-018 byte 18 (ADR-110 extension).
Constants§
- ESP32_
CSI_ MAGIC - ESP32 CSI binary frame magic number (ADR-018).
- RUVIEW_
COMPRESSED_ CSI_ MAGIC - ADR-039 compressed-CSI packet.
- RUVIEW_
FEATURE_ MAGIC - ADR-069 feature-vector packet.
- RUVIEW_
FEATURE_ STATE_ MAGIC - ADR-081 compact feature-state packet (the default upstream payload).
- RUVIEW_
FUSED_ VITALS_ MAGIC - ADR-063 fused-vitals packet (multi-sensor fusion).
- RUVIEW_
TEMPORAL_ MAGIC - ADR-095 / #513 on-device temporal-classification packet.
- RUVIEW_
VITALS_ MAGIC - ADR-039 edge vitals packet (32 bytes: HR/BR/presence).
Functions§
- ruview_
sibling_ packet_ name - If
magicis a recognized RuView wire packet other than the ADR-018 raw CSI frame, return a human-readable name for it; otherwiseNone.