Packet.Ax25.Transport.Abstractions 0.24.0

dotnet add package Packet.Ax25.Transport.Abstractions --version 0.24.0
                    
NuGet\Install-Package Packet.Ax25.Transport.Abstractions -Version 0.24.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.Transport.Abstractions" Version="0.24.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Packet.Ax25.Transport.Abstractions" Version="0.24.0" />
                    
Directory.Packages.props
<PackageReference Include="Packet.Ax25.Transport.Abstractions" />
                    
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.Transport.Abstractions --version 0.24.0
                    
#r "nuget: Packet.Ax25.Transport.Abstractions, 0.24.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.Transport.Abstractions@0.24.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.Transport.Abstractions&version=0.24.0
                    
Install as a Cake Addin
#tool nuget:?package=Packet.Ax25.Transport.Abstractions&version=0.24.0
                    
Install as a Cake Tool

Packet.Ax25.Transport.Abstractions

The dependency-free seam between the AX.25 data-link layer and whatever moves frames on/off a channel.

This package defines the contract a transport implements to carry AX.25 frame bodies (no FCS, no link-framing) — a KISS TNC, an AXUDP socket, a future AGW or native-socket transport. The currency is AX.25 frame bytes, never a wire protocol: KISS is one implementation behind this contract, never a property of it. Take a dependency on this when you only need to move frames, not on a concrete transport. Part of Packet.NET, a .NET amateur-radio / AX.25 packet stack.

Install

dotnet add package Packet.Ax25.Transport.Abstractions

Quick start

The core surface is two methods: send a frame, and read the stream of inbound frames. Two further capabilities are optional — a transport implements them only when its medium can genuinely support them, and consumers feature-detect with is.

using Packet.Ax25.Transport;

async Task PumpAsync(IAx25Transport transport, ReadOnlyMemory<byte> ax25FrameBody, CancellationToken ct)
{
    // Send one AX.25 frame body (no FCS, no KISS framing — the transport adds what its medium needs).
    await transport.SendAsync(ax25FrameBody, ct);

    // Optional capability: confirm a frame actually left the wire (G8BPQ ACKMODE, de-KISS-named).
    // Absent on AXUDP / plain serial KISS — feature-detect, then fall back to SendAsync.
    if (transport is ITxCompletionTransport txc)
    {
        TxCompletion tx = await txc.SendAwaitingCompletionAsync(ax25FrameBody, cancellationToken: ct);
        Console.WriteLine($"on the air in {tx.Elapsed.TotalMilliseconds:F0} ms");
    }

    // Optional capability: CSMA channel-access knobs (KISS TXDELAY/PERSIST/SLOTTIME/TXTAIL).
    // Only meaningful on a shared half-duplex radio channel.
    if (transport is ICsmaChannelParams csma)
        await csma.SetPersistenceAsync(63, ct);

    // Read inbound frames until disposal or cancellation. The transport pre-filters to genuine
    // AX.25 frames, so you never see the wire protocol. Default impl is an empty stream.
    await foreach (Ax25InboundFrame frame in transport.ReceiveAsync(ct))
    {
        // frame.Ax25 is the FCS-stripped frame body, ready for Ax25Frame.TryParse (Packet.Ax25).
        Console.WriteLine($"rx {frame.Ax25.Length} bytes on port {frame.PortId} at {frame.ReceivedAt:O}");
    }
}

Because the package carries ReadOnlyMemory<byte> rather than a parsed Ax25Frame, it has zero ProjectReferences and cannot create an AX.25-to-transport dependency cycle: Packet.Ax25 depends on this, and transports depend on this (plus Packet.Ax25 only where they parse).

Key types

  • IAx25Transport — the core contract: SendAsync a frame body, ReceiveAsync the inbound stream. The minimal surface a listener needs.
  • Ax25InboundFrame — one inbound frame: the FCS-stripped Ax25 body plus PortId, ReceivedAt, and optional Radio metadata.
  • RadioMetadata — optional per-frame signal data (RssiDbm, SnrDb); grows additively as radio-control channels surface more.
  • ITxCompletionTransport — optional capability: SendAwaitingCompletionAsync confirms a frame left the wire and times it (for T1 re-arm, pacing, latency).
  • TxCompletion — the timing of a confirmed transmit (Queued, Completed, Elapsed).
  • ICsmaChannelParams — optional capability: set the CSMA channel-access knobs (TXDELAY / PERSIST / SLOTTIME / TXTAIL) of a shared half-duplex radio.

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.
  • net10.0

    • No dependencies.

NuGet packages (4)

Showing the top 4 NuGet packages that depend on Packet.Ax25.Transport.Abstractions:

Package Downloads
Packet.Ax25

AX.25 v2.2 protocol library: frame codec for U/S/I frames with mod-8 sequence numbers, SDL-driven connected-mode session machine, Ax25Listener for inbound session acceptance with per-peer caching, AcceptIncoming toggle, and frame-traced event hooks. Walks the AX.25 SDL transitions from Packet.Ax25.Sdl. Source: github.com/packet-net/packet.net.

Packet.Kiss

KISS (Keep It Simple, Stupid) framing encoder/decoder, ACKMODE handling, multi-drop port support, and TCP transport. Decodes KISS-Data payloads into typed Ax25Frame events. Pair with Packet.Ax25 for connected-mode sessions. Source: github.com/packet-net/packet.net.

Packet.Radio

Radio-control abstraction (IRadioControl: RSSI, carrier-sense/DCD, PTT; IRadioSideChannel: radio-native small-datagram control plane) plus the RssiTaggingTransport decorator that stamps per-frame RSSI/SNR metadata onto any IAx25Transport, and the RigRadioControl bridge that surfaces a CAT rig (Packet.Rig: hamlib rigctld, flrig) through the same seam. Radio-specific implementations (e.g. Packet.Radio.Tait) plug in underneath. Source: github.com/packet-net/packet.net.

Packet.Radio.Tait

Tait TM8100/TM8200 CCDI serial control for the Packet.NET stack — per-frame RSSI in dBm, hardware carrier-sense (DCD) events, transmitter keying, and radio telemetry (PA temperature, forward/reverse power), implementing the Packet.Radio IRadioControl abstraction (packet-medium seam) and, via TaitRigControl, the Packet.Rig IRigControl station-control seam (PTT + relative RF-power meter). Source: github.com/packet-net/packet.net.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.24.0 56 7/20/2026
0.23.0 178 7/14/2026
0.22.0 189 7/14/2026
0.21.0 188 7/9/2026
0.20.0 182 7/5/2026
0.19.0 184 7/5/2026
0.18.0 183 7/5/2026
0.17.0 170 6/23/2026
0.16.0 169 6/23/2026
0.15.0 160 6/23/2026
0.14.0 152 6/22/2026
0.13.0 144 6/22/2026
0.12.0 144 6/21/2026