Packet.Aprs
0.40.0
dotnet add package Packet.Aprs --version 0.40.0
NuGet\Install-Package Packet.Aprs -Version 0.40.0
<PackageReference Include="Packet.Aprs" Version="0.40.0" />
<PackageVersion Include="Packet.Aprs" Version="0.40.0" />
<PackageReference Include="Packet.Aprs" />
paket add Packet.Aprs --version 0.40.0
#r "nuget: Packet.Aprs, 0.40.0"
#:package Packet.Aprs@0.40.0
#addin nuget:?package=Packet.Aprs&version=0.40.0
#tool nuget:?package=Packet.Aprs&version=0.40.0
Packet.Aprs
Decode-focused APRS payload codec - position, Mic-E, message, object, item, status, telemetry.
Parses Automatic Packet Reporting System (APRS) information-field payloads per the APRS spec, with named strict-vs-pragmatic parse options for the quirks seen on the live APRS-IS firehose. Part of Packet.NET, a .NET amateur-radio / AX.25 packet stack - this package sits above Packet.Ax25 and decodes the bytes carried inside an AX.25 UI frame's info field.
Install
dotnet add package Packet.Aprs
Quick start
Each report type has a static TryDecode that takes the info-field bytes (with or without the leading data-type identifier) and yields a readonly record struct:
using Packet.Aprs;
// An uncompressed position report's info field (DTI '!' kept; it's stripped for you).
ReadOnlySpan<byte> info = "!4725.22N/00810.83E_WX-station"u8;
if (AprsPositionDecoder.TryDecode(info, out AprsPosition pos))
{
Console.WriteLine($"{pos.Latitude:F5}, {pos.Longitude:F5}"); // 47.42033, 8.18050
Console.WriteLine($"symbol {pos.SymbolTable}{pos.SymbolCode}, {pos.Format}");
Console.WriteLine(pos.Comment); // WX-station
}
The decoder is strict on the fixed-position fields (digit ranges, hemisphere indicators, base-91 range) and returns false for any structural defect rather than throwing. For the payload types where real-world senders diverge from the spec (status text, telemetry, legacy Mic-E DTIs), pass an AprsParseOptions preset:
// Reject anything the spec forbids:
AprsTelemetryDecoder.TryDecode(info, AprsParseOptions.Strict, out var telemetry);
// Accept the firehose's quirks (this is also the parameterless default):
AprsStatusDecoder.TryDecode(info, AprsParseOptions.Lenient, out var status);
Mic-E is the exception: it splits data across the AX.25 destination address and the info field, so its decoder also needs the 6-character destination base:
AprsMicEDecoder.TryDecode("Q0PDN0", info, out AprsMicE micE);
Key types
AprsPositionDecoder- uncompressed (DDMM.mmN) and base-91 compressed position reports;TryDecodestrips DTI + timestamp,TryDecodePayloadfor embedded position payloads.AprsMicEDecoder/AprsMicE- Mic-E reports, decoded from the destination base + info field (MicEMessageTypecarries the standard/custom/emergency bits).AprsMessageDecoder/AprsMessage- text messages (DTI:) with addressee and optional message ID.AprsObjectDecoder/AprsItemDecoder- object (DTI;) and item (DTI)) reports, with an embedded position.AprsStatusDecoder/AprsTelemetryDecoder- status text (DTI>) and telemetry (DTIT) reports.AprsParseOptions- strict-vs-pragmatic parse knobs withStrict/Lenient/Direwolf/AprsIspresets; each accommodation is a named, individually-toggleable flag.AprsCallsign- permissive monitor-layer callsign that round-trips APRS-IS spellings (letter SSIDs, lowercase, long bases) that strictPacket.Core.Callsignrejects, with coercion helpers.
See also
- Source & issues
- Packet.Ax25 - the AX.25 frames whose info field carries these payloads
- Packet.Core - shared primitives including the strict
Callsign
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.Core (>= 0.40.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.40.0 | 88 | 9/16/2026 |
| 0.39.0 | 91 | 9/15/2026 |
| 0.38.0 | 88 | 9/15/2026 |
| 0.37.0 | 101 | 9/10/2026 |
| 0.36.0 | 89 | 9/7/2026 |
| 0.35.0 | 99 | 9/6/2026 |
| 0.34.0 | 96 | 9/5/2026 |
| 0.33.0 | 91 | 9/3/2026 |
| 0.32.0 | 98 | 9/3/2026 |
| 0.31.0 | 94 | 9/2/2026 |
| 0.30.0 | 108 | 8/23/2026 |
| 0.29.0 | 116 | 8/22/2026 |
| 0.28.0 | 105 | 8/22/2026 |
| 0.27.0 | 107 | 8/17/2026 |
| 0.26.0 | 113 | 8/17/2026 |
| 0.25.0 | 121 | 8/3/2026 |
| 0.24.0 | 124 | 7/20/2026 |
| 0.23.0 | 110 | 7/14/2026 |
| 0.22.0 | 115 | 7/14/2026 |
| 0.21.0 | 107 | 7/9/2026 |