From 33ce2b3ab9f8a8e94ed92549b507e52368c21889 Mon Sep 17 00:00:00 2001 From: raw-designs Date: Thu, 3 Sep 2026 01:01:19 +0200 Subject: [PATCH] =?UTF-8?q?diag(P4):=20Bildaufbau=20messen,=20Dialogkn?= =?UTF-8?q?=C3=B6pfe=20skalieren=20(1.8.8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Der Aufweckdialog braucht weiterhin ~5 s. Zwei Erklärungsversuche lagen daneben (Fade-Animationen, transparenter Scrim), also wird ab jetzt gemessen statt geraten. - refr_monitor_install() hängt sich über LV_EVENT_REFR_START/READY an die Anzeige und meldet jeden Zeichenzyklus, der 200 ms überschreitet. Im Normalbetrieb bleibt die Konsole still. - Der Aufweckdialog berücksichtigt die Schriftgröße jetzt vollständig: Knöpfe mit font_text() statt geerbter Grundschrift, Breite 150/210/280 je Stufe. Bisher wirkten sie neben dem größeren Text verloren. - Die große Standby-Uhr bleibt bewusst fest: Sie ist auf die Bildschirmhöhe abgestimmt. Beide Panel-Varianten mit arduino-cli gegengebaut. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01STPpZoK3ToDhrcniVqE6MJ --- P4_Display_Firmware/Changelog.txt | 13 +++++++++++ P4_Display_Firmware/ui.cpp | 39 +++++++++++++++++++++++++++++-- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/P4_Display_Firmware/Changelog.txt b/P4_Display_Firmware/Changelog.txt index 2567af3..20da7d6 100644 --- a/P4_Display_Firmware/Changelog.txt +++ b/P4_Display_Firmware/Changelog.txt @@ -1,3 +1,16 @@ +Version 1.8.8: +- Der Aufweckdialog berücksichtigt jetzt die eingestellte Schriftgröße vollständig: Die + Knöpfe bekommen dieselbe Schrift wie der Text und wachsen mit (150 / 210 / 280 Pixel). + Bisher erbten sie die kleine Grundschrift und behielten eine feste Breite - neben dem + größeren Text wirkten sie dadurch verloren. +- Die große Standby-Uhr bleibt bewusst bei ihrer festen Größe: Sie ist bereits auf die + Bildschirmhöhe abgestimmt, eine Umschaltung würde sie nur schlechter passend machen. +- Neu: eine Zeitmessung für langsame Bildaufbauten. Überschreitet ein Zeichenzyklus + 200 Millisekunden, meldet die serielle Konsole seine Dauer. Damit lässt sich feststellen, + welcher Vorgang tatsächlich Zeit kostet - die bisherigen Erklärungen für die Verzögerung + beim Aufweckdialog haben sich als falsch erwiesen, und weiteres Raten hilft nicht. + Im Normalbetrieb bleibt die Ausgabe still. + Version 1.8.7: - Vom Fingertipp auf die Standby-Uhr bis zum Aufweckdialog vergingen rund fünf Sekunden mit schwarzem Bildschirm. Ursache war der halbdurchsichtige Vorhang, den der Dialog über den diff --git a/P4_Display_Firmware/ui.cpp b/P4_Display_Firmware/ui.cpp index b2d0601..3feb67a 100644 --- a/P4_Display_Firmware/ui.cpp +++ b/P4_Display_Firmware/ui.cpp @@ -23,6 +23,7 @@ #include #include "esp_system.h" #include "display_hal.h" +#include "esp_rom_sys.h" // ------------------------------------------------------------------------------------ // Schriftgroesse @@ -3412,6 +3413,33 @@ static void dash_timers_cb(lv_timer_t*) { // sonst greifen sie auf nicht angelegte LVGL-Objekte zu. static bool g_uiReady = false; + +// ------------------------------------------------------------------------------------ +// Zeitmessung fuer langsame Bildaufbauten +// +// Beim 7-Zoll-Panel dauern manche Vorgaenge spuerbar lange, und aus dem Quelltext allein +// ist nicht zu sehen, welcher Teil die Zeit frisst. LVGL meldet Anfang und Ende jedes +// Zeichenzyklus - hier wird die Dauer gemessen und nur dann ausgegeben, wenn sie eine +// Schwelle ueberschreitet. Im Normalbetrieb bleibt die Konsole still. +// ------------------------------------------------------------------------------------ +#define REFR_WARN_MS 200 + +static uint32_t g_refrStart = 0; + +static void refr_start_cb(lv_event_t*) { g_refrStart = lv_tick_get(); } + +static void refr_ready_cb(lv_event_t*) { + uint32_t d = lv_tick_get() - g_refrStart; + if (d >= REFR_WARN_MS) esp_rom_printf("[UI] Bildaufbau %u ms\n", (unsigned)d); +} + +static void refr_monitor_install() { + lv_display_t* d = lv_display_get_default(); + if (!d) return; + lv_display_add_event_cb(d, refr_start_cb, LV_EVENT_REFR_START, nullptr); + lv_display_add_event_cb(d, refr_ready_cb, LV_EVENT_REFR_READY, nullptr); +} + void ui_init(ProtocolClient* client) { g_client = client; @@ -3683,12 +3711,17 @@ void ui_init(ProtocolClient* client) { lv_obj_set_flex_flow(wakeBtns, LV_FLEX_FLOW_ROW); lv_obj_set_flex_align(wakeBtns, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER); lv_obj_clear_flag(wakeBtns, LV_OBJ_FLAG_SCROLLABLE); + // Knopfbreite und -schrift wachsen mit der Schriftgroesse mit; mit fester Breite und + // geerbter Grundschrift wirkten die Knoepfe neben dem groesseren Text verloren. + const int32_t wakeBtnW = (g_fontStep == FONT_GROSS) ? 280 : (g_fontStep == FONT_MITTEL) ? 210 : 150; lv_obj_t* wakeNo = th_button(wakeBtns, "Abbrechen", COL_CARD2, COL_TEXT); - lv_obj_set_width(wakeNo, 150); + lv_obj_set_width(wakeNo, wakeBtnW); + lv_obj_set_style_text_font(wakeNo, font_text(), 0); lv_obj_add_event_cb(wakeNo, wake_no_cb, LV_EVENT_CLICKED, nullptr); g_wakeNoBtn = wakeNo; lv_obj_t* wakeYes = th_accent_button(wakeBtns, "Aufwecken"); - lv_obj_set_width(wakeYes, 150); + lv_obj_set_width(wakeYes, wakeBtnW); + lv_obj_set_style_text_font(wakeYes, font_text(), 0); lv_obj_add_event_cb(wakeYes, wake_yes_cb, LV_EVENT_CLICKED, nullptr); g_wakeYesLbl = lv_obj_get_child(wakeYes, 0); // Label des Knopfs (fuer "Espresso" im Abfrage-Modus) // Zweite Zeile: direkt in die kalte Extraktion aufwecken. Ohne diesen Weg muesste man @@ -3696,6 +3729,7 @@ void ui_init(ProtocolClient* client) { // Nur sichtbar, wenn die S3 die Funktion freigeschaltet meldet (siehe ui_update). g_wakeColdBtn = th_button(wakeCard, "Cold Extraction (Wasser bleibt kalt)", COL_CARD2, COL_ACCENT); lv_obj_set_width(g_wakeColdBtn, LV_PCT(100)); + lv_obj_set_style_text_font(g_wakeColdBtn, font_text(), 0); lv_obj_add_event_cb(g_wakeColdBtn, wake_cold_cb, LV_EVENT_CLICKED, nullptr); lv_obj_add_flag(g_wakeColdBtn, LV_OBJ_FLAG_HIDDEN); lv_obj_add_flag(g_wakeConfirm, LV_OBJ_FLAG_HIDDEN); @@ -3806,6 +3840,7 @@ void ui_init(ProtocolClient* client) { show_page(PG_DASH); if (g_client) g_client->sendListProfiles(); + refr_monitor_install(); g_uiReady = true; } -- 2.54.0