MMDVM-based Digital Voice Modem Firmware (Hotspot)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Go to file
Bryan Biedenkapp 77037d132d
correct edge case situation where discriminator or post bandwidth may be set when they shouldn't be; cleanup bad references to the ADF7021's REG13 reference (the old code worked fine, but used magic numbers instead of proper named defines); add more verbose register debug output from the modem; display NXDN sync values copied to the bit buffer and not the sync bytes;
2 years ago
.github/workflows update CI workflow; 3 years ago
STM32F4XX_Platform@b8b3d5380f update Makefiles to use included submodules for STM32 platform files; 4 years ago
STM32F10X_Platform@527fee72ae update Makefiles to use included submodules for STM32 platform files; 4 years ago
dmr add support for a CMD_SET_BUFFERS, this will allow the host to control the size of the transmit FIFO buffers; reduce the size of FIFO buffers; 3 years ago
nxdn correct edge case situation where discriminator or post bandwidth may be set when they shouldn't be; cleanup bad references to the ADF7021's REG13 reference (the old code worked fine, but used magic numbers instead of proper named defines); add more verbose register debug output from the modem; display NXDN sync values copied to the bit buffer and not the sync bytes; 2 years ago
p25 add support for a CMD_SET_BUFFERS, this will allow the host to control the size of the transmit FIFO buffers; reduce the size of FIFO buffers; 3 years ago
.gitignore update .gitignore, ignore .bin, .elf; 4 years ago
.gitmodules update Makefiles to use included submodules for STM32 platform files; 4 years ago
ADF7021.cpp correct edge case situation where discriminator or post bandwidth may be set when they shouldn't be; cleanup bad references to the ADF7021's REG13 reference (the old code worked fine, but used magic numbers instead of proper named defines); add more verbose register debug output from the modem; display NXDN sync values copied to the bit buffer and not the sync bytes; 2 years ago
ADF7021.h correct edge case situation where discriminator or post bandwidth may be set when they shouldn't be; cleanup bad references to the ADF7021's REG13 reference (the old code worked fine, but used magic numbers instead of proper named defines); add more verbose register debug output from the modem; display NXDN sync values copied to the bit buffer and not the sync bytes; 2 years ago
AUTHORS.md bump copyright dates; add authors and credits; 4 years ago
BitBuffer.cpp code cleanup; 4 years ago
BitBuffer.h initial commit of new codebase; 4 years ago
CWIdTX.cpp code cleanup; 4 years ago
CWIdTX.h initial commit of new codebase; 4 years ago
CalRSSI.cpp code cleanup; 4 years ago
CalRSSI.h add Makefiles; fix compilation errors; 4 years ago
Defines.h fix up priority of decoding; attempt to better sync header during non-voice and non-data streams; 3 years ago
FirmwareMain.cpp remove unnecessary compiler directives; 3 years ago
Globals.h flip values; 3 years ago
IO.cpp fix incorrect opcode callback from NXDN RX; code cleanup; 3 years ago
IO.h remove USB support from master branch (see usb-support branch); 3 years ago
IOSTM.cpp remove USB support from master branch (see usb-support branch); 3 years ago
LICENSE.md initial commit of new codebase; 4 years ago
Makefile add Makefiles; fix compilation errors; 4 years ago
Makefile.STM32FX remove USB support from master branch (see usb-support branch); 3 years ago
README.md update README.md; 3 years ago
STM_UART.cpp code cleanup; 4 years ago
STM_UART.h initial commit of new codebase; 4 years ago
SerialBuffer.cpp make incoming data FIFO sizes consistent; 3 years ago
SerialBuffer.h make incoming data FIFO sizes consistent; 3 years ago
SerialPort.cpp implement DMR_CLEAR1, DMR_CLEAR2, NXDN_CLEAR; 3 years ago
SerialPort.h implement DMR_CLEAR1, DMR_CLEAR2, NXDN_CLEAR; 3 years ago
SerialSTM.cpp remove USB support from master branch (see usb-support branch); 3 years ago
Utils.cpp initial commit of new codebase; 4 years ago
Utils.h initial commit of new codebase; 4 years ago
stm32f4xx_link.ld initial commit of new codebase; 4 years ago
stm32f4xx_link_debug.ld remove some old unnecessary code from the NXDNTX processor; include all debug data for debug link scripts; reduce the overall size of buffered frames (due to memory limitations on the STM32F103 64K/20K chips running out of RAM); 3 years ago
stm32f7xx_link.ld initial commit of new codebase; 4 years ago
stm32f7xx_link_debug.ld remove some old unnecessary code from the NXDNTX processor; include all debug data for debug link scripts; reduce the overall size of buffered frames (due to memory limitations on the STM32F103 64K/20K chips running out of RAM); 3 years ago
stm32f10x_debug.ld add support to generate "debug" firmware ELFs; 3 years ago
stm32f10x_link.ld initial commit of new codebase; 4 years ago
stm32f10x_link_debug.ld remove some old unnecessary code from the NXDNTX processor; include all debug data for debug link scripts; reduce the overall size of buffered frames (due to memory limitations on the STM32F103 64K/20K chips running out of RAM); 3 years ago
stm32f10x_normal.ld add support to generate "debug" firmware ELFs; 3 years ago

README.md

Digital Voice Modem Firmware (Hotspot)

The DVM hotspot firmware provides the embedded microcontroller implementation of a dedicated-mode DMR, P25 or NXDN hotspot system. The firmware; is the portion of a complete Over-The-Air modem implementation that uses an ADF7021 to provide a raw RF interface.

This project is a direct fork of the MMDVM_HS (https://github.com/juribeparada/MMDVM_HS) project.

Please feel free to reach out to us for help, comments or otherwise, on our Discord: https://discord.gg/3pBe8xgrEz

Building

Please see the various Makefile's included in the project for more information. This project includes a few Makefiles to target different hardware. (All following information assumes familiarity with the standard Linux make system.)

  • Makefile.STM32FX - This makefile is used for targeting a generic STM32F103 with an ADF7021 RF SoC device.

  • For STM32F103 using Ubuntu OS install the standard ARM embedded toolchain (typically arm-gcc-none-eabi).

    • Make sure to clone this repository with the --recurse-submodules option, otherwise the STM32 platform files will be missing! git clone --recurse-submodules https://github.com/DVMProject/dvmfirmware-hs.git

To build the firmware, use the make command, followed by -f and the correct makefile, followed by the type of board you are using.

An example of this would be make -f Makefile.STM32FX mmdvm-hs-hat-dual for a full duplex modem hotspot, attached to GPIO.

Firmware installation

The device can be used on top on a RPi attached via the GPIO port or standalone and connected via USB (see usb-support branch). Both variants require different handling of compiling and uploading the firmware, examples on flashing devices are mostly not included here because the methods to flash vary from device to device.

Install the firmware via GPIO on Raspberry Pi

NOTE: Your mileage may vary with these instructions, the hotspot boards are loosely designed around a common factor but not all are created equally.

First you will need to disable the serial console and disable bluetooth. Edit /boot/cmdline.txt and remove the line console=serial0, 115200. Next, you will need to disable bluetooth on the board. Edit /boot/config.txt and add a line containing dtoverlay=disable-bt. Reboot.

Most sets of instructions reccomend to download stm32flash from online, however we have found the prepackaged version to work fine.

Once the hotspot is back on, navigate to the build folder where you compiled the firmware. Put a jumper across the J1 points on the board, and the RED heartbeat LED should stop flashing. Run the below command to flash.

stm32flash -v -w dvm-firmware-hs_f1.bin -i 20,-21,21,-20 -R /dev/ttyAMA0

You should see the below output if the board flashed successfully.

Wrote and verified address 0x0800be40 (100.00%) Done.

Resetting device... 
Reset done.

Notes

USB Support Note: See the usb-support branch for the version of this firmware that supports USB. NXDN Support Note: NXDN support is currently experimental.

License

This project is licensed under the GPLv2 License - see the LICENSE.md file for details. Use of this project is intended, for amateur and/or educational use ONLY. Any other use is at the risk of user and all commercial purposes is strictly discouraged.

Powered by TurnKey Linux.