Commit Graph

3 Commits

Author SHA1 Message Date
ruv a426ae386d Fix ADR-081 Timer Svc stack overflow on ESP32-S3
emit_feature_state() runs inside the FreeRTOS Timer Svc task via the
fast loop callback; it memsets an rv_feature_state_t, queries vitals/
radio, and sends via stream_sender (lwIP sendto). Default Timer Svc
stack is 2 KiB, which overflows and panics ~1 s after boot:

  ***ERROR*** A stack overflow in task Tmr Svc has been detected.

Bump CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH to 8 KiB across the three
sdkconfig defaults files (default, template, 4mb). Matches the main
task stack size already in use.

Found during on-device validation on ESP32-S3 (MAC 3c:0f:02:e9:b5:f8)
after flashing the post-merge v0.6.1 build — firmware boots, connects
WiFi, emits one medium tick, then crashes on the fast tick that calls
emit_feature_state().

Follow-up: consider moving emit_feature_state + network I/O out of the
timer daemon into a dedicated worker task (open issue).

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-04-20 10:48:21 -04:00
ruv 952f27a1ce fix(firmware): enable CSI in sdkconfig and add build guard (ADR-057)
The committed sdkconfig had CONFIG_ESP_WIFI_CSI_ENABLED disabled, causing
all builds to crash at runtime with "CSI not enabled in menuconfig".
Root cause: sdkconfig.defaults.template existed but ESP-IDF only reads
sdkconfig.defaults (no .template suffix).

Fixes:
- Add sdkconfig.defaults with CONFIG_ESP_WIFI_CSI_ENABLED=y
- Add #error compile guard in csi_collector.c to prevent recurrence
- Fix NVS encryption default (requires eFuse, breaks clean builds)

Verified: Docker build + flash to ESP32-S3 + CSI callbacks confirmed.

Closes #241
Relates to #223, #238, #234, #210, #190

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-03-12 13:49:20 -04:00
Reuven a28a875594 fix(firmware): provision.py nvs import + partition config template
Fixes #215: provision.py now correctly imports from esp_idf_nvs_partition_gen
package (the pip-installable version) before falling back to legacy import.

Fixes #216: Added sdkconfig.defaults.template with custom partition table
configuration for 8MB flash boards. Copy to sdkconfig.defaults before build:
  cp sdkconfig.defaults.template sdkconfig.defaults

Changes:
- firmware/esp32-csi-node/provision.py: Try esp_idf_nvs_partition_gen first
- scripts/provision.py: Same import fix
- firmware/esp32-csi-node/sdkconfig.defaults.template: 8MB flash config with
  2MB OTA partitions, compiler size optimization, and CSI enabled

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-03-10 08:40:47 -04:00