feat: ADR-024 Contrastive CSI Embedding Model — all 7 phases (#52)
Full implementation of Project AETHER — Contrastive CSI Embedding Model. ## Phases Delivered 1. ProjectionHead (64→128→128) + L2 normalization 2. CsiAugmenter (5 physically-motivated augmentations) 3. InfoNCE contrastive loss + SimCLR pretraining 4. FingerprintIndex (4 index types: env, activity, temporal, person) 5. RVF SEG_EMBED (0x0C) + CLI integration 6. Cross-modal alignment (PoseEncoder + InfoNCE) 7. Deep RuVector: MicroLoRA, EWC++, drift detection, hard-negative mining, SEG_LORA ## Stats - 276 tests passing (191 lib + 51 bin + 16 rvf + 18 vitals) - 3,342 additions across 8 files - Zero unsafe/unwrap/panic/todo stubs - ~55KB INT8 model for ESP32 edge deployment Also fixes deprecated GitHub Actions (v3→v4) and adds feat/* branch CI triggers. Closes #50
This commit was merged in pull request #52.
This commit is contained in:
@@ -4,7 +4,12 @@ version.workspace = true
|
||||
edition.workspace = true
|
||||
description = "Hardware interface abstractions for WiFi CSI sensors (ESP32, Intel 5300, Atheros)"
|
||||
license = "MIT OR Apache-2.0"
|
||||
authors = ["rUv <ruv@ruv.net>", "WiFi-DensePose Contributors"]
|
||||
repository = "https://github.com/ruvnet/wifi-densepose"
|
||||
documentation = "https://docs.rs/wifi-densepose-hardware"
|
||||
keywords = ["wifi", "esp32", "csi", "hardware", "sensor"]
|
||||
categories = ["hardware-support", "science"]
|
||||
readme = "README.md"
|
||||
|
||||
[features]
|
||||
default = ["std"]
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
# wifi-densepose-hardware
|
||||
|
||||
[](https://crates.io/crates/wifi-densepose-hardware)
|
||||
[](https://docs.rs/wifi-densepose-hardware)
|
||||
[](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
|
||||
|
||||
```rust
|
||||
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
|
||||
|
||||
```text
|
||||
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)
|
||||
```
|
||||
|
||||
## Related Crates
|
||||
|
||||
| Crate | Role |
|
||||
|-------|------|
|
||||
| [`wifi-densepose-core`](../wifi-densepose-core) | Foundation types (`CsiFrame` definitions) |
|
||||
| [`wifi-densepose-signal`](../wifi-densepose-signal) | Consumes parsed CSI data for processing |
|
||||
| [`wifi-densepose-mat`](../wifi-densepose-mat) | Uses hardware adapters for disaster detection |
|
||||
| [`wifi-densepose-vitals`](../wifi-densepose-vitals) | Vital sign extraction from parsed frames |
|
||||
|
||||
## License
|
||||
|
||||
MIT OR Apache-2.0
|
||||
Reference in New Issue
Block a user