Skip to content

feat(beacons): position and status beacons (F2.2) - #237

Merged
gx1400 merged 2 commits into
mainfrom
feat/f2.2-beacons
Oct 17, 2026
Merged

gx1400 merged 2 commits into
mainfrom
feat/f2.2-beacons

Conversation

@gx1400

@gx1400 gx1400 commented Oct 17, 2026

Copy link
Copy Markdown
Contributor

Builds F2.2 (closes #196) on APRS.NET's AprsNet.Beacons (0.4.0-alpha.3).

Engine (Beaconer)

  • One APRS.NET schedule per beacon and source: DecayBeaconSchedule or FixedBeaconSchedule.
  • Beacons go out only while Transmit is on, the profile may transmit and has a location, and a position has been sent by hand since what's sent last changed (transmit.position-unconfirmed).
  • A source that can't send now is skipped and tried again; an overdue beacon goes out once, with no catch-up bursts.
  • Spacing: a TNC never gets positions less than 10 minutes apart, hand sends included; beacons on one source are 10 seconds apart; the first beacon waits a random moment, at most 3 minutes.
  • Send position now sends the same report as the beacon (PHG and format included) and counts as that source's beacon.
  • EngineStatus.Transmit gains NextBeacon (when, which, why, on which source) and BeaconHeld.
  • Validation: intervals 10 min to 24 h; status up to 62 printable ASCII characters; PHG values must come back exactly from APRS.NET's encoder, and only with an uncompressed position.

UI

  • Settings › Beacons for the active profile:
    • position beacon: when, interval, Send via, compressed, PHG;
    • status beacon: text, interval, Send via;
    • notes for a profile that only listens, no TX-enabled source, and the hand-send interlock.
  • Status bar: "Transmitting · next beacon in 12 min", with a tooltip saying which beacon, on which source, and why then; "beacons waiting" with the reason.

Two changes from the spec, written into it

  1. The settings are a Settings section rather than a step in the profile editor. They sit beside Sources, whose TX enabled decides what Send via lists, and the editor stays a short wizard.
  2. On a TNC, decay starts at 10 minutes, because the 10-minute floor holds back the shorter steps anyway. The spec's acceptance tests 3 and 4 contradicted each other here. APRS-IS keeps 30 s, 1, 2, 4, 8, 16 min.

Moving (speed and turns) isn't offered until GPS (F3.6).

Also

  • The messaging test AMessageHeardOnTwoSourcesIsShownOnceAndAckedWhereItCameFirst failed about 1 run in 6 under full-suite load: both copies were written at once, so which arrived first was a race. It now waits for the first copy.

Tests

  • 13 engine tests: off by default, the interlock, fixed with Send via, decay on APRS-IS and on a TNC, the 10-minute TNC floor with hand sends, Transmit off then on (one of each, 10 s apart), PHG and compressed encoding, and refused settings.
  • 4 UI tests: the section's defaults and save, a listening or unconfirmed profile, a refused save, and the status bar text and tooltip.
  • Full suite green: Core 339, UI 484, Gateway 110, Tiles 17.

Each profile gets a position beacon (decay after a change, or a fixed
interval; Send via, compressed, PHG) and a status beacon, both off by
default, set in Settings > Beacons. They go out only while every F2.1 layer
allows sending and after a position was sent by hand; a TNC never gets
positions less than 10 minutes apart, beacons on one source are 10 seconds
apart, an overdue one goes out once, and the first waits a random moment. The
status bar shows the next beacon and why.

Also makes a messaging test wait for the first copy before writing the second,
so the ack's source isn't left to a race.
@github-actions

github-actions Bot commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Package report

Vulnerable packages

No known vulnerabilities in direct or transitive packages.

Available package updates

Package Current version Available version Note
Dock.Avalonia 12.1.0.9 12.1.0.12
Dock.Avalonia.Themes.Fluent 12.1.0.9 12.1.0.12
Dock.Model.Mvvm 12.1.0.9 12.1.0.12
Dock.Serializer.SystemTextJson 12.1.0.9 12.1.0.12
xunit.runner.visualstudio 3.1.5 4.0.1 Pinned in AprsMap.UI.Tests (see below)
xunit.v3.mtp-off 3.2.2 4.0.2 Pinned in AprsMap.UI.Tests (see below)

Pinned versions

These projects override the central version in Directory.Packages.props on purpose; updates for them are held back until the reason no longer applies.

Package Pinned version Project Reason
xunit.runner.visualstudio 3.1.5 AprsMap.UI.Tests Avalonia.Headless.XUnit 12.1 is built against xUnit v3 3.x and fails test discovery under 4.x (missing TestIntrospectionHelper overload). Pin this project only until Avalonia supports v4; see dependabot.yml.
xunit.v3.mtp-off 3.2.2 AprsMap.UI.Tests Avalonia.Headless.XUnit 12.1 is built against xUnit v3 3.x and fails test discovery under 4.x (missing TestIntrospectionHelper overload). Pin this project only until Avalonia supports v4; see dependabot.yml.

Checked at 357c701 against nuget.org.

@gx1400
gx1400 merged commit 8e74f56 into main Oct 17, 2026
11 checks passed
@gx1400
gx1400 deleted the feat/f2.2-beacons branch October 17, 2026 20:43
gx1400 added a commit that referenced this pull request Oct 20, 2026
release-please listed each merged PR twice: its commit, and the merge
commit whose body is the PR title. The merge commits' lines go; the two
merges whose own commits aren't listed (#34, #237) keep theirs.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

F2.2 Position and status beacons: fixed, decaying and SmartBeaconing-style

1 participant