#!/bin/bash # # Author : Gaston Gonzalez # Author : William McKeehan # Date : 6 October 2024 # Updated : 5 September 2025 # Purpose : Utility script for dumping system information function usage() { echo "Usage: $(basename $0) " echo " active-radio - Display model of active radio" echo " callsign - Current callsign" echo " et-audio - Show state of audio interface" echo " et-audio-card - Display audio card and device: ," echo " et-cat - Show state of CAT control interface" echo " et-gps - Show state of GPS interface" echo " et-time - Show if time is synched via GPS" echo " et-mode - Show current mode" echo " et-sdr - Show state of SDR interface" echo " grid - Current grid square defined by user" echo " ip - System IP address" echo " release - EmComm Tools release" } if [ $# -ne 1 ]; then usage exit 1 fi [ -z "$ET_USER_CONFIG" ] && ET_USER_CONFIG="${HOME}/.config/emcomm-tools/user.json" case $1 in active-radio) if [ -L "${ET_HOME}/conf/radios.d/active-radio.json" ]; then cat "${ET_HOME}/conf/radios.d/active-radio.json" | jq -r .model else echo "No radio selected" fi ;; callsign) cat ${ET_USER_CONFIG} | jq -r .callsign ;; grid) FALLBACK_GRID=$(jq -r -e '.grid' ${ET_USER_CONFIG}) GEO_CONF=/tmp/geo.tmp curl -f -s "http://localhost:1981/api/geo/position" > ${GEO_CONF} if [[ $? -eq 0 ]]; then API_GRID=$(jq -r -e '.position.gridSquare' ${GEO_CONF}) [[ -e ${GEO_CONF} ]] && rm ${GEO_CONF} if [[ $? -eq 0 ]]; then echo ${API_GRID} exit fi fi echo ${FALLBACK_GRID} ;; et-audio) # 1. Check if the symlink was created by the udev rules if [ -e /dev/et-audio ]; then UDEV_OUT=$(udevadm info /dev/et-audio | grep ET_DEVICE) if [ $? -eq 0 ]; then # Display friendly audio device name ET_DEVICE=$(udevadm info /dev/et-audio | grep ET_DEVICE | cut -d"=" -f2) case $ET_DEVICE in "DIGIRIG_LITE") echo "DigiRig Lite" ;; "DIGIRIG_MOBILE") echo "DigiRig Mobile" ;; *) echo $ET_DEVICE ;; esac else echo "Connected" fi else echo "Not connected" fi ;; et-audio-card) # 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 AUDIO_CARD=$(echo $APLAY_OUT | cut -d":" -f1 | awk '{print $2}') AUDIO_DEVICE=$(echo $APLAY_OUT | cut -d"," -f2 | cut -d":" -f1 | awk '{print $2}') echo $AUDIO_CARD,$AUDIO_DEVICE else exit 1 fi else exit 1 fi ;; et-cat) if [ ! -L "${ET_HOME}/conf/radios.d/active-radio.json" ]; then echo "N/A" exit 0 fi # 1. Check if the symlink was created by the udev rules if [ -e /dev/et-cat ]; then # 2. Check if the rigctl systemd unit is running properly systemctl status rigctld --no-pager > /dev/null if [ $? -eq 0 ]; then # Note: I am disabling the VFO read as it causes issues with serval Icom # radios and results in the VFO changing momentarily during this client # request. It causes issues during TX and RX. If it is not bulletproof, # features like this will be turned off. This is a problem given that # Conky calls this method every 10 seconds. # # 3. Grab and format frequency #FREQ=$(timeout 1 rigctl -m 2 f) #if [ $? -eq 0 ]; then # printf "%'d MHz\n" "$FREQ" | sed 's|,|.|g' #else # echo "Connected. Can't access VFO"; #fi echo "Connected"; else echo "Connected. No rig control" fi else echo "Not connected"; fi ;; et-sdr) # 1. Check if the symlink was created by the udev rules if [ -e /dev/et-sdr ]; then echo "Connected"; else echo "Not connected"; fi ;; et-gps) # 1. Check if the symlink was created by the udev rules if [ -e /dev/et-gps ]; then # 2. Check if the gpsd systemd unit is running properly systemctl status gpsd --no-pager > /dev/null if [ $? -eq 0 ]; then # 3. Obtain the current GPS mode GPS_JSON=$(gpspipe -w -n 10 | grep -m 1 TPV) if [ $? -eq 0 ]; then GPS_MODE=$(echo $GPS_JSON | jq --exit-status -r .mode) case $GPS_MODE in 1) echo "No fix" ;; 2) echo "2D fix" ;; 3) LAT=$(echo $GPS_JSON | jq -r .lat) LON=$(echo $GPS_JSON | jq -r .lon) printf "%.5f,%.5f\n" $LAT $LON ;; *) echo "Unknown mode" ;; esac else echo "Connected. Can't decode" fi else echo "Connected. gpsd not running" fi else echo "Not connected" fi ;; et-mode) SELECTED_MODE=$(cat "${HOME}/.config/emcomm-tools/et-mode") MODE_ID_NONE="none" MODE_ID_APRS_DIGIPEATER="aprs-digipeater" MODE_ID_BBS_CLIENT="bbs-client" MODE_ID_BBS_CLIENT2="bbs-client2" MODE_ID_BBS_SERVER="bbs-server" MODE_ID_CHAT_CLIENT="chat-chattervox" MODE_ID_PACKET_DIGIPEATER="packet-digipeater" MODE_ID_APRS_CLIENT="aprs-client" 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" if [ ! -e /dev/et-audio ]; then echo "Run 'et-mode' to set" echo ${MODE_ID_NONE} > "${HOME}/.config/emcomm-tools/et-mode" exit 0 fi case ${SELECTED_MODE} in ${MODE_ID_NONE}) echo "Run 'et-mode' to set" ;; ${MODE_ID_APRS_DIGIPEATER}) echo "APRS Digipeater" ;; ${MODE_ID_APRS_CLIENT}) echo "APRS" ;; ${MODE_ID_BBS_CLIENT}) echo "BBS Client" ;; ${MODE_ID_BBS_CLIENT2}) echo "BBS Client" ;; ${MODE_ID_BBS_SERVER}) echo "BBS Server" ;; ${MODE_ID_CHAT_CLIENT}) echo "Chat (chattervox)" ;; ${MODE_ID_PACKET_DIGIPEATER}) echo "Packet Digipeater" ;; ${MODE_ID_WINLINK_ARDOP}) echo "Winlink ARDOP" ;; ${MODE_ID_WINLINK_PACKET}) echo "Winlink Packet" ;; ${MODE_ID_WINLINK_VARA_FM}) echo "Winlink VARA FM" ;; ${MODE_ID_WINLINK_VARA_HF}) echo "Winlink VARA HF" ;; *) echo "Unknown" ;; esac ;; et-time) ET_OUT=$(${ET_HOME}/bin/et-time) if [ $? -eq 0 ]; then echo "Yes" else echo "No" fi ;; ip) hostname -I | awk '{print $1}' ;; release) grep DISTRIB_DESCRIPTION /etc/lsb-release | sed 's|"||g' | awk '{print $1}' | cut -d"=" -f2 ;; *) echo "Command not supported." usage exit 1 ;; esac