Two bugs in the v0.6.3-esp32 release, both reported in #505:
1. **4 MB binary boot-loops with Tmr Svc stack overflow.** The
adaptive_controller fast loop runs emit_feature_state() (lwIP
sendto via stream_sender) AND apply_decision() (which can call
rv_mesh_send_anomaly — another sendto) inside the FreeRTOS Timer
Svc callback. The previous fix (a426ae386) bumped from the 2 KiB
IDF default to 8 KiB; that absorbs the steady-state fast tick but
not the worst case where a state transition fires the anomaly
emit on top of an already-stacked feature_state emit. Bump to
16 KiB across both sdkconfig.defaults.template (8 MB build) and
sdkconfig.defaults.4mb so the two release variants stay in sync.
2. **All v0.6.3 binaries reported `App version: 0.6.2`.** version.txt
was never bumped at the v0.6.3-esp32 tag. CMake reads version.txt
into project(VERSION ...) which feeds esp_app_get_description()->
version. Bump to 0.6.4 to match the new release tag.
Verified on ESP32-S3 (COM8, MAC d0:cf:13:44:01:84):
- 4 MB build flashed clean, 853 KiB binary, 54 % flash free
- Boot banner now reports `App version: 0.6.4`
- 70 s soak, 71 medium ticks, 0 stack overflow, 0 reboots
- 5 Hz feature_state emit confirmed (seq=299 at ~60 s)
- CSI capture active throughout (motion=1.00, presence=4-20)
Closes#505.
Co-Authored-By: claude-flow <ruv@ruv.net>
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>
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>
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>