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.
            Default 2000 = 2.0 rad/s^2.

    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 "AMOLED Display (ADR-045)"

    config DISPLAY_ENABLE
        bool "Enable AMOLED display support"
        default y
        help
            Enable RM67162 QSPI AMOLED display and LVGL UI.
            Auto-detects at boot; gracefully skips if no display hardware.
            Requires SPIRAM for frame buffers.

    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 "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
