Packet.Kiss
0.21.0
See the version list below for details.
dotnet add package Packet.Kiss --version 0.21.0
NuGet\Install-Package Packet.Kiss -Version 0.21.0
<PackageReference Include="Packet.Kiss" Version="0.21.0" />
<PackageVersion Include="Packet.Kiss" Version="0.21.0" />
<PackageReference Include="Packet.Kiss" />
paket add Packet.Kiss --version 0.21.0
#r "nuget: Packet.Kiss, 0.21.0"
#:package Packet.Kiss@0.21.0
#addin nuget:?package=Packet.Kiss&version=0.21.0
#tool nuget:?package=Packet.Kiss&version=0.21.0
Packet.Kiss
KISS framing, ACKMODE, multi-drop ports, and a TCP transport for AX.25.
Encodes and decodes KISS frames (the SLIP-style framing that TNCs and software modems speak), handles the G8BPQ ACKMODE extension and multi-drop port nibble, and ships KissTcpClient for talking KISS-over-TCP to a TNC or node. Decoded KISS-Data payloads surface as typed Ax25Frame events. Part of Packet.NET, a .NET amateur-radio / AX.25 packet stack.
Install
dotnet add package Packet.Kiss
Quick start
Encode an AX.25 frame to KISS wire bytes, and decode wire bytes back into frames:
using Packet.Kiss;
// Encode: FEND | (port<<4)|cmd | escaped-payload | FEND
byte[] wire = KissEncoder.Encode(port: 0, KissCommand.Data, ax25Bytes);
// Decode is stateful — push bytes as they arrive off the wire, pull frames out.
var decoder = new KissDecoder();
foreach (KissFrame frame in decoder.Push(wire))
{
if (frame.Command == KissCommand.Data)
{
// frame.Payload is the AX.25 frame body (the TNC strips/inserts the FCS).
}
}
Classify an inbound frame into a typed event (Data → AX.25, ACKMODE-Data, or Unknown):
KissInboundEvent evt = KissFrameClassifier.Classify(frame);
if (evt is Ax25FrameReceivedEvent ax25)
{
// ax25.Ax25 is a parsed Packet.Ax25.Ax25Frame
}
Talk KISS over TCP to a TNC or node (e.g. a LinBPQ KISS-over-TCP listener):
await using var client = await KissTcpClient.ConnectAsync("127.0.0.1", 8001);
// Fire-and-forget a KISS-Data frame on port 0.
await client.SendFrameAsync(ax25Bytes);
// Or send in ACKMODE and await the TNC's TX-completion echo (timing included).
TxCompletion done = await client.SendAwaitingCompletionAsync(ax25Bytes);
// Stream inbound frames until the link closes.
await foreach (KissFrame frame in client.ReadFramesAsync())
{
// ...
}
Key types
KissEncoder/KissDecoder— encode AX.25 bytes to KISS wire bytes; statefully decode an incoming byte stream intoKissFrames.KissFrame— one decoded frame:Port,Command, and rawPayload.KissCommand— KISS command codes (Data,TxDelay,Persistence,SetHardware,AckMode, …).KissFraming— the FEND/FESC/TFEND/TFESC framing constants plus the exit-KISS byte.KissTcpClient— KISS-over-TCP client implementingIAx25Transport; handles framing both directions, ACKMODE TX-completion, CSMA params, and half-open-link idle detection.KissFrameClassifier/KissInboundEvent— map a raw frame to a typed inbound event (Ax25FrameReceivedEvent,AckModeDataReceivedEvent,UnknownInboundEvent).KissAckMode— build/parse the G8BPQ ACKMODE extension (command 0x0C) with its 2-byte sequence tag.KissAx25Bridge— wire a KISS transport to aPacket.Ax25connected-mode session adapter.
See also
- Source & issues
Packet.Ax25— the AX.25 frames + connected-mode sessions KISS carries.Packet.Kiss.NinoTnc— NinoTNC-specific KISS extensions (ACKMODE, SETHW, frame classification).Packet.Kiss.Serial— generic serial-port KISS modem.
MIT-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 (>= 0.21.0)
- Packet.Ax25.Sdl (>= 0.10.0)
- Packet.Ax25.Transport.Abstractions (>= 0.21.0)
NuGet packages (4)
Showing the top 4 NuGet packages that depend on Packet.Kiss:
| Package | Downloads |
|---|---|
|
Packet.Kiss.Serial
Generic serial-port KISS modem implementing IAx25Transport for the Packet.NET stack. Opens a USB-CDC or hardware serial port, speaks KISS framing in both directions, and surfaces inbound frames as an async stream. Pair with Packet.Kiss.NinoTnc for NinoTNC-specific extensions (ACKMODE, SetMode, frame classification). Source: github.com/packet-net/packet.net. |
|
|
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. |
|
|
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 (Packet.Radio.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↔radio stack. 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 | 48 | 7/20/2026 |
| 0.23.0 | 130 | 7/14/2026 |
| 0.22.0 | 131 | 7/14/2026 |
| 0.21.0 | 141 | 7/9/2026 |
| 0.20.0 | 136 | 7/5/2026 |
| 0.19.0 | 137 | 7/5/2026 |
| 0.18.0 | 142 | 7/5/2026 |
| 0.17.0 | 129 | 6/23/2026 |
| 0.16.0 | 135 | 6/23/2026 |
| 0.15.0 | 122 | 6/23/2026 |
| 0.14.0 | 124 | 6/22/2026 |
| 0.13.0 | 125 | 6/22/2026 |
| 0.12.0 | 128 | 6/21/2026 |
| 0.11.0 | 133 | 6/18/2026 |
| 0.10.0 | 124 | 6/17/2026 |
| 0.9.0 | 231 | 6/17/2026 |
| 0.8.0 | 129 | 6/12/2026 |
| 0.7.0 | 123 | 6/10/2026 |
| 0.6.1 | 127 | 6/7/2026 |
| 0.6.0 | 130 | 6/5/2026 |