From afe8f4403c16f03956d0d014ba37f3f42a36b292 Mon Sep 17 00:00:00 2001 From: thetechprepper Date: Wed, 15 Jul 2026 10:53:16 -0700 Subject: [PATCH 01/14] reticulum - Upgraded MeshChat to v2.4.0 with the EmComm Tools patches --- scripts/install-meshchat.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/install-meshchat.sh b/scripts/install-meshchat.sh index 39d078c..6dba977 100755 --- a/scripts/install-meshchat.sh +++ b/scripts/install-meshchat.sh @@ -1,7 +1,7 @@ #!/bin/bash # Author : Gaston Gonzalez # Date : 13 May 2026 -# Updated : 23 June 2026 +# Updated : 15 July 2026 # Purpose : Install MeshChat for Reticulum set -e trap 'last_command=$current_command; current_command=$BASH_COMMAND' DEBUG @@ -11,7 +11,7 @@ trap 'et-log "\"${last_command}\" command failed with exit code $?."' ERR . ../overlay/opt/emcomm-tools/bin/et-common APP=ReticulumMeshChat -VERSION="2.3.0-R7B7" +VERSION="2.4.0-R7B11" INSTALL_DIR="/opt/${APP}-${VERSION}" INSTALL_BIN_DIR="${INSTALL_DIR}/bin" LINK_PATH="/opt/${APP}" From 5c0559301096e6184c9e2d0b4d10965c2ee24a03 Mon Sep 17 00:00:00 2001 From: thetechprepper Date: Thu, 16 Jul 2026 14:09:58 -0700 Subject: [PATCH 02/14] reticulum - Set mode to AP on the AutoInterface to prevent an announce storm on the local ethernet/wi-fi --- .../skel/.reticulum/config.blueprint.permanent-transport-node | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/overlay/etc/skel/.reticulum/config.blueprint.permanent-transport-node b/overlay/etc/skel/.reticulum/config.blueprint.permanent-transport-node index 206b869..df8f6c4 100644 --- a/overlay/etc/skel/.reticulum/config.blueprint.permanent-transport-node +++ b/overlay/etc/skel/.reticulum/config.blueprint.permanent-transport-node @@ -1,6 +1,6 @@ # Author : Gaston Gonzalez # Date : 7 June 2026 -# Updated : 15 June 2026 +# Updated : 15 July 2026 # Blueprint : Permament Transport Node # Purpose : This configuration is a blueprint for running a # node that runs as a 24x7 transport node with @@ -83,6 +83,7 @@ [[Default Interface]] type = AutoInterface + mode = ap enabled = Yes [[Packet Radio AX.25 KISS]] From 8ee7bf69fe15aa5d50aba627e35bde444eaec5e2 Mon Sep 17 00:00:00 2001 From: thetechprepper Date: Thu, 16 Jul 2026 14:31:04 -0700 Subject: [PATCH 03/14] reticulum - Consistently set enabled to yes (instead of Yes) --- .../.reticulum/config.blueprint.local-network-only-node | 3 ++- .../.reticulum/config.blueprint.permanent-transport-node | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/overlay/etc/skel/.reticulum/config.blueprint.local-network-only-node b/overlay/etc/skel/.reticulum/config.blueprint.local-network-only-node index bef0286..7b573a2 100644 --- a/overlay/etc/skel/.reticulum/config.blueprint.local-network-only-node +++ b/overlay/etc/skel/.reticulum/config.blueprint.local-network-only-node @@ -1,5 +1,6 @@ # Author : Gaston Gonzalez # Date : 14 June 2026 +# Updated : 16 July 2026 # Blueprint : Local network only # Purpose : This configuration is a blueprint for running a node that # only interacts with other nodes on the local Ethernet or @@ -112,4 +113,4 @@ [[Default Interface]] type = AutoInterface - enabled = Yes + enabled = yes diff --git a/overlay/etc/skel/.reticulum/config.blueprint.permanent-transport-node b/overlay/etc/skel/.reticulum/config.blueprint.permanent-transport-node index df8f6c4..36d6a51 100644 --- a/overlay/etc/skel/.reticulum/config.blueprint.permanent-transport-node +++ b/overlay/etc/skel/.reticulum/config.blueprint.permanent-transport-node @@ -1,6 +1,6 @@ # Author : Gaston Gonzalez # Date : 7 June 2026 -# Updated : 15 July 2026 +# Updated : 16 July 2026 # Blueprint : Permament Transport Node # Purpose : This configuration is a blueprint for running a # node that runs as a 24x7 transport node with @@ -84,7 +84,7 @@ [[Default Interface]] type = AutoInterface mode = ap - enabled = Yes + enabled = yes [[Packet Radio AX.25 KISS]] type = AX25KISSInterface @@ -145,7 +145,7 @@ # configure. # [[TCP Client]] # type = TCPClientInterface -# enabled = Yes +# enabled = yes # mode = boundary # # Set the IP address to the remote TCP Server # target_host = IP_ADDRESS_HERE From 25687da7c4c8449fe88d64a4d88b24680873ef54 Mon Sep 17 00:00:00 2001 From: thetechprepper Date: Thu, 16 Jul 2026 14:39:50 -0700 Subject: [PATCH 04/14] reticulum - Consistently set enabled to no (instead of No) --- .../etc/skel/.reticulum/config.blueprint.modem73-only-node | 3 ++- .../etc/skel/.reticulum/config.blueprint.packet-only-node | 4 ++-- .../etc/skel/.reticulum/config.blueprint.rnode-only-node | 6 +++--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/overlay/etc/skel/.reticulum/config.blueprint.modem73-only-node b/overlay/etc/skel/.reticulum/config.blueprint.modem73-only-node index e3b6e85..d547aeb 100644 --- a/overlay/etc/skel/.reticulum/config.blueprint.modem73-only-node +++ b/overlay/etc/skel/.reticulum/config.blueprint.modem73-only-node @@ -1,5 +1,6 @@ # Author : Gaston Gonzalez # Date : 28 June 2026 +# Updated : 16 July 2026 # Blueprint : Radio-Only Node, transport disabled # Purpose : This confguration is a blueprint for a radio-only node. # It uses modem73 as the radio interface. If a supported @@ -82,7 +83,7 @@ [[Default Interface]] type = AutoInterface - enabled = No + enabled = no [[RNode LoRa Interface]] type = RNodeInterface diff --git a/overlay/etc/skel/.reticulum/config.blueprint.packet-only-node b/overlay/etc/skel/.reticulum/config.blueprint.packet-only-node index 6b47185..df2c98a 100644 --- a/overlay/etc/skel/.reticulum/config.blueprint.packet-only-node +++ b/overlay/etc/skel/.reticulum/config.blueprint.packet-only-node @@ -1,6 +1,6 @@ # Author : Gaston Gonzalez # Date : 7 June 2026 -# Updated : 28 June 2026 +# Updated : 16 July 2026 # Blueprint : Radio-Only Node, transport disabled # Purpose : This confguration is a blueprint for a radio-only node. # It uses an AX.25 KISS radio interface. If a supported @@ -84,7 +84,7 @@ [[Default Interface]] type = AutoInterface - enabled = No + enabled = no [[Packet Radio AX.25 KISS]] type = AX25KISSInterface diff --git a/overlay/etc/skel/.reticulum/config.blueprint.rnode-only-node b/overlay/etc/skel/.reticulum/config.blueprint.rnode-only-node index c7430b4..58cbc72 100644 --- a/overlay/etc/skel/.reticulum/config.blueprint.rnode-only-node +++ b/overlay/etc/skel/.reticulum/config.blueprint.rnode-only-node @@ -1,7 +1,7 @@ # Author : Gaston Gonzalez # Date : 7 June 2026 -# Updated : 5 July 2026 -# Blueprint : RNode-Only Node, transport disabled. +# Updated : 16 July 2026 +# Blueprint : RNode-Only Node; transport disabled. # Purpose : This confguration is a blueprint for an RNode-only node. @@ -82,7 +82,7 @@ [[Default Interface]] type = AutoInterface - enabled = No + enabled = no [[RNode LoRa Interface]] type = RNodeInterface From ac599b59cae33769c867e7b166491c86ef6daf54 Mon Sep 17 00:00:00 2001 From: thetechprepper Date: Thu, 16 Jul 2026 15:10:01 -0700 Subject: [PATCH 05/14] mercury - Added Mercury HF modem --- REGRESSION.md | 16 +++++++++++++--- scripts/install-mercury.sh | 36 ++++++++++++++++++++++++++++++++++++ scripts/install.sh | 4 +++- tests/test-mercury.sh | 7 +++++++ 4 files changed, 59 insertions(+), 4 deletions(-) create mode 100755 scripts/install-mercury.sh create mode 100755 tests/test-mercury.sh diff --git a/REGRESSION.md b/REGRESSION.md index 472264d..d6bcced 100644 --- a/REGRESSION.md +++ b/REGRESSION.md @@ -1,7 +1,7 @@ # ETC Regression Tests -- **Build**: ETC R7 Build 11 -- **Date**: 5 July 2026 +- **Build**: ETC R7 Build 12 +- **Date**: 16 July 2026 ## Desktop/Launcher Icons @@ -143,9 +143,19 @@ * [ ] Heltec v4 PnP (/dev/et-lora) * [ ] Offline firmware: rnodeconf --autoinstall --nocheck --fw-version 1.86 * [ ] et-reticulum - * [ ] All blueprints + * [ ] rnode blueprint + * [ ] packet radio blueprint + * [ ] transport blueprint + * [ ] modem73 blueprint + * [ ] local network blueprint + * [ ] internet blueprint * [ ] All permutations of radios and LoRa connected/disconnected +## Modems + +* [ ] modem73 +* [ ] mercury + ## Email * [ ] Thunderbird installed diff --git a/scripts/install-mercury.sh b/scripts/install-mercury.sh new file mode 100755 index 0000000..aed903c --- /dev/null +++ b/scripts/install-mercury.sh @@ -0,0 +1,36 @@ +#!/bin/bash +# Author : Gaston Gonzalez +# Date : 17 July 2025 +# Purpose : Builds and installs the Mercury HF modem +set -e +trap 'last_command=$current_command; current_command=$BASH_COMMAND' DEBUG +trap 'et-log "\"${last_command}\" command failed with exit code $?."' ERR + +. ./env.sh + +APP="mercury" +VERSION="1.9.9" +APP_AND_VERSION="${APP}-${VERSION}" +GIT_TAG="v${VERSION}" +GIT_URL="https://github.com/Rhizomatica/mercury.git" +GIT_WORKSPACE="mercury" +INSTALL_DIR="/opt/${APP_AND_VERSION}" +LINK_PATH="/opt/${APP}" + +et-log "Installing ${APP} ${VERSION}" + +CWD_DIR=`pwd` + +cd ${ET_SRC_DIR} +[[ ! -e ${GIT_WORKSPACE} ]] && git clone ${GIT_URL} ${GIT_WORKSPACE} + +cd ${GIT_WORKSPACE} && git checkout ${GIT_TAG} + +make && make install prefix="${INSTALL_DIR}" + +[[ -e ${LINK_PATH} ]] && rm ${LINK_PATH} +ln -v -s ${INSTALL_DIR} ${LINK_PATH} + +stow -v -d /opt ${APP} -t /usr/local + +cd ${CWD} diff --git a/scripts/install.sh b/scripts/install.sh index 3147437..95a0841 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -2,7 +2,8 @@ # # Author : Gaston Gonzalez # Date : 16 March 2024 -# Updated : 5 July 2026 # Purpose : Main installer for EmComm Tools Community (ETC) +# Updated : 16 July 2026 +# Purpose : Main installer for EmComm Tools Community (ETC) . ./env.sh . ./functions.sh @@ -121,6 +122,7 @@ exitIfNotRoot ./install-reticulum.sh ./install-meshchat.sh ./install-modem73.sh +./install-mercury.sh ./install-offline-rnode-firmware.sh # Debrand Ubuntu diff --git a/tests/test-mercury.sh b/tests/test-mercury.sh new file mode 100755 index 0000000..740d9c9 --- /dev/null +++ b/tests/test-mercury.sh @@ -0,0 +1,7 @@ +#!/bin/bash +# Author : Gaston Gonzalez +# Date : 16 July 2026 +# Purpose : Test Mercury installation + +OUT=$(which mercury) +exit $? From b408d94d3bd20b700d9c5310856c8645591f4389 Mon Sep 17 00:00:00 2001 From: thetechprepper Date: Thu, 16 Jul 2026 16:12:31 -0700 Subject: [PATCH 06/14] mercury - Initial wrapper script for starting the Mercury HF modem --- overlay/etc/skel/.reticulum/README.md | 19 ++- .../config.blueprint.mercury-only-node | 141 ++++++++++++++++++ 2 files changed, 152 insertions(+), 8 deletions(-) create mode 100644 overlay/etc/skel/.reticulum/config.blueprint.mercury-only-node diff --git a/overlay/etc/skel/.reticulum/README.md b/overlay/etc/skel/.reticulum/README.md index ede9738..fb4db4a 100644 --- a/overlay/etc/skel/.reticulum/README.md +++ b/overlay/etc/skel/.reticulum/README.md @@ -26,19 +26,22 @@ the supported tokens below. ET_CALLSIGN ET_RETICULUM_INTERFACE_AUTO_ENABLED ET_RETICULUM_INTERFACE_AX25KISS_ENABLED +ET_RETICULUM_INTERFACE_MERCURY_ENABLED ET_RETICULUM_INTERFACE_MODEM73_ENABLED -ET_RETICULUM_INTERFACE_RNODE_BANDWIDTH -ET_RETICULUM_INTERFACE_RNODE_CODINGRATE -ET_RETICULUM_INTERFACE_RNODE_ENABLED -ET_RETICULUM_INTERFACE_RNODE_FREQUENCY -ET_RETICULUM_INTERFACE_RNODE_SPREADINGFACTOR -ET_RETICULUM_INTERFACE_RNODE_TXPOWER -... ``` * Valid characters are capitalized letters (`A-Z`) and underscores (`_`). * Start with the prefix: `ET_`. * Reticulum specific tokens start with the prefix: `ET_RETICULUM_`. +The following replacement tokens are planned, but have not yet been +implemented. - +``` +ET_RETICULUM_INTERFACE_RNODE_BANDWIDTH +ET_RETICULUM_INTERFACE_RNODE_CODINGRATE +ET_RETICULUM_INTERFACE_RNODE_ENABLED +ET_RETICULUM_INTERFACE_RNODE_FREQUENCY +ET_RETICULUM_INTERFACE_RNODE_SPREADINGFACTOR +ET_RETICULUM_INTERFACE_RNODE_TXPOWER +``` diff --git a/overlay/etc/skel/.reticulum/config.blueprint.mercury-only-node b/overlay/etc/skel/.reticulum/config.blueprint.mercury-only-node new file mode 100644 index 0000000..240fc0a --- /dev/null +++ b/overlay/etc/skel/.reticulum/config.blueprint.mercury-only-node @@ -0,0 +1,141 @@ +# Author : Gaston Gonzalez +# Date : 16 July 2026 +# Blueprint : Radio-Only Node, transport disabled +# Purpose : This confguration is a blueprint for a radio-only node. +# It uses Mercury as the radio interface. If a supported +# et-lora device is detected, it will be enabled, too. + +[reticulum] + + # If you enable Transport, your system will route traffic + # for other peers, pass announces and serve path requests. + # This should only be done for systems that are suited to + # act as transport nodes, ie. if they are stationary and + # always-on. This directive is optional and can be removed + # for brevity. + + enable_transport = False + + + # By default, the first program to launch the Reticulum + # Network Stack will create a shared instance, that other + # programs can communicate with. Only the shared instance + # opens all the configured interfaces directly, and other + # local programs communicate with the shared instance over + # a local socket. This is completely transparent to the + # user, and should generally be turned on. This directive + # is optional and can be removed for brevity. + + share_instance = Yes + + + # If you want to run multiple *different* shared instances + # on the same system, you will need to specify different + # instance names for each. On platforms supporting domain + # sockets, this can be done with the instance_name option: + + instance_name = default + +# You can configure whether Reticulum should discover +# available interfaces from other Transport Instances over +# the network. If this option is enabled, Reticulum will +# collect interface information discovered from the network. + +# discover_interfaces = No + + +# You can configure Reticulum to panic and forcibly close +# if an unrecoverable interface error occurs, such as the +# hardware device for an interface disappearing. This is +# an optional directive, and can be left out for brevity. +# This behaviour is disabled by default. + +# panic_on_interface_error = No + + +# If you're connecting to a large external network, you +# can use one or more external blackhole list to block +# spammy and excessive announces onto your network. This +# funtionality is especially useful if you're hosting public +# entrypoints or gateways. The list source below provides a +# functional example, but better, more timely maintained +# lists probably exist in the community. + +# blackhole_sources = 521c87a83afb8f29e4455e77930b973b + + +[logging] + # Valid log levels are 0 through 7: + # 0: Log only critical information + # 1: Log errors and lower log levels + # 2: Log warnings and lower log levels + # 3: Log notices and lower log levels + # 4: Log info and lower (this is the default) + # 5: Verbose logging + # 6: Debug logging + # 7: Extreme logging + + loglevel = 4 + + +[interfaces] + + [[Default Interface]] + type = AutoInterface + enabled = No + + [[RNode LoRa Interface]] + type = RNodeInterface + mode = roaming + #enabled = {{ET_RETICULUM_INTERFACE_RNODE_ENABLED}} + enabled = no + + port = /dev/et-lora + + # Set frequency to 915 MHz + frequency = 915000000 + #frequency = {{ET_RETICULUM_INTERFACE_RNODE_FREQUENCY}} + + # Set LoRa bandwidth to 125 KHz + bandwidth = 125000 + #bandwidth = {{ET_RETICULUM_INTERFACE_RNODE_BANDWIDTH}} + + # Set TX power in dBm + # + # 7 dBm = 5 mW + # 10 dBm = 10 mW + # 14 dBm = 25 mW + # 17 dBm = 50 mW + # 20 dBm = 100 mW + # 22 dBm = 158 mW + # 24 dBm = 251 mW + # 27 dBm = 501 mW + # 28 dBm = 631 mW + # 30 dBm = 1000 mW (1 W) + txpower = {{ET_RETICULUM_INTERFACE_RNODE_TXPOWER}} + + # Select spreading factor 8. Valid + # range is 7 through 12, with 7 + # being the fastest and 12 having + # the longest range. + spreadingfactor = 9 + #spreadingfactor = {{ET_RETICULUM_INTERFACE_RNODE_SPREADINGFACTOR}} + + # Select coding rate 5. Valid range + # is 5 throough 8, with 5 being the + # fastest, and 8 the longest range. + codingrate = 5 + #codingrate = {{ET_RETICULUM_INTERFACE_RNODE_CODINGRATE}} + + # See https://github.com/Rhizomatica/mercury/blob/mercuryv2/docs/RETICULUM.md + [[Mercury HF]] + type = TCPClientInterface + interface_enabled = {{ET_RETICULUM_INTERFACE_MERCURY_ENABLED}} + kiss_framing = yes + target_host = 127.0.0.1 + target_port = 8100 + + # Index Mode Payload Rate (bps) + # 0 DATAC1 980 + # 9 DATAC17 1410 + bitrate = 980 From 3362164eb02cdfc90843de764034d91707cf9a47 Mon Sep 17 00:00:00 2001 From: thetechprepper Date: Thu, 16 Jul 2026 16:17:09 -0700 Subject: [PATCH 07/14] mercury - Initial wrapper script for starting the Mercury HF modem --- overlay/opt/emcomm-tools/bin/et-mercury | 104 ++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100755 overlay/opt/emcomm-tools/bin/et-mercury diff --git a/overlay/opt/emcomm-tools/bin/et-mercury b/overlay/opt/emcomm-tools/bin/et-mercury new file mode 100755 index 0000000..54704f8 --- /dev/null +++ b/overlay/opt/emcomm-tools/bin/et-mercury @@ -0,0 +1,104 @@ +#!/bin/bash +# +# Author : Gaston Gonzalez +# Date : 16 July 2026 +# Purpose : Wrapper script for starting Mercury with PnP support +# +# Preconditions: +# 1. Supported radio and audio interface are connected and properly detected +# +# Postconditions: +# 1. Mercury started with sane defaults +# +# Notes: +# +# Mercury supports many modulation types and configuration options. To +# keep usage simple, only three modulation settings have been configured +# that map to a combination of reliability and speed for most general +# purpose applications. + +usage() { + echo "usage: $(basename $0) " + echo " " + echo " reliability - Max reliability (Slower Speed) [DATAC1]" + echo " balanced - Balanced (Reliability and Speed) [DATAC17]" + echo " fast - Fast (Low Reliability) [QAM16C2]" +} + +if [[ $# -ne 1 ]]; then + et-log "Can't started Mercury modem. Mode not specified." + usage + exit 1 +fi + +MODE="$1" + +case "${MODE}" in + reliability) + MODE_INDEX="0" + ;; + balanced) + MODE_INDEX="9" + ;; + fast) + MODE_INDEX="10" + ;; + *) + et-log "Can't started Mercury modem. Mode not supported." + usage + exit 1 + ;; +esac + +[[ -z ${ET_LOG_DIR} ]] && ET_LOG_DIR="${HOME}/.local/share/emcomm-tools" +[[ ! -e ${ET_LOG_DIR} ]] && mkdir -p ${ET_LOG_DIR} + +start() { + update_config + + if [[ $? -eq 0 ]]; then + + systemctl is-active --quiet rigctld + if [[ $? -ne 0 ]]; then + et-log "Can't start Mercury. rigctld not running. Ensure radio is selected." + exit 1 + fi + + ALSA_DEVICE=$(et-system-info et-audio-card) + + CMD="mercury -m ${MODE_INDEX} -i plughw:${ALSA_DEVICE} -o plughw:${ALSA_DEVICE} -A 127.0.0.1:4532" + + et-log "Starting Mercury in mode ${MODE} with: '${CMD}'" + echo + ${CMD} + else + et-log "Error configurating modem. Can't start Mercury" + exit 1 + fi +} + +update_config () { + + et-log "Attempting to start Mercury in mode: '${MODE}'" + + # 1. Check if the symlink was created by the udev rules + if [[ -e /dev/et-audio ]]; then + + # 2. Check that this device was properly tagged with the ET_AUDIO env variable with a udev rule + APLAY_OUT=$(arecord -l | grep ET_AUDIO) + if [[ $? -eq 0 ]]; then + + # Configure ALSA settings for sound card + /opt/emcomm-tools/bin/et-audio update-config + + else + et-log "No ET_AUDIO device detected." + exit 1 + fi + else + et-log "No ET_AUDIO device plugged in." + exit 1 + fi +} + +start From 24bc105bbc365a25c3e6c18247293a61518ca2be Mon Sep 17 00:00:00 2001 From: thetechprepper Date: Thu, 16 Jul 2026 16:24:56 -0700 Subject: [PATCH 08/14] mercury - Added user systemd services for starting the Mercury modem at different speeds --- .../user/et-service-mercury-balanced.service | 20 +++++++++++++++++++ .../user/et-service-mercury-fast.service | 20 +++++++++++++++++++ .../et-service-mercury-reliability.service | 20 +++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 overlay/etc/skel/.config/systemd/user/et-service-mercury-balanced.service create mode 100644 overlay/etc/skel/.config/systemd/user/et-service-mercury-fast.service create mode 100644 overlay/etc/skel/.config/systemd/user/et-service-mercury-reliability.service diff --git a/overlay/etc/skel/.config/systemd/user/et-service-mercury-balanced.service b/overlay/etc/skel/.config/systemd/user/et-service-mercury-balanced.service new file mode 100644 index 0000000..c1c9c7f --- /dev/null +++ b/overlay/etc/skel/.config/systemd/user/et-service-mercury-balanced.service @@ -0,0 +1,20 @@ +# Author : Gaston Gonzalez +# Date : 16 July 2026 +# Purpose : User systemd unit file for EmComm Tools that starts mercury +# : in a balanced configuration. +# +# Usage: +# Check status : systemctl --user status et-service-mercury-balanced +# Start service : systemctl --user start et-service-mercury-balanced +# Stop service : systemctl --user stop et-service-mercury-balanced +# Reload this config : systemctl --user daemon-reload + +[Unit] +Description=EmComm Tools mercury default service for balanced performance + +[Service] +ExecStart=/opt/emcomm-tools/bin/et-mercury balanced +Restart=no + +[Install] +WantedBy=multi-user.target diff --git a/overlay/etc/skel/.config/systemd/user/et-service-mercury-fast.service b/overlay/etc/skel/.config/systemd/user/et-service-mercury-fast.service new file mode 100644 index 0000000..c66e698 --- /dev/null +++ b/overlay/etc/skel/.config/systemd/user/et-service-mercury-fast.service @@ -0,0 +1,20 @@ +# Author : Gaston Gonzalez +# Date : 16 July 2026 +# Purpose : User systemd unit file for EmComm Tools that starts mercury +# : in a fast configuration. +# +# Usage: +# Check status : systemctl --user status et-service-mercury-fast +# Start service : systemctl --user start et-service-mercury-fast +# Stop service : systemctl --user stop et-service-mercury-fast +# Reload this config : systemctl --user daemon-reload + +[Unit] +Description=EmComm Tools mercury default service for fast performance + +[Service] +ExecStart=/opt/emcomm-tools/bin/et-mercury fast +Restart=no + +[Install] +WantedBy=multi-user.target diff --git a/overlay/etc/skel/.config/systemd/user/et-service-mercury-reliability.service b/overlay/etc/skel/.config/systemd/user/et-service-mercury-reliability.service new file mode 100644 index 0000000..44a9664 --- /dev/null +++ b/overlay/etc/skel/.config/systemd/user/et-service-mercury-reliability.service @@ -0,0 +1,20 @@ +# Author : Gaston Gonzalez +# Date : 16 July 2026 +# Purpose : User systemd unit file for EmComm Tools that starts mercury +# : in a reliability configuration. +# +# Usage: +# Check status : systemctl --user status et-service-mercury-reliability +# Start service : systemctl --user start et-service-mercury-reliability +# Stop service : systemctl --user stop et-service-mercury-reliability +# Reload this config : systemctl --user daemon-reload + +[Unit] +Description=EmComm Tools mercury default service for reliability performance + +[Service] +ExecStart=/opt/emcomm-tools/bin/et-mercury reliability +Restart=no + +[Install] +WantedBy=multi-user.target From 3c79b31cfb72c54abc2012efc5d72c650c03d291 Mon Sep 17 00:00:00 2001 From: thetechprepper Date: Thu, 16 Jul 2026 16:32:21 -0700 Subject: [PATCH 09/14] mercury - Updated et-kill-all to kill all modem73 and mercury modems --- overlay/opt/emcomm-tools/bin/et-kill-all | 11 ++++++++++- overlay/opt/emcomm-tools/bin/et-reticulum | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/overlay/opt/emcomm-tools/bin/et-kill-all b/overlay/opt/emcomm-tools/bin/et-kill-all index bea4a3e..35c1a77 100755 --- a/overlay/opt/emcomm-tools/bin/et-kill-all +++ b/overlay/opt/emcomm-tools/bin/et-kill-all @@ -2,7 +2,7 @@ # # Author : Gaston Gonzalez # Date : 12 November 2024 -# Updated : 29 June 2026 +# Updated : 16 July 2026 # Purpose : Stops all EmComm Tools soundcard-based services (i.e. modems) # and radio applications to ensure a clean start for the next mode. @@ -31,8 +31,17 @@ stop_all_services() { # Stop modem73 with a sledge hammer (belt and suspenders) as the current # 1.0.7 version can hang on exit. systemctl --user stop et-service-modem73-default + systemctl --user stop et-service-modem73-reliability + systemctl --user stop et-service-modem73-fast + systemctl --user stop et-service-modem73-faster + systemctl --user stop et-service-modem73-fastest pkill -9 modem73 + # Stop the Mercury HF modem + systemctl --user stop et-service-mercury-balanced + systemctl --user stop et-service-mercury-reliability + systemctl --user stop et-service-mercury-fast + # Stop VARA with a sledge hammer pkill et-winlink pkill et-vara diff --git a/overlay/opt/emcomm-tools/bin/et-reticulum b/overlay/opt/emcomm-tools/bin/et-reticulum index 9d57456..f420650 100755 --- a/overlay/opt/emcomm-tools/bin/et-reticulum +++ b/overlay/opt/emcomm-tools/bin/et-reticulum @@ -2,7 +2,7 @@ # # Author : Gaston Gonzalez # Date : 12 May 2026 -# Updated : 30 June 2026 +# Updated : 16 July 2026 # Purpose : Wrapper script for starting Reticulum with PnP support # # Preconditions: From bcafbee0d846f0ca4acb7006ba666f3970a2c4f5 Mon Sep 17 00:00:00 2001 From: thetechprepper Date: Thu, 16 Jul 2026 16:52:10 -0700 Subject: [PATCH 10/14] reticulum - Removed the RNode interface from all the radio-only interfaces (i.e., packet, modem73, and mercury) --- .../config.blueprint.mercury-only-node | 46 +------------------ .../config.blueprint.modem73-only-node | 45 +----------------- .../config.blueprint.packet-only-node | 45 +----------------- overlay/opt/emcomm-tools/bin/et-reticulum | 32 +++++++++++++ 4 files changed, 35 insertions(+), 133 deletions(-) diff --git a/overlay/etc/skel/.reticulum/config.blueprint.mercury-only-node b/overlay/etc/skel/.reticulum/config.blueprint.mercury-only-node index 240fc0a..1d2907c 100644 --- a/overlay/etc/skel/.reticulum/config.blueprint.mercury-only-node +++ b/overlay/etc/skel/.reticulum/config.blueprint.mercury-only-node @@ -2,8 +2,7 @@ # Date : 16 July 2026 # Blueprint : Radio-Only Node, transport disabled # Purpose : This confguration is a blueprint for a radio-only node. -# It uses Mercury as the radio interface. If a supported -# et-lora device is detected, it will be enabled, too. +# It uses Mercury as the radio interface. [reticulum] @@ -82,51 +81,8 @@ [[Default Interface]] type = AutoInterface - enabled = No - - [[RNode LoRa Interface]] - type = RNodeInterface - mode = roaming - #enabled = {{ET_RETICULUM_INTERFACE_RNODE_ENABLED}} enabled = no - port = /dev/et-lora - - # Set frequency to 915 MHz - frequency = 915000000 - #frequency = {{ET_RETICULUM_INTERFACE_RNODE_FREQUENCY}} - - # Set LoRa bandwidth to 125 KHz - bandwidth = 125000 - #bandwidth = {{ET_RETICULUM_INTERFACE_RNODE_BANDWIDTH}} - - # Set TX power in dBm - # - # 7 dBm = 5 mW - # 10 dBm = 10 mW - # 14 dBm = 25 mW - # 17 dBm = 50 mW - # 20 dBm = 100 mW - # 22 dBm = 158 mW - # 24 dBm = 251 mW - # 27 dBm = 501 mW - # 28 dBm = 631 mW - # 30 dBm = 1000 mW (1 W) - txpower = {{ET_RETICULUM_INTERFACE_RNODE_TXPOWER}} - - # Select spreading factor 8. Valid - # range is 7 through 12, with 7 - # being the fastest and 12 having - # the longest range. - spreadingfactor = 9 - #spreadingfactor = {{ET_RETICULUM_INTERFACE_RNODE_SPREADINGFACTOR}} - - # Select coding rate 5. Valid range - # is 5 throough 8, with 5 being the - # fastest, and 8 the longest range. - codingrate = 5 - #codingrate = {{ET_RETICULUM_INTERFACE_RNODE_CODINGRATE}} - # See https://github.com/Rhizomatica/mercury/blob/mercuryv2/docs/RETICULUM.md [[Mercury HF]] type = TCPClientInterface diff --git a/overlay/etc/skel/.reticulum/config.blueprint.modem73-only-node b/overlay/etc/skel/.reticulum/config.blueprint.modem73-only-node index d547aeb..80b3245 100644 --- a/overlay/etc/skel/.reticulum/config.blueprint.modem73-only-node +++ b/overlay/etc/skel/.reticulum/config.blueprint.modem73-only-node @@ -3,8 +3,7 @@ # Updated : 16 July 2026 # Blueprint : Radio-Only Node, transport disabled # Purpose : This confguration is a blueprint for a radio-only node. -# It uses modem73 as the radio interface. If a supported -# et-lora device is detected, it will be enabled, too. +# It uses modem73 as the radio interface. [reticulum] @@ -85,48 +84,6 @@ type = AutoInterface enabled = no - [[RNode LoRa Interface]] - type = RNodeInterface - mode = roaming - enabled = {{ET_RETICULUM_INTERFACE_RNODE_ENABLED}} - - port = /dev/et-lora - - # Set frequency to 915 MHz - frequency = 915000000 - #frequency = {{ET_RETICULUM_INTERFACE_RNODE_FREQUENCY}} - - # Set LoRa bandwidth to 125 KHz - bandwidth = 125000 - #bandwidth = {{ET_RETICULUM_INTERFACE_RNODE_BANDWIDTH}} - - # Set TX power in dBm - # - # 7 dBm = 5 mW - # 10 dBm = 10 mW - # 14 dBm = 25 mW - # 17 dBm = 50 mW - # 20 dBm = 100 mW - # 22 dBm = 158 mW - # 24 dBm = 251 mW - # 27 dBm = 501 mW - # 28 dBm = 631 mW - # 30 dBm = 1000 mW (1 W) - txpower = {{ET_RETICULUM_INTERFACE_RNODE_TXPOWER}} - - # Select spreading factor 8. Valid - # range is 7 through 12, with 7 - # being the fastest and 12 having - # the longest range. - spreadingfactor = 9 - #spreadingfactor = {{ET_RETICULUM_INTERFACE_RNODE_SPREADINGFACTOR}} - - # Select coding rate 5. Valid range - # is 5 throough 8, with 5 being the - # fastest, and 8 the longest range. - codingrate = 5 - #codingrate = {{ET_RETICULUM_INTERFACE_RNODE_CODINGRATE}} - [[modem73]] type = Modem73Interface mode = roaming diff --git a/overlay/etc/skel/.reticulum/config.blueprint.packet-only-node b/overlay/etc/skel/.reticulum/config.blueprint.packet-only-node index df2c98a..d03764a 100644 --- a/overlay/etc/skel/.reticulum/config.blueprint.packet-only-node +++ b/overlay/etc/skel/.reticulum/config.blueprint.packet-only-node @@ -3,8 +3,7 @@ # Updated : 16 July 2026 # Blueprint : Radio-Only Node, transport disabled # Purpose : This confguration is a blueprint for a radio-only node. -# It uses an AX.25 KISS radio interface. If a supported -# et-lora device is detected, it will be enabled, too. +# It uses an AX.25 KISS radio interface. [reticulum] @@ -96,45 +95,3 @@ port = /tmp/kisstnc mtu = 256 - - [[RNode LoRa Interface]] - type = RNodeInterface - mode = roaming - enabled = {{ET_RETICULUM_INTERFACE_RNODE_ENABLED}} - - port = /dev/et-lora - - # Set frequency to 915 MHz - frequency = 915000000 - #frequency = {{ET_RETICULUM_INTERFACE_RNODE_FREQUENCY}} - - # Set LoRa bandwidth to 125 KHz - bandwidth = 125000 - #bandwidth = {{ET_RETICULUM_INTERFACE_RNODE_BANDWIDTH}} - - # Set TX power in dBm - # - # 7 dBm = 5 mW - # 10 dBm = 10 mW - # 14 dBm = 25 mW - # 17 dBm = 50 mW - # 20 dBm = 100 mW - # 22 dBm = 158 mW - # 24 dBm = 251 mW - # 27 dBm = 501 mW - # 28 dBm = 631 mW - # 30 dBm = 1000 mW (1 W) - txpower = {{ET_RETICULUM_INTERFACE_RNODE_TXPOWER}} - - # Select spreading factor 8. Valid - # range is 7 through 12, with 7 - # being the fastest and 12 having - # the longest range. - spreadingfactor = 9 - #spreadingfactor = {{ET_RETICULUM_INTERFACE_RNODE_SPREADINGFACTOR}} - - # Select coding rate 5. Valid range - # is 5 throough 8, with 5 being the - # fastest, and 8 the longest range. - codingrate = 5 - #codingrate = {{ET_RETICULUM_INTERFACE_RNODE_CODINGRATE}} diff --git a/overlay/opt/emcomm-tools/bin/et-reticulum b/overlay/opt/emcomm-tools/bin/et-reticulum index f420650..66ea060 100755 --- a/overlay/opt/emcomm-tools/bin/et-reticulum +++ b/overlay/opt/emcomm-tools/bin/et-reticulum @@ -108,6 +108,13 @@ if [[ $? -eq 0 ]]; then modem_options+=("modem73-fastest" "Fastest (Lowest Reliability) [QAM64]") fi + HAS_MERCURY_CONFIG=`grep "Mercury HF" ~/.reticulum/config` + if [[ $? -eq 0 ]]; then + modem_options+=("mercury-reliability" "Max reliability (Slower Speed) [DATAC1]") + modem_options+=("mercury-balanced" "Balanced (Reliability and Speed) [DATAC17]") + modem_options+=("mercury-fast" "Fast (Low Reliability) [QAM16C2]") + fi + modem_choice=$(dialog \ --clear \ --title "Reticulum Configuration" \ @@ -156,6 +163,18 @@ if [[ $? -eq 0 ]]; then et-log "Starting modem73 in fastest mode" start_and_wait_for_service et-service-modem73-fastest ;; + mercury-reliability) + et-log "Starting mercury in reliability mode" + start_and_wait_for_service et-service-mercury-reliability + ;; + mercury-balanced) + et-log "Starting mercury in balanced mode" + start_and_wait_for_service et-service-mercury-balanced + ;; + mercury-fast) + et-log "Starting mercury in fast mode" + start_and_wait_for_service et-service-mercury-fast + ;; *) et-log "No modem specified" ;; @@ -178,6 +197,19 @@ else fi sed -i "s|{{ET_RETICULUM_INTERFACE_MODEM73_ENABLED}}|${INTERFACE_MODEM73_ENABLED}|g" ${RETICULUM_CONF_FILE} +############################################################ +# Mercurcy HF interface updates +############################################################ + +# Enable/disable intereface based on PnP device detection +IS_MERCURY_RUNNING=`ps -ef | grep [m]ercury` +if [[ $? -eq 0 ]]; then + INTERFACE_MERCURY_ENABLED="yes" +else + INTERFACE_MERCURY_ENABLED="no" +fi +sed -i "s|{{ET_RETICULUM_INTERFACE_MERCURY_ENABLED}}|${INTERFACE_MERCURY_ENABLED}|g" ${RETICULUM_CONF_FILE} + ############################################################ # AX.25 KISS (Packet Radio) interface updates ############################################################ From 716cf3c1449127c4f59282cad785d5139e938ec6 Mon Sep 17 00:00:00 2001 From: thetechprepper Date: Thu, 16 Jul 2026 17:08:14 -0700 Subject: [PATCH 11/14] mercury - Disabled the following Mercury modes (DATAC17 and QAM16C2) as they do not appear as valid indexes in version 1.9.9 --- .../skel/.reticulum/config.blueprint.mercury-only-node | 3 ++- overlay/opt/emcomm-tools/bin/et-mercury | 9 +++++++++ overlay/opt/emcomm-tools/bin/et-reticulum | 7 +++++-- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/overlay/etc/skel/.reticulum/config.blueprint.mercury-only-node b/overlay/etc/skel/.reticulum/config.blueprint.mercury-only-node index 1d2907c..0fb4276 100644 --- a/overlay/etc/skel/.reticulum/config.blueprint.mercury-only-node +++ b/overlay/etc/skel/.reticulum/config.blueprint.mercury-only-node @@ -93,5 +93,6 @@ # Index Mode Payload Rate (bps) # 0 DATAC1 980 - # 9 DATAC17 1410 + # 9 DATAC17 1410 (not yet supported) + # 10 QAM16C2 3100 (not yet supported) bitrate = 980 diff --git a/overlay/opt/emcomm-tools/bin/et-mercury b/overlay/opt/emcomm-tools/bin/et-mercury index 54704f8..6b21dd6 100755 --- a/overlay/opt/emcomm-tools/bin/et-mercury +++ b/overlay/opt/emcomm-tools/bin/et-mercury @@ -16,6 +16,11 @@ # keep usage simple, only three modulation settings have been configured # that map to a combination of reliability and speed for most general # purpose applications. +# +# The DATAC17 and QAM16C2 modes are documented on the RETICULUM.md +# documenation on the mercury GitHub project, but are not yet supported +# in version 1.9.9. Disabling these options from now. + usage() { echo "usage: $(basename $0) " @@ -39,9 +44,13 @@ case "${MODE}" in ;; balanced) MODE_INDEX="9" + et-log "Mode not yet supported." + exit 1 ;; fast) MODE_INDEX="10" + et-log "Mode not yet supported." + exit 1 ;; *) et-log "Can't started Mercury modem. Mode not supported." diff --git a/overlay/opt/emcomm-tools/bin/et-reticulum b/overlay/opt/emcomm-tools/bin/et-reticulum index 66ea060..ed1f4d3 100755 --- a/overlay/opt/emcomm-tools/bin/et-reticulum +++ b/overlay/opt/emcomm-tools/bin/et-reticulum @@ -111,8 +111,11 @@ if [[ $? -eq 0 ]]; then HAS_MERCURY_CONFIG=`grep "Mercury HF" ~/.reticulum/config` if [[ $? -eq 0 ]]; then modem_options+=("mercury-reliability" "Max reliability (Slower Speed) [DATAC1]") - modem_options+=("mercury-balanced" "Balanced (Reliability and Speed) [DATAC17]") - modem_options+=("mercury-fast" "Fast (Low Reliability) [QAM16C2]") + # The modes below, DATAC17 and QAM16C2, are documented on the RETICULUM.md + # documenation on the mercury GitHub project, but are not yet supported in + # version 1.9.9. Disabling these options from the UI for now. + #modem_options+=("mercury-balanced" "Balanced (Reliability and Speed) [DATAC17]") + #modem_options+=("mercury-fast" "Fast (Low Reliability) [QAM16C2]") fi modem_choice=$(dialog \ From dfda7d570b1db26c1e1e70020e640fc34e276e29 Mon Sep 17 00:00:00 2001 From: thetechprepper Date: Thu, 16 Jul 2026 17:12:43 -0700 Subject: [PATCH 12/14] reticulum - Exit if user does not select a modem --- overlay/opt/emcomm-tools/bin/et-reticulum | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/overlay/opt/emcomm-tools/bin/et-reticulum b/overlay/opt/emcomm-tools/bin/et-reticulum index ed1f4d3..9278b5d 100755 --- a/overlay/opt/emcomm-tools/bin/et-reticulum +++ b/overlay/opt/emcomm-tools/bin/et-reticulum @@ -125,6 +125,14 @@ if [[ $? -eq 0 ]]; then 13 70 10 \ "${modem_options[@]}" \ 2>&1 >/dev/tty) + EXIT_STATUS=$? + + tput sgr0 && clear + + if [[ ${EXIT_STATUS} -ne 0 ]]; then + et-log "No modem selected" + exit ${EXIT_STATUS} + fi dialog \ --title "Note on Reticulum" \ From 10d0a967a79133f8b18d3b5b27c8ab049774f68d Mon Sep 17 00:00:00 2001 From: thetechprepper Date: Thu, 16 Jul 2026 17:14:58 -0700 Subject: [PATCH 13/14] reticulum - Exit if user does not want to run encryption --- overlay/opt/emcomm-tools/bin/et-reticulum | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/overlay/opt/emcomm-tools/bin/et-reticulum b/overlay/opt/emcomm-tools/bin/et-reticulum index 9278b5d..d40cf41 100755 --- a/overlay/opt/emcomm-tools/bin/et-reticulum +++ b/overlay/opt/emcomm-tools/bin/et-reticulum @@ -143,7 +143,8 @@ if [[ $? -eq 0 ]]; then tput sgr 0 && clear if [[ ${EXIT_STATUS} -ne 0 ]]; then - et-log "User canceled modem selection. Packet modem will not be started and interface will not be enabled." + et-log "User does not want to start modem given required use of encryption." + exit ${EXIT_STATUS} else case ${modem_choice} in 300-packet) From 5e39f0c3786f175f13223271c3dfb3ddfa9e1085 Mon Sep 17 00:00:00 2001 From: thetechprepper Date: Thu, 16 Jul 2026 17:59:01 -0700 Subject: [PATCH 14/14] reticulum - Set mode to roaming for Mercury interface --- overlay/etc/skel/.reticulum/config.blueprint.mercury-only-node | 1 + 1 file changed, 1 insertion(+) diff --git a/overlay/etc/skel/.reticulum/config.blueprint.mercury-only-node b/overlay/etc/skel/.reticulum/config.blueprint.mercury-only-node index 0fb4276..763a0ef 100644 --- a/overlay/etc/skel/.reticulum/config.blueprint.mercury-only-node +++ b/overlay/etc/skel/.reticulum/config.blueprint.mercury-only-node @@ -86,6 +86,7 @@ # See https://github.com/Rhizomatica/mercury/blob/mercuryv2/docs/RETICULUM.md [[Mercury HF]] type = TCPClientInterface + mode = roaming interface_enabled = {{ET_RETICULUM_INTERFACE_MERCURY_ENABLED}} kiss_framing = yes target_host = 127.0.0.1