Skip to content

Releases: TimNe0/skyscope

v0.3.0

Choose a tag to compare

@TimNe0 TimNe0 released this 07 Aug 21:33

The fetch no longer freezes the app

Reported from a badge: too slow to even open the menu, though data was still arriving. The redraw work in v0.2.1 was not the cause.

The network fetch was. A TLS request plus parse takes seconds on an ESP32, and it ran on the main task — so for that whole time nothing else happened: no button handling, no redraw. Measured in the simulator as the worst gap between input polls, which is exactly how long a press can go unnoticed:

worst stall 2nd worst
Fetching inline 5.36 s 2.78 s
On a worker thread 0.28 s 0.25 s

A desktop understates it, too — mbedTLS on the badge is far slower.

The fetch now runs on a worker thread, the same pattern the published Overhead app uses on this hardware. The worker touches only a result slot and a busy flag; the main task folds the result in. Where threads are unavailable it falls back to fetching inline, and a watchdog recovers if a worker ever dies without unwinding.

Two supporting cuts

  • Parser: it re-found all four of its scan markers on every step, and str.find costs the distance it travels — so an 80 KB payload was scanned about 87 times over. Carrying the markers between steps makes each cross the text once: 87× → 3.8×.
  • Drawing: the aircraft outline is 10 points rather than 18, and glyphs are batched by colour into one path per colour instead of one draw call per aircraft. A busy frame went from 737 ctx primitives to 351. Swept edges still read as a plane at 14 px.

No change to what the app shows or how it is used.

v0.2.1

Choose a tag to compare

@TimNe0 TimNe0 released this 07 Aug 21:04

Much lighter on the badge

The app was redrawing the whole screen ~15 times a second for a display whose data changes once every 15 seconds. It now redraws only when what would appear on screen actually differs from what is already there, with a slow one-per-second tick to keep the "updated N seconds ago" counter honest, and full-rate drawing only while something genuinely animates — a menu, a notification, the sweep, armed-alert pulsing, or a finger on the touch ring.

Measured in the simulator:

draws/sec ctx calls/sec
Before 15.3 4,660
After 1.0 271

The saving grows with traffic: 30 contacts on an 80 km scope over Heathrow is about 1,300 ctx calls a second, against roughly 11,000 before.

Also:

  • The LED ring is only written when the frame actually changes, and the OS pattern generator is told to stay off once a second rather than five times.
  • New "Max contacts" setting (10 / 20 / 30 / 50). Each contact costs an aircraft outline and a label-placement attempt on every redraw, so it is the biggest lever you have. It was in the config file but not the menu.
  • The README now documents the measurements and which settings cost the most, in order of effect.
  • No log spam on a 2024 badge, which has no touch ring.

No change to what the app shows or how it is used.

v0.2.0

Choose a tag to compare

@TimNe0 TimNe0 released this 07 Aug 20:36

Fixed: LEDs sticking on

The ring could stay lit after the app left the screen. Three ways in, all fixed:

  • it was only driven from the radar screen, so opening the settings menu froze it on the last radar frame;
  • losing focus to anything other than the app's own CANCEL handler left it frozen, because the main loop blocks while backgrounded and cannot notice;
  • the white "under your finger" LED followed the sticky touch selection rather than the finger, so it stayed lit after you lifted off.

The ring is now driven on every screen, and the app hands the LEDs back and re-enables the OS pattern the moment it is no longer on screen. White now means "pad currently touched".

New: where the flight came from and where it is going

ADS-B carries no route information, so origin and destination come from a separate lookup against adsbdb.com — free and keyless like the position feeds. The detail page now shows the airline, LHR → JFK, and the city names.

Lookups happen only when you open an aircraft's detail page, one flight at a time, never during the normal poll loop, and results — including "no route known" — are cached so a flight is never asked for twice.

New: aircraft look like aircraft

Contacts are drawn as a top-down airliner silhouette — fuselage, wings, tailplane — turned to each aircraft's track, instead of an arrow with a line coming out of it. The shape shows heading by itself, so the separate heading vector is gone. Rotations are cached in 5° steps, so redrawing thirty of them costs nothing on the badge.

v0.1.2

Choose a tag to compare

@TimNe0 TimNe0 released this 07 Aug 19:52

Fixes the app store rejecting the app with "Failed to parse contents of tildagon.toml".

The cause was a UTF-8 byte order mark written to the front of the file by a Windows editor; a strict TOML parser treats it as a syntax error. tildagon.toml, app.py and adsb.py all carried one, and all three are now written as UTF-8 without a BOM.

Nothing in the app itself had noticed — Python skips a BOM in source and every editor renders the file identically — so there is now a packaging test asserting that no repo file starts with a BOM, that tildagon.toml parses, and that its category, string version, description length and author length all match the store's schema.

No functional changes to the app.

v0.1.1

Choose a tag to compare

@TimNe0 TimNe0 released this 07 Aug 19:21

Location list reordered so the customisable entry comes first.

  1. Home - your own saved spot, shown even before it is set. Selecting it when unset goes straight to entering coordinates, which are saved as Home and become the observer, so the top slot is never a dead end.
  2. East Essex Hackspace - the default observer.
  3. EMF (Eastnor Deer Park) - the camp site, now using the Eastnor Deer Park centroid (52.038012, -2.377969).
  4. London, Manchester, Edinburgh, Amsterdam, Berlin, New York.

The actions - Set Home to here, Manual entry, Auto (IP) - sit below the places.

v0.1.0

Choose a tag to compare

@TimNe0 TimNe0 released this 07 Aug 19:04

The 2026 touch ring, as a bearing input.

A radar is a polar display and the badge's twelve capacitive pads are a polar input, so they map onto each other exactly: twelve pads, twelve 30 degree compass sectors, matching the ticks already drawn on the scope.

Touch a pad to highlight that wedge and select the nearest aircraft in it; CONFIRM opens its detail page. Slide round the bezel to sweep the horizon. Hold for the mode-specific action, chosen in Settings > Touch:

  • Arm alert - watch a bearing. The arc pulses amber, the LED breathes, and a notification fires when traffic enters. Armed sectors persist across reboots.
  • Filter - show only that sector, with labels expanded to cover all of it.
  • Course-up - turn the scope so that bearing is at the top; ticks, cardinal letters, glyphs and the LED ring all rotate with it.

Also in this release: the aircraft detail page is now reachable directly from the radar instead of only through Settings > Contacts, and CANCEL unwinds any touch state before minimising, so a filtered or rotated scope is never a trap.

The 2024 Tildagon frontboard has no touch hardware; there the setting is visible but inert and says so when selected. Touch cannot be exercised in the badge simulator, so the pad-to-bearing orientation is the one thing to confirm on real 2026 hardware.

v0.0.2

Choose a tag to compare

@TimNe0 TimNe0 released this 07 Aug 18:40

Small fixes on top of v0.0.1: the ctx text-alignment table is built once instead of every frame, and the hexpansion status page reports state in readable text.

v0.0.1

Choose a tag to compare

@TimNe0 TimNe0 released this 07 Aug 18:36

First release of SkyScope: a live ADS-B flight radar for the EMF Tildagon / Spaceagon badge.

  • North-up radar scope with range rings, cardinal marks, aircraft glyphs with heading vectors and decluttered callsign/altitude/speed labels.
  • Configurable observer location (presets including East Essex Hackspace and EMF at Eastnor, saved Home, manual lat/lon, approximate IP lookup) and range 5-200 km.
  • Live keyless data from adsb.lol, with adsb.fi and airplanes.live selectable as alternatives.
  • Aviation, metric and mixed units; sweep, trails and an LED ring that points at the nearest aircraft.
  • Aircraft detail page, settings that persist across reboots, and exponential backoff on errors.
  • Optional GC9A01 round LCD on a hexpansion (see README for wiring).

Runs on stock Tildagon OS. Data (c) the contributors to adsb.lol, adsb.fi and airplanes.live.