mirror of
https://github.com/ruvnet/RuView
synced 2026-08-06 19:51:43 +00:00
fix(firmware): capture DATA frames on display-less boards — #893/#866/#897
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.
This commit is contained in:
@@ -410,6 +410,21 @@ void app_main(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
/* RuView#893/#521: the MGMT-only promiscuous filter (set in
|
||||
* csi_collector_init as the #396 display-crash workaround) starves the CSI
|
||||
* callback on display-less boards — yield collapses to 0 pps and the node
|
||||
* looks dead despite being on the network. Now that the display probe has
|
||||
* run, boards with no AMOLED panel (no QSPI/SPI-flash cache contention)
|
||||
* upgrade the filter to capture DATA frames too, restoring CSI yield. */
|
||||
#ifdef CONFIG_DISPLAY_ENABLE
|
||||
bool has_display = display_is_active(); /* runtime panel probe result */
|
||||
#else
|
||||
bool has_display = false; /* display support not compiled in */
|
||||
#endif
|
||||
if (!has_display) {
|
||||
csi_collector_enable_data_capture();
|
||||
}
|
||||
|
||||
ESP_LOGI(TAG, "CSI streaming active → %s:%d (edge_tier=%u, OTA=%s, WASM=%s, mmWave=%s, swarm=%s, adapt=%s)",
|
||||
g_nvs_config.target_ip, g_nvs_config.target_port,
|
||||
g_nvs_config.edge_tier,
|
||||
|
||||
Reference in New Issue
Block a user