- background page (4th tile): built-in or any GIF in /gifs on the SD card
- chosen GIF is copied into a raw 11.9 MB 'bggif' flash partition (header
written last) and played memory-mapped from flash; SD only needed when
choosing or when the file changed (checked at boot in the background)
- own partitions.csv: 4 MB app + bggif + NVS
- tools/gif_to_360.py: convert GIFs to 360x360 keeping frame timing;
converted output (12-OBD-Speed/sd/) is git-ignored
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- ATRV every 2 s; voltage arc in the bottom gap (11-15 V) + number,
colored by state (low / weak / resting / charging / overcharge)
- idle after Off/2/5/10 min without speed data (settings page, NVS):
screen off, GIF paused, OBD polling stopped, ATRV every 30 s;
wakes on touch (swallowed by a top-layer overlay) or > 13.2 V
- status pill moved up to make room for the voltage
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- third tile (swipe left from the menu): rotation buttons, saved in NVS,
applied at boot
- shared lib: setRotation() rotates only the panel and redraws; touch
points are converted in touchpad_read() for the current rotation;
getRotation() added
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 11-BLE-Scanner removed; its car-test log moved to 12-OBD-Speed/docs
- 10-OBD-Display-2024 -> 10-GIF-Tests (GIF playback experiments)
- the broken LVGL 9 archive was already deleted (unintentionally) in d6982ab
- READMEs and CLAUDE.md references updated; visual check of 80 MHz QSPI /
RGB565_SWAPPED marked as confirmed
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- speed page: 120 px antialiased number (lv_font_conv) + 0-200 km/h arc
gauge over ezgif-5-cb56986bc7.gif (embedded via board_build.embed_files)
- swipe-left menu: scan, OBD-like adapters first, tap to select; adapter
remembered in NVS, auto-connect at boot and reconnect every 3 s
- ELM327 init ATZ/ATE0/ATL0/ATS0/ATH0/ATSP0/0100, then 010D polling
- shared ini: -DLV_LVGL_H_INCLUDE_SIMPLE for generated fonts
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Scanner log saved in 11-BLE-Scanner/results; CLAUDE.md updated with the
adapter's GATT layout, replies and supported PIDs 01-20.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- NimBLE-Arduino 2.5.1, BLE work in a background task on core 0
- LVGL 9 UI for the round screen: device list (OBD-like devices in green),
tap to list services/characteristics, ELM test (ATZ/ATE0/ATI/ATRV/0100)
- results saved to LittleFS /ble_log.txt; serial d/c/s commands
- shared lv_conf: Montserrat 16 and 20 enabled
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- both use shared/jc3636w518.ini, board library and perf monitor
- GIF decoded in the display color format, loop delay 1 ms,
per-loop memory prints removed
- lv_conf: LVGL drive A: = SD card via LV_USE_FS_STDIO (/sdcard/)
- shared/README.md, CLAUDE.md and project README updated
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- render in RGB565_SWAPPED (ST77916 byte order), no swap pass in flush;
flush swaps only if the display format is plain RGB565 (runtime check,
the previous #if compared enum values and was always true)
- QSPI clock 50 -> 80 MHz
- LV_ATTRIBUTE_FAST_MEM / FLUSH_READY in IRAM (lv_attr_jc3636w518.h)
- display_gif_embedded: GIF decoded in the display's color format (no alpha)
- tested without gain: LV_GIF_CACHE_DECODE_DATA (unused in 9.6), 120-row buffers
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- lvgl/lvgl@9.6.0 via lib_deps, lv_conf.h from the 9.6 template
- scr_st77916.h: lv_display/lv_indev API, RGB565 byte swap in flush,
lv_tick_set_cb
- FPS counter via display refresh events
- loligod.c: lv_image_dsc_t descriptor
GIF now plays at its own frame rate; decode time halved by LVGL 9.6's
AnimatedGIF decoder.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- FPS/refresh/decode counter via LVGL monitor_cb (printed once per second)
- LVGL logging off, per-loop memory prints removed, loop delay 5 -> 1 ms
- double draw buffer (render while previous chunk is flushed)
- compile with -O2 instead of -Os
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
LVGL 8.3.11 gifdec filled the initial canvas opaque with the GIF background
color, so transparent-background GIFs (loligod.gif) showed dark gray until
'restore to background' frames cleared each area to the screen color.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Move user sketches to 10-OBD-Display-2024/, one folder per sketch
- Keep 2-Program Example/Demo_Arduino vendor-only, single docs/ copy
- Remove duplicate screenshots/instructions and ELMulator zip
- Archive broken LVGL 9 attempt
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>