Skip to content

CardSat v0.9.6c

Choose a tag to compare

@prstoetzer prstoetzer released this 09 Jun 21:03
· 119 commits to main since this release

A point release on top of 0.9.6b: ADIF export now produces LoTW-legal satellite
names and conforms to ADIF 3.1.7, and grid entry is uppercased on every screen.

Installation

To flash directly to Cardputer, use CardSat_Merged.bin.
For installation with Launcher, user CardSat.bin.

Added

  • LoTW SAT_NAME mapping on ADIF export. LoTW limits SAT_NAME to six
    characters and uses its own names, so on export CardSat translates each logged
    satellite's (AMSAT) name to the correct LoTW SAT_NAME:
    • It consults /CardSat/lotw_sats.csv first (rows of SAT_NAME,AMSAT_NAME),
      so you can update it on the card as new satellites appear without reflashing.
      A built-in table covers the common non-trivial cases (e.g. ISS → ARISS,
      LILACSAT-2 → CAS-3H, TEVEL2-n → TEV2-n, SONATE-2 → SONATE,
      Taurus 1 → TAURUS, AO-07 → AO-7) if the file is missing.
    • No match → prompt. If a logged satellite can't be resolved (and its name
      is longer than six characters), CardSat prompts you to enter its SAT_NAME.
      Entry is capped at six characters and uppercased. Your answer is appended
      to lotw_sats.csv, so you're only asked once per satellite.
    • A satellite whose name already fits in six characters is used as-is (no
      prompt). The starter lotw_sats.csv ships in the bundle — copy it to the
      card's /CardSat/ folder.

Changed

  • ADIF export updated to the ADIF 3.1.7 specification. The header now declares
    <ADIF_VER:5>3.1.7 and adds PROGRAMVERSION and CREATED_TIMESTAMP. The band
    lookup was completed against the 3.1.7 Band enumeration — it now emits BAND/
    BAND_RX for all amateur-satellite bands (10m, 6m, 2m, 1.25m, 70cm, 33cm, 23cm,
    13cm, 9cm, 6cm, 3cm) using exact ADIF ranges, so S/X-band birds like
    QO-100 (13cm up / 3cm down) now carry their bands. All emitted fields and
    enumeration values (MODE SSB/CW/FM, PROP_MODE SAT, date/time formats,
    GridSquare, String) were checked against the spec.
  • Grid fields are uppercased on every screen. The uppercase-by-default entry
    added for the log's callsign/grid in 0.9.6b now also applies to the Location
    grid and the mutual-pass DX grid. Letters come out uppercase; hold shift for
    lowercase (so Maidenhead subsquares remain reachable).

Fixed

  • ISS (and other busy birds) failing to enumerate transponders. The SatNOGS
    transmitters fetch was capped at 60 KB, but the ISS list (~49 transmitters)
    exceeds that; the body arrived truncated, the JSON parse failed, and the
    satellite ended up with no transponders. The cap is now 200 KB. A stale,
    truncated transmitter cache self-heals on the next online load (a failed parse
    triggers a re-fetch).

  • Only active transmitters were being listed. The parser dropped every
    SatNOGS transmitter not marked active, so the ISS showed ~9 instead of its
    full list. It now keeps the complete list (active and inactive), skipping only
    entries with no tunable frequency; two-way transmitters still sort to the front.

  • Large transmitter lists came back corrupted/short (the real ISS bug). The
    response was read into a RAM String, but the read loop ignored the return of
    String::concat(). Under TLS/WiFi heap pressure the String occasionally failed
    to grow; those chunks were silently dropped while the byte counter advanced
    anyway, splicing unrelated fragments together and corrupting the JSON. Only the
    ISS (by far the biggest list) was large enough to trip it. The transmitter fetch
    now streams straight to the cache file and parses directly from that file (the
    same approach already used for GP/TLE data), so the full body never has to live
    in one contiguous String. A previously-corrupted cache self-heals: the failed
    parse triggers a fresh fetch on the next online load.

Notes / upgrade

  • Put the maintained mapping at /CardSat/lotw_sats.csv on the card. The file
    uses LoTW's column order, SAT_NAME,AMSAT_NAME, with a header row. Lines added
    by the on-device prompt are appended in the same format.
  • The match is case-insensitive on the AMSAT_NAME column against the satellite
    name CardSat logged. If your catalog names differ (e.g. a trailing designator),
    add a row mapping that exact name, or answer the prompt once.
  • FW_VERSION is now 0.9.6c (shown on the About screen).

Status

  • Unchanged from 0.9.6: CAT control and the rotator are host-tested only. The
    ADIF/LoTW mapping, the export prompt flow, and the grid uppercasing are verified
    for brace balance and src/.ino parity, but should be confirmed on hardware —
    export a log and check the SAT_NAME fields import cleanly into LoTW/TQSL. See
    the v0.9.0 notes for the full feature list and build/flash instructions.