next iteration on display, still some artifacting issues, and ux with buttons states and updating

This commit is contained in:
matt committed 2026-08-04 19:38:58 -07:00
1 parent 45998b6176
commit ae5d12b3a2
14 files changed
+860 -398

No files matched your search

+19 -15
View File
@@ -2,20 +2,22 @@
## Not yet verified on hardware
Flashed and booting clean (icons on, first poll ~8s, no errors), but eyes and
fingers haven't confirmed:
Flashed and booting clean (two-phase display init, icons on, first poll ~9s,
no errors), but eyes and fingers haven't confirmed:
1. Touch actually toggling a light end-to-end. Tiles are now **optimistic**:
they flip on tap immediately and hold that state up to 5s until HA
confirms (see `light_hold_t` in ui_manager.c). If a tile flips then snaps
back 5s later, the command failed — check `ha_client` on serial.
2. Whether the full-screen invalidate after each poll actually bounds the
left-edge artefacts (it repaints them away; it cannot prevent them). If
lines still persist for longer than one poll interval, that mechanism is
not working and the next lever is pausing only around LVGL's flush.
3. That the six light tiles are comfortable finger targets at ~125px, and
that sliders track the finger without jumping (poll updates skip pressed
sliders by design).
1. Slider feel: press sends one command at the touch position immediately,
drag is display-only tracking the finger, lift sends the final level.
Poll data never moves a pressed knob.
2. Trend arrows appear ~5 minutes after boot (indoor big card, outdoor and
pressure cells) once the local ring has history. They are local-history
based and reset on reboot — that is by design, not a bug.
3. Artefact lifetime: interactions schedule a one-shot full repaint 600ms
after the last touch, and every poll repaints too. Artefacts should now
visibly self-clean in under a second after touching, and within a poll
otherwise. If they *persist* beyond that, the repaint isn't reaching
them; if they merely *recur* during interaction, that is the PSRAM
bandwidth ceiling (README) and the honest remaining levers are fewer
redraws or 120MHz PSRAM on a newer IDF.
## Done
@@ -95,8 +97,10 @@ hosts the thermostat before building it twice.
- The `°` glyph exists in LVGL's built-in Montserrat fonts; the `·` separator
that does not appears only in log strings, never on screen.
- LVGL recursive-mutex locking is consistent across all UI entry points.
- Init order in `main.c` is deliberate and load-bearing: WiFi/NVS before
`display_init()`, `backlight_init()` before `touch_init()`. Never reorder.
- Init order in `main.c` is deliberate and load-bearing:
`display_alloc()` before WiFi (contiguous bounce buffers from a virgin
heap), WiFi/NVS before `display_start()` (flash writes finished before
scan-out), `backlight_init()` before `touch_init()`. Never reorder.
- The bounce buffer is enabled and load-bearing.
- Board is N16R8 (16MB flash / 8MB octal PSRAM).
- `touch_get_indev()`, `display_get_panel()` and `lvgl_port_is_paused()` are