Packet.Ax25.Radio.Tait
0.36.0
dotnet add package Packet.Ax25.Radio.Tait --version 0.36.0
NuGet\Install-Package Packet.Ax25.Radio.Tait -Version 0.36.0
<PackageReference Include="Packet.Ax25.Radio.Tait" Version="0.36.0" />
<PackageVersion Include="Packet.Ax25.Radio.Tait" Version="0.36.0" />
<PackageReference Include="Packet.Ax25.Radio.Tait" />
paket add Packet.Ax25.Radio.Tait --version 0.36.0
#r "nuget: Packet.Ax25.Radio.Tait, 0.36.0"
#:package Packet.Ax25.Radio.Tait@0.36.0
#addin nuget:?package=Packet.Ax25.Radio.Tait&version=0.36.0
#tool nuget:?package=Packet.Ax25.Radio.Tait&version=0.36.0
Packet.Ax25.Radio.Tait
AX.25 over a Tait TM8100/TM8200's own FFSK modem. One device, no TNC, no audio wiring.
TaitTransparentTransport is an IAx25Transport whose modem is the radio. It puts the radio into Transparent mode (its internal FFSK modem as an 8-bit-clean byte pipe), frames AX.25 with KISS SLIP framing over that pipe, and de-frames the inbound byte stream back into whole AX.25 frames. The radio fragments and reassembles the over-air blocks itself.
Install
dotnet add package Packet.Ax25.Radio.Tait
Usage
using Packet.Ax25.Radio.Tait;
await using var link = await TaitTransparentTransport.OpenAsync("/dev/ttyUSB0");
await link.SendAsync(ax25FrameBody); // SLIP-framed over the FFSK pipe
await foreach (var f in link.ReceiveAsync(ct)) // whole frames, ReceivedAt + airtime stamped
{
Handle(f.Ax25, f.ReceivedAt, f.Radio?.EstimatedAirtime);
}
// DisposeAsync escapes Transparent (+++) and restores Command mode.
Because the transport owns the transmission it times it directly: a TxTiming event and ITxCompletionTransport give per-frame on-air start and end, and inbound frames carry ReceivedAt plus RadioMetadata.EstimatedAirtime.
The trade-off against a separate modem
One device and no audio wiring, but no signal telemetry. While the CCDI channel is acting as a byte pipe, RSSI, SNR, noise floor and DCD are unavailable, so those RadioMetadata fields stay null and only airtime is known. If you want per-frame signal metadata, use a separate modem with Packet.Ax25.Radio's RssiTaggingTransport over the CCDI control channel instead.
Before running this unattended, check the radio is not programmed with "Ignore Escape Sequence" on. If it is, the +++ exit cannot succeed and recovery is a power cycle.
See also
M0LTE.Tait.Ccdi- the CCDI driver underneath, which also gives you RSSI, DCD, telemetry and SDMPacket.Ax25.Radio- the separate-modem arrangement, with full signal metadata- 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)
- M0LTE.Tait.Ccdi (>= 0.2.0)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.11)
- Packet.Ax25.Sdl (>= 0.10.2)
- Packet.Ax25.Transport.Abstractions (>= 0.36.0)
- Packet.Kiss (>= 0.36.0)
- System.IO.Ports (>= 10.0.11)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Packet.Ax25.Radio.Tait:
| 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.