By Phil Taylor M0VSE
In 2016, it was agreed by the Leicestershire Repeater Group committee to implement the Yaesu Fusion C4FM mode on GB3CF and a Yaesu DR-1X repeater was purchased for this purpose. It soon became apparent that the DR-1X was severely limited and it was decided that the analogue features on the repeater were not suitable and apart from a couple of on-air testing sessions, the plan was shelved.
In early 2018, I started investigating other options and discovered the MMDVM (Multi-Mode Digital Voice Modem). MMDVM is the brainchild of Jonathan G4KLX to develop a small hardware device that was capable of supporting multiple digital voice modes, originally the GMSK (D-Star only) and realised using Arduino boards together with a 'hat' that provides audio amplification and filtering, it has developed into a whole host of hardware devices using STMicroelectronics STM32 ARM CPUs allowing for more complex modes to be supported.
There are now a large number of MMDVM hardware devices available, mostly based on a reference design by Andy CA6JAU with many modifications and improvements by a dedicated band of hardware engineers. The range also includes a number of "hotspot" designs that incorporate an Analog Devices ADF7021 RF transceiver chip. Some have the same form-factor as a Raspberry Pi Zero meaning that a fully-functional multi-mode hotspot can be created in a device smaller than a pack of cigarettes (whatever that is!)
The MMDVM is a true 'modem' in that its sole purpose is to modulate and de-modulate digital signals. It is able to do this in real-time due to the monolithic nature of the MMDVM firmware as it doesn't have to concern itself with other processes (networking, connection management etc.) These functions are provided by some software called MMDVMHost which is typically run on a Raspberry Pi but as the MMDVM device itself emulates a traditional RS-232 serial port, it can run on practically any computer that is capable of running the Linux operating system.
Each supported mode (DMR, D-Star, C4FM, NXDN or P25) also has "gateway" software available which talks to MMDVM and provides network connectivity to the various reflector networks. It has been designed in such a way that the gateways can either run on the same computer as MMDVMHost or for larger more-complex systems, each can be run on their own dedicated computer. This design means that the MMDVM 'infra-structure' is incredibly flexible and scaleable for larger multi-repeater implementations.
Although not being used on GB3CF, it would be remiss to not mention Pi-Star as this is the software that many users of MMDVM devices will be using. Prior to Pi-Star being created by Andy MW0MWZ in August 2014, creating a hotspot or repeater using the GMSK required significant knowledge of the Linux operating system. In the early days, this was based around the G4KLX DStarRepeater and ircDDBGateway suite but when Jonathan conceived the MMDVM concept in 2015, it was adapted to support the additional modes supported by the MMDVM. It is basically a single disk image comprising of Raspbian Linux, MMDVMHost and all available gateways, together with web-based configuration and dashboards. This has led to the large number of MMDVM based hotspots now appearing as no real knowledge of Linux or MMDVM is required to get up-and-running.
With GB3CF, I had a number of specific goals that made it more practical to build the operating system from a "clean" Rapbian image and manually add all required software. Specifically the need to also support analogue FM which is not currently supported by MMDVM.
As the Raspberry Pi is designed to boot and run from a Micro SD card, I wanted a method of reducing how much writing was done to the SD card on a regular basis, so I developed everything to run in RAM as much as possible (including logging and process id files etc.) and the default setting is for the system to run in read-only mode, only switching to read-write if configuration changes or upgrades are required.
Another major feature was the ability to support analogue FM and to be able to auto-switch between analogue and digital modes. After a lot of research, I discovered the MMI interface from Thomas DO7TPB and Peter DK4HPA which was created for exactly this purpose. It is basically a "Pi Hat" which attaches to a Raspberry-Pi and provides audio switching between an integrated USB sound card and MMDVM board using a TI 4066n analogue switch IC. This, combined with Svxlink repeater software can create a system capable of repeating both analogue and digital voice. Incoming (receive) audio is fed to both the MMDVM and USB sound card simultaneously and if a valid analogue (or digital) transmission is detected by either Svxlink (CTCSS squelch) or MMDVM (valid digital transmission). If either Svxlink or MMDVM enables their PTT connection (to transmit) then transmit audio is connected by the MMI board to the transmitter audio input. Once PTT is turned-off, audio output is disconnected.
Thomas and Peter had created a number of scripts that monitored the status of MMDVM and Svxlink and disabled one while the other was transmitting, but I decided to do this a different way and developed modifications to MMDVMHost itself. My changes allow it to communicate with Svxlink via TCP connection and to inhibit transmission on one mode while the other is transmitting. This also has a configurable hang-time (default 30 seconds) which will keep the repeater locked to the last transmitted mode until the timer has elapsed. My modifications are available at https://github.com/m0vse/MMDVMHost/tree/svxlink although significant changes are likely to be needed for them to work in a different environment.
As mentioned, the analogue repeater is Svxlink by Tobias SM0SVX. This is an advanced analogue repeater controller with a whole host of features. On GB3CF, many of the advanced features are currently disabled but the ability to enable Echolink, Parrot, VoiceMail etc. is available if required in the future. Many aspects of the repeater can be customised by modifying .tcl scripts which is what I did to achieve communications with MMDVMHost. This means that no modifications to the core of Svxlink were required.
Although the repeater site has Internet access, I have also included a real-time-clock module which is something that the Pi doesn't have as standard (meaning that at power-on the clock always starts from 2016!), this ensures correct time even if the Internet is down. The repeater also synchronises using NTP (network time protocol) with the time UK time server pool located at uk.pool.ntp.org.
I also wanted to provide a (near real-time) dashboard that allowed members of the LRG to see activity on the repeater. Having evaluated various dashboards, the problem was that they all relied on parsing MMDVMHost log files 'on the fly' which I thought was pretty in-efficient and I wanted to be able to hand-off the dashboard feature to a remote web server and database that was better suited to handling web traffic. I discovered mmdvmdash by DO6UK which used a novel idea in that it constantly 'tailed' the log files and parsed each line as it was created. Any accesses then get logged into a local SQLite database and it could optionally synchronise this with a remote MySql database. Unfortunately it only supported DMR (the one mode that we are not licensed for!) so it required significant modification to get to the dashboard that we now have. I practially re-wrote the whole thing in the end (learning Python into the bargain) and made it multi-threaded.
Hardware used on GB3CF
- Tait TB7100 VHF repeater
- Raspberry Pi 3 Model B+ (1.4Ghz quad-core CPU with 1GB RAM)
- MMDVM-PI from Jim KI6ZUM (creator of the Zumspot hotspot)
- MMI Rev.B interface from Thomas DO7TPB and Peter DK4HPA
- I2C based real-time-clock module from PiHut
Software used on GB3CF
- Raspbian Linux for Raspberry Pi (Currently "Stretch" release)
- MMDVMHost (with modifications by M0VSE)
- Svxlink (analogue repeater)
- ircDDBGateway (gateway to the IRC D-Star network)
- YSFGateway (gateway to the YSF System Fusion network)
- NXDNGateway (gateway to the burgeoning NXDN network)
- mmdvm_parser and remote dashboard