2024-11-06 11:18:15 -07:00
#!/bin/bash
#
# Author : Gaston Gonzalez
# Date : 6 November 2024
2025-01-14 02:10:22 -07:00
# Updated : 14 January 2025
2024-11-06 11:18:15 -07:00
# Purpose : Configures the system for a specific mode of operation
2024-11-07 08:41:39 -07:00
# Use a simple text file to save the state of the last mode selected
2024-11-06 11:58:40 -07:00
MODE_STATUS_FILE = " ${ HOME } /.config/emcomm-tools/et-mode "
2024-11-07 08:41:39 -07:00
# List of supported modes of operation
2024-11-06 11:18:15 -07:00
MODE_ID_NONE = "none"
MODE_ID_APRS_DIGIPEATER = "aprs-digipeater"
MODE_ID_APRS_CLIENT = "aprs-client"
2024-12-03 05:50:39 -07:00
MODE_ID_BBS_CLIENT = "bbs-client"
2024-12-17 06:24:26 -07:00
MODE_ID_BBS_CLIENT2 = "bbs-client2"
2024-12-05 04:46:01 -07:00
MODE_ID_CHAT_CLIENT = "chat-chattervox"
2024-11-08 14:39:49 -07:00
MODE_ID_PACKET_DIGIPEATER = "packet-digipeater"
2024-11-06 11:18:15 -07:00
MODE_ID_WINLINK_ARDOP = "winlink-ardop"
MODE_ID_WINLINK_PACKET = "winlink-packet"
2025-01-14 02:10:22 -07:00
# Default to 1200 baud
PACKET_MODE = simple
2024-11-12 07:43:20 -07:00
# Attempt to stop all EmComm Tools services regardless if they are running.
2024-11-06 11:52:52 -07:00
stop_all_services( ) {
2024-11-12 07:43:20 -07:00
et-kill-all
2024-11-06 11:52:52 -07:00
}
2024-11-07 09:31:11 -07:00
exit_on_service_failure( ) {
local systemd_unit_name = " $1 "
systemctl is-active --user --quiet " ${ systemd_unit_name } "
if [ $? -ne 0 ] ; then
et-log " Can't start mode. ${ systemd_unit_name } failed to start. "
exit 1
fi
}
2024-11-07 08:41:39 -07:00
TIMEOUT = 15 # Total time to wait in seconds
INTERVAL = 2 # Interval between checks in seconds
start_and_wait_for_service( ) {
local systemd_unit_name = " $1 "
local elapsed = 0
et-log " Starting ${ systemd_unit_name } ... "
systemctl --user start ${ systemd_unit_name }
et-log " Waiting for ${ systemd_unit_name } to become active... "
while ! systemctl is-active --user --quiet " ${ systemd_unit_name } " ; do
sleep " $INTERVAL "
elapsed = $(( elapsed + INTERVAL))
if [ " $elapsed " -ge " $TIMEOUT " ] ; then
et-log " Timeout reached. ${ systemd_unit_name } failed to start. "
exit 1
fi
et-log " Waiting for ${ systemd_unit_name } to become active... "
done
# Some applications even when started still need a bit of extra time to be available.
# Add a short think time of 2 seconds. The ARDOP modem requies extra time.
sleep 2
2024-11-07 09:31:11 -07:00
# Do one more check to ensure that we are running, otherwise exit.
exit_on_service_failure ${ systemd_unit_name }
2024-11-07 08:41:39 -07:00
}
2025-01-14 02:10:22 -07:00
select_direwolf_mode ( ) {
packet_mode = ( )
packet_mode += ( "simple" "1200 baud (default for VHF/UHF)" )
packet_mode += ( "9600" "9600 baud (VHF/UHF)" )
packet_mode += ( "300" "300 baud (HF)" )
2025-01-14 02:27:16 -07:00
PACKET_MODE = $( dialog --clear --menu "Select a modem" 10 60 10 " ${ packet_mode [@] } " 3>& 1 1>& 2 2>& 3)
2025-01-14 02:10:22 -07:00
exit_status = $?
2025-01-14 02:27:16 -07:00
if [ " ${ PACKET_MODE } " = = "9600" ] ; then
dialog --title "Note on 9600 Baud" --msgbox "9600 baud is only supported on limited radios and typically requires a special cable.\n\nDon't forget to set the packet settings to 9600 on the radio." 0 0
fi
2025-01-14 02:10:22 -07:00
tput sgr 0 && clear
if [ ${ exit_status } -ne 0 ] ; then
et-log "No modem selected. Mode will not be started."
exit 1
fi
}
2024-11-07 08:41:39 -07:00
# Build list of options
2024-11-06 11:18:15 -07:00
options = ( )
options += ( " ${ MODE_ID_NONE } " "No mode selected" )
2024-11-06 11:52:52 -07:00
options += ( " ${ MODE_ID_APRS_CLIENT } " "APRS Client (YAAC)" )
2024-12-03 05:50:39 -07:00
options += ( " ${ MODE_ID_BBS_CLIENT } " "BBS Client (Paracon)" )
2024-12-17 06:24:26 -07:00
options += ( " ${ MODE_ID_BBS_CLIENT2 } " "BBS Client (QtTermTCP)" )
2024-12-05 04:46:01 -07:00
options += ( " ${ MODE_ID_CHAT_CLIENT } " "Chat (chattervox)" )
2024-11-06 11:18:15 -07:00
options += ( " ${ MODE_ID_APRS_DIGIPEATER } " "APRS Digipeater" )
2024-11-08 14:39:49 -07:00
options += ( " ${ MODE_ID_PACKET_DIGIPEATER } " "Packet Digipeater" )
2024-11-20 16:54:50 -07:00
options += ( " ${ MODE_ID_WINLINK_ARDOP } " "Winlink over HF (ARDOP)" )
options += ( " ${ MODE_ID_WINLINK_PACKET } " "Winlink over VHF/UHF (AX.25 Packet)" )
2024-11-06 11:18:15 -07:00
2024-11-07 08:41:39 -07:00
# Prompt user for option and save exit status
2024-12-05 04:46:01 -07:00
SELECTED_MODE = $( dialog --clear --menu "Select a mode:" 16 65 10 " ${ options [@] } " 3>& 1 1>& 2 2>& 3)
2024-11-06 11:18:15 -07:00
exit_status = $?
tput sgr 0 && clear
if [ $exit_status -eq 0 ] ; then
2024-11-06 11:52:52 -07:00
stop_all_services
2024-11-06 11:18:15 -07:00
2024-11-07 09:51:45 -07:00
echo ${ SELECTED_MODE } > ${ MODE_STATUS_FILE }
2024-11-06 11:18:15 -07:00
case ${ SELECTED_MODE } in
2024-11-06 11:52:52 -07:00
${ MODE_ID_NONE } )
et-log "No mode selected"
; ;
${ MODE_ID_APRS_DIGIPEATER } )
2024-11-08 14:39:49 -07:00
systemctl --user start et-service-direwolf-aprs-digipeater
2024-11-07 08:41:39 -07:00
et-log "APRS digipeater now running."
2024-11-06 11:52:52 -07:00
; ;
${ MODE_ID_APRS_CLIENT } )
2024-11-07 08:41:39 -07:00
start_and_wait_for_service et-service-direwolf-simple
2024-11-06 11:52:52 -07:00
et-yaac start
; ;
2024-12-03 05:50:39 -07:00
${ MODE_ID_BBS_CLIENT } )
2025-01-14 02:10:22 -07:00
select_direwolf_mode
et-log " Using ${ PACKET_MODE } as the modem speed. "
start_and_wait_for_service et-service-direwolf-${ PACKET_MODE }
2024-12-03 05:50:39 -07:00
et-log "Starting Paracon."
et-paracon start
; ;
2024-12-17 06:24:26 -07:00
${ MODE_ID_BBS_CLIENT2 } )
2025-01-14 02:10:22 -07:00
select_direwolf_mode
et-log " Using ${ PACKET_MODE } as the modem speed. "
start_and_wait_for_service et-service-direwolf-${ PACKET_MODE }
2024-12-17 06:24:26 -07:00
et-log "Starting QtTermTCP."
et-qttermtcp start
; ;
2024-12-05 04:46:01 -07:00
${ MODE_ID_CHAT_CLIENT } )
start_and_wait_for_service et-service-direwolf-simple
et-log "Starting chattervox"
2024-12-05 05:22:40 -07:00
et-chattervox start
2024-12-05 04:46:01 -07:00
; ;
2024-11-08 14:39:49 -07:00
${ MODE_ID_PACKET_DIGIPEATER } )
systemctl --user start et-service-direwolf-packet-digipeater
et-log "Packet digipeater now running."
; ;
2024-11-06 11:52:52 -07:00
${ MODE_ID_WINLINK_ARDOP } )
2024-11-07 08:41:39 -07:00
start_and_wait_for_service et-service-ardop
start_and_wait_for_service et-service-winlink-ardop
2024-11-06 11:52:52 -07:00
min http://localhost:8080
; ;
${ MODE_ID_WINLINK_PACKET } )
2024-11-07 08:41:39 -07:00
start_and_wait_for_service et-service-direwolf-simple
start_and_wait_for_service et-service-winlink-packet
2024-11-06 11:52:52 -07:00
min http://localhost:8080
; ;
2024-11-06 11:18:15 -07:00
*)
2024-11-06 11:52:52 -07:00
et-log " Mode ${ SELECTED_MODE } not yet supported "
2024-11-06 11:18:15 -07:00
exit 1
; ;
esac
else
et-log "No mode selected"
2024-11-06 11:58:40 -07:00
echo ${ MODE_ID_NONE } > ${ MODE_STATUS_FILE }
2024-11-06 11:18:15 -07:00
exit 1
fi