# waveshare73 / v1

Driver for the Waveshare 7.3" 6-color e-ink panel (800×480, Spectra-6) on a
discrete ESP32 dev-board breakout. This is the original V1 firmware that
shipped on Matt's prototype unit.

## What lives here

- `epd_driver.cpp` — implements the `epd.h` interface for this panel:
  `epd_init`, `epd_sleep`, `epd_fill`, `epd_draw_image_from_file`,
  `epd_draw_image_with_border`, `epd_draw_qr`, `epd_draw_ap_screen`,
  `epd_draw_setup_screen`. The init byte sequence at the top of `epd_init()`
  is verified for this specific controller; do not blind-paste from another
  panel.
- `version.h` — `PANEL_FW_VERSION` string transmitted during provisioning.
  Bump when the driver changes in a way the server should know about.

## Per-panel data (lives elsewhere)

Pre-rendered LittleFS payloads for this panel size live at
`data/waveshare73-v1/`:

- `ap_bg.bin`, `setup_bg.bin` — captive-portal and account-binding
  background screens at 800×480
- `img.bin`, `img_portrait.bin` — test images used by the `test-display`
  build env

Regenerate with `scripts/gen_screens.py --width 800 --height 480` after
changing the source artwork.

## Build env

```bash
pio run -e waveshare73-v1 --target upload          # production firmware
pio run -e test-display   --target upload          # single-image hardware test
pio run -e sim-yellow     --target upload          # sync-fail border test
pio run -e sim-red        --target upload          # no-WiFi border test
```

The build flags supplied by `platformio.ini` parametrize `src/config.h` —
this folder doesn't redefine pins or dimensions itself.

## QR positions

`epd_draw_ap_screen` and `epd_draw_setup_screen` have hardcoded QR
coordinates (cell size, x, y) tuned for 800×480 + the bg screens at
`data/waveshare73-v1/`. If the bg art changes, the matching constants
in `gen_screens.py` and the driver must be re-tuned together.
