1
0
mirror of https://github.com/AG7GN/nexus-utilities.git synced 2025-05-15 22:20:09 -07:00

Added new ARDOP + pat GUI

This commit is contained in:
Steve Magnuson 2020-07-19 21:01:42 -07:00
parent cbaad83871
commit 8b201581bb
4 changed files with 50 additions and 20 deletions

10
ardop_pat_gui.desktop Normal file
View File

@ -0,0 +1,10 @@
[Desktop Entry]
Name=ARDOP TNC and pat GUI
GenericName=ARDOP TNC and pat GUI
Comment=Configure and monitor ARDOP TNC and pat
Exec=sh -c /usr/local/bin/ardop_pat_gui.sh
Icon=/usr/share/pixmaps/CQ.png
Terminal=false
Type=Application
Categories=HamRadio;
Comment[en_US]=ARDOP TNC and pat GUI

View File

@ -16,7 +16,7 @@
#% #%
#================================================================ #================================================================
#- IMPLEMENTATION #- IMPLEMENTATION
#- version ${SCRIPT_NAME} 1.0.0 #- version ${SCRIPT_NAME} 1.0.1
#- author Steve Magnuson, AG7GN #- author Steve Magnuson, AG7GN
#- license CC-BY-SA Creative Commons License #- license CC-BY-SA Creative Commons License
#- script_id 0 #- script_id 0
@ -108,7 +108,7 @@ function setARDOPpatDefaults () {
function loadSettings () { function loadSettings () {
PTTs="GPIO 12!GPIO 23!RIG 2 localhost:4532" PTTs="GPIO 12!GPIO 23!rig control via pat"
ARDOP_CONFIG="$TMPDIR/ardop.conf" ARDOP_CONFIG="$TMPDIR/ardop.conf"
if [ -s "$CONFIG_FILE" ] if [ -s "$CONFIG_FILE" ]
@ -396,9 +396,16 @@ do
then then
echo -e "Configure ARDOP and pat in the \"Configure ARDOP\" and \"Configure pat\" tabs,\nthen click \"Save Settings...\" button below." >&8 echo -e "Configure ARDOP and pat in the \"Configure ARDOP\" and \"Configure pat\" tabs,\nthen click \"Save Settings...\" button below." >&8
else # Not a first run. pat and ARDOP configured so start 'em else # Not a first run. pat and ARDOP configured so start 'em
# Check what PTT was selected
if [[ ${F[_PTT_]} =~ GPIO ]]
then # Let piardopc control PTT gia GPIO
ARDOP_PTT="-p $(echo "${F[_PTT_]}" | tr ' ' '=')"
else # Let pat control PTT via rigctl
ARDOP_PTT=""
fi
# Start piardopc # Start piardopc
echo "Launching $ARDOP ${F[_ARDOPPORT_]} ${F[_ADEVICE_CAPTURE_]} ${F[_ADEVICE_PLAY_]} -p "$(echo "${F[_PTT_]}" | tr ' ' '=')"" >&8 echo "Launching $ARDOP ${F[_ARDOPPORT_]} ${F[_ADEVICE_CAPTURE_]} ${F[_ADEVICE_PLAY_]} $ARDOP_PTT" >&8
$ARDOP ${F[_ARDOPPORT_]} ${F[_ADEVICE_CAPTURE_]} ${F[_ADEVICE_PLAY_]} -p "$(echo "${F[_PTT_]}" | tr ' ' '=')" >&8 2>&8 & $ARDOP ${F[_ARDOPPORT_]} ${F[_ADEVICE_CAPTURE_]} ${F[_ADEVICE_PLAY_]} $ARDOP_PTT >&8 2>&8 &
ardop_PID=$! ardop_PID=$!
echo -e "\n\nARDOP has started. PID=$ardop_PID" >&8 echo -e "\n\nARDOP has started. PID=$ardop_PID" >&8
@ -452,7 +459,7 @@ Click the <b>Save Settings...</b> button below after you make your changes.\n\n"
--field="Web Service Port":NUM "$PAT_HTTP_PORT!8040..8049!1!" \ --field="Web Service Port":NUM "$PAT_HTTP_PORT!8040..8049!1!" \
--field="Telnet Service Port":NUM "$PAT_TELNET_PORT!8770..8779!1!" \ --field="Telnet Service Port":NUM "$PAT_TELNET_PORT!8770..8779!1!" \
--field="Forced ARQ Bandwidth":CHK "$PAT_ARQ_BW_FORCED" \ --field="Forced ARQ Bandwidth":CHK "$PAT_ARQ_BW_FORCED" \
--field="Max ARQ Bandwidth":NUM "$PAT_ARQ_BW_MAX!50..1000!50!" \ --field="Max ARQ Bandwidth":NUM "$PAT_ARQ_BW_MAX!50..2000!50!" \
--field="Beacon Interval (minutes)":NUM "$PAT_BEACON_INTERVAL!0..120!1!" \ --field="Beacon Interval (minutes)":NUM "$PAT_BEACON_INTERVAL!0..120!1!" \
--field="Enable CW ID":CHK "$PAT_CW_ID" \ --field="Enable CW ID":CHK "$PAT_CW_ID" \
--field="Start pat web service when ARDOP starts":CHK "$PAT_START_HTTP" \ --field="Start pat web service when ARDOP starts":CHK "$PAT_START_HTTP" \
@ -550,6 +557,10 @@ EOF
--argjson D ${PAT_CW_ID,,} \ --argjson D ${PAT_CW_ID,,} \
'.mycall = $C | .secure_login_password = $P | .http_addr = $H | .telnet.listen_addr = $T | .locator = $L | .ardop.addr = $R | .ardop.arq_bandwidth.Max = $B | .ardop.beacon_interval = $I | .ardop.arq_bandwidth.Forced = $F | .ardop.cwid_enabled = $D' | sponge $PAT_CONFIG '.mycall = $C | .secure_login_password = $P | .http_addr = $H | .telnet.listen_addr = $T | .locator = $L | .ardop.addr = $R | .ardop.arq_bandwidth.Max = $B | .ardop.beacon_interval = $I | .ardop.arq_bandwidth.Forced = $F | .ardop.cwid_enabled = $D' | sponge $PAT_CONFIG
# Did ARDOP config request rigctl for PTT? If so let pat handle it via rigctl
[[ ${F[_PTT_]} =~ GPIO ]] && PAT_PTT=false || PAT_PTT=true
cat $PAT_CONFIG | jq --argjson P $PAT_PTT '.ardop.ptt_ctrl = $P' | sponge $PAT_CONFIG
# Update the yad configuration file. # Update the yad configuration file.
echo "declare -gA F" > "$CONFIG_FILE" echo "declare -gA F" > "$CONFIG_FILE"
for J in "${!F[@]}" for J in "${!F[@]}"

View File

@ -18,7 +18,7 @@
#% #%
#================================================================ #================================================================
#- IMPLEMENTATION #- IMPLEMENTATION
#- version ${SCRIPT_NAME} 1.4.1 #- version ${SCRIPT_NAME} 1.4.2
#- author Steve Magnuson, AG7GN #- author Steve Magnuson, AG7GN
#- license CC-BY-SA Creative Commons License #- license CC-BY-SA Creative Commons License
#- script_id 0 #- script_id 0
@ -100,12 +100,13 @@ export -f runFind
function processAlias () { function processAlias () {
local CALL="$(echo "$1" | sed 's/^ //' | cut -d' ' -f2)" local CALL="$(echo "$1" | sed 's/^ //' | cut -d' ' -f2)"
local URI="$(echo "$1" | sed 's/^ //' | sed -e 's/packet/ax25/' | cut -d' ' -f1)" local URI="$(echo "$1" | sed 's/^ //' | sed -e 's/packet/ax25/' | cut -d' ' -f1)"
local FREQ="$(echo "$1" | sed 's/^ //' | sed -e 's/packet/ax25/' | cut -d' ' -f3)"
if jq -r '.connect_aliases | keys[] as $k | "\(.[$k])"' $PAT_CONFIG | grep -q "$URI" if jq -r '.connect_aliases | keys[] as $k | "\(.[$k])"' $PAT_CONFIG | grep -q "$URI"
then # Alias already present then # Alias already present
yad --info --center --text-align=center --buttons-layout=center \ yad --info --center --text-align=center --buttons-layout=center \
--text="$URI was already in aliases" --borders=20 --button="gtk-ok":0 --text="$URI was already in aliases" --borders=20 --button="gtk-ok":0
else # Alias not in list. Add it. else # Alias not in list. Add it.
cat $PAT_CONFIG | jq --arg K "$CALL" --arg U "$URI" \ cat $PAT_CONFIG | jq --arg K "$CALL@$FREQ" --arg U "$URI" \
'.connect_aliases += {($K): $U}' | sponge $PAT_CONFIG '.connect_aliases += {($K): $U}' | sponge $PAT_CONFIG
if [[ $? == 0 ]] if [[ $? == 0 ]]
then then
@ -126,11 +127,11 @@ function viewDeleteAliases () {
# Read aliases from $PAT_CONFIG # Read aliases from $PAT_CONFIG
ALIASES="$(jq -r .connect_aliases $PAT_CONFIG | egrep -v "telnet|{|}" | \ ALIASES="$(jq -r .connect_aliases $PAT_CONFIG | egrep -v "telnet|{|}" | \
sed 's/^ /FALSE|/' | tr -d ' ",' | sed 's/:/|/1' | tr '|' '\n')" sed 's/^ /FALSE|/' | tr -d ' ",' | sed 's/:/|/1' | tr '|' '\n')"
RESULT="$(yad --title="View/remove pat aliases" --list --mouse --borders=10 \ RESULT="$(yad --title="View/remove aliases" --list --mouse --borders=10 \
--height=400 --width=400 --text-align=center \ --height=400 --width=500 --text-align=center \
--text "<b>Your current pat connection aliases are listed below.</b>\n \ --text "<b>Your current pat connection aliases are listed below.</b>\n \
Check the ones you want to remove.\n" \ Check the ones you want to remove.\n" \
--checklist --grid-lines=hor --auto-kill --column="Pick" --column="Call" --column="Connect URI" \ --checklist --grid-lines=hor --auto-kill --column="Pick" --column="Call@Freq" --column="Connect URI" \
<<< "$ALIASES" --buttons-layout=center --button="Exit":1 --button="Refresh list":0 --button="Remove selected aliases":0)" <<< "$ALIASES" --buttons-layout=center --button="Exit":1 --button="Refresh list":0 --button="Remove selected aliases":0)"
if [[ $? == 0 ]] if [[ $? == 0 ]]
then # Refresh or removal requested then # Refresh or removal requested
@ -165,16 +166,24 @@ TMPDIR="/tmp/${SCRIPT_NAME}.$RANDOM.$RANDOM.$RANDOM.$$"
} }
#= general variables ==# #= general variables ==#
#== general variables ==#
SCRIPT_NAME="$(basename ${0})" # scriptname without path
SCRIPT_DIR="$( cd $(dirname "$0") && pwd )" # script directory
SCRIPT_FULLPATH="${SCRIPT_DIR}/${SCRIPT_NAME}"
SCRIPT_ID="$(ScriptInfo | grep script_id | tr -s ' ' | cut -d' ' -f3)"
SCRIPT_HEADSIZE=$(grep -sn "^# END_OF_HEADER" ${0} | head -1 | cut -f1 -d:)
VERSION="$(ScriptInfo version | grep version | tr -s ' ' | cut -d' ' -f 4)"
TITLE="Find RMS Stations $VERSION"
PAT_CONFIG="$HOME/.wl2k/config.json" PAT_CONFIG="$HOME/.wl2k/config.json"
export PAT_CONFIG=$PAT_CONFIG export PAT_CONFIG=$PAT_CONFIG
export find_cmd='@bash -c "runFind %1 %2 %3 %4"' export find_cmd='@bash -c "runFind %1 %2 %3 %6"'
export view_remove_cmd='bash -c "viewDeleteAliases"' export view_remove_cmd='bash -c "viewDeleteAliases"'
export fpipe=$(mktemp -u --tmpdir find.XXXXXXXX) export fpipe=$(mktemp -u --tmpdir find.XXXXXXXX)
mkfifo "$fpipe" mkfifo "$fpipe"
DEFAULT_SEARCH_STRING="$(jq -r .locator $PAT_CONFIG)" DEFAULT_SEARCH_STRING="$(jq -r .locator $PAT_CONFIG)"
fkey=$(($RANDOM * $$)) fkey=$(($RANDOM * $$))
YAD_PIDs=() YAD_PIDs=()
BANDs="^Any!70cm!1.25m!2m!6m!12m!15m!17m!20m!30m!40m!60m!80m!160m" BANDs="^Any!70cm!1.25m!2m!6m!12m!15m!17m!20m!30m!40m!60m!80m!160m"
MODEs="^Any!ARDOP!Packet!Pactor!WINMOR" MODEs="^Any!ARDOP!Packet!Pactor!WINMOR"
@ -266,25 +275,25 @@ trap SafeExit INT TERM EXIT
yad --plug="$fkey" --tabnum=1 --text-align=center \ yad --plug="$fkey" --tabnum=1 --text-align=center \
--text="<b>Search for RMS stations and optionally add them to your pat \ --text="<b>Search for RMS stations and optionally add them to your pat \
connection alias list</b>\n \ connection alias list\n<span color='blue'>If you make changes: Restart pat + TNC + refresh pat web browser!</span></b>" \
The station list is generated by running 'pat rmslist' (downloads the list from Winlink).\n \
Internet access is required for this to work." \
--form \ --form \
--field="Search string" "${DEFAULT_SEARCH_STRING:0:4}" \ --field="Search string" "${DEFAULT_SEARCH_STRING:0:4}" \
--field="Band":CB "$BANDs" \ --field="Band":CB "$BANDs" \
--field="Mode":CB "$MODEs" --field="Sort by distance (Uncheck to sort by callsign)":CHK TRUE \ --field="Mode":CB "$MODEs" \
--field="gtk-find":FBTN "$find_cmd" --field="<b>View/edit current pat connection aliases</b>":FBTN "$view_remove_cmd &" >/dev/null & --field="gtk-find":FBTN "$find_cmd" \
--field="<b>View/edit current pat connection aliases</b>":FBTN "$view_remove_cmd &" \
--field="Sort results by distance (Uncheck to sort by callsign)":CHK TRUE >/dev/null &
YAD_PIDs+=( $! ) YAD_PIDs+=( $! )
yad --plug="$fkey" --tabnum=2 --list --grid-lines=hor --dclick-action="bash -c \"processAlias '%s'\"" \ yad --plug="$fkey" --tabnum=2 --list --grid-lines=hor --dclick-action="bash -c \"processAlias '%s'\"" \
--text "Search results. Double-click a Call to add it to your pat aliases." \ --text "Search results are below. Double-click a Call to add it to your pat aliases." \
--column="URI" --column="Call" --column="Frequency (MHz)" --column="Location" --column="Distance" --column="Azimuth" \ --column="URI" --column="Call" --column="Frequency (MHz)" --column="Location" --column="Distance" --column="Azimuth" \
--column="Mode" \ --column="Mode" \
--search-column=2 --expand-column=7 --hide-column=1 <&4 >/dev/null & --search-column=2 --expand-column=7 --hide-column=1 <&4 >/dev/null &
YAD_PIDs+=( $! ) YAD_PIDs+=( $! )
yad --paned --key="$fkey" --buttons-layout=center --button="gtk-close":0 --width=700 --height=700 \ yad --paned --key="$fkey" --buttons-layout=center --button="gtk-close":0 --width=700 --height=700 \
--title="Find RMS Stations" --window-icon="system-search" --title="$TITLE" --window-icon="system-search"
SafeExit SafeExit

View File

@ -1 +1 @@
VERSION="2.3.4" VERSION="2.3.5"