Packet.Kiss.Serial
0.28.0
See the version list below for details.
dotnet add package Packet.Kiss.Serial --version 0.28.0
NuGet\Install-Package Packet.Kiss.Serial -Version 0.28.0
<PackageReference Include="Packet.Kiss.Serial" Version="0.28.0" />
<PackageVersion Include="Packet.Kiss.Serial" Version="0.28.0" />
<PackageReference Include="Packet.Kiss.Serial" />
paket add Packet.Kiss.Serial --version 0.28.0
#r "nuget: Packet.Kiss.Serial, 0.28.0"
#:package Packet.Kiss.Serial@0.28.0
#addin nuget:?package=Packet.Kiss.Serial&version=0.28.0
#tool nuget:?package=Packet.Kiss.Serial&version=0.28.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
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.11)
- Packet.Ax25.Sdl (>= 0.10.2)
- Packet.Kiss (>= 0.28.0)
- System.IO.Ports (>= 10.0.11)
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.37.0 | 0 | 9/10/2026 |
| 0.36.0 | 98 | 9/7/2026 |
| 0.35.0 | 111 | 9/6/2026 |
| 0.34.0 | 108 | 9/5/2026 |
| 0.33.0 | 101 | 9/3/2026 |
| 0.32.0 | 98 | 9/3/2026 |
| 0.31.0 | 103 | 9/2/2026 |
| 0.30.0 | 117 | 8/23/2026 |
| 0.29.0 | 122 | 8/22/2026 |
| 0.28.0 | 117 | 8/22/2026 |
| 0.27.0 | 129 | 8/17/2026 |
| 0.26.0 | 132 | 8/17/2026 |
| 0.25.0 | 128 | 8/3/2026 |
| 0.24.0 | 132 | 7/20/2026 |
| 0.23.0 | 131 | 7/14/2026 |
| 0.22.0 | 133 | 7/14/2026 |
| 0.21.0 | 129 | 7/9/2026 |
| 0.20.0 | 129 | 7/5/2026 |
| 0.19.0 | 131 | 7/5/2026 |
| 0.18.0 | 133 | 7/5/2026 |