M0LTE.Pocsag 0.1.0

dotnet add package M0LTE.Pocsag --version 0.1.0
                    
NuGet\Install-Package M0LTE.Pocsag -Version 0.1.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="M0LTE.Pocsag" Version="0.1.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="M0LTE.Pocsag" Version="0.1.0" />
                    
Directory.Packages.props
<PackageReference Include="M0LTE.Pocsag" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add M0LTE.Pocsag --version 0.1.0
                    
#r "nuget: M0LTE.Pocsag, 0.1.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package M0LTE.Pocsag@0.1.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=M0LTE.Pocsag&version=0.1.0
                    
Install as a Cake Addin
#tool nuget:?package=M0LTE.Pocsag&version=0.1.0
                    
Install as a Cake Tool

M0LTE.Pocsag

A dependency-light POCSAG paging codec for .NET — CCIR Radiopaging Code No. 1 (ITU-R M.584-2) — extracted from the pdn-soundmodem packet-radio modem. It both encodes pages to baseband 2-FSK audio for an FM radio's data port and decodes that audio back to pages, and is DAPNET-compatible (the amateur paging network's 1200 bd rate, function-bit and padding conventions).

Type What it is
PocsagMessage A page to transmit: 21-bit RIC address, function bits, and Numeric / Alphanumeric / Tone content.
PocsagEncoder Pages → preamble + BCH-protected codeword batches → shaped NRZ 2-FSK audio. BuildCodewords for the raw codeword stream, Modulate for audio.
PocsagDecoder Baseband FSK audio → sliced bits → sync hunt → BCH-corrected codewords → PocsagPages, with polarity auto-detection.
PocsagPage A received page: address, function, numeric/alphanumeric readings, BCH bit-errors corrected, polarity, truncation.
PocsagCodeword The BCH(31,21) + parity codeword primitive: Encode, TryCorrect (≤2-bit correct, 3-bit detect), the frame-sync/idle constants.
PocsagPolarity Baseband polarity (Normal is the spec convention: a '0' bit is the high frequency).
  • Targets net10.0. Depends only on M0LTE.Dsp (the FIR/filter primitives the audio chain uses).
  • 512 / 1200 / 2400 bd, numeric and alphanumeric pages, tone-only ("beep") pages.
  • Spec-first and cross-validated against multimon-ng, the de-facto POCSAG receiver.
  • Public API is locked by a build-time test and the package follows Semantic Versioning; see docs/versioning.md.

Install

dotnet add package M0LTE.Pocsag

Quick start

using M0LTE.Pocsag;

// Encode a mixed transmission to 48 kHz baseband audio for an FM radio's data port.
var messages = new List<PocsagMessage>
{
    PocsagMessage.Alphanumeric(133703, "Hello DAPNET!"),
    PocsagMessage.Numeric(8, "555 0100"),
    PocsagMessage.Tone(2007287, function: 1),
};

float[] audio = new PocsagEncoder(sampleRate: 48000, baud: 1200).Modulate(messages);
// ... feed `audio` to your radio's audio out and key PTT ...

// Decode audio back to pages (polarity auto-detected).
var pages = new List<PocsagPage>();
var decoder = new PocsagDecoder(sampleRate: 48000, pages.Add, baud: 1200);
decoder.Process(audio);
decoder.Flush();

foreach (PocsagPage page in pages)
{
    Console.WriteLine($"RIC {page.Address} fn {page.Function}: {page.Text}");
}

(Exact constructor/method signatures are in the XML docs shipped with the package.)

Licence

AGPL-3.0-or-later (see LICENSE). POCSAG is implemented spec-first from CCIR Radiopaging Code No. 1 (ITU-R M.584-2); GPL implementations were read only as cross-checks and no code was transcribed, so the package is AGPL by choice (matching the M0LTE.* family). See PROVENANCE.md.

Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on M0LTE.Pocsag:

Package Downloads
pdn-soundmodem

Headless soundcard packet modem core: IL2P/AX.25 framing and FEC now; demodulators, KISS TCP and DCD to follow.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.0 655 7/18/2026