Skip to content

feat(rf): a KISS TNC can digipeat, as a fill-in or wide-area digipeater (F3.5) - #390

Merged
gx1400 merged 1 commit into
feat/f1.33-station-listsfrom
feat/f3.5-digipeater
Oct 26, 2026
Merged

gx1400 merged 1 commit into
feat/f1.33-station-listsfrom
feat/f3.5-digipeater

Conversation

@gx1400

@gx1400 gx1400 commented Oct 26, 2026

Copy link
Copy Markdown
Contributor

Closes #209. Stacked on #389 (APRS.NET 0.7.0-alpha.1). Spec written first; the decisions are proposed.

What it does

  • Each KISS TNC (TCP or serial) gets a Digipeat setting in Settings › Sources: Off (the default), Fill-in (WIDE1-1, the station's call and aliases) or Wide-area (WIDEn-N too, up to 2 hops; longer requests are repeated once and trapped). Optional aliases go beside it. The form notes that wide-area needs the local network's agreement.
  • The rules are APRS.NET's Digipeater (G15): no own frames, no duplicates within 30 s, no frames with no hops left, preemptive off. It repeats on the port it heard on, using the active profile's call (with its SSID), marked used. Frames go out with KissConnection.SendFrameAsync, so the path's repeated bits are exact.
  • Only while the station may transmit there: the same CanSendOn gate as every other RF send. That means the Transmit switch, a licensed profile with a verified passcode, the source in the profile, and not receive-only. Nothing from APRS-IS is digipeated.
  • What was repeated shows:
    • PacketMarkers.DigipeatedHere, with a new marker in the packet list (two arrows passing);
    • SourceStatus.Digipeated, shown in the Dashboard's Connection tile as "· 12 digipeated";
    • aprsmap.digipeated for OTLP, listed in the README;
    • debug lines in the transmit log, with the reason for each refusal.
  • Validation: an alias must be an AX.25 call (settings.source.digipeat-alias-invalid).

Decisions for review:

  1. Off by default, set per source.
  2. Two levels, with the 2-hop limit and no preemptive digipeating.
  3. Others' emergencies are relayed like any packet. The never-send-emergency rule is about this station's own beacons, and a digipeater that dropped someone's emergency would defeat its purpose. Say if you'd rather it didn't.
  4. The count runs since the app started; a Dashboard tile over the range can follow.

Tests (nothing reached a radio):

  • DigipeaterTests (5), against a fake TNC that takes raw frames:
    • fill-in repeats WIDE1-1 but not WIDE2-2;
    • wide-area repeats WIDE2-2 as N0TEST*,WIDE2-1 and traps WIDE3-3;
    • nothing goes out with Transmit off, for the station's own frames, or for duplicates;
    • the marker and the count;
    • a bad alias is refused.
  • DigipeaterUiTests (2): the form saves the choice and aliases; the marker and the Dashboard count.
  • Manual, local Dire Wolf with null audio: a frame the digipeater produced was sent into Dire Wolf's KISS port. Dire Wolf transmitted it into null audio as N0CAR-9>APRS,N0TEST*,WIDE2-1, so the encoding is right end to end. Dire Wolf was stopped afterwards.

@gx1400
gx1400 force-pushed the feat/f3.5-digipeater branch from bfecfb0 to 65d3a51 Compare October 26, 2026 05:27
Base automatically changed from fix/aprsnet-0.7.0-alpha.1 to feat/f1.33-station-lists October 26, 2026 10:17
@gx1400
gx1400 added this pull request to stack #395 October 26, 2026 10:17
@gx1400
gx1400 force-pushed the feat/f3.5-digipeater branch from 65d3a51 to 0e0ae67 Compare October 26, 2026 10:18
…er (F3.5)

Each KISS TNC gets a Digipeat setting, Off by default: Fill-in repeats
WIDE1-1, the station's call and its aliases; Wide-area repeats WIDEn-N
too, up to 2 hops, trapping longer requests. The rules are APRS.NET's
digipeater, it repeats on the port it heard on with the profile's call,
and only while the station may transmit there. Repeated packets are
marked Digipeated here, the dashboard counts them per source, and
aprsmap.digipeated counts them for OTLP.
@gx1400
gx1400 force-pushed the feat/f3.5-digipeater branch from 0e0ae67 to 9b1cb48 Compare October 26, 2026 12:43
@gx1400
gx1400 merged commit 36c3159 into main Oct 26, 2026
11 checks passed
@gx1400
gx1400 deleted the feat/f3.5-digipeater branch October 26, 2026 13:05
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.

F3.5 Digipeater: WIDEn-N, fill-in and own-call

1 participant