Two bugs causing blank display on both ESP32 Balance boards:
1. Wrong GPIO pins: RST was GPIO12 (should be GPIO14) and BL was GPIO40
(should be GPIO2) per Waveshare ESP32-S3-Touch-LCD-1.28 schematic.
The previous "correction" from GPIO2→GPIO40 was itself erroneous.
2. No HUD rendering: ota_display_task only handled OTA overlay states and
drew nothing in idle mode. Added draw_hud_idle() that clears the screen
on first call, draws "SAULT" at scale=4 centred on the 240×240 display,
and updates battery voltage (from g_vesc[0].voltage_x10) at 5 Hz.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
gc9a01.c and gc9a01.h were never committed to main despite ota_display.c
depending on their display_fill_rect/draw_string/draw_arc functions.
Also:
- CMakeLists.txt: add gc9a01.c to SRCS
- config.h: restore DISP_* GPIO defs (DC=8 CS=9 SCK=10 MOSI=11 RST=14 BL=2)
for Waveshare ESP32-S3-Touch-LCD-1.28
- ota_display.c: fix snprintf buffer too small (verline[32]→[48]) which
GCC 13.2.0 rejects as -Werror=format-truncation
Confirmed builds clean and boots on bd-66hx hardware (mbpi5 /dev/ttyACM0).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds ota_display_task (5 Hz) on GC9A01 240×240 round LCD:
- Idle: orange dot badge at top-right when update available, version text
- Progress: arc sweeping 0→360° around display perimeter with phase label
- States: Downloading/Verifying/Applying/Rebooting (Balance) and
Downloading/Sending/Done (IO via UART)
- Error: red arc + "FAILED RETRY?" prompt
Display primitives (fill_rect, draw_string, draw_arc) are stubs called
from the GC9A01 SPI driver layer (separate driver bead).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>