Packet.Ax25.Radio
0.36.0
dotnet add package Packet.Ax25.Radio --version 0.36.0
NuGet\Install-Package Packet.Ax25.Radio -Version 0.36.0
<PackageReference Include="Packet.Ax25.Radio" Version="0.36.0" />
<PackageVersion Include="Packet.Ax25.Radio" Version="0.36.0" />
<PackageReference Include="Packet.Ax25.Radio" />
paket add Packet.Ax25.Radio --version 0.36.0
#r "nuget: Packet.Ax25.Radio, 0.36.0"
#:package Packet.Ax25.Radio@0.36.0
#addin nuget:?package=Packet.Ax25.Radio&version=0.36.0
#tool nuget:?package=Packet.Ax25.Radio&version=0.36.0
Packet.Ax25.Radio
What a radio's control channel is worth to an AX.25 link: per-frame signal metadata, and real RF carrier-sense feeding the CSMA gate.
M0LTE.Rig models the control channel to a radio (RSSI, hardware DCD, PTT) without knowing anything about packet. This package is the adapter layer that brings it into the AX.25 stack.
Install
dotnet add package Packet.Ax25.Radio
Types
RssiTaggingTransport- anIAx25Transportdecorator. A background sampler polls RSSI (fast while the channel is busy, slow while idle so the idle samples track the noise floor) and re-yields every inbound frame withAx25InboundFrame.Radiopopulated: RSSI median/min/max/sample-count, SNR, noise floor, carrier-rise instant, burst index (an AX.25 frame train shares one carrier), airtime estimate, and, for the first frame of a burst, the measured pre-data carrier time, which is the sender's effective TXDELAY and an excess-TXDELAY detector input. A frame with no qualifying sample getsnullmetadata, never a guess.RadioCarrierSense- CSMA by hardware DCD, done natively by the stack. It bridges the radio'sChannelBusyonto the neutralICarrierSenseseam thatAx25Listenerconsults before every keyup, viaAx25ListenerOptions.CarrierSense. The listener's ownCarrierSenseGateholds the keyup while the channel is busy (bounded wait, fail-open), so the medium-access deferral lives in the stack rather than an opaque transport wrapper, and composes with the TNC's own persistence CSMA.
Hardware DCD typically calls the channel busy 0.5-1 s before the modem finishes demodulating the frame, which is exactly the head start a CSMA gate wants.
Usage
using M0LTE.Tait.Ccdi;
using Packet.Ax25.Radio;
await using var radio = TaitCcdiRadio.Open("/dev/ttyUSB0");
await radio.SetProgressMessagesAsync(true); // turn on DCD events
await using var tnc = NinoTncSerialPort.Open("/dev/ttyACM1"); // from Packet.Kiss.NinoTnc
await using var tagged = new RssiTaggingTransport(tnc, radio);
var listener = new Ax25Listener(tagged, new Ax25ListenerOptions
{
CarrierSense = new RadioCarrierSense(radio),
});
await foreach (var frame in tagged.ReceiveAsync(ct))
{
// frame.Radio?.RssiDbm / frame.Radio?.SnrDb now populated
}
With carrier-sense, frames are attributed to the transmission window containing their arrival. Without it, RssiTaggingTransport falls back to a threshold-over-noise-floor filter and the window-derived fields (carrier-rise, burst index, pre-data carrier) stay null. NoiseFloorDbm exposes the live idle-sample estimate.
Both types leave ownership of the inner transport and the radio with the caller; disposing the decorator only stops its sampler.
See also
M0LTE.Rig- the radio-control contract this adaptsPacket.Ax25.Radio.Tait- AX.25 over a Tait's own FFSK modem, no TNC at all- Source & issues
AGPL-3.0-licensed. Part of the Packet.NET stack.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- M0LTE.Rig (>= 0.2.1)
- Packet.Ax25.Transport.Abstractions (>= 0.36.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Packet.Ax25.Radio:
| Package | Downloads |
|---|---|
|
Packet.Tune.Core
Coordination primitives for tuning a NinoTNC + radio pair with the two ends apart: the tuning-telegram protocol (ITuningLink), an SDM flavour riding the radio's own side channel (M0LTE.Rig.IRadioSideChannel; Tait CCDI short data messages: radio-native FFSK, independent of the TNC mode/pot under tune), a WebSocket flavour with a PIN-rendezvous relay, the shared meter/tuned assistant loop, a mode-coordination protocol (propose/confirm/commit a TNC mode + radio channel switch, probe-verify, revert-to-home on failure), and a capability doctor for the whole TNC-to-radio stack. Source: github.com/packet-net/packet.net. |
GitHub repositories
This package is not used by any popular GitHub repositories.