menu "CSI Node Configuration" config CSI_NODE_ID int "Node ID (0-255)" default 1 range 0 255 help Unique identifier for this ESP32 CSI node. config CSI_TARGET_IP string "Aggregator IP address" default "192.168.1.100" help IP address of the UDP aggregator host. config CSI_TARGET_PORT int "Aggregator UDP port" default 5005 range 1024 65535 help UDP port the aggregator listens on. config CSI_WIFI_SSID string "WiFi SSID" default "wifi-densepose" help SSID of the WiFi network to connect to. config CSI_WIFI_PASSWORD string "WiFi Password" default "" help Password for the WiFi network. Leave empty for open networks. config CSI_WIFI_CHANNEL int "WiFi Channel (1-13)" default 6 range 1 13 help WiFi channel to listen on for CSI data. endmenu menu "Edge Intelligence (ADR-039)" config EDGE_TIER int "Edge processing tier (0=raw, 1=basic, 2=full)" default 2 range 0 2 help 0 = Raw passthrough (no on-device DSP). 1 = Basic presence/motion detection. 2 = Full pipeline (vitals, compression, multi-person). config EDGE_VITAL_INTERVAL_MS int "Vitals packet send interval (ms)" default 1000 range 100 10000 help How often to send vitals packets over UDP. config EDGE_TOP_K int "Top-K subcarriers to track" default 8 range 1 32 help Number of highest-variance subcarriers to use for DSP. config EDGE_FALL_THRESH int "Fall detection threshold (x1000)" default 15000 range 100 50000 help Phase acceleration threshold for fall detection. Value is divided by 1000 to get rad/s². Default 15000 = 15.0 rad/s². Raise to reduce false positives in high-traffic environments. Normal walking produces accelerations of 2-5 rad/s². Stored as integer; divided by 1000 at runtime. config EDGE_POWER_DUTY int "Power duty cycle percentage" default 100 range 10 100 help Active duty cycle for battery-powered nodes. 100 = always on. 50 = active half the time. endmenu menu "Adaptive Controller (ADR-081)" config ADAPTIVE_FAST_LOOP_MS int "Fast loop period (ms)" default 200 range 50 2000 help Period of the fast control loop. The fast loop reads radio health and edge-derived motion/presence/anomaly scores and updates the active capture profile. Default 200 ms matches the ADR-081 spec. config ADAPTIVE_MEDIUM_LOOP_MS int "Medium loop period (ms)" default 1000 range 200 30000 help Period of the medium control loop. The medium loop is where channel selection and role transitions happen (when enable_channel_switch / enable_role_change are on). config ADAPTIVE_SLOW_LOOP_MS int "Slow loop period (ms)" default 30000 range 1000 300000 help Period of the slow control loop. The slow loop publishes HEALTH messages and may request CALIBRATION_START on sustained drift. config ADAPTIVE_AGGRESSIVE bool "Aggressive adaptation" default n help When enabled, the controller reacts to motion / anomaly sooner and uses a tighter cadence in SENSE_ACTIVE. Default off matches today's conservative behavior. config ADAPTIVE_ENABLE_CHANNEL_SWITCH bool "Allow controller to change WiFi channel" default n help When disabled, the controller never calls set_channel() — channel hopping (ADR-029) and channel override (ADR-060) remain in charge. Enable only after Phase 3 follow-up work has wired the channel-plan mesh message. config ADAPTIVE_ENABLE_ROLE_CHANGE bool "Allow controller to change mesh role" default n help When disabled, the controller never advertises a different role to the swarm bridge. Enable after the mesh-plane ROLE_ASSIGN protocol is in place. config ADAPTIVE_MOTION_THRESH_PERMIL int "Motion threshold (per-mille)" default 200 range 1 1000 help Motion score above which the controller transitions to SENSE_ACTIVE and selects RV_PROFILE_FAST_MOTION. Expressed in per-mille (200 = 0.20). config ADAPTIVE_ANOMALY_THRESH_PERMIL int "Anomaly threshold (per-mille)" default 600 range 1 1000 help Anomaly score above which the controller transitions to ALERT. Per-mille (600 = 0.60). config ADAPTIVE_MIN_PKT_YIELD int "Minimum packet yield before DEGRADED (pps)" default 5 range 0 100 help CSI callback rate (per second) below which the controller falls back to DEGRADED mode and pins the radio to RV_PROFILE_PASSIVE_LOW_RATE. 0 disables the degraded gate. endmenu menu "Display (ADR-045)" config DISPLAY_ENABLE bool "Enable on-device display support" default y help Enable the LVGL UI on an attached panel. Auto-detects at boot; gracefully skips if no display hardware. Requires SPIRAM for frame buffers. Choose the panel type below — the CSI pipeline runs unchanged regardless of panel. choice DISPLAY_PANEL prompt "Display panel" depends on DISPLAY_ENABLE default DISPLAY_PANEL_SH8601 help Which physical panel is attached. Exactly one HAL is compiled. config DISPLAY_PANEL_SH8601 bool "SH8601 QSPI AMOLED (Waveshare ESP32-S3-Touch-AMOLED-1.8, 368x448)" config DISPLAY_PANEL_ST7789 bool "ST7789V2 SPI LCD (Waveshare ESP32-S3-Touch-LCD-1.69, 240x280)" endchoice # ---- ST7789 SPI LCD pins / geometry (Waveshare 1.69 defaults) ---- config DISPLAY_ST7789_SCLK int "ST7789 SPI SCLK GPIO" default 6 depends on DISPLAY_PANEL_ST7789 config DISPLAY_ST7789_MOSI int "ST7789 SPI MOSI GPIO" default 7 depends on DISPLAY_PANEL_ST7789 config DISPLAY_ST7789_CS int "ST7789 SPI CS GPIO" default 5 depends on DISPLAY_PANEL_ST7789 config DISPLAY_ST7789_DC int "ST7789 SPI DC GPIO" default 4 depends on DISPLAY_PANEL_ST7789 config DISPLAY_ST7789_RST int "ST7789 RST GPIO" default 8 depends on DISPLAY_PANEL_ST7789 config DISPLAY_ST7789_BL int "ST7789 backlight PWM GPIO" default 15 depends on DISPLAY_PANEL_ST7789 config DISPLAY_ST7789_H_RES int "ST7789 horizontal resolution" default 240 depends on DISPLAY_PANEL_ST7789 config DISPLAY_ST7789_V_RES int "ST7789 vertical resolution" default 280 depends on DISPLAY_PANEL_ST7789 config DISPLAY_ST7789_GAP_X int "ST7789 column offset (gap X)" default 0 depends on DISPLAY_PANEL_ST7789 config DISPLAY_ST7789_GAP_Y int "ST7789 row offset (gap Y)" default 20 depends on DISPLAY_PANEL_ST7789 help The 240x280 visible window sits at row 20 of the ST7789's 240x320 controller RAM. Adjust if the image is shifted. config DISPLAY_ST7789_TOUCH_SDA int "CST816 touch I2C SDA GPIO" default 11 depends on DISPLAY_PANEL_ST7789 config DISPLAY_ST7789_TOUCH_SCL int "CST816 touch I2C SCL GPIO" default 10 depends on DISPLAY_PANEL_ST7789 config DISPLAY_ST7789_TOUCH_RST int "CST816 touch RST GPIO" default 13 depends on DISPLAY_PANEL_ST7789 config DISPLAY_ST7789_TOUCH_INT int "CST816 touch INT GPIO" default 14 depends on DISPLAY_PANEL_ST7789 config DISPLAY_FPS_LIMIT int "Display refresh rate limit (FPS)" default 30 range 10 60 depends on DISPLAY_ENABLE help Maximum display refresh rate. Lower values save CPU. config DISPLAY_BRIGHTNESS int "Default backlight brightness (%)" default 80 range 0 100 depends on DISPLAY_ENABLE config DISPLAY_QSPI_CS int "QSPI CS GPIO" default 6 depends on DISPLAY_ENABLE config DISPLAY_QSPI_CLK int "QSPI CLK GPIO" default 47 depends on DISPLAY_ENABLE config DISPLAY_QSPI_D0 int "QSPI D0 GPIO" default 18 depends on DISPLAY_ENABLE config DISPLAY_QSPI_D1 int "QSPI D1 GPIO" default 7 depends on DISPLAY_ENABLE config DISPLAY_QSPI_D2 int "QSPI D2 GPIO" default 48 depends on DISPLAY_ENABLE config DISPLAY_QSPI_D3 int "QSPI D3 GPIO" default 5 depends on DISPLAY_ENABLE config DISPLAY_TOUCH_SDA int "Touch I2C SDA GPIO" default 3 depends on DISPLAY_ENABLE config DISPLAY_TOUCH_SCL int "Touch I2C SCL GPIO" default 2 depends on DISPLAY_ENABLE config DISPLAY_TOUCH_INT int "Touch INT GPIO" default 21 depends on DISPLAY_ENABLE config DISPLAY_TOUCH_RST int "Touch RST GPIO" default 17 depends on DISPLAY_ENABLE config DISPLAY_BL_PIN int "Backlight PWM GPIO" default 38 depends on DISPLAY_ENABLE endmenu menu "WASM Programmable Sensing (ADR-040)" config WASM_ENABLE bool "Enable WASM Tier 3 runtime" default y help Enable the WASM3 interpreter for hot-loadable sensing modules. Requires WASM3 source in components/wasm3/wasm3-src/. Adds ~120 KB flash and ~20 KB SRAM. config WASM_MAX_MODULES int "Maximum concurrent WASM modules" default 4 range 1 8 help Number of WASM module slots. Each slot can hold one loaded .wasm binary (stored in PSRAM, max 128 KB each). config WASM_VERIFY_SIGNATURE bool "Require Ed25519 signature verification for WASM uploads" default y help When enabled, uploaded .wasm binaries must include a valid Ed25519 signature. Uses the same signing key as OTA firmware. Disable with provision.py --no-wasm-verify for lab/dev use. config WASM_TIMER_INTERVAL_MS int "WASM on_timer() interval (ms)" default 1000 range 100 60000 help How often to call on_timer() on running WASM modules. Default 1000 ms = 1 Hz. endmenu menu "ESP32-C6 capabilities (ADR-110)" depends on IDF_TARGET_ESP32C6 config C6_TWT_ENABLE bool "Enable TWT (Target Wake Time) negotiation" default y # SOC_WIFI_HE_SUPPORT is auto-set on chips with HE (Wi-Fi 6) PHY (C6/C5) depends on SOC_WIFI_HE_SUPPORT help After WiFi STA connect, request an individual TWT agreement with the AP for deterministic CSI cadence. Falls back gracefully if the AP doesn't support 11ax TWT. config C6_TWT_WAKE_INTERVAL_US int "TWT wake interval (microseconds)" default 10000 range 1024 1048576 depends on C6_TWT_ENABLE help Period between TWT wake events. 10000 µs = 100 Hz CSI cadence. config C6_TWT_MIN_WAKE_DURA_US int "TWT minimum wake duration (microseconds)" default 512 range 256 16384 depends on C6_TWT_ENABLE help Minimum awake duration per TWT wake. 512 µs is enough to capture one CSI frame. config C6_TIMESYNC_ENABLE bool "Enable 802.15.4 mesh time-sync" default y depends on IEEE802154_ENABLED help Cross-node clock alignment over the 802.15.4 radio. Frees WiFi airtime from coordination traffic — relevant to ADR-029/030 multistatic sensing. config C6_TIMESYNC_CHANNEL int "802.15.4 time-sync channel (11-26)" default 15 range 11 26 depends on C6_TIMESYNC_ENABLE config C6_LP_CORE_ENABLE bool "Enable LP-core wake-on-motion hibernation" default n depends on ULP_COPROC_TYPE_LP_CORE help Arm the LP RISC-V coprocessor as an always-on motion gate in deep sleep. Targets ~5 µA hibernation for battery seed nodes. Requires a motion sensor on a wake-capable GPIO. config C6_LP_WAKE_GPIO int "LP-core wake GPIO" default 4 range 0 23 depends on C6_LP_CORE_ENABLE config C6_LP_WAKE_ACTIVE_HIGH bool "Wake on rising edge" default y depends on C6_LP_CORE_ENABLE config C6_LP_POLL_PERIOD_US int "LP-core poll period (microseconds)" default 10000 range 1000 1000000 depends on C6_LP_CORE_ENABLE help How often the LP-core program reads the wake GPIO. 10000 µs = 100 Hz. Lower values give faster response but increase the average LP-core duty cycle (and current). 10 ms is a good balance for PIR sensors. config C6_LP_DEBOUNCE_SAMPLES int "LP-core debounce sample count" default 3 range 1 32 depends on C6_LP_CORE_ENABLE help How many consecutive matching GPIO reads are required before the LP-core wakes the HP core. 3 = ~30 ms at the default 10 ms poll period. config C6_SOFTAP_HE_ENABLE bool "Run as Wi-Fi 6 soft-AP with TWT Responder (two-board bench)" default n depends on SOC_WIFI_HE_SUPPORT help When set, the C6 starts in AP+STA mode and advertises a soft-AP that announces HE (Wi-Fi 6) capability with TWT Responder=1. Lets a second C6 station-mode board negotiate a real iTWT agreement against a known-cooperative AP, unblocking ADR-110 §B1/B2 measurement without buying an 11ax router. SSID/PSK configured via NVS (keys `softap_ssid` / `softap_psk`) or the defaults below. config C6_SOFTAP_HE_SSID string "Soft-AP SSID (when C6_SOFTAP_HE_ENABLE)" default "ruview-c6-twt" depends on C6_SOFTAP_HE_ENABLE config C6_SOFTAP_HE_PSK string "Soft-AP WPA2 password (>= 8 chars)" default "ruviewtwt" depends on C6_SOFTAP_HE_ENABLE config C6_SOFTAP_HE_CHANNEL int "Soft-AP channel (1-13)" default 6 range 1 13 depends on C6_SOFTAP_HE_ENABLE config C6_SYNC_EVERY_N_FRAMES int "Sync-packet emission cadence (CSI frames per sync)" default 20 range 1 1000 help How many CSI callbacks fire before csi_collector emits one ADR-110 §A0.11 sync packet (magic 0xC511A110) carrying the mesh-aligned epoch + sequence high-water for the host aggregator to pair against incoming CSI frames. Default 20 = ~2 s between sync packets at the bench's observed 10 fps CSI rate. Raise for less wire overhead; lower for tighter multistatic alignment windows. endmenu menu "ADR-018 frame extensions (ADR-110)" config CSI_FRAME_HE_TAGGING bool "Tag ADR-018 frames with HE PPDU metadata" default y help When the WiFi driver reports an 802.11ax HE-SU/HE-MU/HE-TB PPDU, write the PPDU type + bandwidth into ADR-018 frame bytes 18-19 (previously reserved). Readers that don't know about this extension see the bytes as zero — fully backwards compatible. endmenu menu "Mock CSI (QEMU Testing)" config CSI_MOCK_ENABLED bool "Enable mock CSI generator (for QEMU testing)" default n help Replace real WiFi CSI with synthetic frame generator. Use with QEMU emulation for automated testing. config CSI_MOCK_SKIP_WIFI_CONNECT bool "Skip WiFi STA connection" depends on CSI_MOCK_ENABLED default y help Skip WiFi initialization when using mock CSI. config CSI_MOCK_SCENARIO int "Mock scenario (0-9, 255=all)" depends on CSI_MOCK_ENABLED default 255 range 0 255 help 0=empty, 1=static, 2=walking, 3=fall, 4=multi-person, 5=channel-sweep, 6=mac-filter, 7=ring-overflow, 8=boundary-rssi, 9=zero-length, 255=run all. config CSI_MOCK_SCENARIO_DURATION_MS int "Scenario duration (ms)" depends on CSI_MOCK_ENABLED default 5000 range 1000 60000 config CSI_MOCK_LOG_FRAMES bool "Log every mock frame (verbose)" depends on CSI_MOCK_ENABLED default n endmenu