pi-scripts/gpsupdate
2022-11-22 07:25:10 -06:00

379 lines
12 KiB
Bash

#!/bin/bash
VERSION=6
#script to change GPS in gpsd file and restart gpsd service
#reference - https://www.linux-magazine.com/Issues/2018/210/Tutorial-gpsd
#11JAN2021 KM4ACK
LOGO=$HOME/73Linux/data/ico/gps.png
PASS=$(yad --entry --width=420 --text-align=center --center --title="GPS Update Tool" \
--image ${LOGO} --window-icon=${LOGO} --image-on-top --separator="|" --item-separator="|" --hide-text \
--text="Required\rBad password will cause program to exit" \
--entry-label="Sudo Password*" \
--button="Continue":2)
BUT=$?
if [ ${BUT} = 252 ]; then
exit
fi
PASS=$(echo $PASS | awk -F "|" '{print $1}')
#reset sudo timer to prevent false positive
sudo -k
echo "Checking SUDO credentials....standby"
echo $PASS | sudo -S touch /run/user/$UID/sutest
if [ $? = 1 ]; then
yad --form --width=250 --text-align=center --center --title="Wrong Password" --text-align=center \
--image ${LOGO} --window-icon=${LOGO} --image-on-top --separator="|" --item-separator="|" \
--text="<b>Password Incorrect!</b>\rCan't continue" \
--button=gtk-close
exit
else
echo "Credentials check out....continuing"
fi
#Verify YAD is installed
if ! hash yad 2>/dev/null; then
echo "Installing YAD....please wait"
echo $PASS | sudo -S apt install -y yad
fi
#####################################
# Help File
#####################################
HELP(){
cat <<EOF > /run/user/$UID/gpsintro.txt
GPS Update Tool Version $VERSION by KM4ACK
This tool allows you to update the required files
when you change between different GPS units/types.
USB GPS DEVICES:
Multiple USB choices may be available to choose
from if you have several USB devices connected
to your pi. If you have trouble identifying which
of the choices is your GPS, try unplugging all
USB componets except your GPS and run this script
again.
STREAM MOBILE PHONE GPS:
Both your pi and your mobile phone MUST be
on the same network for this to function.
To stream your phone GPS you will need an
app on your phone. For iPhone see
https://itunes.apple.com/us/app/gps-2-ip/id408625926?mt=8
For Android phones see
https://play.google.com/store/apps/details?id=io.github.tiagoshibata.gpsdclient
Set the app in UDP or UDP Push mode. Set the IP
address to be the same as your Raspberry Pi. To
find the IP address of the Pi, run:
hostname -I
from the command line. After choosing "Phone" from
the dropdown, again enter your Pi's IP address
and the same port that you entered in the app
on your phone. If you are in the field, your pi will
likely be in "hotspot" mode. In this configuration
connect your phone to the hotspot via WiFi. Then
use the IP address of 10.10.10.10 both in this script
and in the app on your phone.
BLUETOOTH GPS:
Bluetooth GPS is considered beta as I don't have a
bluetooth GPS unit to test with. This assumes that
the GPS unit is attach to an rfcomm port. You will
need to know the rfcomm port number to use this feature.
This script will not help you connect the GPS to the Pi
via bluetooth. If you own a Bluetooth GPS and find that
this section will not work for you, please file an
issue ticket at github.
https://github.com/km4ack/pi-scripts/issues
Serial GPS:
You will need to know the serial port number to
which the GPS is attached. After choosing serial
GPS as your GPS type, enter the serial number
that the GPS is attached to.
CHANGELOG:
To see the changelog for this script run:
gpsupdate change
from the command line.
EOF
INTRO=$(yad --width=650 --height=400 --text-align=center --center --title="GPS Update Tool" \
--image $LOGO --window-icon=$LOGO --image-on-top --separator="|" --item-separator="|" \
--text="<b>GPS Update v$VERSION by KM4ACK</b>" \
--text-info</run/user/$UID/gpsintro.txt \
--button="Exit":0 > /dev/null 2>&1 \
--button="Continue":1)
BUT=$?
if [ $BUT = 252 ] || [ $BUT = 0 ]; then
rm /run/user/$UID/gpsintro.txt
exit
fi
rm /run/user/$UID/gpsintro.txt
}
#####################################
# Display Changelog
#####################################
CHANGELOG(){
clear;echo;echo
cat <<EOF>/run/user/$UID/changelog.txt
Version 6 18OCT2022
add sudo password to support x86
Version 5 29OCT2021
add defaults for phone GPS
Version 4 06SEPT0221
add gpsd restart to main screen
Version 3 11FEB2021
add bluetooth GPS support
add cell phone GPS support
add changelog function
add additional user instructions
change sed command when modding gpsd file
move USBGPS to funtion
move help file to function
add help option to main script
move main menu to function
bump version number
Version 2 06FEB2021
add serial GPS support
bump version number
Verions 1 11JAN2021
script created to help swap between multiple GPS devices
EOF
INTRO=$(yad --width=650 --height=350 --text-align=center --center --title="GPS Update Tool by KM4ACK - Changelog" --show-uri \
--image $LOGO --window-icon=$LOGO --image-on-top --separator="|" --item-separator="|" \
--text-info</run/user/$UID/changelog.txt \
--button="Exit":2 > /dev/null 2>&1)
BUT=$?
if [ $BUT = 252 ] || [ $BUT = 2 ]; then
rm /run/user/$UID/changelog.txt
exit
fi
rm /run/user/$UID/changelog.txt
exit
}
if [ $1 = 'change' ]>/dev/null 2>&1; then
CHANGELOG
fi
#Verify gpsd is installed
if ! hash gpsd 2>/dev/null; then
yad --center --height="300" --width="400" --form --separator="|" --item-separator="|" --title="GPS" \
--image $LOGO --window-icon=$LOGO --image-on-top \
--text="\r\r\r<b><big>GPS software not installed.\rPlease install and try again.</big></b>" \
--button="Exit":1
fi
#####################################
# Phone GPS Function
#####################################
PHONEGPS(){
IP=*
PORT=11123
PHONEPORT=$(yad --form --width=420 --text-align=center --center --title="GPS Update Tool" \
--image $LOGO --window-icon=$LOGO --image-on-top --separator="|" --item-separator="|" \
--text="<b>version $VERSION</b>" \
--text="\rEnter IP addr and port number for GPS\rSee help file for more information" \
--field="IP Addr" "$IP" \
--field="Port Number" "$PORT" \
--button="Continue":2 \
--button="Exit":1)
BUT=$?
MYIP=$(echo $PHONEPORT | awk -F "|" '{print $1}')
MYPORT=$(echo $PHONEPORT | awk -F "|" '{print $2}')
if [ $BUT = 252 ] || [ $BUT = 1 ]; then
exit
fi
##############################################################
#This section mods the gpsd file and restart the gpsd service#
##############################################################
cp /etc/default/gpsd /run/user/$UID
sed -i "s|DEVICES=.*|DEVICES=\"udp://$MYIP:$MYPORT\"|" /run/user/$UID/gpsd
echo $PASS | sudo -S cp /run/user/$UID/gpsd /etc/default/
echo $PASS | sudo -S systemctl restart gpsd
yad --center --height="300" --width="300" --form --separator="|" --item-separator="|" --title="GPS" \
--image $LOGO --window-icon=$LOGO --image-on-top \
--text="\r\r\r\r\r<b><big>GPS had been updated</big></b>" \
--button="Exit":1
exit
}
#####################################
# serial GPS Function
#####################################
#For those that use a serial GPS hat like https://www.adafruit.com/product/2324
SERIALGPS(){
SERIALPORT=$(yad --form --width=420 --text-align=center --center --title="GPS Update Tool" \
--image $LOGO --window-icon=$LOGO --image-on-top --separator="|" --item-separator="|" \
--text="<b>version $VERSION</b>" \
--text="\rEnter serial port number for GPS" \
--field="Serial Port Number" \
--button="Continue":2 \
--button="Exit":1)
BUT=$?
MYPORT=$(echo $SERIALPORT | awk -F "|" '{print $1}')
if [ $BUT = 252 ] || [ $BUT = 1 ]; then
exit
fi
##############################################################
#This section mods the gpsd file and restart the gpsd service#
##############################################################
cp /etc/default/gpsd /run/user/$UID
sed -i "s|DEVICES=.*|DEVICES=\"/dev/serial$MYPORT\"|" /run/user/$UID/gpsd
echo $PASS | sudo -S cp /run/user/$UID/gpsd /etc/default/
echo $PASS | sudo -S systemctl restart gpsd
yad --center --height="300" --width="300" --form --separator="|" --item-separator="|" --title="GPS" \
--image $LOGO --window-icon=$LOGO --image-on-top \
--text="\r\r\r\r\r<b><big>GPS had been updated</big></b>" \
--button="Exit":1
exit
}
#####################################
# bluetooth GPS Function
#####################################
#Section used by hams that use a serial GPS hat like https://www.adafruit.com/product/2324
BLUEGPS(){
BLUEPORT=$(yad --form --width=420 --text-align=center --center --title="GPS Update Tool" \
--image $LOGO --window-icon=$LOGO --image-on-top --separator="|" --item-separator="|" \
--text="<b>version $VERSION</b>" \
--text="\rEnter rfcomm port number for GPS" \
--field="Rfcomm Port Number" \
--button="Continue":2 \
--button="Exit":1)
BUT=$?
MYPORT=$(echo $BLUEPORT | awk -F "|" '{print $1}')
if [ $BUT = 252 ] || [ $BUT = 1 ]; then
exit
fi
##############################################################
#This section mods the gpsd file and restart the gpsd service#
##############################################################
cp /etc/default/gpsd /run/user/$UID
sed -i "s|DEVICES=.*|DEVICES=\"/dev/rfcomm$MYPORT\"|" /run/user/$UID/gpsd
echo $PASS | sudo -S cp /run/user/$UID/gpsd /etc/default/
echo $PASS | sudo -S systemctl restart gpsd
yad --center --height="300" --width="300" --form --separator="|" --item-separator="|" --title="GPS" \
--image $LOGO --window-icon=$LOGO --image-on-top \
--text="\r\r\r\r\r<b><big>GPS had been updated</big></b>" \
--button="Exit":1
exit
}
#####################################
# USB GPS Function
#####################################
USBGPS(){
#######################################################
#This section allows the user to identify the GPS unit#
#######################################################
yad --center --height="200" --width="200" --form --separator="|" --item-separator="|" --title="GPS" \
--image $LOGO --window-icon=$LOGO --image-on-top \
--text="\r\r\r<b><big>Connect your GPS to the pi</big></b>" \
--button="Exit":1 \
--button="Continue":2
BUT=$?
if [ $BUT = 1 ] || [ $BUT = 252 ]; then
exit
fi
USB=$(ls /dev/serial/by-id)
USB=$(echo $USB | sed "s/\s/|/g")
GPS=$(yad --center --height="200" --width="300" --form --separator="|" --item-separator="|" --title="GPS" \
--image $LOGO --window-icon=$LOGO --image-on-top \
--text="<b>Choose Your GPS</b>" \
--field="GPS":CB "$USB")
BUT=$?
if [ $BUT = 252 ] || [ $BUT = 1 ]; then
exit
fi
GPS=$(echo $GPS | awk -F "|" '{print $1}')
##############################################################
#This section mods the gpsd file and restart the gpsd service#
##############################################################
cp /etc/default/gpsd /run/user/$UID
sed -i "s|DEVICES=.*|DEVICES=\"/dev/serial/by-id/$GPS\"|" /run/user/$UID/gpsd
echo $PASS | sudo -S cp /run/user/$UID/gpsd /etc/default/
echo $PASS | sudo -S systemctl restart gpsd
yad --center --height="300" --width="300" --form --separator="|" --item-separator="|" --title="GPS" \
--image $LOGO --window-icon=$LOGO --image-on-top \
--text="\r\r\r\r\r<b><big>GPS had been updated</big></b>" \
--button="Exit":1
}
MAIN(){
#######################################################
# Choose GPS Type :: Serial,USB,Bluetooth,Phone #
#######################################################
GPSTYPE=$(yad --form --width=420 --text-align=center --center --title="GPS Update Tool" \
--image $LOGO --window-icon=$LOGO --image-on-top --separator="|" --item-separator="|" \
--text="GPS Update Tool <b>v$VERSION</b> by KM4ACK" \
--field="Choose GPS Type or Help":CB "Help|USB|Serial|Bluetooth|Phone" \
--button="Restart GPSD":3 \
--button="Continue":2 \
--button="Exit":1)
BUT=$?
if [ $BUT = 1 ] || [ $BUT = 252 ]; then
exit
fi
if [ $BUT = 3 ]; then
echo "restarting gpsd service"
echo $PASS | sudo -S systemctl restart gpsd
yad --center --height="300" --width="300" --form --separator="|" --item-separator="|" --title="GPS" \
--image $LOGO --window-icon=$LOGO --image-on-top \
--text="\r\r\r\r\r<b><big>gpsd service restarted</big></b>" \
--button="Ok":1
MAIN
fi
MYGPS=$(echo $GPSTYPE | awk -F "|" '{print $1}')
if [ $MYGPS = 'Serial' ]; then
SERIALGPS
elif [ $MYGPS = 'Bluetooth' ]; then
BLUEGPS
elif [ $MYGPS = 'Phone' ]; then
PHONEGPS
elif [ $MYGPS = 'USB' ]; then
USBGPS
elif [ $MYGPS = 'Help' ]; then
HELP
MAIN
fi
}
MAIN