FreeDMR – M17 Bridges

Over the past year, DVNZ has been using Doug AD8DP‘s extension of Andy CA6JAU‘s clever M172DMR software to link some of the XLX299 modules with M17-NZD modules. This transcoding bridge allows users of the Open Source M17 protocol to communicate with people using the D-STAR, YSF, and DMR protocols already supported by the XLX reflectors.

M172DMR can connect to any MMDVM master, including a FreeDMR instance like FreeDMRNZ. I’ve made a small addition to M172DMR to allow specifying different callsigns on the DMR and M17 sides of the bridge. This allows a “bare” callsign on the FreeDMR side and the conventional callsign-module on the M17 side.

Here at DVNZ we are experimenting with these bridges:

New Zealand NationalM17-NZD-EFreeDMR TG530
New Zealand Regional ZL2M17-NZD-FFreeDMR TG5302

Installation

M172DMR relies on an MD380 firmware image for transcoding, so it must be run on an ARM machine, such as a Raspberry Pi 2, 3, or 4. (The original author says that it will work on either 32-bit or 64-bit operating systems, but I was unable to get it to work correctly on a 64-bit version.)

mkdir src
cd src

# install the dependencies
git clone https://github.com/nostar/md380_vocoder
cd md380_vocoder
make
sudo make install
cd ..

git clone https://github.com/nostar/imbe_vocoder
cd imbe_vocoder
make
sudo make install
cd ..

git clone https://github.com/szechyjs/mbelib
cd mbelib
mkdir build
cd build
cmake ..
make
sudo make install
cd ../..

# build the bridge
git clone https://github.com/DigitalVoiceNZ/MMDVM_CM.git
cd MMDVM_CM/M172DMR
make

Configuration

Edit M172DMR-FreeDMR.ini

[Info]
RXFrequency=435000000
TXFrequency=435000000
Power=1
Latitude=-39.64167
Longitude=176.84444
Height=0
# this can appear on the FreeDMR dashboard, guiding users
Location=FreeDMR530 <> M17-NZD-E
Description=M17Bridge
URL=m17.dvnz.nz

[M17 Network]
Callsign=ZL2IA  E
LocalPort=32012
# M17 reflector and module in 9 characters
DstName=M17-NZD E
# IP address of M17 reflector
DstAddress=100.100.100.100
DstPort=17000
GainAdjustdB=-3
Daemon=0
Debug=0

[DMR Network]
# typically the same as M17 Callsign, but without module
Callsign=ZL2IA
# DMR ID and unique two digit ESSID
Id=530313717
# FreeDMR talkgroup
StartupDstId=530
# For TG call: StartupPC=0
StartupPC=0
# IP address for the FreeDMR instance
Address=100.100.100.101
Port=62031
Jitter=500
Local=0
Password=passw0rd
# set up a static talkgroup for this bridge
Options=TS2=530;DIAL=0;VOICE=0;LANG=en_GB;TIMER=10;SINGLE=1;
Debug=0

[DMR Id Lookup]
#File=DMRIDs.dat
File=dmrid.dat
Time=24

[Log]
# Logging levels, 0=No logging
DisplayLevel=1
FileLevel=1
FilePath=.
FileRoot=M172DMR

Run

For testing, you can simply invoke M172DMR from the shell (or within tmux):

./M172DMR ./M172DMR-FreeDMR.ini

For production use, you will probably want to run it from a systemd unit or similar scheme.

You can run multiple bridges by running multiple instances of M172DMR, each with its own config file. Remember to specify unique ports for connection to the M17 reflector and different ESSID suffixes on the DMRIDs used.

Menu