Commit Graph

159 Commits

Author SHA1 Message Date
63cd12b6f6 OTA CI loop
All checks were successful
Build Release / build (push) Successful in 1m20s
v1.2.0
2026-08-16 20:35:38 +02:00
6a798f8a89 CI for OTA update
Some checks failed
Build Release / build (push) Failing after 1m25s
2026-08-16 20:27:14 +02:00
ab9b81683b fixed sd read error
All checks were successful
Build Release / build (push) Successful in 1m21s
v1.1.4
2026-08-16 20:17:39 +02:00
2949e8c110 OTA bypass gitea local ip
All checks were successful
Build Release / build (push) Successful in 1m20s
v1.1.3
2026-08-16 19:46:29 +02:00
d80600863a timezone
All checks were successful
Build Release / build (push) Successful in 1m27s
v1.1.2
2026-08-16 19:21:03 +02:00
fb884acc27 faster response times
Some checks failed
Build Release / build (push) Failing after 1m18s
v1.1.1
2026-08-16 16:55:32 +02:00
3648538cbc eco mode menu toggle
Some checks failed
Build Release / build (push) Failing after 1m31s
v1.1
2026-08-16 16:24:02 +02:00
a02e280f42 ota update 2026-08-16 14:52:23 +02:00
fb09b2b7a1 localization v1.0.0 2026-08-16 14:33:27 +02:00
9c634b819e placeholder text for input field 2026-08-16 10:47:08 +02:00
df8330d1e3 Add Eco Mode power saving feature (60s ADS-B poll, WiFi sleep) 2026-08-15 22:53:05 +02:00
b807b51f1f Fix header not reappearing after menu exit 2026-08-15 22:29:44 +02:00
aae8890942 Add route filter screen with airport name lookup 2026-08-15 22:09:09 +02:00
d89fba5200 Add altitude filter [A] button to radar info bar 2026-08-15 22:02:13 +02:00
3778f3a506 remove rolling banner add help screen 2026-08-15 21:46:40 +02:00
760b1a9fc1 search 2026-08-15 21:29:11 +02:00
a5e9dc7df1 list view 2026-08-15 20:58:16 +02:00
811d4f0ac9 rebrand and flip rortatoin 2026-08-15 19:57:06 +02:00
Eiswolf-BG
b78069192b Fix .gitignore excluding archived version .bin files (404 in version picker)
*.bin was ignoring the binaries under versions/v3.6.1/ and
versions/v3.6.2/ added for the web-flasher version picker, so only
the manifest.json for each made it into the last commit. Adds an
exception for versions/**/*.bin and commits the missing binaries.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-14 03:34:25 +02:00
Eiswolf-BG
a494f63503 Add version picker to web flasher
Lets users choose among the last 3 releases (v3.6.3 latest, v3.6.2,
v3.6.1) instead of only ever flashing the newest build - handy for
testing or rolling back. Archives the real historical binaries for
v3.6.1/v3.6.2 under versions/, each with its own manifest.json.

Documents the archival step as part of the standard release workflow
in CLAUDE.md so the picker stays current on future releases.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-14 03:29:55 +02:00
Eiswolf-BG
87633441d3 Release v3.6.3: OTA reliability + watchdog fix + WebUI live radar
Fixes a watchdog reset that could crash the device after many hours
of continuous flight logging: yield() alone doesn't reliably feed the
task watchdog (it only yields to the idle task when another
equal-or-higher-priority task is actually ready to run), so long CSV
scans in flight_logbook.cpp now use delay(1) instead, in
countLinesFast(), loadSeenFromCurrentFile(), and todayMaxAltitude().

Bundles all OTA reliability and WebUI live radar work already
committed since v3.6.0 (title-overflow fix, OTA diagnostic logging,
NetTask pause/resume during updates, WebUI radar compass/click/
radius/starfield enhancements).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-14 03:03:21 +02:00
Eiswolf-BG
1dea6d6553 Release v3.6.2: OTA reliability fixes + WebUI live radar enhancements
Fixes title overflow on error/confirmation screens, adds diagnostic
serial logging to both the update check and download/flash steps,
pauses the background NetTask during OTA to avoid WiFi/TLS
contention (likely cause of intermittent failures), and reminds
users to close the WebUI page before updating since it polls the
device.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-13 22:07:48 +02:00
Eiswolf-BG
969b0a2e19 Pause NetTask during OTA update/check to avoid WiFi/TLS contention
The background task polls ADS-B, weather, and aircraft details every
few seconds on Core 0, sharing the same WiFi radio/TLS stack as the
OTA check/download. Suspected cause of repeated OTA failures. Now
suspended via NetTask::pause() for the duration of both
checkForUpdate() and performUpdate(), resumed immediately after.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-13 22:05:21 +02:00
Eiswolf-BG
a5b0e5404a Fix title overflow in confirm/info screens; log checkForUpdate() diagnostics
confirmWarningScreen() and infoScreen() only fell back from text size
2 to size 1 for long titles, but some titles (e.g. "Prüfung
fehlgeschlagen. WLAN prüfen.") still overflowed the screen edge at
size 1. Both now wrap the title across up to 3 lines via the new
wrapTitleLines() helper, and VIEW_TOP shifts down to match the actual
number of title lines instead of always assuming one.

checkForUpdate() now logs the same kind of diagnostic detail over
serial that performUpdate() already had (start info, and the specific
failure reason - HTTP error/status, JSON parse error, missing
tag_name, missing firmware.bin asset - instead of just returning
silently).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-13 21:56:37 +02:00
Eiswolf-BG
c16cb3b307 Release v3.6.1: OTA update hint + diagnostics, WebUI live radar enhancements
Adds a reminder to close the WebUI page before starting an OTA
update (its polling was interfering with downloads), detailed serial
diagnostics for OTA failures, and several WebUI live radar
improvements: full compass directions, clickable aircraft with an
info panel, an independent radius selector, and a twinkling
starfield background.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-13 21:42:57 +02:00
Eiswolf-BG
c3536f3852 OTA close-WebUI hint, OTA diagnostic logging, WebUI radar improvements
The OTA confirmation dialog now warns to close the WebUI page first -
its 3-second polling was interfering with the firmware download.

performUpdate() now logs progress and, on failure, the actual
HTTPUpdate error code/string over serial instead of just returning
false, to make future OTA failures easier to diagnose.

WebUI live radar: all four compass directions (N/E/S/W) instead of
just N, clickable aircraft with a persistent info panel (callsign,
altitude, speed, distance/bearing, heading, squawk), a client-side
range selector (10/25/50/100 km, independent of the device setting),
and twinkling background stars outside the radar circle redrawn at
150ms independent of the 3s aircraft-data poll.

Note: the "notable" (orange ring) field in /radar.json remains
hardcoded false - Config::NOTABLE_CALLSIGN_PREFIXES still doesn't
exist anywhere in this project.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-13 21:39:30 +02:00
Eiswolf-BG
686be8e167 v3.6.0: WebUI live radar, sun-based night dimming, Heavy aircraft marker
Adds a live radar canvas to the web UI (above the flight logbook),
switches night dimming from a fixed 22:00-06:00 window to the actual
sunrise/sunset at the active location, and gives Heavy-category
aircraft (A380/B747/B777-class) their own marker instead of sharing
the orange "notable" ring.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-13 21:04:07 +02:00
Eiswolf-BG
fe3eec29b8 Sun-based night dimming; separate marker for Heavy aircraft
Night dimming now uses the actual sunrise/sunset at the active
location (classic Almanac algorithm) instead of a fixed 22:00-06:00
window, with a fallback to that fixed window while location or time
isn't known yet. Applies to both the backlight (main.cpp) and the
radar's own color dimming (radar_screen.cpp).

Heavy-category aircraft (ADS-B emitter category "A5") now get a
distinct marker (larger circle with an outer ring, plus the usual
heading line) instead of sharing the orange "notable" ring, on both
the device display and the WebUI radar.

Note: the orange "notable" ring itself (military/government callsign
prefixes) remains unimplemented - Config::NOTABLE_CALLSIGN_PREFIXES
has never been defined anywhere in this project. The WebUI radar's
"notable" field is hardcoded false until that's actually specified;
on the device it was never wired up in the first place.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-13 04:13:41 +02:00
Eiswolf-BG
5e22025d7a Add WebUI live radar; mutex-protect AirlineFilter/AircraftWatchlist
The WebUI home page now shows a live radar canvas above the flight
logbook, polling a new /radar.json endpoint every 3 seconds. It
mirrors the device display: distance rings, aircraft colored by
altitude, ground vehicles as squares, rotorcraft as diamonds, and
emergency/watchlist/heavy-category rings in that priority. Applies
the same range, hide-ground-vehicles, and airline filters as the
device radar.

AirlineFilter and AircraftWatchlist gain proper mutex protection
around their in-memory arrays (previously only guarded around SD
file I/O) since the new /lists WebUI pages reach them from Core 0
(NetTask) in addition to their existing Core 1 (menu screen)
callers.

Note: the "notable aircraft" military/government callsign-prefix
marker is not implemented - Config::NOTABLE_CALLSIGN_PREFIXES was
never defined anywhere in this project, on the device display or
here. The "notable" ring currently fires on heavy-category aircraft
only.

Also documents the OTA-testing exception to the auto-flash rule in
CLAUDE.md (build-only during Push & Release, so the test device stays
on the previous version for OTA testing).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-13 03:50:20 +02:00
Eiswolf-BG
220e670a88 v3.5.1: OTA download fix, reworked update result screens, timeout slider
Fixes OTA downloads (GitHub's asset redirect wasn't followed before,
so every download failed), reworks the update success/failure
screens to require explicit confirmation instead of auto-vanishing
or auto-restarting, and drops the release-asset rename step in favor
of just uploading firmware.bin directly.

Replaces the screen-timeout tap-cycling with a drag slider (1-15
minutes, then "Never"); the idle screensaver toggle moves into this
same screen since it only affects what happens when the timeout
fires.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-13 02:55:35 +02:00
Eiswolf-BG
6effdb4eaa Add screen-timeout slider screen; move screensaver toggle into it
Replaces the repeated-tap timeout cycling (0-10, one tap per minute)
with a dedicated screen and slider (1-15 minutes, then "Never"). The
screensaver toggle moves from its own System-menu row into this
screen, directly below the slider, since it only determines what
happens when the timeout fires.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-13 02:44:35 +02:00
Eiswolf-BG
0bf8518ac5 Fix OTA download (follow GitHub redirect), rework result screens, drop asset rename
OTA downloads always failed because GitHub's browser_download_url
returns a 301/302 redirect to a signed objects.githubusercontent.com
URL, which HTTPUpdate doesn't follow by default. Now sets
HTTPC_STRICT_FOLLOW_REDIRECTS before downloading.

Update results (success and failure) are now shown as a persistent
info screen requiring an explicit tap to dismiss, instead of a
1.2-1.5s auto-vanishing message followed by an automatic restart -
a firmware update result is important enough that it shouldn't be
missable. Also fixes long dynamic titles (e.g. "Update available:
v3.5.0") and the installing-progress label overflowing the screen
edge in some languages.

Release workflow no longer renames the build artifact to
CYD-flightradar.bin before upload; the release asset is just
firmware.bin now, matching what OtaUpdate::checkForUpdate() looks
for. CLAUDE.md's release workflow updated to match.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-13 02:13:24 +02:00
Eiswolf-BG
3dd308b39a v3.5.0: OTA firmware updates over WiFi, idle screensaver
Adds a "Check for update" menu entry that checks the latest GitHub
release and installs it directly on the device over WiFi, and an
"Screensaver" toggle that shows a dimmed starfield with a clock
after the inactivity timeout instead of turning the display off
completely. Requires switching to the min_spiffs partition scheme
for OTA's dual app partitions.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 23:27:38 +02:00
Eiswolf-BG
c08a66e2b2 Fix screensaver flicker: pause radar render/tick/status-line while active
Radar rendering, sweep tick, and status-line updates ran regardless
of screensaver state, so each aircraft-update cycle or sweep tick
repainted the full radar over the dimmed starfield while the clock
kept redrawing on top - visible as flicker between the two. Both
drawing blocks now skip entirely while screensaverShowing is true;
updateProximityAlert() (LED/sound only, no display writes) keeps
running unaffected.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 23:22:38 +02:00
Eiswolf-BG
7b31a92606 Add idle screensaver feature; fix OTA release asset filename
New "Screensaver" toggle in Menu > System (off by default). When the
inactivity timeout fires with it enabled, the display shows a dimmed
starfield with a large centered clock instead of turning the
backlight fully off; a tap wakes it and redraws normally. Off keeps
the existing behavior unchanged.

Also fixes OtaUpdate::checkForUpdate() to look for the release asset
"CYD-flightradar.bin" (the actual filename used by the release
workflow) instead of the placeholder "firmware.bin" it was checking
for before.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 23:09:39 +02:00
Eiswolf-BG
d7454d9784 Add OTA firmware update via GitHub Releases API
New "Check for update" entry in Menu > System checks the latest
GitHub release's tag against the running version and, if newer,
downloads and flashes its firmware.bin asset directly over WiFi -
no cable or web flasher needed. Requires switching the partition
scheme to min_spiffs (two OTA-capable app partitions instead of a
single non-OTA one), which needs a full reflash.

confirmWarningScreen() now takes title/body as strings instead of
StringIds so it can show a dynamically composed message (the target
version number) for the update confirmation, with an accent color
parameter so the OTA confirmation can use green instead of the
red used for the existing destructive-action confirmations.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 22:57:12 +02:00
Eiswolf-BG
e4a29a090f v3.4.0: Remove Sound feature, add backup progress feedback, improve route lookup coverage
Removes the experimental Sound/beep feature after hardware testing
revealed unfixable electrical interference noise synced to the
radar-sweep SPI traffic. Adds progress-dot feedback on the Settings
Backup/Restore buttons so they no longer look frozen during the SD
copy. Chains three independent free flight-route lookup sources
instead of relying on adsbdb.com alone, which had poor real-world
coverage (~80% "unknown").

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 21:52:17 +02:00
Eiswolf-BG
daf37c5577 Chain three route-lookup sources for better flight-route coverage
adsbdb.com alone returned "unknown" for ~80% of routes in real-world
testing. Now tries a VRS standing-data mirror first, then hexdb.io's
route endpoint, then adsbdb.com as a last fallback - same
independent-sources-with-fallback pattern already used for the
aircraft-model lookup above it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 21:47:39 +02:00
Eiswolf-BG
bfdb8a9fd4 Add progress-dot feedback to Settings Backup/Restore buttons
The SD-bound copy in SettingsBackup::backup()/restore() blocked
noticeably with no visual feedback, making the button look frozen.
Both functions now accept an optional callback invoked before each
of the two file copies, which menu_screen.cpp uses to append dots to
the button label in place.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 21:34:53 +02:00
Eiswolf-BG
6f3713f348 Revert Sound feature (hardware EMI noise, not fixable in firmware); keep preset auto-activate fix and QR-on-main-screen layout
Root-caused to SPI bus crosstalk from TFT/touch during radar-sweep
redraws - muting the software output did not silence the residual
hiss, confirming this is hardware EMI rather than a firmware logic
bug. All Sound-related files, settings, i18n strings, and menu
entries have been removed.

Unrelated fixes from the same session are kept: newly created
location presets (via address search, manual coordinates, or the
nearest-airport ticker) now activate immediately instead of leaving
the previous location active; the WebUI QR code moved from a
separate sub-screen onto the main info screen, centered under the
explanatory text.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 21:33:02 +02:00
Eiswolf-BG
32f8e873a9 Add flight route lookup, helicopter marker, and QR code for WebUI
Detail panel now shows origin/destination via adsbdb.com callsign
lookup. Rotorcraft (ADS-B category A7) get a distinct rotor-cross
marker instead of a heading arrowhead, same rationale as the existing
ground-vehicle marker. WebUI info screen gets a QR button (when WiFi
is connected) that renders the local WebUI URL as a scannable code.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 16:52:22 +02:00
Eiswolf-BG
467d30d8cd Marquee/scroll fixes for truncated text across radar and location screens
Bundles several small local follow-ups since v3.3.0:

- Radar screen aircraft detail panel: long lines (model name, distance
  with km/nm/mi) now scroll horizontally instead of being cut off with
  "..." (up to 9 independent scrolling lines, reusing the existing
  InfoMarquee pattern).
- "Setup complete" screen: small centered "Tap to skip" hint below the
  countdown button, translated into all 6 languages.
- Location Presets screen: long preset names/coordinates in the list
  now scroll left-aligned instead of being truncated with "...".
- Address search confirmation screen: the found place name is no
  longer hard-cut at 150 characters - it's now a vertically scrollable
  paragraph (same pattern as the existing Location Presets info
  screen), since it's multi-line wrapped text rather than a single
  overflowing line.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 16:19:47 +02:00
Eiswolf-BG
e77238bd90 Add erase prompt option to web flasher manifest
Adds new_install_prompt_erase so ESP Web Tools shows a user-facing
erase checkbox during install instead of deciding silently in the
background.
2026-08-12 07:01:17 +02:00
Eiswolf-BG
2ff8b74af9 v3.3.0: Update web flasher version badge, firmware binary, and partition table
Bumps the web flasher version display to v3.3.0 and refreshes
firmware.bin and partitions.bin to match the v3.3.0 build output -
partitions.bin changed because this release switches to the no_ota.csv
partition scheme.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 06:57:53 +02:00
Eiswolf-BG
a7f14b3125 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>
2026-08-12 06:57:48 +02:00
Eiswolf-BG
ba1c062ef1 Add welcome screen at the start of first-time setup, before touch calibration
Shows a new FirstRunWelcomeScreen right at the very beginning of the
first-time setup flow (isFirstRun), before touch calibration even
runs: hard-coded English title (no language chosen yet at this point),
the splash screen's radar reticle centered below it, and a large
black/green-outlined "Start" button whose text breathes between a
darker and a lighter, slightly whitish green (~2.5s cycle) so it's the
one element that visibly stands out against the otherwise uniform
green UI. The button intentionally stays unfilled (black) so the
twinkling MenuStars background shows through it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 05:38:11 +02:00
Eiswolf-BG
9d2930bd8b Add Backup & Reset sub-page with factory reset (developer feature)
Moves the previously standalone "Backup settings"/"Restore settings"
buttons out of the System menu into a new "Backup & Reset" sub-page
(replaced in the System menu by a single folder button, placed
directly above "Info"), and adds a third entry "Reset settings" - a
factory reset for developers/testers that deletes the entire
Flightradar folder from the SD card (settings, logbook, location
presets, WiFi, calibration - everything) and restarts the device. The
next boot picks up isFirstRun automatically (via the missing
SD_SETTINGS_FILE) and runs the full first-time setup again, exactly
like on the very first boot - no need to pull the SD card.

Since this is irreversible, it requires a full-screen red warning
confirmation first, reusing the same overlay previously built only for
the flight-logbook enable warning (confirmLogbookEnable() generalized
to confirmWarningScreen(), taking title/body StringIds as parameters).

New SdStorage::deleteDirectoryRecursive() and
SettingsBackup::factoryReset() implement the actual deletion + restart.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 05:34:22 +02:00
Eiswolf-BG
3c12b7bdfb Add CH340 driver note to README Getting Started section
Some users' computers don't detect the CYD's CH340 USB-to-serial chip
without a driver, so no COM/USB port shows up in the web flasher. Adds
a short note with official WCH driver download links right after the
Quick Web Installation steps.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 00:51:14 +02:00
Eiswolf-BG
6cd163bd81 Add twinkling star background effect to the web flasher page
Ports the same triangle-wave dim/brighten twinkle formula used by
MenuStars on the device to a lightweight, dependency-free canvas
overlay behind the page content, tying the web flasher's look to the
device UI. Star count scales with viewport area (40-160) instead of a
fixed number. The canvas uses z-index:0 (not negative) and
pointer-events:none so it stacks reliably behind .container without
blocking the ESP Web Tools install button or any links.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 00:36:29 +02:00
Eiswolf-BG
370f5fa310 v3.2.0: Update web flasher version badge and firmware binary
Bumps the web flasher version display to v3.2.0 and refreshes
firmware.bin to match the v3.2.0 build output.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 00:26:59 +02:00