diag(P4): Bildaufbau messen, Dialogknöpfe skalieren (1.8.8) #68

Merged
thomas merged 1 commits from diag/bildaufbau-messen into main 2026-09-03 01:01:37 +02:00
2 changed files with 50 additions and 2 deletions
+13
View File
@@ -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: Version 1.8.7:
- Vom Fingertipp auf die Standby-Uhr bis zum Aufweckdialog vergingen rund fünf Sekunden mit - 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 schwarzem Bildschirm. Ursache war der halbdurchsichtige Vorhang, den der Dialog über den
+37 -2
View File
@@ -23,6 +23,7 @@
#include <Preferences.h> #include <Preferences.h>
#include "esp_system.h" #include "esp_system.h"
#include "display_hal.h" #include "display_hal.h"
#include "esp_rom_sys.h"
// ------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------
// Schriftgroesse // Schriftgroesse
@@ -3412,6 +3413,33 @@ static void dash_timers_cb(lv_timer_t*) {
// sonst greifen sie auf nicht angelegte LVGL-Objekte zu. // sonst greifen sie auf nicht angelegte LVGL-Objekte zu.
static bool g_uiReady = false; 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) { void ui_init(ProtocolClient* client) {
g_client = 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_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_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); 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_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); lv_obj_add_event_cb(wakeNo, wake_no_cb, LV_EVENT_CLICKED, nullptr);
g_wakeNoBtn = wakeNo; g_wakeNoBtn = wakeNo;
lv_obj_t* wakeYes = th_accent_button(wakeBtns, "Aufwecken"); 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); 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) 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 // 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). // 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); 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_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_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_wakeColdBtn, LV_OBJ_FLAG_HIDDEN);
lv_obj_add_flag(g_wakeConfirm, 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); show_page(PG_DASH);
if (g_client) g_client->sendListProfiles(); if (g_client) g_client->sendListProfiles();
refr_monitor_install();
g_uiReady = true; g_uiReady = true;
} }