Close cards through one path so the page swipe is never left blocked (0.2.32)

Read live on a Guition: every edge swipe was recognised but refused by the
"card open" check, because the light, climate and vacuum cards cleared
their overlay on close (X, tap beside the card, wake from standby) without
forgetting active_entity. One opened card blocked swiping until the next
layout change; the old whole-screen gesture and the CYD had the same gate.
Both boards now close cards through one script, close_cards, which hides
every overlay and clears that state; wake_display uses it too.

The Guition edge swipe now follows LVGL's own pointer events
(lv_indev_add_event_cb: PRESSED begins, PRESSING flips the page and calls
lv_indev_wait_release from inside LVGL) instead of ESPHome's touchscreen
on_update, so the point arrives already rotated. The direction rule is 45
degrees instead of twice as horizontal, and the log now says why a swipe
was refused or how far an unfinished one got. Firmware 0.2.27 for both
boards; the app only moves its target version.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Max Gramser
2026-09-14 13:09:53 +02:00
parent 95cdfa30cf
commit b9e1dfbd95
11 changed files with 248 additions and 109 deletions
+11
View File
@@ -177,6 +177,17 @@ staan iconen in de browser uit het midden); draai daarna `generate_packages.py`.
De substituties `MDI_GLYPH_*` zijn vervallen: `TILEn_ICON` in handmatige
profielen moet uit de set komen. Geen gewijzigde preferences of sleutels.
### Compatibiliteit 0.2.32 / firmware 0.2.27
Alleen firmware. `cyd::EdgeSwipe` werkt op LVGL-pointercoördinaten: `configure(band, travel)`,
`begin(x, y, width)` met `lv_display_get_horizontal_resolution()`, `update()` met de 45°-regel,
plus `inward()`/`sideways()` voor het log. De Guition registreert één `lv_indev_add_event_cb`
(PRESSED/PRESSING/RELEASED) in `on_boot`; de touchscreen-triggers voeden alleen nog de
`TouchGuard`. Beide bordprofielen krijgen het script `close_cards` (roept
`runtime_tiles::dismiss()` aan, anders overlays verbergen en `active_entity` wissen); de
kruisjes en achtergrondtikken van de kaarten en `wake_display` gebruiken het. Protocol, opslag,
preferences en sleutels ongewijzigd.
### Compatibiliteit 0.2.31 / firmware 0.2.26
Opslagversie en tegelprotocol blijven 1. `tiles[].slot` is additief: de absolute plek
+48
View File
@@ -0,0 +1,48 @@
# Testresultaten app 0.2.32 / firmware 0.2.27 (2026-09-14)
Alleen firmware: de randveeg die op een echte Guition (Studio 1, firmware 0.2.24) nooit
pakte, plus de veeg op LVGL's eigen pointer-events. De app verandert alleen de doelversie.
## Live diagnose op Studio 1 (ESPHome-log via de native API)
- Elke veeg begon netjes in de band (`GT911 press x=0…13` links, `x=470…478` rechts), maar er
volgde nooit `randveeg`. Instelling stond aan (add-on: `swipe_pages: true`, 10 tegels,
rotatie 0), `ui_state` meldde niet gedimd, geen kalibratie, geen runtime-kaart.
- Na `preview_runtime_card -1` (roept `runtime_tiles::dismiss()` aan) werkte elke veeg
meteen: `randveeg: pagina 0 -> 1`. Oorzaak: de kruisjes en achtergrondtikken van de
licht-, klimaat- en stofzuigerkaart en het wakker worden uit standby verbergen de kaart
zonder `active_entity` te wissen; de veeg-guard leest die en meldde stil "kaart open".
Dezelfde gate zat in de oude LVGL-gesture en in het CYD-profiel.
- Daarna: ongeveer één op de twee eerste vegen na een paginawissel vuurde niet, de
tweede wel (bijvoorbeeld 12:57:28 en :29 vanaf rechts zonder wissel, :29 wel). De
0.2.24-firmware logde daarvoor niets; 0.2.27 meldt nu `randveeg niet gevuurd: N px naar
binnen, M px verticaal` en de richtingseis is 45° in plaats van "twee keer zo horizontaal".
- Eén tik werd terecht geweigerd: `tik op script.studio_1_startup_sequence genegeerd:
verplaatst 73 px (grens 67)`; de grens op de Guition is een open vraag aan Max.
## Wat veranderde
- `cyd::EdgeSwipe` op LVGL-pointercoördinaten (`begin(x, y, width)` met de horizontale
resolutie van LVGL, dus rotatie is al verwerkt), 45°-regel, `inward()`/`sideways()`.
- Guition: één `lv_indev_add_event_cb` in `on_boot` (PRESSED → begin, PRESSING → update en
paginawissel met `lv_indev_wait_release`, RELEASED/PRESS_LOST → logregel als de veeg
niet vuurde); geblokkeerde vegen loggen de reden. De touchscreen-triggers voeden alleen
nog de tap-guard.
- Beide borden: script `close_cards` (via `runtime_tiles::dismiss()`, anders overlays
verbergen en `active_entity` wissen) voor de zes sluitknoppen en `wake_display`.
## Geautomatiseerd
- C++ (clang++ -std=c++17 -Wall -Wextra -Werror -I.): 11/11 PASS; `test_cyd_ui` dekt de
nieuwe `EdgeSwipe`-API, de 45°-regel, de logwaarden en een smallere (gedraaide) breedte.
- Python: 91 tests OK (`FIRMWARE_VERSION` 0.2.27 in app, profielen en pakketten).
`generate_packages.py --check` groen.
- ESPHome 2026.6.2 compile (verse worktree, geen cache): `easy-guition-device.yaml` SUCCESS in
112 s (RAM 32,0%, flash 18,3%), `easy-cyd-device.yaml` SUCCESS in 86 s (RAM 31,0%, flash
76,1%); geen nieuwe waarschuwingen.
## Nog te controleren op Studio 1
- Werkt de randveeg direct na een update zonder eerst een kaart te openen en te sluiten, en
pakt de eerste veeg na een paginawissel nu ook; het log (`touch`) laat het zien.
- Na het openen en sluiten van een lichtkaart (kruisje, tik ernaast, standby) blijft vegen werken.