The pre-built binaries set a MGMT-only promiscuous filter
(WIFI_PROMIS_FILTER_MASK_MGMT) as the #396 workaround — DATA-frame
interrupt load races the QSPI display's SPI traffic against the SPI-flash
cache and crashes Core 0 in wDev_ProcessFiq. But MGMT-only fires the CSI
callback only on sparse management frames, so on the common DISPLAY-LESS
boards (DevKitC-1, T7-S3, N8R8) CSI yield collapses to 0 pps under real
traffic (#521) — the node looks dead despite being on the network, which
is the root cause of most "can't reproduce / it's fake" reports (#804/#37).
A board with no AMOLED panel has no QSPI/SPI-flash contention, so it can
safely capture DATA frames. After the boot-time display probe runs:
- display present -> keep MGMT-only (preserve #396 crash protection)
- no display -> upgrade filter to MGMT|DATA (restore CSI yield)
Implementation (runtime-gated, no boot reorder):
- display_task.c: s_display_active flag + display_is_active() accessor,
set true only when the panel is detected and the display task starts.
- csi_collector.c: csi_collector_enable_data_capture() re-sets the
promiscuous filter to MGMT|DATA.
- main.c: after display_task_start(), if !display_is_active() (or display
support not compiled in), upgrade the filter.
Build-verified on BOTH targets: esp32c6 (headless path) and esp32s3
(display path, display_task.c compiled) — Project build complete, RC 0.
Needs on-hardware confirmation that yield recovers and no #396 crash.
- Add an esp_timer-driven lv_tick_inc() in the display task. Without it
LVGL's tick never advances, its 30ms refresh timer never fires, and the
panel only ever shows the boot frame (CONFIG_LV_TICK_CUSTOM is unset and
lv_conf.h is ignored by the Kconfig-driven managed lvgl component).
Fixes#889.
- Add display_hal_st7789.c: ST7789V2 SPI LCD + CST816 touch + LEDC backlight
HAL (Waveshare ESP32-S3-Touch-LCD-1.69), selected via a new DISPLAY_PANEL
Kconfig choice; CMake compiles exactly one panel HAL.
- Add display_ui_st7789.c: compact 240x280 UI (the 4-view AMOLED UI is laid
out for 368x448 and overflows a 1.69in panel).
- display_hal_refresh() backlight re-assert for transient brownout recovery.
- sdkconfig.defaults.st7789 build overlay (panel select + fonts + bar).