diff --git a/P4_Display_Firmware/Changelog.txt b/P4_Display_Firmware/Changelog.txt index aedcae9..19f0c2b 100644 --- a/P4_Display_Firmware/Changelog.txt +++ b/P4_Display_Firmware/Changelog.txt @@ -1,3 +1,11 @@ +Version 1.9.10: +- Alle Messzeilen laufen jetzt auf derselben Uhr. Die des Zeichenablaufs startete später als + die des Hauptablaufs; die Zeiten ließen sich nur mit Umrechnung vergleichen. +- Der Touch meldet jetzt, wenn er Rohwerte verwirft, weil sie außerhalb des gültigen + Bereichs liegen, und nennt bei jeder erkannten Berührung, wie viele vorher verworfen + wurden. Eine Berührung, deren Rohwerte lange verworfen werden, sieht von außen genauso aus + wie ein Display, das nicht reagiert - das war bisher nicht zu unterscheiden. + Version 1.9.9: - Die kleinen Kacheln unten im Dashboard behalten beim Bezug ihre Höhe. Bisher bekam die untere Zeile während des Bezugs deutlich mehr Platz - die Kacheln wurden enorm hoch und diff --git a/P4_Display_Firmware/board_bringup.c b/P4_Display_Firmware/board_bringup.c index 6c78e86..cbcff61 100644 --- a/P4_Display_Firmware/board_bringup.c +++ b/P4_Display_Firmware/board_bringup.c @@ -310,14 +310,26 @@ static bool ws7_touch_get_xy(esp_lcd_touch_handle_t tp, uint16_t *x, uint16_t *y bool got = s_touch_get_xy_orig(tp, x, y, strength, point_num, max_point_num); int64_t now = esp_timer_get_time(); - // Unplausible Rohwerte gelten als Aussetzer, nicht als Beruehrung. + // Unplausible Rohwerte gelten als Aussetzer, nicht als Beruehrung. Wie viele davon + // anfallen, war bisher nirgends zu sehen - eine Beruehrung, deren Rohwerte lange + // verworfen werden, sieht von aussen wie ein Display aus, das nicht reagiert. + static uint32_t s_verworfen = 0; if (got && *point_num > 0 && (x[0] > WS7_TOUCH_RAW_X_MAX || y[0] > WS7_TOUCH_RAW_Y_MAX)) { + if (s_verworfen == 0) + esp_rom_printf("[Touch] %u ms: Rohwert verworfen (x %u, y %u liegen ausserhalb)\n", + (unsigned)(now / 1000), (unsigned)x[0], (unsigned)y[0]); + s_verworfen++; got = false; *point_num = 0; } if (got && *point_num > 0) { + if (!s_touch_down) + esp_rom_printf("[Touch] %u ms: Beruehrung erkannt bei x %u, y %u; %u Rohwerte vorher verworfen\n", + (unsigned)(now / 1000), (unsigned)x[0], (unsigned)y[0], + (unsigned)s_verworfen); + s_verworfen = 0; s_touch_last_x = x[0]; s_touch_last_y = y[0]; s_touch_last_us = now; diff --git a/P4_Display_Firmware/ui.cpp b/P4_Display_Firmware/ui.cpp index 7b5caf6..67a8dad 100644 --- a/P4_Display_Firmware/ui.cpp +++ b/P4_Display_Firmware/ui.cpp @@ -932,11 +932,11 @@ static bool wake_choice_offered() { } static void standby_screen_cb(lv_event_t*) { // Tipp auf Standby-Uhr -> nachfragen // Vermessen: Vom Tippen bis zur sichtbaren Rueckfrage vergehen rund fuenf Sekunden. - uint32_t t0 = lv_tick_get(); + uint32_t t0 = millis(); esp_rom_printf("[Touch] %u ms: Tipp auf die Standby-Uhr erkannt\n", (unsigned)t0); wake_confirm_show(); esp_rom_printf("[Touch] %u ms: Rueckfrage aufgebaut, brauchte %u ms\n", - (unsigned)lv_tick_get(), (unsigned)(lv_tick_get() - t0)); + (unsigned)millis(), (unsigned)(millis() - t0)); } static void wake_cancel() { // Abbrechen -> zurueck in die Standby-Helligkeit wake_timeout_stop(); @@ -3563,7 +3563,7 @@ static void refr_ready_cb(lv_event_t*) { uint32_t d = lv_tick_get() - g_refrStart; if (d < REFR_WARN_MS) return; unsigned pct = (unsigned)((uint64_t)g_refrPixels * 100ULL / ((uint64_t)LCD_H_RES * LCD_V_RES)); - esp_rom_printf("[UI] %u ms: Bildaufbau %u ms, %u Bereiche, %u %% der Flaeche\n", (unsigned)lv_tick_get(), + esp_rom_printf("[UI] %u ms: Bildaufbau %u ms, %u Bereiche, %u %% der Flaeche\n", (unsigned)millis(), (unsigned)d, (unsigned)g_refrAreas, pct); // Lage der Bereiche mit ausgeben. Erst daran ist zu erkennen, WELCHER Teil der // Oberflaeche das Neuzeichnen ausloest - die Groesse allein sagt das nicht. @@ -3576,7 +3576,7 @@ static void refr_ready_cb(lv_event_t*) { static void ui_heartbeat_cb(lv_timer_t*) { lv_mem_monitor_t m; lv_mem_monitor(&m); esp_rom_printf("[UI] %u ms: Herzschlag, LVGL-Speicher frei %u von %u Byte, groesster Block %u\n", - (unsigned)lv_tick_get(), (unsigned)m.free_size, (unsigned)m.total_size, + (unsigned)millis(), (unsigned)m.free_size, (unsigned)m.total_size, (unsigned)m.free_biggest_size); } @@ -4220,11 +4220,11 @@ void ui_update(const MachineState& st) { // Vermessen: Das Einblenden der Uhr ist der Moment, in dem das Display // zuletzt stehen geblieben ist. Bleibt die zweite Zeile aus, haengt es hier. esp_rom_printf("[UI] Standby-Uhr wird eingeblendet\n"); - uint32_t t0 = lv_tick_get(); + uint32_t t0 = millis(); ui_fade_in(g_standbyScreen, UI_FADE_MS); // Einschlaf-Animation g_standbyShown = true; esp_rom_printf("[UI] Standby-Uhr eingeblendet, %u ms\n", - (unsigned)(lv_tick_get() - t0)); + (unsigned)(millis() - t0)); } // Frueher wurde die Uhr hier bei JEDER Zustandsmeldung nach vorn geholt. Das // ordnet die Ebenen neu und laesst LVGL den gesamten Bildschirm neu zeichnen -