Complete end-to-end WiFi CSI capture pipeline verified on real hardware: - ESP32-S3 firmware: WiFi STA + promiscuous mode CSI collection, ADR-018 binary serialization, UDP streaming at ~20 Hz - Rust aggregator CLI binary (clap): receives UDP frames, parses with Esp32CsiParser, prints per-frame summary (node, seq, rssi, amp) - UDP aggregator module with per-node sequence tracking and drop detection - CsiFrame bridge to detection pipeline (amplitude/phase/SNR conversion) - Python ESP32 binary parser with UDP reader - Presence detection confirmed: motion score 10/10 from live CSI variance Hardware verified: ESP32-S3-DevKitC-1 (CP2102, MAC 3C:0F:02:EC:C2:28), Docker ESP-IDF v5.2 build, esptool 5.1.0 flash, 20 Rust + 6 Python tests pass. Co-Authored-By: claude-flow <ruv@ruv.net>
35 lines
674 B
C
35 lines
674 B
C
/**
|
|
* @file stream_sender.h
|
|
* @brief UDP stream sender for CSI frames.
|
|
*/
|
|
|
|
#ifndef STREAM_SENDER_H
|
|
#define STREAM_SENDER_H
|
|
|
|
#include <stdint.h>
|
|
#include <stddef.h>
|
|
|
|
/**
|
|
* Initialize the UDP sender.
|
|
* Creates a UDP socket targeting the configured aggregator.
|
|
*
|
|
* @return 0 on success, -1 on error.
|
|
*/
|
|
int stream_sender_init(void);
|
|
|
|
/**
|
|
* Send a serialized CSI frame over UDP.
|
|
*
|
|
* @param data Frame data buffer.
|
|
* @param len Length of data to send.
|
|
* @return Number of bytes sent, or -1 on error.
|
|
*/
|
|
int stream_sender_send(const uint8_t *data, size_t len);
|
|
|
|
/**
|
|
* Close the UDP sender socket.
|
|
*/
|
|
void stream_sender_deinit(void);
|
|
|
|
#endif /* STREAM_SENDER_H */
|