Generating AX.25 code from the specification

AX.25 is the link-layer protocol most of amateur packet radio runs on. The v2.2 specification ends with a set of SDL diagrams (figures C4.1 to C4.7) that draw the connected-mode state machine: states like Disconnected, Awaiting Connection, Connected and Timer Recovery, with every event, guard and action on the arrows. Each AX.25 stack I know of is somebody’s reading of those figures, typed into a switch statement. The readings differ in small ways, and when two stacks disagree there is nothing executable to check against, because the reference is a PDF. ...

12 November 2026

APRS libraries for C#, Rust, Python, TypeScript and C

APRS is widely used and inconsistently implemented. The spec is several documents written over twenty-odd years (APRS 1.0.1, the 1.1 and 1.2 addenda, now merged into APRS12c), real-world packets often bend the rules, and in places the text contradicts itself. Every decoder is somebody’s own reading of all that, and they disagree with each other. I’ve written five APRS libraries, one each in C#, Rust, Python, TypeScript and C, plus a shared set of test cases. All five give the same answer for every packet I’ve tested them with. They’re all at version 1.0.1. ...

12 November 2026