mirror of
https://github.com/ruvnet/RuView
synced 2026-07-25 17:51:48 +00:00
915943cef4
* feat: add MAC address filter for ESP32 CSI collection In multi-AP environments, CSI frames from different access points get mixed together, corrupting the sensing signal. Add transmitter MAC filtering so only frames from a specified AP are processed. Implementation: - csi_collector: filter in wifi_csi_callback by comparing info->mac against configured MAC; log transmitter MAC in periodic debug output - csi_collector_set_filter_mac(): runtime API to enable/disable filter - Kconfig: CSI_FILTER_MAC option (format "AA:BB:CC:DD:EE:FF") - NVS: "filter_mac" 6-byte blob overrides Kconfig at runtime - nvs_config: parse Kconfig MAC string at boot, load NVS override - main: apply filter from config after csi_collector_init() When no filter is configured (default), behavior is unchanged — all transmitter MACs are accepted for backward compatibility. Fixes #98 Co-Authored-By: claude-flow <ruv@ruv.net> * chore: add CLAUDE.local.md to .gitignore Local machine configuration (ESP-IDF paths, COM port, build instructions) should not be committed to the repository. Co-Authored-By: claude-flow <ruv@ruv.net>
54 lines
1.9 KiB
C
54 lines
1.9 KiB
C
/**
|
|
* @file nvs_config.h
|
|
* @brief Runtime configuration via NVS (Non-Volatile Storage).
|
|
*
|
|
* Reads WiFi credentials and aggregator target from NVS.
|
|
* Falls back to compile-time Kconfig defaults if NVS keys are absent.
|
|
* This allows a single firmware binary to be shipped and configured
|
|
* per-device using the provisioning script.
|
|
*/
|
|
|
|
#ifndef NVS_CONFIG_H
|
|
#define NVS_CONFIG_H
|
|
|
|
#include <stdint.h>
|
|
|
|
/** Maximum lengths for NVS string fields. */
|
|
#define NVS_CFG_SSID_MAX 33
|
|
#define NVS_CFG_PASS_MAX 65
|
|
#define NVS_CFG_IP_MAX 16
|
|
|
|
/** Maximum channels in the hop list (must match CSI_HOP_CHANNELS_MAX). */
|
|
#define NVS_CFG_HOP_MAX 6
|
|
|
|
/** Runtime configuration loaded from NVS or Kconfig defaults. */
|
|
typedef struct {
|
|
char wifi_ssid[NVS_CFG_SSID_MAX];
|
|
char wifi_password[NVS_CFG_PASS_MAX];
|
|
char target_ip[NVS_CFG_IP_MAX];
|
|
uint16_t target_port;
|
|
uint8_t node_id;
|
|
|
|
/* ADR-029: Channel hopping and TDM configuration */
|
|
uint8_t channel_hop_count; /**< Number of channels to hop (1 = no hop). */
|
|
uint8_t channel_list[NVS_CFG_HOP_MAX]; /**< Channel numbers for hopping. */
|
|
uint32_t dwell_ms; /**< Dwell time per channel in ms. */
|
|
uint8_t tdm_slot_index; /**< This node's TDM slot index (0-based). */
|
|
uint8_t tdm_node_count; /**< Total nodes in the TDM schedule. */
|
|
|
|
/* MAC address filter for CSI source selection (Issue #98) */
|
|
uint8_t filter_mac[6]; /**< Transmitter MAC to accept (all zeros = no filter). */
|
|
uint8_t filter_mac_enabled; /**< 1 = filter active, 0 = accept all. */
|
|
} nvs_config_t;
|
|
|
|
/**
|
|
* Load configuration from NVS, falling back to Kconfig defaults.
|
|
*
|
|
* Must be called after nvs_flash_init().
|
|
*
|
|
* @param cfg Output configuration struct.
|
|
*/
|
|
void nvs_config_load(nvs_config_t *cfg);
|
|
|
|
#endif /* NVS_CONFIG_H */
|