# Lappy v0.3.2 - display and input performance

V2 Rev1.1 firmware now retains Track driving-page widgets, redraws only changed regions, rotates only those regions, and transfers subsequent frames from a dedicated LCD worker. An optional second DMA staging buffer overlaps copying with transfer; low-memory startup keeps the single-buffer path. The panel still receives the proven full sequential frame stream at 40 MHz. The pinned AXS15231B QSPI driver does not support arbitrary rectangle writes through its existing API, so no new panel-addressing behavior is introduced.

Street Drive, Drag Live and the Track driving pages now refresh at up to 25 Hz; setup, details and other slow pages remain at 10 Hz. Input and PWR/BOOT processing are independent of this display cadence. Identical text/style updates are skipped. Timing engines continue to use their original receiver-time calculations and quality policy; display refresh does not interpolate or modify measurements.

Touch polling and its existing timeout/bus-recreation recovery run on a dedicated worker. LVGL reads a short, coherent cached sample every 10 ms; stale cached presses release after 80 ms. I2C's 100 ms timeout no longer blocks the UI task. Display completion waits yield rather than busy-spin, and buffers remain owned until transfer finishes. Shutdown drains a pending display transfer before issuing panel-off commands.

The approved 16 fps E30 source animation and all 896 frames are preserved. Clock-only changes update the reserved clock region, and playback reports skipped source frames and scheduling lateness. No new animation frames or interpolation are introduced.

`diagnostics` and the five-second health logs now report bounded lifetime latency histograms (p50/p95/p99 bucket upper bounds plus exact maximum), presented frame rate, companion counters, DMA-buffer count and both worker stack margins. Loop measurements exclude the deliberate idle sleep. Touch sample age is not a physical finger-to-screen latency measurement.

Validation includes the ESP32-S3 build, host ASan/UBSan suites, all nine circuits/81 GPS replays, simulator interactions, 300-update Track benchmarks per page, production display/touch harnesses, unchanged-source audit and 179 UI renders. 178 renders are byte-identical to v0.3.1; only the Settings version caption differs. Live numeric updates create/delete no Track widgets. The desktop benchmark measured about 75-99% less median Track UI update CPU time and 93-99% fewer rendered pixels across Timing/Map/Session. These are host measurements, not ESP32 FPS or physical latency claims. Raw benchmark data is included in `performance-comparison.json`.

All nine native course files, comparison identities, PB/reference paths, raw BLE/capture/storage code, timing engines and services, power-button/shutdown policy, SDK/configuration, partition layout, fonts and companion assets are unchanged. The bootloader and LCD startup command/reset sequence and 100 ms first-frame dark guard are preserved. Existing settings and results require no migration.

No v0.3.2 firmware was flashed during this integration. Physical frame pacing, touch behavior, memory/stack margins under live BLE/SD traffic, startup and saved shutdown require acceptance of this binary; see [device checks](HARDWARE_BENCH_v0.3.2.md). Install the matching `.lappy` package through Lappy Updater on a recognized compatible V2 device. Full firmware and source are in the matching release ZIP.
