diff --git a/overlay/etc/skel/.conkyrc b/overlay/etc/skel/.conkyrc index 54f6fdb..1173e7d 100644 --- a/overlay/etc/skel/.conkyrc +++ b/overlay/etc/skel/.conkyrc @@ -34,7 +34,7 @@ ${font DejaVu Sans:bold:size=10}${color #8d5133}${alignc}INTERFACES ${font DejaVu Sans Mono:size=11}${color yellow}Radio: ${execpi 10 et-system-info active-radio} CAT : ${execpi 10 et-system-info et-cat} GPS : ${execpi 10 et-system-info et-gps} -Audio: ${execpi 10 et-system-info et-audio} ${execpi 10 et-system-info et-audio-card} +Audio: ${execpi 10 et-system-info et-audio} ${font DejaVu Sans:bold:size=9}${color #805f4f}${alignc}${execp /opt/emcomm-tools/bin/et-system-info release} ]]; diff --git a/overlay/opt/emcomm-tools/bin/et-js8call b/overlay/opt/emcomm-tools/bin/et-js8call index c784270..02d0d88 100755 --- a/overlay/opt/emcomm-tools/bin/et-js8call +++ b/overlay/opt/emcomm-tools/bin/et-js8call @@ -2,13 +2,16 @@ # # Author : Gaston Gonzalez # Date : 24 October 2024 +# Updated : 25 October 2024 # Purpose : Wrapper script for starting JS8Call with PnP support # # Preconditions -# 1. Support radio and audio interface are connected and properly detected +# 1. Supported radio and audio interface are connected and properly detected # # Postconditions -# 1. JS8Call is started with audio settings updated +# 1. JS8Call audio settings updated +# 2. JS8Call rig settings updated +# 3. JS8Call started usage() { echo "usage: $(basename $0) " @@ -21,6 +24,13 @@ if [ $# -ne 1 ]; then exit 1 fi +notify_user() { + notify-send \ + -t 10000 \ + --app-name="EmComm Tools" \ + "$1" +} + start() { update-config && /usr/bin/js8call & } @@ -28,6 +38,20 @@ start() { update-config () { JS8CALL_CONF_FILE="${HOME}/.config/JS8Call.ini" + JS8CALL_TEMPLATE_CONF_FILE=${ET_HOME}/conf/template.d/js8call/JS8Call.rigctl.ini + + # Special case for the DigiRig Mobile when connected to a radio that does + # not support CAT control. + if [ -L "${ET_HOME}/conf/radios.d/active-radio.json" ]; then + RIG_ID=$(cat "${ET_HOME}/conf/radios.d/active-radio.json" | jq -r .rigctrl.id) + + if [ "${RIG_ID}" = "6" ]; then + JS8CALL_TEMPLATE_CONF_FILE=${ET_HOME}/conf/template.d/js8call/JS8Call.no-rigctl.ini + fi + fi + + cp ${JS8CALL_TEMPLATE_CONF_FILE} ${JS8CALL_CONF_FILE} + et-log "Replaced JS8Call configuration with template: ${JS8CALL_TEMPLATE_CONF_FILE}" # 1. Check if the symlink was created by the udev rules if [ -e /dev/et-audio ]; then @@ -59,12 +83,15 @@ update-config () { else et-log "No ET_AUDIO device detected." + notify_user "Can't start JS8Call. No ET_AUDIO device detected." exit 1 fi else et-log "No ET_AUDIO device plugged in." + notify_user "Can't start JS8Call. No supported audio device plugged in." exit 1 fi + } case $1 in diff --git a/overlay/opt/emcomm-tools/bin/et-radio b/overlay/opt/emcomm-tools/bin/et-radio index e8e10d1..c1c1bc0 100755 --- a/overlay/opt/emcomm-tools/bin/et-radio +++ b/overlay/opt/emcomm-tools/bin/et-radio @@ -2,7 +2,7 @@ # # Author : Gaston Gonzalez # Date : 11 October 2024 -# Updated : 24 October 2024 +# Updated : 25 October 2024 # Purpose : A script for managaing plug-and-play radios set -e @@ -23,14 +23,14 @@ ACTIVE_RADIO="${ET_HOME}/conf/radios.d/active-radio.json" case $1 in list) - printf "%-20s %-10s %-10s\n" "Radio ID" "Vendor" "Model" + printf "%-24s %-10s %-10s\n" "Radio ID" "Vendor" "Model" find ${ET_HOME}/conf/radios.d -type f -name \*.json | sort -n | while read radio; do ID=$(cat $radio | jq -r .id) VENDOR=$(cat $radio | jq -r .vendor) MODEL=$(cat $radio | jq -r .model) - printf "%-20s %-10s %-10s\n" $ID "$VENDOR" "$MODEL" + printf "%-24s %-10s %-10s\n" $ID "$VENDOR" "$MODEL" done ;; @@ -48,7 +48,7 @@ case $1 in options+=("$ID" "$VENDOR $MODEL") done < <(find $ET_HOME/conf/radios.d -type f | sort) - SELECTED_RADIO=$(dialog --clear --menu "Select a radio:" 15 50 10 "${options[@]}" 3>&1 1>&2 2>&3) + SELECTED_RADIO=$(dialog --clear --menu "Select a radio:" 20 60 10 "${options[@]}" 3>&1 1>&2 2>&3) exit_status=$? # Reset terminal to its original state diff --git a/overlay/opt/emcomm-tools/bin/et-system-info b/overlay/opt/emcomm-tools/bin/et-system-info index 329bc4e..df82ac7 100755 --- a/overlay/opt/emcomm-tools/bin/et-system-info +++ b/overlay/opt/emcomm-tools/bin/et-system-info @@ -101,7 +101,7 @@ case $1 in echo "Connected. Can't access VFO"; fi else - echo "Connected. rigctld not running" + echo "Connected. No rig control" fi else echo "Not connected"; diff --git a/overlay/opt/emcomm-tools/conf/radios.d/generic-vox.json b/overlay/opt/emcomm-tools/conf/radios.d/digirig-lite.json similarity index 52% rename from overlay/opt/emcomm-tools/conf/radios.d/generic-vox.json rename to overlay/opt/emcomm-tools/conf/radios.d/digirig-lite.json index 6869810..e464b37 100644 --- a/overlay/opt/emcomm-tools/conf/radios.d/generic-vox.json +++ b/overlay/opt/emcomm-tools/conf/radios.d/digirig-lite.json @@ -1,7 +1,7 @@ { - "id": "generic-vox", - "vendor": "Generic", - "model": "VOX", + "id": "digirig-lite", + "vendor": "DigiRig", + "model": "Lite", "rigctrl": { "id": "1", "ptt": "NONE" diff --git a/overlay/opt/emcomm-tools/conf/radios.d/digirig-mobile-no-cat.json b/overlay/opt/emcomm-tools/conf/radios.d/digirig-mobile-no-cat.json new file mode 100644 index 0000000..c1ef914 --- /dev/null +++ b/overlay/opt/emcomm-tools/conf/radios.d/digirig-mobile-no-cat.json @@ -0,0 +1,14 @@ +{ + "id": "digirig-mobile-no-cat", + "vendor": "DigiRig", + "model": "Mobile (No CAT)", + "rigctrl": { + "id": "6", + "ptt": "RTS" + }, + "notes": [ + "Set your VFO manually", + "Adjust your volume, RF gain and squelch manually", + "This mode uses the RTS signal to trigger the PTT" + ] +} diff --git a/overlay/opt/emcomm-tools/conf/radios.d/yaesu-ft818nd.json b/overlay/opt/emcomm-tools/conf/radios.d/yaesu-ft818nd.json index d90c413..7a125f5 100644 --- a/overlay/opt/emcomm-tools/conf/radios.d/yaesu-ft818nd.json +++ b/overlay/opt/emcomm-tools/conf/radios.d/yaesu-ft818nd.json @@ -1,7 +1,7 @@ { "id": "yaesu-ft818nd", "vendor": "Yaesu", - "model": "FT-818ND", + "model": "FT-818ND (DigiRig)", "rigctrl": { "id": "1041", "baud": "38400", diff --git a/overlay/opt/emcomm-tools/conf/radios.d/yaesu-ft857d.json b/overlay/opt/emcomm-tools/conf/radios.d/yaesu-ft857d.json index aecd61e..cfa6f6a 100644 --- a/overlay/opt/emcomm-tools/conf/radios.d/yaesu-ft857d.json +++ b/overlay/opt/emcomm-tools/conf/radios.d/yaesu-ft857d.json @@ -1,7 +1,7 @@ { "id": "yaesu-ft857d", "vendor": "Yaesu", - "model": "FT-857D", + "model": "FT-857D (DigiRig)", "rigctrl": { "id": "1022", "baud": "38400", diff --git a/overlay/opt/emcomm-tools/conf/radios.d/yaesu-ft897d.json b/overlay/opt/emcomm-tools/conf/radios.d/yaesu-ft897d.json index aa3efcd..f2f0356 100644 --- a/overlay/opt/emcomm-tools/conf/radios.d/yaesu-ft897d.json +++ b/overlay/opt/emcomm-tools/conf/radios.d/yaesu-ft897d.json @@ -1,7 +1,7 @@ { "id": "yaesu-ft897d", "vendor": "Yaesu", - "model": "FT-897D", + "model": "FT-897D (DigiRig)", "rigctrl": { "id": "1043", "baud": "38400", diff --git a/overlay/opt/emcomm-tools/conf/template.d/js8call/JS8Call.no-rigctl.ini b/overlay/opt/emcomm-tools/conf/template.d/js8call/JS8Call.no-rigctl.ini new file mode 100644 index 0000000..2638a89 --- /dev/null +++ b/overlay/opt/emcomm-tools/conf/template.d/js8call/JS8Call.no-rigctl.ini @@ -0,0 +1,27 @@ +[Configuration] +AcceptTCPRequests=true +AutoGrid=true +AutoreplyConfirmation=false +AutoreplyOnAtStartup=true +CATNetworkPort=localhost:4532 +CheckForUpdates=false +HeartbeatAckSNR=true +HideControls=true +Miles=true +MyCall=N0CALL +MyGrid=DM33 +MyGroups=@@TTP,@@TTPNET +Polling=1 +PSKReporter=false +PTTMethod=@Variant(\0\0\0\x7f\0\0\0\x1eTransceiverFactory::PTTMethod\0\0\0\0\xfPTT_method_RTS\0) +PTTport=/dev/et-cat +SubMode=0 +SubModeHB=true +SubModeHBAck=true +Rig=None +SpotToAPRS=false +TCPEnabled=true +TCPMaxConnections=3 +TCPServer=127.0.0.1 +TCPServerPort=2442 +TxIdleWatchdog=0 diff --git a/overlay/opt/emcomm-tools/conf/template.d/js8call/JS8Call.rigctl.ini b/overlay/opt/emcomm-tools/conf/template.d/js8call/JS8Call.rigctl.ini new file mode 100644 index 0000000..e49aea2 --- /dev/null +++ b/overlay/opt/emcomm-tools/conf/template.d/js8call/JS8Call.rigctl.ini @@ -0,0 +1,27 @@ +[Configuration] +AcceptTCPRequests=true +AutoGrid=true +AutoreplyConfirmation=false +AutoreplyOnAtStartup=true +CATNetworkPort=localhost:4532 +CheckForUpdates=false +HeartbeatAckSNR=true +HideControls=true +Miles=true +MyCall=N0CALL +MyGrid=DM33 +MyGroups=@@TTP,@@TTPNET +Polling=1 +PSKReporter=false +PTTMethod=@Variant(\0\0\0\x7f\0\0\0\x1eTransceiverFactory::PTTMethod\0\0\0\0\xfPTT_method_CAT\0) +PTTport=localhost:4532 +SubMode=0 +SubModeHB=true +SubModeHBAck=true +Rig=Hamlib NET rigctl +SpotToAPRS=false +TCPEnabled=true +TCPMaxConnections=3 +TCPServer=127.0.0.1 +TCPServerPort=2442 +TxIdleWatchdog=0 diff --git a/overlay/opt/emcomm-tools/sbin/wrapper-rigctld.sh b/overlay/opt/emcomm-tools/sbin/wrapper-rigctld.sh index d403f48..d33753a 100755 --- a/overlay/opt/emcomm-tools/sbin/wrapper-rigctld.sh +++ b/overlay/opt/emcomm-tools/sbin/wrapper-rigctld.sh @@ -2,7 +2,7 @@ # # Author : Gaston Gonzalez # Date : 9 October 2024 -# Updated : 24 October 2024 +# Updated : 25 October 2024 # Purpose : Wrapper startup/shutdown script around systemd/rigctld ET_HOME=/opt/emcomm-tools @@ -29,19 +29,30 @@ do_full_auto() { start() { - # Special case for VOX devices like the DigiRig Lite. + # Special cases for the DigiRig Lite and DigiRig Mobile with no CAT. if [ -L "${ET_HOME}/conf/radios.d/active-radio.json" ]; then - CUR_RADIO=$(cat "${ET_HOME}/conf/radios.d/active-radio.json" | jq -r .model) - if [ "${CUR_RADIO}" = "VOX" ]; then + RIG_ID=$(cat "${ET_HOME}/conf/radios.d/active-radio.json" | jq -r .rigctrl.id) + + # All VOX devices use the dummy mode provided by Hamlib. This helps maintain + # a cleaner interface by leveraging rigctl NET in applications. + if [ "${RIG_ID}" = "1" ]; then et-log "Starting dummy rigctld service for VOX device." ID=$(cat ${ET_HOME}/conf/radios.d/active-radio.json | jq -r .rigctrl.id) PTT=$(cat ${ET_HOME}/conf/radios.d/active-radio.json | jq -r .rigctrl.ptt) CMD="rigctld -m ${ID} -P ${PTT} " - et-log "Starting rigctld with: ${CMD}" + et-log "Starting rigctld in VOX mode with: ${CMD}" $CMD + exit 0 + fi + # We can't use rigctld in dummy mode like we did with the DigiRig Lite as the Hamlib dummy + # rigs (1 and 6) do not honor the -P flag. Passing -P RTS is ignored. I need to create a custom rig for + # the DigiRig Mobile for radios that do not support CAT control, but haver their PTT triggered via + # the RTS signal. + if [ "${RIG_ID}" = "6" ]; then + et-log "Skipping rigctld startup for DigiRig Mobile since radio does not support CAT control." exit 0 fi fi