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
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Packet.Ax25.Radio" Version="0.36.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Packet.Ax25.Radio" Version="0.36.0" />
                    
Directory.Packages.props
<PackageReference Include="Packet.Ax25.Radio" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Packet.Ax25.Radio --version 0.36.0
                    
#r "nuget: Packet.Ax25.Radio, 0.36.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Packet.Ax25.Radio@0.36.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Packet.Ax25.Radio&version=0.36.0
                    
Install as a Cake Addin
#tool nuget:?package=Packet.Ax25.Radio&version=0.36.0
                    
Install as a Cake Tool

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 - an IAx25Transport decorator. 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 with Ax25InboundFrame.Radio populated: 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 gets null metadata, never a guess.
  • RadioCarrierSense - CSMA by hardware DCD, done natively by the stack. It bridges the radio's ChannelBusy onto the neutral ICarrierSense seam that Ax25Listener consults before every keyup, via Ax25ListenerOptions.CarrierSense. The listener's own CarrierSenseGate holds 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


AGPL-3.0-licensed. Part of the Packet.NET stack.

Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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.

Version Downloads Last Updated
0.36.0 63 9/7/2026
0.35.0 72 9/6/2026
0.34.0 74 9/5/2026