P25 on OpenRTX

Somebody has put P25 into OpenRTX, with the IMBE vocoder running in software on the radio itself rather than on a DVSI chip. These are notes on what that work is, and on what its own author says it does and does not do.


What it is

A personal fork of OpenRTX by Rick, KD0OSS, on a branch called P25_CS7000P. Sixteen commits, all dated 29 October 2025, touching 42 files and adding about 9640 lines.

It targets one radio, the Connect Systems CS7000 M17 Plus. Reading the build file, only the cs7000p target compiles the P25 sources at all, so the plain CS7000-M17 does not get it.

What the author claims

His own words, from his firmware page

"P25 receive mostly works with the built in IMBE vocoder but you need the external host for transmit."

For the CS7000 Plus he believes it "should have the horse power to do both RX and TX but this has not been confirmed", and everything on that page is offered as experimental proof of concept with no guarantees.

So the honest position is: receive mostly works with the vocoder on the radio, transmit still wants an external host, and whether the Plus can do both on its own is an open question that its own author has not answered yet. Nothing here has been tested at N6JET.

What is actually in the code

PartWhat it is
The P25 stackA full protocol implementation under openrtx/src/protocols/P25/: receive, transmit, the radio interface, the network identifier, data, low speed data and audio
Error correctionThe pieces P25 cannot work without, written out in full: AMBE FEC, Golay 24128, Hamming, BCH and Reed Solomon 24 12 13
The vocoderIMBE in software, twelve source files compiled into the firmware and driven by a new audio codec module. No DVSI chip and no dongle
A new modeOpMode_P25, wired into the radio's mode handling and its thread table
The user interfaceReal work rather than a stub. The default UI file alone changed by more than 1500 lines, so P25 appears as a mode you can select on the radio

Why this radio and not the Module17

The interesting part of the story is in the author's own blog, from January 2025, when he was trying the same thing on a Module17. He got receive partly working and then hit a wall on transmit: "the software vocoder was taking 100ms to encode 20ms of audio and that wasn't keeping up with my P25 frame encode process." His conclusion at the time was that the processor was not fast enough and the vocoder would have to be offloaded to a Raspberry Pi.

The CS7000 Plus is a different machine. The build file compiles the Plus against the STM32H743, an ARM Cortex M7, where the Module17 is a Cortex M4. It also defines ARM_MATH_CM7 and pulls in the CMSIS DSP maths library alongside the vocoder, which is what you would do if you were trying to make a software vocoder run in real time.

That is the reason the work moved to this radio. Whether it was enough is the question the author says is still unconfirmed.

What this is not

Read this before you flash anything

This is one person's fork. It is not part of upstream OpenRTX, whose own README lists no P25 at all, and it is nothing to do with Connect Systems. There is no release, no documentation of its state inside the repository, and no test report from anyone else.

Flashing experimental firmware puts your radio at risk and that is your decision to make, not a recommendation from this page.

Where these notes came from

Everything above is from three places, all of them the author's own: the repository, where the file list and the build configuration were read directly; his firmware download page, which is where the quotations about what works come from; and his blog, for the Module17 history.

That is one project described by one person, not several independent sources agreeing with each other. It is recorded here as what he says and what the code contains, rather than as something confirmed from outside.