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. |
||
|---|---|---|
| .. | ||
| src | ||
| Cargo.toml | ||
| README.md | ||
README.md
wifi-densepose-db
Database persistence layer for the WiFi-DensePose pose estimation system.
Overview
wifi-densepose-db implements the DataStore trait defined in wifi-densepose-core, providing
persistent storage for CSI frames, pose estimates, scan sessions, and alert history. The intended
backends are SQLx for relational storage (PostgreSQL and SQLite) and
Redis for real-time caching and pub/sub.
Status: This crate is currently a stub. The intended API surface is documented below.
Planned Features
- Dual backend -- PostgreSQL for production deployments, SQLite for single-node and embedded use. Selectable at compile time via feature flags.
- Redis caching -- Connection-pooled Redis for low-latency pose estimate lookups, session state, and pub/sub event distribution.
- Migrations -- Embedded SQL migrations managed by SQLx, applied automatically on startup.
- Repository pattern -- Typed repository structs (
PoseRepository,SessionRepository,AlertRepository) implementing the coreDataStoretrait. - Connection pooling -- Configurable pool sizes via
sqlx::PgPool/sqlx::SqlitePool. - Transaction support -- Scoped transactions for multi-table writes (e.g., survivor detection plus alert creation).
- Time-series optimisation -- Partitioned tables and retention policies for high-frequency CSI frame storage.
Planned feature flags
| Flag | Default | Description |
|---|---|---|
postgres |
no | Enable PostgreSQL backend |
sqlite |
yes | Enable SQLite backend |
redis |
no | Enable Redis caching layer |
Quick Start
// Intended usage (not yet implemented)
use wifi_densepose_db::{Database, PoseRepository};
use wifi_densepose_core::PoseEstimate;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let db = Database::connect("sqlite://data/wifi-densepose.db").await?;
db.run_migrations().await?;
let repo = PoseRepository::new(db.pool());
// Store a pose estimate
repo.insert(&pose_estimate).await?;
// Query recent poses
let recent = repo.find_recent(10).await?;
println!("Last 10 poses: {:?}", recent);
Ok(())
}
Planned Schema
-- Core tables
CREATE TABLE csi_frames (
id UUID PRIMARY KEY,
session_id UUID NOT NULL,
timestamp TIMESTAMPTZ NOT NULL,
subcarriers BYTEA NOT NULL,
antenna_id INTEGER NOT NULL
);
CREATE TABLE pose_estimates (
id UUID PRIMARY KEY,
frame_id UUID REFERENCES csi_frames(id),
timestamp TIMESTAMPTZ NOT NULL,
keypoints JSONB NOT NULL,
confidence REAL NOT NULL
);
CREATE TABLE scan_sessions (
id UUID PRIMARY KEY,
started_at TIMESTAMPTZ NOT NULL,
ended_at TIMESTAMPTZ,
config JSONB NOT NULL
);
Related Crates
| Crate | Role |
|---|---|
wifi-densepose-core |
DataStore trait definition |
wifi-densepose-config |
Database connection configuration |
wifi-densepose-api |
REST API (consumer) |
wifi-densepose-mat |
Disaster detection (consumer) |
wifi-densepose-signal |
CSI signal processing |
License
MIT OR Apache-2.0