test: add sim-yellow and sim-red envs for visual border verification
Two pio envs that build a tiny sketch reading /img.bin from LittleFS and calling epd_draw_image_with_border with the chosen color. Lets us verify the actual on-device pixel composition of the sync-fail (yellow) and no-WiFi (red) borders without standing up a server failure or pulling the WiFi cable. Each sim sets NVS err_border=1 before halting, so flashing back to the normal env afterwards exercises the 304 → clean repaint recovery path end-to-end. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -31,3 +31,36 @@ lib_deps =
|
|||||||
throwtheswitch/Unity@^2.6
|
throwtheswitch/Unity@^2.6
|
||||||
build_flags = -DUNIT_TEST -std=c++17 -iquote test/mocks -iquote test -Itest/mocks -Itest
|
build_flags = -DUNIT_TEST -std=c++17 -iquote test/mocks -iquote test -Itest/mocks -Itest
|
||||||
test_build_src = no
|
test_build_src = no
|
||||||
|
|
||||||
|
; Visual hardware tests for the sync-fail / no-WiFi border. Reads the cached
|
||||||
|
; /img.bin from LittleFS and draws it with a yellow / red border. Sets
|
||||||
|
; NVS err_border=1 so the next normal-firmware boot exercises the recovery
|
||||||
|
; redraw via 304. Flow:
|
||||||
|
; 1. pio run -e sim-yellow --target upload (see yellow border on hardware)
|
||||||
|
; 2. pio run -e sim-red --target upload (see red border on hardware)
|
||||||
|
; 3. pio run -e esp32dev --target upload (back to normal; verifies 304 recovery)
|
||||||
|
[env:sim-yellow]
|
||||||
|
platform = espressif32
|
||||||
|
board = esp32dev
|
||||||
|
framework = arduino
|
||||||
|
monitor_speed = 115200
|
||||||
|
upload_port = /dev/ttyUSB0
|
||||||
|
monitor_port = /dev/ttyUSB0
|
||||||
|
board_build.filesystem = littlefs
|
||||||
|
build_flags = -DSIM_BORDER -DSIM_BORDER_COLOR=COLOR_YELLOW
|
||||||
|
build_src_filter = +<epd.cpp> +<sim_border.cpp>
|
||||||
|
lib_deps =
|
||||||
|
ricmoo/QRCode@^0.0.1
|
||||||
|
|
||||||
|
[env:sim-red]
|
||||||
|
platform = espressif32
|
||||||
|
board = esp32dev
|
||||||
|
framework = arduino
|
||||||
|
monitor_speed = 115200
|
||||||
|
upload_port = /dev/ttyUSB0
|
||||||
|
monitor_port = /dev/ttyUSB0
|
||||||
|
board_build.filesystem = littlefs
|
||||||
|
build_flags = -DSIM_BORDER -DSIM_BORDER_COLOR=COLOR_RED
|
||||||
|
build_src_filter = +<epd.cpp> +<sim_border.cpp>
|
||||||
|
lib_deps =
|
||||||
|
ricmoo/QRCode@^0.0.1
|
||||||
|
|||||||
@@ -0,0 +1,69 @@
|
|||||||
|
// Visual hardware test for sync-fail / no-WiFi border rendering.
|
||||||
|
//
|
||||||
|
// Built only by env:sim-yellow and env:sim-red in platformio.ini. Reads the
|
||||||
|
// last cached image from LittleFS, draws it through epd_draw_image_with_border
|
||||||
|
// with the configured color, and sets NVS_KEY_ERR_BORDER=1 so that flashing
|
||||||
|
// the normal firmware afterwards exercises the recovery path (next 304
|
||||||
|
// repaints the image clean).
|
||||||
|
//
|
||||||
|
// Usage:
|
||||||
|
// pio run -e sim-yellow --target upload
|
||||||
|
// pio run -e sim-red --target upload
|
||||||
|
// pio run -e esp32dev --target upload # back to normal — verifies recovery
|
||||||
|
|
||||||
|
#ifdef SIM_BORDER
|
||||||
|
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include <SPI.h>
|
||||||
|
#include <LittleFS.h>
|
||||||
|
#include <Preferences.h>
|
||||||
|
#include "config.h"
|
||||||
|
#include "epd.h"
|
||||||
|
|
||||||
|
#ifndef SIM_BORDER_COLOR
|
||||||
|
#error "sim_border.cpp built without SIM_BORDER_COLOR — set it in platformio.ini"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(115200);
|
||||||
|
Serial.println("[sim_border] boot");
|
||||||
|
|
||||||
|
pinMode(PIN_CS, OUTPUT);
|
||||||
|
pinMode(PIN_DC, OUTPUT);
|
||||||
|
pinMode(PIN_RST, OUTPUT);
|
||||||
|
pinMode(PIN_BUSY, INPUT);
|
||||||
|
pinMode(PIN_BTN_RESET, INPUT_PULLUP);
|
||||||
|
|
||||||
|
SPI.begin(PIN_SCK, -1, PIN_MOSI, PIN_CS);
|
||||||
|
SPI.beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE0));
|
||||||
|
LittleFS.begin(true);
|
||||||
|
|
||||||
|
epd_init();
|
||||||
|
|
||||||
|
File f = LittleFS.open(IMAGE_PATH, "r");
|
||||||
|
if (f) {
|
||||||
|
Serial.printf("[sim_border] /img.bin %u bytes — drawing with border color 0x%X\n",
|
||||||
|
(unsigned)f.size(), (unsigned)SIM_BORDER_COLOR);
|
||||||
|
epd_draw_image_with_border(f, SIM_BORDER_COLOR, BORDER_THICKNESS_PX);
|
||||||
|
f.close();
|
||||||
|
} else {
|
||||||
|
Serial.println("[sim_border] no /img.bin — falling back to full fill");
|
||||||
|
epd_fill(SIM_BORDER_COLOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
epd_sleep();
|
||||||
|
|
||||||
|
// Mark err_border so the next normal-firmware boot will trigger the
|
||||||
|
// 304-based clean repaint and we can confirm recovery end-to-end.
|
||||||
|
Preferences prefs;
|
||||||
|
prefs.begin(NVS_NAMESPACE, false);
|
||||||
|
prefs.putInt(NVS_KEY_ERR_BORDER, 1);
|
||||||
|
prefs.end();
|
||||||
|
|
||||||
|
Serial.println("[sim_border] done — halting (deep sleep, button-reset to wake)");
|
||||||
|
esp_deep_sleep_start();
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {}
|
||||||
|
|
||||||
|
#endif // SIM_BORDER
|
||||||
Reference in New Issue
Block a user