Dvmhost
MMDVM-based Digital Voice Modem Host Software
Install / Use
/learn @DVMProject/DvmhostREADME
Digital Voice Modem Core Software Suite
The Digital Voice Modem ("DVM") Core Software Suite, provides the a set of applications that:
- Act as a primary host computer implementation of a mixed-mode DMR, P25 and/or NXDN or dedicated-mode DMR, P25 or NXDN repeater system that talks to the actual air modem hardware, or for P25 mode, a TIA/V.24 standard interface mode allowing communications to commercial P25 hardware using the V.24 DFSI modem hardware or UDP.
- Networking core (dvmfne) that provides a centralized network service that interconnects various DVM endpoint applications allowing networked communications.
- Analog <-> Digital and Digital <-> Digital (Transcoding) vocoding.
Please feel free to reach out to us for help, comments or otherwise, on our Discord: https://discord.gg/3pBe8xgrEz
THIS SOFTWARE MUST NEVER BE USED IN PUBLIC SAFETY OR LIFE SAFETY CRITICAL APPLICATIONS! This software project is provided solely for personal, non-commercial, hobbyist use; any commercial, professional, governmental, or other non-hobbyist use is strictly discouraged, fully unsupported and expressly disclaimed by the authors. For full project policies and support limitations, see: Usage & Support Guidelines.
This project suite generates a few executables:
Core Applications
dvmhosthost software that connects to the DVM modems (both air interface for repeater and hotspot or P25 DFSI for commerical P25 hardware) and is the primary data processing application for digital modes. See configuration to configure and calibrate.dvmfnea network core, this provides a central server fordvmhostinstances (and other instances like consoles ordvmbridges) to connect to and be networked with other instances, allowing switching of traffic and other data betweendvmhostinstances, as well as other peereddvmfneinstances. See configuration to configure.dvmbridgea analog/PCM audio bridge, this provides the capability for analog or PCM audio resources to be connected to advmfneinstance, allowing realtime vocoding of traffic. See configuration to configure.dvmpatcha talkgroup patching utility, this provides the capability to manually patch talkgroups of the same digital mode together. See configuration to configure.dvmcmda simple command-line utility to send remote control commands to advmhostordvmfneinstance with REST API configured.
Supplementary Support Applications
dvmmona TUI utility that allows semi-realtime console-based monitoring ofdvmhostinstances (this tool is only available when project wide TUI support is enabled!).sysviewa TUI utility that allows near-realtime console-based monitoring of advmfneinstance (this tool is only available when project wide TUI support is enabled!).tgeda TUI utility that allows editing of talkgroup rules configuration files (this tool is only available when project wide TUI support is enabled!).peereda TUI utility that allows editing of peer list data files (this tool is only available when project wide TUI support is enabled!).

Building
This project utilizes CMake for its build system. (All following information assumes familiarity with the standard Linux make system.)
The DVM Host software requires the library dependancies below. Generally, the software attempts to be as portable as possible and as library-free as possible. A basic GCC/G++ install, with libasio and ncurses is usually all that is needed to compile.
Dependencies
apt-get install libasio-dev libncurses-dev libssl-dev
- ASIO Library (https://think-async.com/Asio/); on Debian/Ubuntu Linux's:
apt-get install libasio-dev - ncurses; on Debian/Ubuntu Linux's:
apt-get install libncurses-dev - OpenSSL; on Debian/Ubuntu Linux's:
apt-get install libssl-dev
Alternatively, if you download the ASIO library from the ASIO website and extract it to a location, you can specify the path to the ASIO library using: -DWITH_ASIO=/path/to/asio. This method is required when cross-compiling for old Raspberry Pi ARM 32 bit.
If you want detailed stacktrace output on a crash, for compilation ensure libdw-dev is also installed. (apt-get install libdw-dev). For runtime you will need the elfutils package to be installed. (apt-get install elfutils).
If cross-compiling ensure you install the appropriate libraries, for example for AARCH64/ARM64:
sudo dpkg --add-architecture arm64
sudo apt-get update
sudo apt-get install libasio-dev:arm64 libncurses-dev:arm64 libssl-dev:arm64
sudo apt-get install libdw-dev:arm64
Build Instructions
- Clone the repository.
git clone https://github.com/DVMProject/dvmhost.git - Switch into the "dvmhost" folder. Create a new folder named "build" and switch into it.
# cd dvmhost dvmhost # mkdir build dvmhost # cd build - Run CMake with any specific options required. (Where [options] is any various compilation options you require.)
dvmhost/build # cmake [options] .. ... -- Build files have been written to: dvmhost/build dvmhost/build # make - [OPTIONAL] Install binaries (it is highly recommended to not run DVM out of the build folder).
- Tarball Install
- Run build finalization.
dvmhost/build # make strip dvmhost/build # make tarball- After
make tarballcompletes file nameddvmhost_R04Gxx_<arch>.tar.gzshould be created. Run the following command to install:
dvmhost/build # sudo tar xvzf dvmhost_R04Gxx_<arch>.tar.gz -C /opt - old_install Install
- Run build finalization.
dvmhost/build # make strip- Install build.
dvmhost/build # sudo make old_install
- Tarball Install
If cross-compiling is required (ARM 32-bit or ARM64), the CMake build system provides the following options:
-
-DCROSS_COMPILE_ARM=1- Cross-compile dvmhost for generic ARM 32-bit
(ex: Raspberry Pi running a 32-bit OS; Debian/Raspbian Bullseye or newer) -
-DCROSS_COMPILE_AARCH64=1- Cross-compile dvmhost for generic ARM 64-bit
(ex: Raspberry Pi 4+ or other ARM64 systems; Debian/Raspbian Bullseye or newer)
Please note cross-compilation requires you to have the appropriate development packages installed for your system.:
-
ARM 32-bit (Debian/Ubuntu):
arm-linux-gnueabihf-gcc,arm-linux-gnueabihf-g++ -
ARM 64-bit (Debian/Ubuntu):
aarch64-linux-gnu-gcc,aarch64-linux-gnu-g++
Setup TUI (Text-based User Interface)
The DVM TUI applications are optional, and dvmhost can still be compiled without it for systems or devices that cannot utilize it.
-DENABLE_SETUP_TUI=0- This will disable the setup/calibration TUI interface.-DENABLE_TUI_SUPPORT=0- This will disable TUI support project wide. Any projects that require TUI support will not compile, or will have any TUI components disabled.
dvmhost Configuration
This source repository contains configuration example files within the configs folder, please review config.example.yml for the dvmhost for details on various configurable options. When first setting up a DVM instance, it is important to properly set the channel "Identity Table" or "Logical Channel ID" (or LCN ID) data, within the iden_table.dat file and then calibrate the modem.
The iden_table.dat file contains critical information used by dvmhost (and some other related applications) to calculate frequencies for Rx/Tx, these calculations are used for over the air broadcast messages that direct radios to which frequency to tune to when in trunking mode. Additionally, the iden_table.dat frequency calculations are also used to determine what frequency a hotspot operates on.
There is a helper CLI Python tool called iden-channel-calculator (For more information please, see: https://github.com/DVMProject/iden-channel-calculator) to help calculate and generate iden_table.dat entries, along with determine which relative channel number relates to a specified frequency.
It should also be important to read and review the calibration notes below.
Initial Setup Steps
The following setups assume the host is compiled with the setup TUI mode (if available) [NOTE: Steps 3 - 5 only apply to the air interface modem.]. It is possible to setup the modem without the setup TUI, and requires manually modifying config.yml and the iden_table.dat files.
- Create/Edit
config.ymland ensure the settings for the modem are correct, find the "modem" section in "system". Check that the uart settings have the appropriate UART port and port speed set (the config.yml defaults to /dev/ttyUSB0 and 115200).- If using the air modem interface, ensure the the modem protocol mode is set to "air".
- If using the V.24 DFSI modem interface, ensure the modem protocol mode is set to "dfsi".
- The V.24 DFSI modem has multiple firmware revisions, it is required to use firmware version 2.0 or greater for use with dvmhost.
- Start
dvmhostas follows:/path/to/dvmhost -c /path/to/config.yml --setup. This will start the dvmhost setup TUI mode. - Using the TUI user interface, use the "Setup" menu to set default parameters.
- The "Logging & Data Configuration" submenu allows you to alter the various logging file paths and levels, as well as paths to data files (such as the
iden_table.datfile). - The "System Configuration" submenu allows you to alter various modem port and speed, system settings, and mode settings configuration.
- The "Site Parameters" submenu allows you to alter various CW morse identification, and site parameters.
- The "Chann
- The "Logging & Data Configuration" submenu allows you to alter the various logging file paths and levels, as well as paths to data files (such as the
Related Skills
node-connect
344.4kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
99.2kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
344.4kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
344.4kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
