diff --git a/firmware/main/desklock_main.c b/firmware/main/desklock_main.c index 2e036f5..fbde868 100644 --- a/firmware/main/desklock_main.c +++ b/firmware/main/desklock_main.c @@ -142,7 +142,18 @@ void app_main(void) s_events = xQueueCreate(8, sizeof(app_event_t)); - bsp_display_start(); + /* TRIPLE_FULL, not the BSP default TRIPLE_PARTIAL: on IDF 5.5 the DSI driver + * lacks the on_frame_buf_complete callback, so PARTIAL mode falls back to a + * per-refresh "fake vsync" that over-releases the scanout buffer when a frame + * takes >1 refresh to draw (heavy rain + always-on WakeNet) -> tearing/flicker. + * TRIPLE_FULL is submit-gated even without that callback. Same 3 framebuffers. */ + bsp_display_cfg_t disp_cfg = { + .lv_adapter_cfg = ESP_LV_ADAPTER_DEFAULT_CONFIG(), + .rotation = ESP_LV_ADAPTER_ROTATE_0, + .tear_avoid_mode = ESP_LV_ADAPTER_TEAR_AVOID_MODE_TRIPLE_FULL, + .touch_flags = { .swap_xy = 0, .mirror_x = 0, .mirror_y = 0 }, + }; + bsp_display_start_with_config(&disp_cfg); bsp_display_backlight_on(); face_init();