SkillAgentSearch skills...

Dvmhost

MMDVM-based Digital Voice Modem Host Software

Install / Use

/learn @DVMProject/Dvmhost
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

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

  • dvmhost host 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.
  • dvmfne a network core, this provides a central server for dvmhost instances (and other instances like consoles or dvmbridges) to connect to and be networked with other instances, allowing switching of traffic and other data between dvmhost instances, as well as other peered dvmfne instances. See configuration to configure.
  • dvmbridge a analog/PCM audio bridge, this provides the capability for analog or PCM audio resources to be connected to a dvmfne instance, allowing realtime vocoding of traffic. See configuration to configure.
  • dvmpatch a talkgroup patching utility, this provides the capability to manually patch talkgroups of the same digital mode together. See configuration to configure.
  • dvmcmd a simple command-line utility to send remote control commands to a dvmhost or dvmfne instance with REST API configured.

Supplementary Support Applications

  • dvmmon a TUI utility that allows semi-realtime console-based monitoring of dvmhost instances (this tool is only available when project wide TUI support is enabled!).
  • sysview a TUI utility that allows near-realtime console-based monitoring of a dvmfne instance (this tool is only available when project wide TUI support is enabled!).
  • tged a TUI utility that allows editing of talkgroup rules configuration files (this tool is only available when project wide TUI support is enabled!).
  • peered a TUI utility that allows editing of peer list data files (this tool is only available when project wide TUI support is enabled!).

Interconnectivity Possible with DVM

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

  1. Clone the repository. git clone https://github.com/DVMProject/dvmhost.git
  2. Switch into the "dvmhost" folder. Create a new folder named "build" and switch into it.
    # cd dvmhost
    dvmhost # mkdir build
    dvmhost # cd build
    
  3. 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
    
  4. [OPTIONAL] Install binaries (it is highly recommended to not run DVM out of the build folder).
    1. Tarball Install
      1. Run build finalization.
      dvmhost/build # make strip
      dvmhost/build # make tarball
      
      1. After make tarball completes file named dvmhost_R04Gxx_<arch>.tar.gz should be created. Run the following command to install:
      dvmhost/build # sudo tar xvzf dvmhost_R04Gxx_<arch>.tar.gz -C /opt
      
    2. old_install Install
      1. Run build finalization.
      dvmhost/build # make strip
      
      1. Install build.
      dvmhost/build # sudo make old_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++

See project notes.

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.

  1. Create/Edit config.yml and 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).
    1. If using the air modem interface, ensure the the modem protocol mode is set to "air".
    2. If using the V.24 DFSI modem interface, ensure the modem protocol mode is set to "dfsi".
      1. The V.24 DFSI modem has multiple firmware revisions, it is required to use firmware version 2.0 or greater for use with dvmhost.
  2. Start dvmhost as follows: /path/to/dvmhost -c /path/to/config.yml --setup. This will start the dvmhost setup TUI mode.
  3. Using the TUI user interface, use the "Setup" menu to set default parameters.
    1. 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.dat file).
    2. The "System Configuration" submenu allows you to alter various modem port and speed, system settings, and mode settings configuration.
    3. The "Site Parameters" submenu allows you to alter various CW morse identification, and site parameters.
    4. The "Chann

Related Skills

View on GitHub
GitHub Stars94
CategoryDevelopment
Updated37m ago
Forks24

Languages

C++

Security Score

100/100

Audited on Apr 1, 2026

No findings