diff --git a/REGRESSION.md b/REGRESSION.md index 1e67848..fdc731b 100644 --- a/REGRESSION.md +++ b/REGRESSION.md @@ -1,7 +1,7 @@ # ETC Regression Tests -- **Build**: ETC R6 Build 12 -- **Date**: 27 March 2026 +- **Build**: ETC R7 Build 1 +- **Date**: 16 April 2026 ## Desktop/Launcher Icons @@ -82,6 +82,7 @@ * [ ] RMS station listed * [ ] Select RMS gateway => VFO updated * [ ] Connect +* [ ] wwv ## Bluetooth TNC diff --git a/overlay/etc/skel/.bash_profile b/overlay/etc/skel/.bash_profile index f0fb8ab..8b31d4d 100644 --- a/overlay/etc/skel/.bash_profile +++ b/overlay/etc/skel/.bash_profile @@ -1,6 +1,6 @@ # Author : Gaston Gonzalez # Date : 23 April 2024 -# Updated : 18 March 2025 +# Updated : 16 April 2026 # Description : bash profile # All user accounts should be in the 'et-data' group to allow data sharing with @@ -13,6 +13,7 @@ xset b off alias pbcopy='xsel --clipboard --input' alias pbpaste='xsel --clipboard --output' +alias et-clock='tty-clock -c -s -b' RED='\x1B[1;31m' BLUE='\x1B[1;34m' diff --git a/overlay/etc/sudoers.d/et-wwv b/overlay/etc/sudoers.d/et-wwv new file mode 100644 index 0000000..a1d2306 --- /dev/null +++ b/overlay/etc/sudoers.d/et-wwv @@ -0,0 +1 @@ +%sudo ALL=(ALL) NOPASSWD: /opt/emcomm-tools/sbin/wrapper-et-wwv.sh diff --git a/overlay/opt/emcomm-tools/bin/et-auth-table.sh b/overlay/opt/emcomm-tools/bin/et-auth-table.sh new file mode 100755 index 0000000..5a0b94e --- /dev/null +++ b/overlay/opt/emcomm-tools/bin/et-auth-table.sh @@ -0,0 +1,23 @@ +#/bin/bash +# Author : Gaston Gonzalez +# Date : 7 January 2025 +# Purpose : Generates an authentication table + +top=( {A..M} ) +side=( {N..Z} ) +chars=( {A..Z} {0..9} ) + +printf "%2s " "" +for col in "${top[@]}"; do + printf "%2s " "$col" +done +printf "\n" + +for row in "${side[@]}"; do + printf "%2s " "$row" + for col in "${top[@]}"; do + rand_index=$(( RANDOM % ${#chars[@]} )) + printf "%2s " "${chars[$rand_index]}" + done + printf "\n" +done diff --git a/overlay/opt/emcomm-tools/bin/et-common b/overlay/opt/emcomm-tools/bin/et-common index b3e94aa..104e998 100755 --- a/overlay/opt/emcomm-tools/bin/et-common +++ b/overlay/opt/emcomm-tools/bin/et-common @@ -1,7 +1,7 @@ #!/bin/bash # Author : Gaston Gonzalez # Date : 1 February 2025 -# Updated : 7 October 2025 +# Updated : 16 April 2026 # Purpose : Common environment variables and functions # Standardized device paths for supported hardware @@ -40,6 +40,13 @@ exit_if_no_sdr() { fi } +exit_if_no_audio() { + if [[ ! -e ${ET_DEVICE_AUDIO} ]]; then + et-log "No ${ET_DEVICE_AUDIO} detected." + exit 1 + fi +} + exit_on_service_failure() { local systemd_unit_name="$1" systemctl is-active --user --quiet "${systemd_unit_name}" diff --git a/overlay/opt/emcomm-tools/bin/et-mode b/overlay/opt/emcomm-tools/bin/et-mode index 762ed3d..3700d3b 100755 --- a/overlay/opt/emcomm-tools/bin/et-mode +++ b/overlay/opt/emcomm-tools/bin/et-mode @@ -2,7 +2,7 @@ # # Author : Gaston Gonzalez # Date : 6 November 2024 -# Updated : 25 March 2025 +# Updated : 16 March 2026 # Purpose : Configures the system for a specific mode of operation # Use a simple text file to save the state of the last mode selected @@ -23,6 +23,7 @@ MODE_ID_WINLINK_ARDOP="winlink-ardop" MODE_ID_WINLINK_PACKET="winlink-packet" MODE_ID_WINLINK_VARA_HF="winlink-vara-hf" MODE_ID_WINLINK_VARA_FM="winlink-vara-fm" +MODE_ID_TIME_WWV="time-wwv" # Default to 1200 baud packet for terminal sessions TERM_MODE=1200 @@ -128,6 +129,11 @@ select_term_mode () { fi } +wwv_mode () { + dialog --title "Note on WWV" --msgbox "Manually set your radio to AM and tune it to one of the WWV frequencies appropriate for this operating time.\n\nTry: 2.5, 5, 10, 15 or 20 MHz." 0 0 + tput sgr 0 && clear +} + # Build list of options options=() options+=("${MODE_ID_NONE}" "No mode selected") @@ -150,6 +156,8 @@ if [ -e "${HOME}/.wine32/drive_c/VARA/VARA.exe" ]; then options+=("${MODE_ID_WINLINK_VARA_HF}" "Winlink over HF (VARA HF)") fi +options+=("${MODE_ID_TIME_WWV}" "Sync clock to WWV") + # Prompt user for option and save exit status SELECTED_MODE=$(dialog --clear --menu "Select a mode:" 18 65 10 "${options[@]}" 3>&1 1>&2 2>&3) exit_status=$? @@ -263,6 +271,10 @@ if [ $exit_status -eq 0 ]; then sleep 1 min http://localhost:8080 2>/dev/null ;; + ${MODE_ID_TIME_WWV}) + wwv_mode + sudo /opt/emcomm-tools/sbin/wrapper-et-wwv.sh + ;; *) et-log "Mode ${SELECTED_MODE} not yet supported" exit 1 diff --git a/overlay/opt/emcomm-tools/sbin/wrapper-et-wwv.sh b/overlay/opt/emcomm-tools/sbin/wrapper-et-wwv.sh new file mode 100755 index 0000000..3ad58b0 --- /dev/null +++ b/overlay/opt/emcomm-tools/sbin/wrapper-et-wwv.sh @@ -0,0 +1,19 @@ +#!/bin/bash +# +# Author : Gaston Gonzalez +# Date : 16 April 2026 +# Purpose : Wrapper script for setting the system time using et-wwv +# +# Preconditions +# 1. Supported radio and audio interface are connected and properly detected +# 2. Radio is set to AM and a WWV frequency (2.5, 5, 10, 15, or 20 MHz) +# +# Postconditions +# 1. System clock is aligned to the top-of-the-minute +. /opt/emcomm-tools/bin/et-common + +exit_if_no_audio + +ALSA_DEVICE=$(/opt/emcomm-tools/bin/et-system-info et-audio-card) + +et-wwv -a --device "hw:${ALSA_DEVICE}" diff --git a/scripts/install-base.sh b/scripts/install-base.sh index 44e6f31..4f1714f 100755 --- a/scripts/install-base.sh +++ b/scripts/install-base.sh @@ -2,7 +2,7 @@ # # Author : Gaston Gonzalez # Date : 16 March 2024 -# Updated : 28 February 2025 +# Updated : 16 April 2026 # Purpose : Install base tools and configuration set -e @@ -30,4 +30,5 @@ apt install \ stow \ xsel \ tree \ + tty-clock \ -y diff --git a/scripts/install-et-wwv.sh b/scripts/install-et-wwv.sh new file mode 100755 index 0000000..64d2f75 --- /dev/null +++ b/scripts/install-et-wwv.sh @@ -0,0 +1,32 @@ +#!/bin/bash +# +# Author : Gaston Gonzalez +# Date : 16 April 2026 +# Purpose : Install et-wwv +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 +. ../overlay/opt/emcomm-tools/bin/et-common + +APP=et-wwv +REPO=https://github.com/thetechprepper/et-wwv.git +REPO_DIR="${ET_SRC_DIR}/${APP}" + +CWD_DIR=`pwd` + +if [[ ! -e "${REPO_DIR}" ]]; then + et-log "Cloning ${APP} repository..." + cd ${ET_SRC_DIR} && git clone ${REPO} +fi + +et-log "Building ${APP}..." +cd ${REPO_DIR} && ./build.sh + +mkdir -p "/opt/${APP}/bin" +cp build/et-wwv /opt/${APP}/bin/ + +stow -v -d /opt ${APP} -t /usr/local + +cd ${CWD_DIR} diff --git a/scripts/install.sh b/scripts/install.sh index 8d852ad..26bcc19 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -2,7 +2,7 @@ # # Author : Gaston Gonzalez # Date : 16 March 2024 -# Updated : 27 March 2026 +# Updated : 16 April 2026 # Purpose : Main installer for EmComm Tools Community (ETC) . ./env.sh @@ -112,3 +112,6 @@ exitIfNotRoot # Install WSJT-X (FT8) ./install-wsjtx.sh + +# Install simple WWV util +./install-et-wwv.sh diff --git a/tests/test-et-wwv.sh b/tests/test-et-wwv.sh new file mode 100755 index 0000000..16f2948 --- /dev/null +++ b/tests/test-et-wwv.sh @@ -0,0 +1,7 @@ +#!/bin/bash +# Author : Gaston Gonzalez +# Date : 16 April 2026 +# Purpose : Test et-wwv installation + +OUT=$(which et-wwv) +exit $?