Mirror a radio from another computer's broadcast data

Listen for Radio broadcast data from another Nonemm or N1MM computer and
record its frequency, mode and split as this computer's own radio. No
radio is controlled. The settings are in the Configure Radios dialog.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-24 05:16:27 +00:00
co-authored by Claude Sonnet 5.5
parent 75fc6c02d2
commit 072c04883e
13 changed files with 333 additions and 11 deletions
+19 -2
View File
@@ -148,6 +148,23 @@ public sealed record Settings
public BroadcastChannel BroadcastLookup { get; init; } = new();
/// Copy the frequency, mode and split of a radio that another computer
/// broadcasts. The data comes one way: this station never sends anything
/// back to it.
public bool MirrorRadioEnabled { get; init; }
/// The UDP port the radio data arrives on.
public int MirrorRadioPort { get; init; } = BroadcastTargets.DefaultPort;
/// Only mirror the computer with this name. Empty follows any computer.
public string MirrorRadioStation { get; init; } = "";
/// The radio number on the computer being mirrored.
public int MirrorRadioSource { get; init; } = 1;
/// The radio on this computer that does the mirroring.
public int MirrorRadioTarget { get; init; } = 1;
public IReadOnlyDictionary<BroadcastKind, BroadcastChannel> BroadcastChannels() =>
new Dictionary<BroadcastKind, BroadcastChannel>
{
@@ -387,7 +404,7 @@ public sealed record Settings
/// afterwards. N1MM's "don't drop call".
public bool DigitalRightClickKeepsCall { get; init; }
/// A grabbed call is followed by a space, which moves to the exchange and
/// A grabbed call is mirrored by a space, which moves to the exchange and
/// fills the report in, the way typing one does.
public bool DigitalGrabSendsSpace { get; init; } = true;
@@ -407,7 +424,7 @@ public sealed record Settings
/// underlines the line being printed to; true scrolls old text off the top.
public bool DigitalScrolling { get; init; } = true;
/// A click on a callsign is followed by a space, so the cursor moves to
/// A click on a callsign is mirrored by a space, so the cursor moves to
/// the exchange the way it does after a grab.
public bool DigitalClickSendsSpace { get; init; }