mirror of
https://github.com/ruvnet/RuView
synced 2026-06-09 10:13:17 +00:00
898c536eac
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.
40 lines
965 B
C
40 lines
965 B
C
/**
|
|
* @file display_task.h
|
|
* @brief ADR-045: FreeRTOS display task — LVGL pump on Core 0.
|
|
*/
|
|
|
|
#ifndef DISPLAY_TASK_H
|
|
#define DISPLAY_TASK_H
|
|
|
|
#include "esp_err.h"
|
|
#include <stdbool.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* Start the display task on Core 0, priority 1.
|
|
*
|
|
* Probes for RM67162 panel and SPIRAM. If either is absent,
|
|
* logs a warning and returns ESP_OK (graceful skip).
|
|
*
|
|
* @return ESP_OK always (display is optional).
|
|
*/
|
|
esp_err_t display_task_start(void);
|
|
|
|
/**
|
|
* @return true once an AMOLED panel has been detected and the display task
|
|
* is running; false on headless boards (no panel, or built without display
|
|
* support). Used to choose the CSI promiscuous filter (RuView#893): a board
|
|
* with no display has no QSPI/SPI-flash contention, so it can safely capture
|
|
* DATA frames for proper CSI yield instead of starving on MGMT-only.
|
|
*/
|
|
bool display_is_active(void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* DISPLAY_TASK_H */
|