v3.3.0: Welcome screen, factory reset, calibration/touch fixes, flash partition fix
## New - "Welcome" screen shown on first-time setup (before touch calibration), with the splash screen's animated radar graphic and a Start button. - The "Setup complete" screen now counts down 7 seconds with a button matching the Welcome screen's style, then automatically continues into the app (previously required a tap). - System menu "Backup & Reset" page (Backup, Restore, and a new "Reset settings" option that wipes the on-device data and re-runs first-time setup - useful for testing or handing the device to someone else). - Touch calibration targets are now green mini radar reticles instead of red crosshairs. ## Improved - The SD card's data folder is now only created after tapping Start on the Welcome screen, instead of on every boot regardless. - Flash partition layout changed to free up roughly 850 KB of firmware space (no OTA update slot needed, since firmware is always flashed via cable/USB) - lowers flash usage from ~95% to ~59%. ## Fixed - The Start button and the WiFi scanning screen now show a loading indicator instead of appearing frozen during SD-card/WiFi operations. - A touch-input bug during first-time setup that could corrupt touch calibration and cause taps to land on the wrong on-screen element afterward (most noticeable in the WiFi network selection list). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -15,11 +15,19 @@ namespace {
|
||||
int16_t avgY() const { return n ? (int16_t)(sumY / n) : 0; }
|
||||
};
|
||||
|
||||
// Mini radar target: same look as the radar graphic on the splash/
|
||||
// welcome screen (concentric rings + crosshair in green), but without
|
||||
// aircraft - instead a green filled center point as the point to aim
|
||||
// at, replacing the previous red filled circle with white center dot.
|
||||
// Radii deliberately kept small so the targets in the screen corners
|
||||
// (edge margin M=24, see run()) don't extend past the screen edge.
|
||||
void drawTarget(TFT_eSPI& tft, int16_t x, int16_t y) {
|
||||
tft.fillCircle(x, y, 10, TFT_RED);
|
||||
tft.drawFastHLine(x - 16, y, 32, TFT_RED);
|
||||
tft.drawFastVLine(x, y - 16, 32, TFT_RED);
|
||||
tft.fillCircle(x, y, 3, TFT_WHITE);
|
||||
uint16_t dim = 0x0320;
|
||||
tft.drawCircle(x, y, 16, dim);
|
||||
tft.drawCircle(x, y, 10, dim);
|
||||
tft.drawFastHLine((int16_t)(x - 18), y, 36, TFT_GREEN);
|
||||
tft.drawFastVLine(x, (int16_t)(y - 18), 36, TFT_GREEN);
|
||||
tft.fillCircle(x, y, 3, TFT_GREEN);
|
||||
}
|
||||
|
||||
RawAvg waitForTap(TFT_eSPI& tft) {
|
||||
|
||||
Reference in New Issue
Block a user