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

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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01STPpZoK3ToDhrcniVqE6MJ
This commit is contained in:
raw-designs
2026-09-03 01:01:19 +02:00
co-authored by Claude Opus 5
parent d4d4f2b9d2
commit 33ce2b3ab9
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:
- 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
+37 -2
View File
@@ -23,6 +23,7 @@
#include <Preferences.h>
#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;
}