fix(P4): Standby-Verzögerung, Dialog-Timeout, Kurvenhintergrund, Bindestrich (1.8.5)
- Die ~2 s Verzögerung rund um den Standby lag nicht an der Helligkeit: lv_obj_move_foreground(g_standbyScreen) lief bei JEDER Zustandsmeldung. Das ordnet die Ebenen neu und lässt LVGL den ganzen Bildschirm neu zeichnen - einmal pro Sekunde, 1280x720 in 24 Bit. Nach vorn geholt wird die Uhr jetzt nur beim Einblenden. - Der Aufweckdialog schließt sich nach 30 s ohne Auswahl selbst und wird wie Abbrechen gewertet (lv_timer, repeat_count 1). Sonst bliebe das Display hell stehen, weil der Dialog auf normale Helligkeit schaltet. - Die Verlaufskurve hat keinen eigenen Hintergrund mehr. Die abgesetzte Fläche war nur nötig, solange die Kurve vor dem ersten Messwert leer war - seit sie beim aktuellen Wert startet, ist immer eine Linie da. - Statistik: Bei fehlendem Gewicht stand ein En-Dash, den der Zeichensatz nicht enthält - erschien als leeres Rechteck. Jetzt ASCII-Bindestrich. 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:
co-authored by
Claude Opus 5
parent
63290afa07
commit
b6c6214b41
@@ -1,3 +1,21 @@
|
||||
Version 1.8.5:
|
||||
- Die Verzögerung von rund zwei Sekunden rund um den Standby ist behoben. Sie lag nicht an
|
||||
der Helligkeitsumschaltung, sondern daran, dass die Standby-Uhr bei JEDER Zustandsmeldung
|
||||
der Hauptplatine nach vorn geholt wurde. Das ordnet die Ebenen neu und lässt LVGL den
|
||||
gesamten Bildschirm neu zeichnen - einmal pro Sekunde, jedes Mal 1280x720 in 24 Bit.
|
||||
Dadurch hing die Oberfläche dauerhaft ein bis zwei Sekunden hinterher. Nach vorn geholt
|
||||
wird die Uhr jetzt beim Einblenden, danach bleibt sie dort.
|
||||
- Der Aufweckdialog schließt sich nach 30 Sekunden ohne Auswahl von selbst und wird wie
|
||||
„Abbrechen" gewertet. Vorher blieb das Display hell stehen - der Dialog schaltet auf
|
||||
normale Helligkeit, und ein versehentlicher Tipp auf die Uhr hätte die Maschine die ganze
|
||||
Nacht leuchten lassen.
|
||||
- Die Verlaufskurve hat keinen eigenen Hintergrund mehr; sie liegt jetzt direkt auf der
|
||||
Karte. Die abgesetzte Fläche war nur nötig, solange die Kurve vor dem ersten Messwert
|
||||
leer blieb - seit sie beim aktuellen Wert startet, ist immer eine Linie da.
|
||||
- Auf der Statistikseite erschien ein leeres Rechteck, wenn ohne Waage bezogen wurde. Dort
|
||||
stand ein typografischer Gedankenstrich, den der Zeichensatz der Schrift nicht enthält.
|
||||
Jetzt ein einfacher Bindestrich.
|
||||
|
||||
Version 1.8.4:
|
||||
- Standby-Uhr und Aufweckdialog erscheinen jetzt sofort statt mit spürbarer Verzögerung.
|
||||
Ursache waren die weichen Ein- und Ausblendungen: Eine Deckkraft-Animation ist bei einem
|
||||
|
||||
@@ -676,7 +676,9 @@ static void stat_list_set(int i, const char* dt, float d, float w, bool kalt) {
|
||||
lv_label_set_text(g_statTime[i], dt);
|
||||
lv_label_set_text_fmt(g_statDur[i], "%.1f s", d);
|
||||
if (w >= 0.0f) lv_label_set_text_fmt(g_statWgt[i], "%.1f g", w);
|
||||
else lv_label_set_text(g_statWgt[i], "–");
|
||||
// Bewusst ein einfacher Bindestrich: Der typografisch schoenere Gedankenstrich
|
||||
// fehlt im Zeichensatz der Schrift und erschiene als leeres Rechteck.
|
||||
else lv_label_set_text(g_statWgt[i], "-");
|
||||
lv_label_set_text(g_statCold[i], kalt ? "kalt" : "");
|
||||
}
|
||||
|
||||
@@ -864,6 +866,18 @@ static void ui_fade_out_delete(lv_obj_t* obj, uint32_t ms) {
|
||||
static int standby_backlight() {
|
||||
return g_state.standbyShowClock ? (int)g_state.backlightStandbyClock : 0;
|
||||
}
|
||||
// Der Aufweckdialog schliesst sich von selbst, wenn niemand entscheidet. Sonst bliebe das
|
||||
// Display hell stehen, weil der Dialog auf normale Helligkeit schaltet - jemand tippt im
|
||||
// Vorbeigehen versehentlich auf die Uhr, und die Maschine leuchtet die ganze Nacht.
|
||||
// Zeitablauf wird wie "Abbrechen" gewertet: zurueck in die Standby-Helligkeit.
|
||||
#define WAKE_DIALOG_TIMEOUT_MS 30000
|
||||
static lv_timer_t* g_wakeTimeout = nullptr;
|
||||
|
||||
static void wake_timeout_stop() {
|
||||
if (g_wakeTimeout) { lv_timer_delete(g_wakeTimeout); g_wakeTimeout = nullptr; }
|
||||
}
|
||||
static void wake_timeout_cb(lv_timer_t* t); // weiter unten, braucht wake_cancel()
|
||||
|
||||
static void wake_confirm_show() {
|
||||
if (!g_wakeConfirm) return;
|
||||
g_wakeDialogOpen = true;
|
||||
@@ -873,6 +887,9 @@ static void wake_confirm_show() {
|
||||
hal_backlight(bl);
|
||||
lv_obj_remove_flag(g_wakeConfirm, LV_OBJ_FLAG_HIDDEN);
|
||||
lv_obj_move_foreground(g_wakeConfirm);
|
||||
wake_timeout_stop();
|
||||
g_wakeTimeout = lv_timer_create(wake_timeout_cb, WAKE_DIALOG_TIMEOUT_MS, nullptr);
|
||||
lv_timer_set_repeat_count(g_wakeTimeout, 1);
|
||||
}
|
||||
static void wake_confirm_hide() { if (g_wakeConfirm) lv_obj_add_flag(g_wakeConfirm, LV_OBJ_FLAG_HIDDEN); }
|
||||
// Einzige Quelle der Wahrheit dafuer, ob der Aufweck-Dialog die Auswahl "Espresso oder Cold
|
||||
@@ -886,12 +903,19 @@ static bool wake_choice_offered() {
|
||||
(g_state.cxEnabled && g_state.cxArmable && g_state.cxAskOnWake);
|
||||
}
|
||||
static void standby_screen_cb(lv_event_t*) { wake_confirm_show(); } // Tipp auf Standby-Uhr -> nachfragen
|
||||
static void wake_no_cb(lv_event_t*) { // Abbrechen -> zurueck in die Standby-Helligkeit
|
||||
static void wake_cancel() { // Abbrechen -> zurueck in die Standby-Helligkeit
|
||||
wake_timeout_stop();
|
||||
wake_confirm_hide();
|
||||
g_wakeDialogOpen = false;
|
||||
if (g_state.standbyActive) hal_backlight(standby_backlight());
|
||||
}
|
||||
static void wake_no_cb(lv_event_t*) { wake_cancel(); }
|
||||
static void wake_timeout_cb(lv_timer_t*) { // niemand hat entschieden -> wie Abbrechen
|
||||
g_wakeTimeout = nullptr; // Timer laeuft nur einmal, loescht sich selbst
|
||||
wake_cancel();
|
||||
}
|
||||
static void wake_yes_cb(lv_event_t*) { // Aufwecken -> hell lassen, S3 beendet den Standby
|
||||
wake_timeout_stop();
|
||||
wake_confirm_hide();
|
||||
// g_wakeDialogOpen bleibt true, bis der Standby wirklich endet (ui_update) - sonst wuerde
|
||||
// das Display in der Uebergangsphase kurz auf Standby-Helligkeit abdunkeln.
|
||||
@@ -907,6 +931,7 @@ static void wake_yes_cb(lv_event_t*) { // Aufwecken -> hell lassen, S3 bee
|
||||
// stellen, dann den Standby beenden - sonst heizt der Wasserkreis in der Zwischenzeit an,
|
||||
// und genau das soll die Funktion ja verhindern.
|
||||
static void wake_cold_cb(lv_event_t*) {
|
||||
wake_timeout_stop();
|
||||
wake_confirm_hide();
|
||||
if (g_client) {
|
||||
g_client->sendAction("startColdExtraction");
|
||||
@@ -1044,9 +1069,7 @@ static lv_obj_t* tempSpark(lv_obj_t* parent, lv_color_t col, lv_chart_series_t**
|
||||
lv_chart_set_div_line_count(ch, 0, 0);
|
||||
// Schwach abgesetzte Flaeche: Ohne sie waere der Bereich vor dem ersten Messwert
|
||||
// vollstaendig unsichtbar - man haette gar nicht erkannt, dass dort eine Kurve gehoert.
|
||||
lv_obj_set_style_bg_color(ch, lv_color_hex(0x151515), 0);
|
||||
lv_obj_set_style_bg_opa(ch, LV_OPA_COVER, 0);
|
||||
lv_obj_set_style_radius(ch, 6, 0);
|
||||
lv_obj_set_style_bg_opa(ch, LV_OPA_TRANSP, 0);
|
||||
lv_obj_set_style_border_width(ch, 0, 0);
|
||||
lv_obj_set_style_pad_all(ch, 4, 0);
|
||||
lv_obj_set_style_size(ch, 0, 0, LV_PART_INDICATOR); // keine Punktmarkierungen
|
||||
@@ -3908,9 +3931,12 @@ void ui_update(const MachineState& st) {
|
||||
if (!g_standbyShown) {
|
||||
ui_fade_in(g_standbyScreen, UI_FADE_MS); // Einschlaf-Animation
|
||||
g_standbyShown = true;
|
||||
} else {
|
||||
lv_obj_move_foreground(g_standbyScreen);
|
||||
}
|
||||
// Frueher wurde die Uhr hier bei JEDER Zustandsmeldung nach vorn geholt. Das
|
||||
// ordnet die Ebenen neu und laesst LVGL den gesamten Bildschirm neu zeichnen -
|
||||
// einmal pro Sekunde, jedesmal 1280x720 in 24 Bit. Genau das war der Grund,
|
||||
// warum sich rund um den Standby alles um ein bis zwei Sekunden verzoegerte.
|
||||
// Nach vorn geholt wird die Uhr beim Einblenden, danach bleibt sie dort.
|
||||
} else if (g_standbyShown) {
|
||||
ui_fade_out_hide(g_standbyScreen, UI_FADE_MS); // Aufweck-Animation
|
||||
g_standbyShown = false;
|
||||
|
||||
Reference in New Issue
Block a user