diag(P4): Touch-Rohwerte vermessen, einheitliche Zeitbasis (1.9.10)
Auswertung des letzten Logs (lv_tick lief 2728 ms hinter millis): Tipp erkannt 49428, Rückfrage aufgebaut 49430, Bildaufbau fertig 49746. Also 318 ms vom erkannten Tipp bis zum fertigen Bild - die gemessene Kette ist schnell. Der Knopfdruck im Dialog liegt bei 55638 (Bereich 645..856, 374..426), die Antwort des S3 bei 59303, also 937 ms Rundlauf. Die Verzögerung liegt damit VOR der Erkennung. Deshalb: - ws7_touch_get_xy() meldet den ersten verworfenen Rohwert nach Ruhe mit Koordinaten und zählt, wie viele bis zur akzeptierten Berührung anfallen. - Alle Messzeilen auf millis() statt lv_tick_get(); die beiden Uhren auseinanderzurechnen hat das Lesen unnötig erschwert. Beide Panel-Varianten mit arduino-cli gegengebaut. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NeFMr439WcLMdebE3kU7fS
This commit is contained in:
co-authored by
Claude Opus 5
parent
9eb386095d
commit
db707ffd8c
@@ -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:
|
Version 1.9.9:
|
||||||
- Die kleinen Kacheln unten im Dashboard behalten beim Bezug ihre Höhe. Bisher bekam die
|
- 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
|
untere Zeile während des Bezugs deutlich mehr Platz - die Kacheln wurden enorm hoch und
|
||||||
|
|||||||
@@ -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);
|
bool got = s_touch_get_xy_orig(tp, x, y, strength, point_num, max_point_num);
|
||||||
int64_t now = esp_timer_get_time();
|
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 &&
|
if (got && *point_num > 0 &&
|
||||||
(x[0] > WS7_TOUCH_RAW_X_MAX || y[0] > WS7_TOUCH_RAW_Y_MAX)) {
|
(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;
|
got = false;
|
||||||
*point_num = 0;
|
*point_num = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (got && *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_x = x[0];
|
||||||
s_touch_last_y = y[0];
|
s_touch_last_y = y[0];
|
||||||
s_touch_last_us = now;
|
s_touch_last_us = now;
|
||||||
|
|||||||
@@ -932,11 +932,11 @@ static bool wake_choice_offered() {
|
|||||||
}
|
}
|
||||||
static void standby_screen_cb(lv_event_t*) { // Tipp auf Standby-Uhr -> nachfragen
|
static void standby_screen_cb(lv_event_t*) { // Tipp auf Standby-Uhr -> nachfragen
|
||||||
// Vermessen: Vom Tippen bis zur sichtbaren Rueckfrage vergehen rund fuenf Sekunden.
|
// 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);
|
esp_rom_printf("[Touch] %u ms: Tipp auf die Standby-Uhr erkannt\n", (unsigned)t0);
|
||||||
wake_confirm_show();
|
wake_confirm_show();
|
||||||
esp_rom_printf("[Touch] %u ms: Rueckfrage aufgebaut, brauchte %u ms\n",
|
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
|
static void wake_cancel() { // Abbrechen -> zurueck in die Standby-Helligkeit
|
||||||
wake_timeout_stop();
|
wake_timeout_stop();
|
||||||
@@ -3563,7 +3563,7 @@ static void refr_ready_cb(lv_event_t*) {
|
|||||||
uint32_t d = lv_tick_get() - g_refrStart;
|
uint32_t d = lv_tick_get() - g_refrStart;
|
||||||
if (d < REFR_WARN_MS) return;
|
if (d < REFR_WARN_MS) return;
|
||||||
unsigned pct = (unsigned)((uint64_t)g_refrPixels * 100ULL / ((uint64_t)LCD_H_RES * LCD_V_RES));
|
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);
|
(unsigned)d, (unsigned)g_refrAreas, pct);
|
||||||
// Lage der Bereiche mit ausgeben. Erst daran ist zu erkennen, WELCHER Teil der
|
// Lage der Bereiche mit ausgeben. Erst daran ist zu erkennen, WELCHER Teil der
|
||||||
// Oberflaeche das Neuzeichnen ausloest - die Groesse allein sagt das nicht.
|
// 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*) {
|
static void ui_heartbeat_cb(lv_timer_t*) {
|
||||||
lv_mem_monitor_t m; lv_mem_monitor(&m);
|
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",
|
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);
|
(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
|
// Vermessen: Das Einblenden der Uhr ist der Moment, in dem das Display
|
||||||
// zuletzt stehen geblieben ist. Bleibt die zweite Zeile aus, haengt es hier.
|
// zuletzt stehen geblieben ist. Bleibt die zweite Zeile aus, haengt es hier.
|
||||||
esp_rom_printf("[UI] Standby-Uhr wird eingeblendet\n");
|
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
|
ui_fade_in(g_standbyScreen, UI_FADE_MS); // Einschlaf-Animation
|
||||||
g_standbyShown = true;
|
g_standbyShown = true;
|
||||||
esp_rom_printf("[UI] Standby-Uhr eingeblendet, %u ms\n",
|
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
|
// Frueher wurde die Uhr hier bei JEDER Zustandsmeldung nach vorn geholt. Das
|
||||||
// ordnet die Ebenen neu und laesst LVGL den gesamten Bildschirm neu zeichnen -
|
// ordnet die Ebenen neu und laesst LVGL den gesamten Bildschirm neu zeichnen -
|
||||||
|
|||||||
Reference in New Issue
Block a user