Open-source firmware for digital-voice handheld radios (incl. M17).
Find a file
Ryan Turner 1e257e5c90 build: support pkg-config and find_library for codec2 on native builds
On native (non-cross) builds, try codec2 resolution in this order:
  1. pkg-config (homebrew, Nix, and other pkg-config-based installs)
  2. Compiler's built-in find_library (libcodec2-dev on Debian/Ubuntu)
  3. Subproject build from source (embedded fallback)

This fixes macOS homebrew builds without breaking Linux system package
installations that lack a .pc file but have the library on the search
path. The previous single find_library approach missed homebrew installs.

Also guard the audioDevice struct alignment change to only apply on
Darwin ARM64 where Apple's int64_t misbehaves with packed structs.
Other platforms retain the original __attribute__((packed)) to avoid
increasing memory usage on resource-constrained embedded targets.

Co-authored-by: opencode (https://opencode.ai)
Co-authored-by: OpenRTX Contributors
2026-07-09 19:40:04 +02:00
.devcontainer devcontainer: pin miosix-kernel to Miosix v3.01 2026-07-05 17:06:51 +02:00
.github ci: cancel superseded PR runs and add job timeouts 2026-07-05 17:06:51 +02:00
.vscode test: unit: add gcovr test coverage 2026-03-04 08:10:40 +01:00
lib lib: qrcode: remove #pragma mark directives 2026-04-29 21:29:01 +02:00
LICENSES CMSIS library files for Artery AT32F423 MCU 2026-05-17 12:19:30 +02:00
meta just the emulator shell broken out 2021-11-03 19:20:42 +01:00
openrtx build: support pkg-config and find_library for codec2 on native builds 2026-07-09 19:40:04 +02:00
platform drivers: NVM: add missing spi_acquire in W25Qx write path 2026-07-05 17:05:48 +02:00
scripts mcu: stm32: apply clang-format to i2c_stm32 driver 2026-06-11 22:55:42 +02:00
subprojects build: add Catch2 subproject 2026-03-04 08:10:40 +01:00
tests core: dsp: add decimator implementation 2026-04-20 20:21:52 +02:00
.clang-format reuse: add reuse config, licenses 2026-01-14 20:10:07 +01:00
.gitignore git: ignore meson wraplock file 2026-05-08 23:29:16 +02:00
99-openrtx.rules Added GigaDevices GD32 USB ID to udev rules to allow programming of GD32-based Module17 without root privileges 2022-06-10 18:14:10 +02:00
AGENTS.md ci: add AGENTS.md with project guidelines for AI agents 2026-04-07 20:53:53 +02:00
CHANGELOG.rst OpenRTX version 0.4.4 2026-05-01 11:06:16 +02:00
CMakeLists.txt M17: remove M17 name from namespaced classes 2026-03-21 10:05:33 +01:00
CONTRIBUTING.md protocols: M17: add metadata class and reassembly 2026-03-13 21:25:34 +01:00
cross_cm4.txt build: rename "build_arm" file to "build_cm4" 2026-02-14 16:00:51 +01:00
cross_cm7.txt build: rename "build_arm" file to "build_cm4" 2026-02-14 16:00:51 +01:00
meson.build build: support pkg-config and find_library for codec2 on native builds 2026-07-09 19:40:04 +02:00
meson_options.txt Add undefined behaviour sanitizer option 2021-02-17 09:52:36 +01:00
osx.txt Native opts for macOS building 2021-12-23 14:52:25 +01:00
README.md README: update supported device list to link to website 2026-04-07 08:22:26 +02:00
requirements.txt test: unit: add gcovr test coverage 2026-03-04 08:10:40 +01:00
REUSE.toml CMSIS library files for Artery AT32F423 MCU 2026-05-17 12:19:30 +02:00
voiceprompts.vpc ui: add ui for setting m17 meta text 2026-03-13 21:25:34 +01:00
west.yml copyright-and-license: adopt SPDX-compliant header 2026-01-14 20:10:07 +01:00

OpenRTX

Modular Open Source Radio Firmware

OpenRTX is a free and open source firmware for digital amateur radio devices, top-down designed with modularity, flexibility and performance in mind.

This firmware is highly experimental and currently under development, this means that it may not have all the expected functionalities. Anyway, contributions and testing will be warmly welcomed and accepted!

For hardware and software documentation visit openrtx.org. For currently supported devices and their features, see the Development Status page.

Obtaining the firmware

Warning: Read the disclaimer section first!

Pre-built binary images of the OpenRTX firmware for each one of the supported devices are available on the releases page: to flash them to your radio, you can use the OEM firmware upgrade tool or — alternatively and for TYT MD-3x0 and MD-UV3x0 radios only — you can also use the radio_tool program or tarxvf's web based flashing tool dmr.tools.

Between releases, pre-built binary images containing the latest firmware updates are available through nightly builds from the master branch. The nightly builds are available here:

Finally, the instructions on how to compile the OpenRTX firmware for hardware as well as emulation on Linux, are available on the compilation instructions page on our website.

Have a look at the the dedicated page for detailed instructions on flashing the firmware to your radio, look at the OpenRTX website or reach out to us on our channels!

M17 support

From the release version 0.3.3 onwards the OpenRTX firmware provides experimental support for the M17 digital voice mode.

For information on the radios that currently support M17, see the Development Status page on our website.

To make the digital mode work, some modding is required: Refer to the dedicated page on our website for the details on that.

Disclaimer

This project was created for research and amateur radio use only, we are not responsible for improper use of this code which might lead to unauthorized transmission, reception or any patent infringments.

The OpenRTX firmware is released WITHOUT ANY WARRANTY: Anyone flashing a binary image obtained from the sources made available through this repository does so at their own risk. We always test all the code on our devices before publishing it on the repository, however we cannot guarantee the absolute absence of bugs nor of potential side effects.

Contact

To reach out, visit our M17 Reflector or join our Matrix room for general discussion #openrtx_general:matrix.org or the Matrix space #openrtx:matrix.org which contains many additional rooms or our Discord Server.

Donate

To support the development of OpenRTX you can donate using Liberapay.
If you want to donate hardware to facilitate porting and development of OpenRTX, please contact us.

License

This software is released under the GNU GPL v3.

minmea is released under the DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE v2.

QRCode is released under the MIT License.

Code for STM32F405 USB driver is released under the MCD-ST Liberty SW License Agreement V2.

uf2conf.py and related files are released by Microsoft Corporation under MIT license.

Credits

OpenRTX is being made by:

Our wholehearted thanks go to the following contributors from the community:

  • Joseph Stephen VK7JS, who implemented voice prompts

All this is possible by the huge reverse engineering effort of Travis Goodspeed and all the contributors of the md380tools.

A huge thanks goes to Roger Clark, and his OpenGD77 (repo no longer available) which not only inspired this project, but as a precursor, provided a working code example for the GD77 radio family.

A warm thank you goes to Wojciech Kaczmarski SP5WWP and the M17 community for bringing their libre protocol into our obscure undocumented hardware.

Also, a thank you for donating hardware to this project goes to:

  • M17 Project
  • laurivosandi
  • smeegle5000

And thanks to everyone who donated via LiberaPay.

Translation

Contribute to the crowdsourced effort to make OpenRTX more accessible by helping translate it. Weblate proudly supports libre projects like OpenRTX with their tools to help this.

Translation status