Skip to content

Releases: WD9N/Haven-FSK

HAVEN-FSK v0.6.0-beta

HAVEN-FSK v0.6.0-beta Pre-release
Pre-release

Choose a tag to compare

@WD9N WD9N released this 12 Jul 22:31

Beta release for on-air testing. HAVEN MFSK-16 and PSK31 over HF.

Highlights

  • Open protocol. HAVEN-FSK is now published as an independently
    implementable specification with a machine-readable LDPC matrix,
    encoder bit mapping, and golden test vectors (see spec/ and
    HAVEN-FSK_Specification.md). Reference audio verified over RF.
  • Manual log capture. Select any text in the Received pane,
    right-click, and log it as Call / Name / Grid / RS / POTA / SOTA /
    State / County / FD — the likely field is offered first. Works in
    any mode and corrects a wrong auto-fill.
  • POTA export. References normalize to the XX-NNNN standard on
    every path, and ADIF now emits POTA_REF/MY_POTA_REF for modern
    loggers (POLO, HAMRS).
  • Interface. Flattened menu bar (Station Info, Audio, Radio, Mode,
    Export Log direct on the bar); callsigns with modifiers (WD9N/P,
    EA8/WD9N) recognized in untagged text.
  • Reliability. Fixed a bug that clipped the first character of
    every received PSK31 transmission. Continuous integration now builds
    on Linux (x86-64 and ARM/Raspberry-Pi-class) and Windows on every
    change.

For testers: unzip anywhere and run HavenFSK.exe — no install.
Set your callsign under Station Info before transmitting. Feedback on
weak-signal decoding and sync behavior on busy bands is especially
welcome.

Full changelog: see CHANGELOG.md.

HAVEN-FSK v0.5.1-beta

HAVEN-FSK v0.5.1-beta Pre-release
Pre-release

Choose a tag to compare

@WD9N WD9N released this 12 Jul 02:40

Auto-logging — inline field markers (ADR-133, spec §6.1)

  • Macro data tags (<myCall> <theirCall> <rstSent> <myGrid> <myParks> <mySOTA> <myName> <myQTH> <myFD> <myState> <myCounty>) now wrap their visible values in invisible field markers on the air: the receiving station's log entry fills itself from sender-declared data instead of parsing prose by pattern. The message reads exactly the same on both screens; airtime cost is 0–1.5 s per over; no wire-format change (payload convention, protocol stays v2, disclosed in spec §6.1).
  • Values inserted by macro tags show a faint tint in the TX input. Editing inside a tinted span edits the transmitted data with it — prose and log data cannot disagree.
  • Received tagged values are clickable, including state and county.
  • Multi-party population rules (worked from activator, hunter, and interloper perspectives — ADR-133): signal reports only land when the message is addressed to you; broadcast facts (grid, parks, summit, name, QTH, FD, state, county) fill only empty fields; a different station can never auto-replace an in-progress entry (the old "steals the entry" takeover is gone — only Log It, Clear, or a click switches contacts); a station logged in the last 10 minutes doesn't re-seed the cleared entry with its parting "TU 73".
  • Sender callsign is taken from the sender's own marker declaration when present (DE-scan fallback retained for plain-text stations).
  • Bare park references (US-1234) and grid squares in plain untagged text are now clickable too — CQs from stations without markers still click-populate.
  • New County log-entry field: captured, stored (automatic database migration), editable, and exported to ADIF (proper CNTY STATE,COUNTY form when the state is known).
  • Field Day: <myFD> confirmed correct as the single combined exchange — ADIF and Cabrillo exports split class/section themselves.
  • PSK31 is unaffected: markers are never emitted outside HAVEN MFSK.

Both stations need v0.5.1 to benefit from marker-driven auto-logging; against older stations everything falls back to the previous text-tag and callsign-scan behavior.

HAVEN-FSK v0.5.0-beta

HAVEN-FSK v0.5.0-beta Pre-release
Pre-release

Choose a tag to compare

@WD9N WD9N released this 10 Jul 22:39

Receiver — weak signal & static crashes

  • Adaptive preamble sync — detection threshold rests lower (0.35) and self-raises on false-sync symptoms, relaxing on verified decodes. Measured: decode threshold improves ~1.5 dB (-9 dB SNR: 0/10 -> 8/10 on the new benchmark) and heavy-storm survival doubles (480 crashes/min at -6 dB: 4/10 -> 8/10). Threshold changes are shown in the status bar. (ADR-131)
  • Long messages now work — the receive window scales to the length announced in the frame header; a fixed 20 s cap previously made anything past ~150 characters undecodable. Messages up to ~900 characters (the 120 s TX watchdog bound) are supported. (ADR-132)
  • New weak-signal benchmark harness (HavenFSK.exe --bench / --bench-sync) with calibrated noise and HF-realistic lightning crashes. Four plausible DSP improvements were measured, found not to help, and documented rather than shipped (ADR-129/130).

Logging

  • Critical fix: log-panel edits and deletes now reach the database (previously display-only; exports carried original data).
  • Today's contacts reload on startup; new MHz/Date/Time entry fields make logging fully functional with no radio connected (blank = auto); editing a contact keeps its original frequency/date/time unless changed.
  • UTC Date column + UTC time label, State field (entry, table, ADIF STATE).
  • POTA park-to-park: one record per park of a multi-park station (full P2P credit); hunter records carry SIG_INFO.
  • SOTA file generated on combined POTA+SOTA days, per-contact summit refs.
  • Field Day: corrected ADIF exchange semantics plus a Cabrillo (.cab) file for the ARRL applet.
  • RS-S auto-fills on a verified decode; <rstSent> macro tag mirrors the RS-S field.

UI

  • TX/RX level fader positions persist across sessions.

Beta testers: watch the status bar for Sync threshold notices during busy-band operation and report how often they appear — that is the one behavior that needs on-air miles. See CHANGELOG.md for details.

HAVEN-FSK v0.4.0-beta

HAVEN-FSK v0.4.0-beta Pre-release
Pre-release

Choose a tag to compare

@WD9N WD9N released this 09 Jul 12:32

Operating

  • Tune button — steady 1000 Hz tone through the normal TX path (PTT keyed, level from the TX fader, 30 s auto-stop) for setting drive level into the radio. Read power on an average-reading meter; peak-reading meters show MFSK slightly high from TX filter ringing at symbol transitions. Replaces the Tone TX / Monitor bring-up diagnostics.
  • Clear button for the Transmit input, matching the Received window.
  • Mouse-wheel faders — hover anywhere over a level channel strip and scroll, 1 dB per notch.

Fixes (July 2026 audit)

  • Interleaver: guarded a latent heap overflow on short input.
  • Received text is HTML-escaped before display; every callsign in a message gets linked (position-based, no false matches).
  • ADIF export: field lengths declared in UTF-8 bytes, so records with non-ASCII characters import correctly elsewhere.
  • Log: band recomputed when a contact's frequency is edited.
  • TCI: no auto-reconnect after a user-requested disconnect.

See CHANGELOG.md for details.

Known Bugs

  • The log export does not keep the updates when edited. So any export uses the original data, not the edit. ----------------Important Log Information
  • Editing re-writes the QSO frequency to the current dial frequency.

v0.3.0-beta

v0.3.0-beta Pre-release
Pre-release

Choose a tag to compare

@WD9N WD9N released this 07 Jul 02:54

v0.3.0-beta — July 2026 (current)

External review fixes (see DECISIONS.md ADR-124 through ADR-126)

Safety / on-air behavior

  • PTT release failure is now loud: txOff() verifies the unkey command,
    retries up to 3 times, and raises a modal "YOUR RADIO MAY STILL BE
    TRANSMITTING" alarm if the rig can't be confirmed unkeyed — including
    when the rig-control connection dropped mid-TX (previously the unkey
    was silently skipped). A failed key-up now aborts the transmission
    instead of playing audio into an unkeyed rig.
  • End-of-transmission key click eliminated: one raised-cosine amplitude
    envelope over the whole transmission (ramp-up at start, ramp-down at
    end) — the frame previously ended mid-sine at full amplitude, which
    splattered on adjacent frequencies.
  • rigctld replies are now framed properly: stale bytes from timed-out
    commands are drained before each new command, and reads continue until
    the reply is structurally complete — a stale "RPRT 0" from a frequency
    poll can no longer be mistaken for a successful PTT command.

Stability

  • Fixed a cross-thread use-after-free: moving the TX gain fader in the
    final moments of a transmission could call into a just-deleted audio
    device object. TX gain is now an atomic value owned by AudioEngine.

Logging (ADIF/QSO)

  • ADIF exports use MODE=MFSK / SUBMODE=HAVEN-FSK (and MODE=PSK /
    SUBMODE=PSK31) instead of the invalid MODE=DIGITAL, so LoTW/QRZ/POTA
    uploads are accepted. Legacy DIGITAL rows are mapped at export time.
  • PSK31 contacts are now logged as PSK31, not HAVEN-FSK.

Architecture / infrastructure

  • src/dsp is Qt-free again (ADR-003): new DspLog shim replaces QDebug in
    Frame/MfskModem; DspPipeline (deliberately Qt-facing) moved to
    src/pipeline/.
  • Debug self-tests actually run now — QT_DEBUG was never defined under
    CMake, so every previous "Debug build" silently compiled them out.
  • haven_debug.log is actually written now — the log path was resolved
    before QApplication existed, so the file never opened.
  • FEC matrices built once per Frame instead of per assemble()/parse()
    call; assorted log/comment accuracy fixes.