Packet.Kiss.Serial
0.24.0
dotnet add package Packet.Kiss.Serial --version 0.24.0
NuGet\Install-Package Packet.Kiss.Serial -Version 0.24.0
<PackageReference Include="Packet.Kiss.Serial" Version="0.24.0" />
<PackageVersion Include="Packet.Kiss.Serial" Version="0.24.0" />
<PackageReference Include="Packet.Kiss.Serial" />
paket add Packet.Kiss.Serial --version 0.24.0
#r "nuget: Packet.Kiss.Serial, 0.24.0"
#:package Packet.Kiss.Serial@0.24.0
#addin nuget:?package=Packet.Kiss.Serial&version=0.24.0
#tool nuget:?package=Packet.Kiss.Serial&version=0.24.0
Packet.Kiss.Serial
Generic serial-port KISS modem for any TNC that speaks standard KISS over USB-CDC or a hardware UART.
KissSerialModem opens a serial port, runs a background read pump, and surfaces inbound KISS frames as an async stream — implementing the neutral IAx25Transport seam so the rest of the stack can move AX.25 frames without caring that the wire is a serial KISS TNC. Part of Packet.NET, a .NET amateur-radio / AX.25 packet stack.
Install
dotnet add package Packet.Kiss.Serial
Quick start
using Packet.Ax25.Transport;
using Packet.Kiss;
using Packet.Kiss.Serial;
// Open the port and start the background read pump (defaults to 57600 baud).
await using var modem = KissSerialModem.Open("/dev/ttyACM0");
// Apply CSMA channel-access parameters (KISS TXDELAY / PERSIST / SLOTTIME).
await modem.SetTxDelayAsync(30); // 300 ms keyup delay (units of 10 ms)
await modem.SetPersistenceAsync(63);
await modem.SetSlotTimeAsync(10); // 100 ms slot
// Send an AX.25 frame body. It's KISS-encoded (escaped + FEND-framed) as a Data frame.
await modem.SendFrameAsync(ax25FrameBytes);
// Pull every inbound KISS frame until the modem is disposed.
await foreach (KissFrame frame in modem.ReadFramesAsync())
{
if (frame.Command == KissCommand.Data)
Console.WriteLine($"RX {frame.Payload.Length} bytes on port {frame.Port}");
}
Because KissSerialModem implements IAx25Transport, you can also hand it to anything that takes a transport and consume only AX.25 Data frames (non-Data KISS commands are filtered out, and each frame is stamped with a receive time):
IAx25Transport transport = modem;
await transport.SendAsync(ax25FrameBytes);
await foreach (Ax25InboundFrame inbound in transport.ReceiveAsync())
Console.WriteLine($"AX.25 frame at {inbound.ReceivedAt}");
Plain serial KISS has no TX-completion signal, so this transport deliberately does not implement ITxCompletionTransport — sends are fire-and-forget. For NinoTNC-specific features (ACKMODE TX-completion correlation, SETHW mode switching, TX-Test frame classification) use Packet.Kiss.NinoTnc instead.
Key types
KissSerialModem— the serial KISS transport;Open(portName, baudRate, timeProvider)opens the port and starts the read pump. ImplementsIAx25Transport,ICsmaChannelParams,IAsyncDisposable.KissSerialModem.ReadFramesAsync/FrameReceived— pull (async stream) or push (event) access to inbound KISS frames.KissSerialModem.SendFrameAsync/SendKissAsync— send an AX.25 body as a KISS Data frame, or an arbitrary KISS command.KissSerialModem.SetTxDelayAsync/SetPersistenceAsync/SetSlotTimeAsync/SetTxTailAsync/SetFullDuplexAsync— the KISS CSMA channel-access parameters.
See also
- Source & issues
- Packet.Kiss — the KISS framing codec (encoder/decoder,
KissFrame,KissCommand) this builds on. - Packet.Kiss.NinoTnc — NinoTNC-specific extensions (ACKMODE, SETHW, frame classification).
- Packet.Ax25.Transport.Abstractions — the
IAx25Transportseam this implements.
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
- Packet.Ax25.Sdl (>= 0.10.0)
- Packet.Kiss (>= 0.24.0)
- System.IO.Ports (>= 10.0.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Packet.Kiss.Serial:
| Package | Downloads |
|---|---|
|
Packet.Kiss.NinoTnc
NinoTNC-specific KISS extensions for the Packet.NET stack — ACKMODE TX-completion correlation, SETHW mode switching, TX-Test frame classification, USB port discovery. Built on Packet.Kiss.Serial for generic serial-port plumbing. 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 | 45 | 7/20/2026 |
| 0.23.0 | 104 | 7/14/2026 |
| 0.22.0 | 112 | 7/14/2026 |
| 0.21.0 | 114 | 7/9/2026 |
| 0.20.0 | 108 | 7/5/2026 |
| 0.19.0 | 114 | 7/5/2026 |
| 0.18.0 | 113 | 7/5/2026 |
| 0.17.0 | 119 | 6/23/2026 |
| 0.16.0 | 122 | 6/23/2026 |
| 0.15.0 | 115 | 6/23/2026 |
| 0.14.0 | 113 | 6/22/2026 |
| 0.13.0 | 116 | 6/22/2026 |
| 0.12.0 | 121 | 6/21/2026 |
| 0.11.0 | 130 | 6/18/2026 |
| 0.10.0 | 112 | 6/17/2026 |
| 0.9.0 | 224 | 6/17/2026 |
| 0.8.0 | 122 | 6/12/2026 |
| 0.7.0 | 98 | 6/10/2026 |
| 0.6.1 | 117 | 6/7/2026 |
| 0.6.0 | 123 | 6/5/2026 |