This information is intended purely for educational purposes. It is your responsibility to ensure that you and your equipment are behaving themselves properly.
You must have the following tools installed:
- (REQUIRED) Python 3.10.x or newer; for using the "multi_outputter.py" script for processing the input data files
- (REQUIRED) gojq; for working with JSON payloads
- (REQUIRED) dmrRadio binary 1.0.23 or newer; for exporting/importing codeplugs to/from JSON and generating blank codeplugs
- (SUGGESTED) editcp 1.0.23 or newer; for further editing codeplugs
- (SUGGESTED) LibreOffice; for creating PDF handouts to accompany the programmed data
# Initial setup make && source .venv/bin/activate # Create and upload new codeplugs ./scripts/generate_rdt.sh # create generic codeplugs for anybody ./scripts/personalize_rdt.sh # create specific codeplugs for my radios dmrRadio writeCodeplug tmp/foo.rdt # upload a single codeplug # Fetch and upload new contacts ./scripts/fetch_db.sh # download a bunch of fresh contacts dmrRadio writeMD2017Users tmp/filtered.csv # if radio is Retevis RT90 dmrRadio writeUV380Users tmp/filtered.csv # if radio is Retevis RT3S # Produce data in a format useful for analog radios ./scripts/generate_csv.sh # create programming data for analog radios
Arch-based distros (Arch Linux, EndeavourOS, etc.), on x86 and ARM:
sudo pacman --no-confirm --sync gcc git go libusb pkgconf git clone https://github.com/dalefarnsworth-dmr/dmrRadio && cd dmrRadio go build
Debian-based distros (Debian, Ubuntu, Raspberry Pi OS, etc.), on x86 and ARM:
# Don't use the go provided by the OS as it is super old # Fetch an appropriate tarball from https://go.dev/dl # Install the contents of the tarball somewhere convenient sudo tar -C /usr/local -xvfz ${GO_TARBALL} sudo apt-get --yes install git libusb-1.0-0-dev git clone https://github.com/dalefarnsworth-dmr/dmrRadio && cd dmrRadio go build
macOS, on x86 and ARM:
brew install git go libusb git clone https://github.com/dalefarnsworth-dmr/dmrRadio && cd dmrRadio go build
Windows users should probably just go fetch the pre-built (x86) binaries directly from https://farnsworth.org/dale/codeplug/dmrRadio/downloads/windows and https://farnsworth.org/dale/codeplug/editcp/downloads/windows.
# Export the binary codeplug as JSON and fix some values dmrRadio codeplugToJSON codeplug.rdt before.json gojq --from-file Retevis_RT3S.jq before.json > after.json
# ======== # WARNING: Don't put spaces in the intro screen lines # ======== # Create a data file containing your specific values cat << EOF > VA3DGN.json { "GeneralSettings": { "IntroScreenLine1": "VA3DGN", "IntroScreenLine2": "3023396", "RadioID": "3023396", "RadioID1": "3021794", "RadioID2": "3023706", "RadioID3": "3021795", "RadioName": "VA3DGN" } } EOF
# Create a brand new, empty codeplug dmrRadio newCodeplug -model RT3S -freq '400-480_136-174' new.rdt # Make it even emptier still dmrRadio codeplugToJSON new.rdt new.json cat new.json \ | gojq 'del(.Contacts[])' \ | gojq 'del(.Channels[])' \ | gojq 'del(.GroupLists[])' \ | gojq 'del(.ScanLists[])' \ | gojq 'del(.Zones[])' > empty.json
Retevis RT90 DFU mode uses orange emergency button + P1 + plug-in "hard" power (ignore "soft" power button).
Retevis RT3S DFU mode uses top side key + PTT + twist power knob.
- https://www.retevissolutions.com/rt90-dmr-radio
- https://www.retevissolutions.com/rt3s-dmr-radio#A9110F
- https://miklor.com/COM/Review_MD9600.php
- https://miklor.com/COM/Review_UV380.php
- https://www.amateurradio.com/mobile-dc-power-one-fuse-or-two
- http://emrg.ca/EMRG-412_12VDC_for_the_Radio_Amateur.pdf
- https://wiki.brandmeister.network/index.php/TalkGroup/98638 WVNET
- https://wirelessvillage.ninja
- https://rfhackers.com
- https://www.ailunce.com/blog/Set-up-MMDVM-DMR-Hotspot-to-work-with-Ailunce-HD1
- https://www.ailunce.com/blog/How-to-set-Rx-Tx-Offset
- https://github.com/VR2VYE/MMDVM_HS_firmware
- g4klx/MMDVMHost#90
- https://amateurradionotes.com/pi-star.htm
- https://riku.titanix.net/wordpress/dmr/mmdvm-ber-error-rate-tuning
- https://www.f5uii.net/en/installation-calibration-adjustment-tunning-mmdvm-mmdvmhost-raspberry-motorola-gm360/5
Admit Criteria determines when your radio is allowed to transmit. The recommended setting for repeater channels is Color Code Free; this configures your radio to be polite to your own digital system. You should configure your In Call Criteria to Follow Admit Criteria. Simplex channels should be configured as Always for both Admit Criteria and Always or Follow TX for In Call Criteria.
- https://w0chp.radio/wpsd
- https://n5amd.com/digital-radio-how-tos/build-digital-voice-transcoding-server
- https://g0wcz.nodestone.io/building-a-transcoder-for-dmr-d-star
- https://ad6dm.net/log/wp-content/uploads/2019/05/How-to-Create-a-Multimode-Digital-Voice-Reflector.pdf
- https://sin.groups.io/g/main/message/355
- https://blog.rosenberg-watt.com/2018/08/14/towards-better-global-dmr-ham-radio-id-generation
- https://tgifnetwork.createaforum.com/hotspot-configurartion/adding-second-hotspot-do-i-need-a-second-dmr-id
- https://dxcanada.ca/dvstick33-by-dvmega-3-channel-transcoding-for-xlx-systems
- https://www.dvmega.nl/dvstick30
- https://github.com/formatc1702/WireViz
- https://maxonamerica.com/download/tm-8000-spec-sheet
- https://maxonamerica.com/product/tm-8000-series-mobile-radio
- https://www.repeater-builder.com/products/stm32-dvm.html
- https://www.masterscommunications.com/products/radio-adapter/ra-index.html
- https://www.masterscommunications.com/products/radio-adapter/ra42.html
- https://www.masterscommunications.com/products/radio-adapter/ra40.html
- https://www.masterscommunications.com/products/radio-adapter/ra35.html
- https://www.repeater-builder.com/products/usb-rim.html
- https://www.repeater-builder.com/products/usb-rim-lite.html
- https://www.arkcorporation.us/blogs/news/48712645-cool-diy-battery-box-on-reddit
- https://www.amazon.ca/Pyramid-PSV300-Heavy-duty-Switching-Supply/dp/B000NPT4TK
- https://www.amazon.com/Universal-Regulated-Benchtop-Converter-Terminals/dp/B09Y1H6C25
Control Software Controller Software: MMDVM Host Controller Mode: Duplex Repeater MMDVMHost Configuration DMR Mode: On (RF Hangtime: 2, Net Hangtime: 20) All other modes disabled MMDVM Display Type: None General Configuration Hostname: ve2cra Node Callsign: VE2CRA CCS7/DMR ID: 302093 Radio Frequency RX: 449.400000 Radio Frequncy TX: 444.400000 Latitude: 45.50 Longitude: -75.85 Town: Ottawa-Gatineau FN25bm Country: Canada URL: https://oarc.net (Manual) Radio/Modem Type: STM32-DVM (USB) Node Type: Public DMR Access List: blank APRS Host Enable: Off APRS Host: noam.aprs2.net System Time Zone: UTC Dashboard Language: english_us DMR Configuration DMR Master: DMRGateway BrandMeister Master: BM_3021_Canada BM Hotspot Security: blank BrandMeister Network ESSID: None BrandMeister Network Enable: On DMR+ Master: DMR+_IPSC2-Canada DMR+ Network: blank DMR+ Network ESSID: None DMR+ Network Enable: Off XLX Master: 197 XLX Startup Module: B XLX Master Enable: On DMR Color Code: 1 DMR EmbeddedLCOnly: Off DMR DumpTAData: Off Mobile GPS Configuration MobileGPS Enable: Off GPS Port: /dev/tty/ACM0 GPS Port Speed: 38400 Firewall Configuration Dashboard Access: Private ircDDBGateway Remote: Private SSH Access: Private Auto AP: On uPNP: On
- https://farnsworth.org/dale/codeplug/editcp main page for Editcp
- https://github.com/dalefarnsworth-dmr source code for editcp, dmrRadio, libraries, etc.
- https://dm3mat.darc.de/qdmr main page for qdmr
- https://github.com/hmatuschek/qdmr source code for qdmr
- https://opengd77.com/viewtopic.php?f=18&t=2002 replacement firmware for Retevis RT90 / TYT MD-9600
- https://opengd77.com/viewtopic.php?f=19&t=2380 replacement firmware for the Retevis RT3S / TYT MD-UV380
- https://opengd77.com/viewtopic.php?f=12&t=1486 new firmware can't use the same CPS
- https://opengd77.com/viewtopic.php?f=18&t=3040 RT90 remote head
- https://m17project.org main page for M17 Project
- https://openrtx.org/# main page for OpenRTX
- https://github.com/OpenRTX OpenRTX firmware, dmrconfig tool, etc.
- https://github.com/open-ham/OpenGD77 clone of closed-source (ironic) OpenGD77 project
- https://github.com/LibreDMR/OpenGD77_UserGuide/blob/master/OpenGD77_User_Guide.md user guide for OpenGD77
- https://twitter.com/m17_project/status/1535977213111242753 FM and M17 living together like cats and dogs
- http://md380.org main page for MD-380 Tools
- https://github.com/travisgoodspeed/md380tools source code for MD-380 Tools
- https://raw.githubusercontent.com/tylert/pocorgtfo/gh-pages/pocorgtfo10.pdf reverse-engineering info
- https://www.pistar.uk/index.php main page for Pi-Star
- https://github.com/M17-Project/Module_17 M17 smart mic
Send a SMS message to the APRS destination (310999 in North America) with the following body... SMSGTE @<phone number> <message content> After a few moments you will receive an ACK message and the recipient will get a text message. To have someone reply to you, send a text message to the number that sent you the text with the body... @<callsign> <message content> After a few moments you should receive a message on your radio!
General format -------------- BBBB12345 BBBB = bandwidth (letters "H", "K", "M", "G" take the place of the decimal) 1 = type of modulation used for the main carrier, not including sub-carriers 2 = type of modulating signal of the main carrier 3 = type of information transmitted 4 = (OPTIONAL) practical details of the transmitted information 5 = (OPTIONAL) method of multiplexing Decoded meanings ---------------- 4K00..... 4.0 kHz bandwidth 6K00..... 6.0 kHz bandwidth 7K34..... 7.34 kHz bandwidth 7K60..... 7.6 kHz bandwidth 8K00..... 8.0 kHz bandwidth 8K10..... 8.1 kHz bandwidth 8K30..... 8.3 kHz bandwidth 8K40..... 8.4 kHz bandwidth 9K00..... 9.0 kHz bandwidth 9K36..... 9.36 kHz bandwidth 10K1..... 10.1 kHz bandwidth 11K2..... 11.2 kHz bandwidth 11K3..... 11.3 kHz bandwidth 12K5..... 12.5 kHz bandwidth 13K6..... 13.6 kHz bandwidth 14K0..... 14.0 kHz bandwidth 16K0..... 16.0 kHz bandwidth 20K0..... 20.0 kHz bandwidth ..H...... some number of Hz bandwidth .H....... some number of Hz bandwidth ..K...... some number of kHz bandwidth .K....... some number of kHz bandwidth ..M...... some number of MHz bandwidth .M....... some number of MHz bandwidth ..G...... some number of GHz bandwidth .G....... some number of GHz bandwidth ....A.... Double-sideband amplitude modulation (e.g. AM broadcast radio) ....D.... Combination of AM and FM or PM ....F.... Frequency modulation (e.g. FM broadcast radio) ....G.... Phase modulation ....H.... Single-sideband modulation with full carrier (e.g. as used by CHU) ....J.... Single-sideband with suppressed carrier (e.g. Shortwave utility and amateur stations) ....W.... Combination of any of the above (for "Type of modulation") ....X.... None of the above (for "Type of modulation") .....1... One channel containing digital information, no subcarrier .....2... One channel containing digital information, using a subcarrier .....3... One channel containing analog information .....7... More than one channel containing digital information .....X... None of the above (for "Type of modulating signal") ......A.. Aural telegraphy, intended to be decoded by ear, such as Morse code ......D.. Data transmission, telemetry or telecommand (remote control) ......E.. Telephony (voice or music intended to be listened to by a human) ......W.. Combination of any of the above (for "Type of transmitted information") ......X.. None of the above (for "Type of transmitted information") .......D. Four-condition code, one condition per signal element .......J. Commercial-quality sound (non-broadcast) ........N None used / Not multiplexed ........T Time-division ........X None of the above (for "Multiplexing") Actual examples --------------- 6K00A3E AM voice 8K00F3E FM voice +-2.5 ppm stability; fits in 12.5 kHz 10K1F3E FM voice +-2.5 kHz deviation; fits in 12.5 kHz 11K2F3E FM voice +-2.5 kHz deviation; fits in 12.5 kHz 13K6F3E FM voice +-3.8 kHz deviation; fits in 20 kHz 16K0F3A FM CW ID +-4.0 kHz deviation; fits in 20 kHz 16K0F3E FM voice +-4.0 kHz deviation; fits in 20 kHz 20K0F3D FM voice +-5.0 kHz deviation; fits in 25 kHz 11K3F1D POCSAG 20K0F1D POCSAG 7K34FXDJN DMR Tier2 7K60FXD DMR Tier2 7K60FXDJN DMR Tier2 7K60FXE DMR Tier2 7K60FXW DMR Tier2 7K60F7W DMR Tier3 7K60F7WDT DMR Tier3 6K00F7W DSTAR 6K00F2A DSTAR CW ID 9K00F.. M17 4FSK; 9600 bps; fits in 12.5 kHz 4K00F1D NXDN 4K00F1E NXDN 4K00F1W NXDN 4K00F2D NXDN 4K00F7W NXDN 8K30F1D NXDN 8K30F1E NXDN 8K30F7W NXDN 8K00F1D P25 Phase1 C4FM 8K10F1D P25 Phase1 C4FM 8K10F1E P25 Phase1 C4FM 8K30F1W P25 Phase1 C4FM 8K40F1D P25 Phase1 C4FM 8K40F1E P25 Phase1 C4FM 9K80F1D P25 Phase2 TDMA 9K80F1E P25 Phase2 TDMA 9K36F1E YSF C4FM 9K36F7W YSF C4FM 11K2F7W YSF C4FM 12K5F7W YSF C4FM 16K0F1D YSF C4FM 16K0F2D YSF C4FM 20K0F7W YSF C4FM
- https://en.wikipedia.org/wiki/Types_of_radio_emissions
- https://wiki.radioreference.com/index.php/Emission_Designator
- https://www.hfunderground.com/wiki/index.php/Emission_Designator
- https://spec.m17project.org/files/M17_spec.pdf
- https://sigidwiki.com/wiki/APRS
- https://sigidwiki.com/wiki/PACKET AX.25/APRS
- https://sigidwiki.com/wiki/POCSAG
- https://sigidwiki.com/wiki/Amplitude_Modulation_(AM)
- https://sigidwiki.com/wiki/NFM_Voice
- https://sigidwiki.com/wiki/Digital_Mobile_Radio_(DMR)
- https://sigidwiki.com/wiki/D-STAR
- https://sigidwiki.com/wiki/LoRa
- https://sigidwiki.com/wiki/M17_RF_Protocol
- https://sigidwiki.com/wiki/Next_Generation_Digital_Narrowband_(NXDN)
- https://sigidwiki.com/wiki/NXDN
- https://sigidwiki.com/wiki/Project_25_(P25)
- https://sigidwiki.com/wiki/P25
- https://sigidwiki.com/wiki/Yaesu_System_Fusion
- https://en.wikipedia.org/wiki/Automatic_Packet_Reporting_System
- https://en.wikipedia.org/wiki/AX.25
- https://en.wikipedia.org/wiki/Digital_mobile_radio
- https://en.wikipedia.org/wiki/D-STAR
- https://en.wikipedia.org/wiki/LoRa
- https://en.wikipedia.org/wiki/M17_(amateur_radio)
- https://en.wikipedia.org/wiki/NXDN
- https://en.wikipedia.org/wiki/Project_25
- https://en.wikipedia.org/wiki/Yaesu_(brand)#Digimode_%22Fusion%22
- https://www.dmrfordummies.com/library what is DMR?
- https://dmrtechnet.net/monday-night-march-31st-the-dmr-tech-net-team-will-go-over-and-discuss-codeplug-best-practices-for-organizing-your-channels-zones-talkgroups
- https://www.jeffreykopcak.com/2017/05/10/dmr-in-amateur-radio-terminology
- https://youtu.be/VExx628R0DM
- https://youtu.be/Lw0Y-jQZMZ0
- https://plus.codes/map
- https://en.wikipedia.org/wiki/Open_Location_Code
- https://github.com/google/open-location-code
- https://github.com/google/open-location-code/wiki/Evaluation-of-Location-Encoding-Systems
- https://www.kschaul.com/post/2023/02/16/how-the-post-is-replacing-mapbox-with-open-source-solutions