From 65e29ef47aeec0fd9b552ab9c44f395ab6ef9716 Mon Sep 17 00:00:00 2001 From: rUv Date: Wed, 17 Jun 2026 11:24:53 -0400 Subject: [PATCH] =?UTF-8?q?fix(display):=20no=20false=20display-detect=20o?= =?UTF-8?q?n=20bare=20DevKit=20=E2=86=92=20CSI=20starves=20at=20MGMT-only?= =?UTF-8?q?=20(#1000)=20(#1121)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The SH8601 QSPI panel is write-only, so display_hal_init_panel() 'succeeds' even on a bare display-less board — display_is_active() then returned true and main.c skipped the #893/#906 MGMT->MGMT+DATA CSI filter upgrade (yield=0pps). Gate on the FT3168 touch I2C readback (always present on the Touch-AMOLED board, absent on a bare DevKit): if touch is absent, the panel 'success' was a false-positive — bail to headless before the display task starts, so display_is_active() stays false and CSI captures. Co-authored-by: ruv --- firmware/esp32-csi-node/main/display_task.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/firmware/esp32-csi-node/main/display_task.c b/firmware/esp32-csi-node/main/display_task.c index 02102497..d0e39377 100644 --- a/firmware/esp32-csi-node/main/display_task.c +++ b/firmware/esp32-csi-node/main/display_task.c @@ -114,6 +114,19 @@ esp_err_t display_task_start(void) /* Init touch (optional) */ esp_err_t touch_ret = display_hal_init_touch(); + /* The SH8601 QSPI panel is write-only — display_hal_init_panel() above "succeeds" + * even on a bare board with no panel attached, so it cannot detect absence. The + * FT3168 touch controller is an I2C device with readback and is always present on + * the Touch-AMOLED board. If touch is absent, the panel "success" was a false- + * positive on a display-less DevKit: bail to headless so display_is_active() stays + * false and CSI upgrades to MGMT+DATA capture instead of starving at MGMT-only + * (RuView#1000). */ + if (touch_ret != ESP_OK) { + ESP_LOGW(TAG, "No FT3168 touch readback — SH8601 probe was a false-positive on a " + "display-less board; running headless so CSI captures (#1000)"); + return ESP_OK; + } + /* Initialize LVGL */ lv_init();