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>
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>
## 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>
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>
Documents the twinkling radar-screen stars and the consistently
applied Metric/Imperial unit setting in the README feature list. The
underlying unit-display bugfixes and Region-page button sizing
improvement aren't separately called out - no changelog section
exists in the README (previous bugfix-only releases like v3.0.1
weren't documented there either).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Refreshes images/screenshot.jpg with a current capture that includes
the weather icon in the header, and embeds it in the README (it was
previously unused there - only images/radar.jpg was linked).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Adds a note to the "Hide ground vehicles" section about the new blue
square markers and matching legend entry, and refreshes the root
firmware.bin to match the v3.1.0 build output including the ground
vehicle marker feature.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
## New
- Native in-device address search for setting your exact location,
using the free OpenStreetMap Nominatim geocoding service - no more
relying on imprecise IP-based location. Reachable both during
first-time setup and anytime via Location Presets ("+").
- Guided first-time setup flow: language selection, followed by an
optional location setup step (skippable) that explains why exact
coordinates give a much better experience than automatic IP-based
location, and a final setup-complete screen confirming everything
is saved and ready.
## Improved
- The address search keyboard now shows a format hint (e.g. "Main
Street 12, 12345 Springfield") and includes punctuation keys
(comma, hyphen, slash, period, apostrophe) so addresses with house
numbers like "45/3" can actually be entered.
- The preset-naming screen (when adding a location preset) now shows
example names (e.g. "Home, Work, Holiday home") so new users
understand what's being asked for.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Shortens the first-run location screen's body text in all 6 languages
and makes its buttons follow the text's actual height instead of a
fixed screen position - the longer German translation previously ran
underneath the "Enter Address"/"Skip" buttons, making it unreadable.
Adds a new info paragraph to the Location Presets "?" screen (all 6
languages) pointing to the native "Search by address" option added in
the previous commit, plus the same tip to the README's Getting Started
section.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Adds a new AddressSearchScreen: enter an address on a dedicated
keyboard (with a special-character page for common European accented
letters), geocode it via the free OpenStreetMap Nominatim service,
confirm the found place, optionally name it, and save it as a new
location preset - no external website needed anymore.
Reachable both from Location Presets > "+" (choice between "by
address" and manual coordinates) and, for new users, from a one-time
FirstRunLocationScreen shown right after the language picker on first
boot, explaining why an exact address beats automatic IP geolocation
and letting them set it up immediately (skippable).
Removes the itilog.com link/tip added in the previous commit (Location
Presets info screen, all 6 languages, and the README) - superseded by
this native in-app flow.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Adds a new info paragraph to the Location Presets "?" screen (all 6
languages) recommending itilog.com for getting exact address
coordinates, since automatic IP-based geolocation can easily be off by
20-30 km - enough to hear a plane while the radar stays empty. Adds
the same tip to the README's Getting Started section, with a
clickable link.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Bumps to v3.0.0. Documents the inactivity screen timeout now turning
the display fully off instead of just dimming it (feature landed in
the previous commit).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Bumps to v2.8.5, documents the weather icon's new tap-to-info popup in
the README (feature landed in the previous commit).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Adds a small weather icon in the header, right where the old camera
button used to be. Shows current conditions (sun, cloud,
sun-behind-cloud, rain, snow, thunderstorm) for whichever location is
currently active, including active location presets, so switching to
e.g. Milan shows Milan's weather. Powered by the free Open-Meteo API
(no API key needed), refreshed automatically every 10 minutes in the
background, or immediately after switching to a different location
preset. Icons are drawn entirely with TFT_eSPI basic shapes (circles,
lines), no image files or extra fonts needed.
The initial implementation failed to parse Open-Meteo's response
(ArduinoJson "InvalidInput") because the API replies with
Transfer-Encoding: chunked and streaming directly from
http.getStream() didn't reassemble the chunks correctly. Fixed by
collecting the full body via http.getString() first, then parsing
that.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Adds a "Logbook / WebUI" entry directly in Menu > System, showing the
device's IP and usage instructions (previously only reachable via a
hidden "?" button in Logbook Files). The web export page now supports
downloading and deleting individual daily logbook CSV files, in
addition to the existing merged CSV download.
Fixes a task watchdog reset that could reboot the device mid-download
when exporting the logbook via the built-in web server: the CSV send
loop never yielded the CPU, starving the idle task on larger logbooks.
The export loop now yields periodically (delay(1) every 10 lines and
after each file).
Removes the screenshot feature (camera button, on-device BMP storage,
web-based screenshot browser). Screenshots always came out solid
black - diagnosis showed the SPI readback from the display returns all
zeros regardless of SPI_READ_FREQUENCY, indicating TFT_MISO isn't
wired to the display on this CYD board revision. This is a hardware
limitation, not fixable in software, so the feature has been removed
rather than shipped broken.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Location presets can now optionally be given a name (e.g. "Home"),
shown in the overview instead of the raw coordinates. The
nearest-airport ticker on the Location Presets screen is now
tappable (shown with a thin green border) and adds that airport
directly as a new preset with its name and coordinates, using the
existing local airport database on the SD card - no internet lookup
needed. AirportLookup::findNearest() now also returns the found
airport's own lat/lon for this purpose.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
New:
- Flight logbook safety net: disabled by default, requires confirming
a full-screen warning before it can be turned on, and automatically
switches off again after exactly 24 hours - survives restarts and
power cycles (no valid enable timestamp = guaranteed off). Each
activation now writes its own CSV file instead of endlessly
appending to one growing file, and every file can be deleted
individually from Logbook files.
- Adjustable display brightness (10-100% in 10% steps, Menu -> System
-> "Brightness") with a live preview.
- About screen (Menu -> System -> "About") showing project name,
description, and firmware version.
Fixed:
- Radar's red altitude band (>9100m/30000ft) no longer gets dimmed at
night - the previous dim tone looked orange-brown and was hard to
tell apart from yellow. Legend and markers are consistent again.
- Radius change no longer leaves a stale "tail" trail behind each
aircraft between the old and new position.
- Splash screen no longer shows a time-of-day greeting that appeared
too late in the boot sequence to be useful; the star animation now
starts immediately instead of only near the end of boot.
- Clock stayed on raw UTC after the first boot instead of local time
(missing DST handling in some timezones) because the location wait
loop skipped the timezone lookup once a location was already saved.
- Header clock no longer leaves stale digit fragments behind the
current time, most visible on the last minute digit.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
New:
- Aircraft list (Menu -> Flight Options, top entry): sortable list
(distance/altitude/callsign) of every aircraft currently in range,
with the same altitude color-coding and emergency/watchlist border
highlighting as the radar. Tapping a row jumps back to the radar
with that aircraft's detail panel already open.
- Night dimming now also softens the radar screen itself (aircraft
markers and the sweep line switch to darker tones) during the
existing 22:00-06:00 window, reusing the same setting - no new
toggle.
Improved:
- Removed the unused built-in TFT_eSPI number fonts (GLCD/Font2/
Font4/Font6/Font7/Font8) from platformio.ini - the project only
ever uses the custom UI font via setFreeFont(). Saves ~15KB flash.
Also documents a CYD-flightradar.bin staleness safety check in the
CLAUDE.md release workflow (delete any leftover copy from a previous
release before renaming the fresh build, so an old binary can never
be silently re-used for a GitHub release).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The em dash before the link made it sit awkwardly mid-sentence;
rephrased for a more natural read.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Three small usability additions:
- Splash screen now shows a "Good morning/day/evening" greeting under
the title, based on local time (computed after the timezone offset
from IP geolocation is applied via configTime(), not before, so it
reflects actual local time rather than UTC).
- Selecting an aircraft on the radar now also draws a dotted bearing
line plus a degree label from the radar center to the compass edge,
showing which direction to actually look to spot it in the sky
(distinct from the aircraft's own heading arrow).
- The radar info bar now shows "Empty sky for <time>" instead of the
"tap for details" hint whenever no aircraft are currently in range
after all filters, counting up from the last sighting.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
drawAircraftMarker() previously drew a plain symmetric line for an
aircraft's heading, making it impossible to tell at a glance which
end pointed "forward". The line now ends in a small two-stroke
arrowhead (chevron), so the direction of travel is unambiguous.
Also documents that the index.html version-badge check (release
workflow step 4) is mandatory and not optional, since it was
accidentally skipped on a recent patch release.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Adds FlightLogbook::todayMaxAltitude(), which scans today's logbook
CSV for the entry with the greatest altitude at first sighting, and
displays it as "Highest flight today: <callsign> (<alt> ft)" on the
Statistics screen (Menu -> Flight Options -> Statistics).
Also documents the CYD-flightradar.bin rename step (for GitHub
release uploads) in the CLAUDE.md release workflow.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Adds a 7-day bar-chart view of the flight logbook (Menu -> Flight
Options -> History chart), and a small built-in web server that
serves a logbook overview page plus a merged CSV export of all
logged days once the device is connected to WiFi (discoverable via
the "?" button on the Logbook files screen, which now also shows the
live device IP). Also fixes the "nearest airport" line on the
Location Presets screen, which previously used tft.setViewport() and
went completely invisible with our custom font - it now scrolls as a
proper marquee without relying on the viewport clip.
Also documents the standard release workflow in CLAUDE.md.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>