#!/bin/bash


killall sdrtst rtl_tcp sondemod sondeudp udpgate4 2>/dev/null
sleep 1
killall -9 sdrtst rtl_tcp sondemod sondeudp udpgate4 2>/dev/null


TUSER=${SUDO_USER:-${USERNAME:-unknown}}
if [ "$TUSER" == "unknown" ]
then
	echo "Wymagane uprawnienia roota, uzyj: sudo ./install_spdxl.sh"
	exit 0
fi

SYS=`cat /proc/device-tree/model | cut -d " " -f 1`

if [ $SYS != "Raspberry" ];
then
	cat /proc/device-tree/model
	echo ""
	uname -a
	echo "Wykryta platforma "$SYS
	echo "Skrypt testowany TYLKO na Raspberry Pi!"
	echo "Nacisnij dowolny klawisz aby kontynuowac lub Ctrl+C aby przerwać"
	read -n 1 -s
fi

echo "Podlacz dongel RTL-SDR do urzadzenia i do anteny!"
echo "Nacisnij dowolny klawisz aby kontynuowac..."
read -n 1 -s

INSTALL_PATH="/home/"$TUSER

SIGN=N0CALL
LAT=0000.00
LON=00000.00
REDZ='^[0-9]+([.][0-9]+)?$'
REC='^[0-9]+$'

if [ -f $INSTALL_PATH/dxl_config.sh ];
then
	echo "Wykryto plik z konfiguracja: $INSTALL_PATH/dxl_config.sh"
	source $INSTALL_PATH/dxl_config.sh
else
	echo "Podaj znak:"
	read SIGN

	echo "Lokalizacja stacji LAT [ddmm.mm] np. 5159.99:"
	read LAT
	while [ ${#LAT} -ne 7 ] || ! [[ $LAT =~ $REDZ ]];
	do
		echo "Nieprawidlowy format danych. Podaj lokalizacje stacji LAT [ddmm.mm]:"
		read LAT
	done

	echo "Lokalizacja stacji LON [dddmm.mm] np. 01659.99:"
	read LON
	while [ ${#LON} -ne 8 ] || ! [[ $LON =~ $REDZ ]];
	do
		echo "Nieprawidlowy format danych. Podaj lokalizacje stacji LON [dddmm.mm]:"
                read LON
	done

	echo "Podaj hasło do bazy SP9SKP (jezeli nie masz to zostaw puste):"
	read SKPPASS

	echo "Podaj korekcje PPM dla dongla (jezeli nie znasz to zostaw puste):"
	read PPMERROR
	while ! [ -z $PPMERROR ] && ! [[ $PPMERROR =~ $REC ]];
	do
		echo "Nieprawidlowy format danych. Podaj korekcje PPM dla dongla (jezeli nie znasz to zostaw puste):"
	        read PPMERROR
	done
	SIGN=`echo "${SIGN^^}"`
	clear
fi

echo "Znak: "$SIGN
echo "APRS passcode: "$PASSWORD
echo "LAT: "$LAT
echo "LON: "$LON
echo "Haslo SP9SKP: "$SKPPASS
echo "PPM: "$PPMERROR
sleep 3

#dxl_config.sh
echo '#!/bin/bash' > $INSTALL_PATH/dxl_config.sh
echo 'SIGN='$SIGN >> $INSTALL_PATH/dxl_config.sh
echo 'LAT='$LAT >> $INSTALL_PATH/dxl_config.sh
echo 'LON='$LON >> $INSTALL_PATH/dxl_config.sh
echo 'SKPPASS='$SKPPASS >> $INSTALL_PATH/dxl_config.sh
echo "GATE_INFO='SPdxl for RadioSondy Polska on Facebook'" >> $INSTALL_PATH/dxl_config.sh
echo 'GAIN=0' >> $INSTALL_PATH/dxl_config.sh
echo 'START_UDPGATE=0' >> $INSTALL_PATH/dxl_config.sh
echo 'START_SECOND_RTL=0' >> $INSTALL_PATH/dxl_config.sh
echo 'LOWERALTITUDE=1200' >> $INSTALL_PATH/dxl_config.sh
echo 'LOWERALTINTERVALSEC=1' >> $INSTALL_PATH/dxl_config.sh
echo 'HIGHALTINTERVALSEC=30' >> $INSTALL_PATH/dxl_config.sh

chmod +x $INSTALL_PATH/dxl_config.sh


apt-get update
cp -f /usr/share/zoneinfo/Europe/Warsaw /etc/localtime
apt-get install -y build-essential libpng-dev libjpeg-dev zlib1g-dev libx11-dev libxext-dev libcurl4-openssl-dev libssl-dev curl nano mc git cmake screen automake libfftw3-dev libtool libusb-1.0-0-dev pkg-config apache2 php php-curl
apt-get install -y npm

ln -s /usr/include/libusb-1.0/libusb.h /usr/include/libusb.h

cat > /etc/modprobe.d/blacklist-rtl.conf <<EOF
blacklist dvb_usb_rtl28xxu
blacklist rtl2832
blacklist rtl2830
EOF

echo "Instalacja rtl-sdr"
sleep 3
cd $INSTALL_PATH
rm -rf rtl-sdr
git clone https://github.com/osmocom/rtl-sdr
cd rtl-sdr
mkdir build
cd build
cmake ../
make install
ldconfig
cd ../..
cp rtl-sdr/rtl-sdr.rules /etc/udev/rules.d
echo "Instalacja rtl-sdr zakonczona"

echo "Instalacja kalibrate-rtl"
sleep 3
cd $INSTALL_PATH
rm -rf kalibrate-rtl
git clone https://github.com/steve-m/kalibrate-rtl
cd kalibrate-rtl
./bootstrap
./configure
make install
echo "Instalacja kalibrate-rtl zakonczona"

echo "Instalacja SPdxl"
sleep 3
cd $INSTALL_PATH
rm -rf spdxl
git clone https://github.com/gimmick94/spdxl.git
cd $INSTALL_PATH/spdxl/src/
make sondeudp sondemod udpgate4 gps2aprs gps2digipos sdrtst
echo "Instalacja SPdxl zakonczona"
sleep 3

cp -f $INSTALL_PATH/spdxl/src/sdrtst $INSTALL_PATH/spdxl/src/sondeudp $INSTALL_PATH/spdxl/src/sondemod $INSTALL_PATH/spdxl/src/udpgate4 /usr/local/bin

wget -O $INSTALL_PATH/start_spdxl.sh http://radiosondy.pl/files/start_spdxl.sh
wget -O $INSTALL_PATH/aprs_pass.php http://radiosondy.pl/files/aprs_pass.php_src
wget -O $INSTALL_PATH/restart_check.sh http://radiosondy.pl/files/restart_check.sh
wget -O $INSTALL_PATH/freq_cycler.py http://radiosondy.pl/files/freq_cycler.py
wget -O $INSTALL_PATH/cycler.cfg http://radiosondy.pl/files/cycler.cfg


wget -O $INSTALL_PATH/oled_sh1106.py http://radiosondy.pl/files/oled_sh1106.py
wget -O $INSTALL_PATH/oled_ssd1306.py http://radiosondy.pl/files/oled_ssd1306.py
wget -O $INSTALL_PATH/oled_ws13.py http://radiosondy.pl/files/oled_ws13.py
wget -O $INSTALL_PATH/pm.ttf http://radiosondy.pl/files/pm.ttf
wget -O /usr/local/bin/getrinex.sh http://radiosondy.pl/files/getrinex.sh
wget -O /usr/local/bin/rotate_band_spdxl.sh http://radiosondy.pl/files/rotate_band_spdxl.sh

chmod +x $INSTALL_PATH/start_spdxl.sh
chmod +x $INSTALL_PATH/restart_check.sh
chmod +x $INSTALL_PATH/oled_sh1106.py
chmod +x $INSTALL_PATH/oled_ssd1306.py
chmod +x $INSTALL_PATH/oled_ws13.py
chmod +x $INSTALL_PATH/freq_cycler.py
chmod +x /usr/local/bin/getrinex.sh
chmod +x /usr/local/bin/rotate_band_spdxl.sh
chown -hR $TUSER $INSTALL_PATH
chgrp -hR $TUSER $INSTALL_PATH

udevadm control --reload-rules
udevadm trigger

modprobe -r dvb_usb_rtl28xxu rtl2832
modprobe -r dvb_usb_v2 rtl2832
modprobe -r dvb_core rtl2832
modprobe -r i2c_mux rtl2832
modprobe -r rtl2832

if ! grep -q spdxl /var/spool/cron/crontabs/$TUSER;
then
	echo "*/60 * * * * /usr/local/bin/getrinex.sh 2>&1 | /usr/bin/logger -t RINEX " >> /var/spool/cron/crontabs/$TUSER
	echo "@reboot sleep 60; $INSTALL_PATH/start_spdxl.sh  2>&1 | /usr/bin/logger -t DXL" >> /var/spool/cron/crontabs/$TUSER 
	echo "* * * * * $INSTALL_PATH/restart_check.sh 2>&1 >/dev/null" >> /var/spool/cron/crontabs/$TUSER
	echo "#@reboot $INSTALL_PATH/oled_sh1106.py 2>&1 >/dev/null &" >> /var/spool/cron/crontabs/$TUSER
	echo "#@reboot $INSTALL_PATH/oled_ssd1306.py 2>&1 >/dev/null &" >> /var/spool/cron/crontabs/$TUSER
	echo "#@reboot $INSTALL_PATH/oled_ws13.py 2>&1 >/dev/null &" >> /var/spool/cron/crontabs/$TUSER
	
fi
chown $TUSER /var/spool/cron/crontabs/$TUSER
chgrp $TUSER /var/spool/cron/crontabs/$TUSER
chmod 600 /var/spool/cron/crontabs/$TUSER

if ! grep -q tmp /etc/fstab;
then
	echo "tmpfs   /tmp          tmpfs   defaults,noatime,nosuid,mode=1777,size=100m     0       0" >> /etc/fstab
	echo "tmpfs   /var/log      tmpfs   defaults,noatime,nosuid,mode=1777,size=100m     0       0" >> /etc/fstab
fi


#setting up WWW
cd $INSTALL_PATH
sed -i '/APACHE_LOG_DIR/c\export APACHE_LOG_DIR=\/var\/log' /etc/apache2/envvars
sed -i '/PrivateTmp=/c\PrivateTmp=false' /lib/systemd/system/apache2.service
systemctl daemon-reload
systemctl restart apache2.service

rm -rf /var/www/html/spdxl
mkdir /var/www/html/spdxl
mkdir /var/www/html/spdxl/conf
chown .www-data /var/www/html/spdxl/conf
chmod 775 /var/www/html/spdxl/conf
cp -r $INSTALL_PATH/spdxl/www-sq7br/* /var/www/html/spdxl
usermod -a -G www-data $TUSER
usermod -a -G plugdev $TUSER

ln -s $INSTALL_PATH/dxl_config.sh /var/www/html/spdxl/conf/dxl_config.sh

chown .www-data $INSTALL_PATH/dxl_config.sh
chmod 664 $INSTALL_PATH/dxl_config.sh

#clear
echo "KALIBRACJA"

RTL_ID=0
RTL_GAIN=28
if [ -z $PPMERROR ];
then
	echo "Liczenie poczatkowego PPM..."
	INIT_PPM=`timeout 65 rtl_test -d $RTL_ID -p 2>/dev/null | tail -n 1 | cut -d " " -f 10`
	echo "Poczatkowy PPM: "$INIT_PPM
	echo "Skanowanie GSM900...to troche potrwa"
	KANAL=`kal -s GSM900 -d $RTL_ID -g $RTL_GAIN -e $INIT_PPM 2>/dev/null | awk '{print $NF,$2}' | sort -nr | cut -d " " -f 2 | head -n 1`
	if ! [[ $KANAL =~ $REC ]];
	then
		echo "Nie znaleziono kanalu GSM900, kalibracja nieudana!"
		exit 0
	fi
	echo "Najmocniejszy kanal GSM900: "$KANAL
	echo "Liczenie PPM..."
	PPMERROR=`kal -c $KANAL -d $RTL_ID -e $INIT_PPM -g $RTL_GAIN 2>/dev/null | tail -n 1 | cut -d " " -f 4`
	PPMERROR=`kal -c $KANAL -d $RTL_ID -e $PPMERROR  -g $RTL_GAIN 2>/dev/null | tail -n 1 | cut -d " " -f 4`
	echo "PPM: "$PPMERROR
	echo "PPMERROR="$PPMERROR >> $INSTALL_PATH/dxl_config.sh
else
	echo "PPMERROR="$PPMERROR >> $INSTALL_PATH/dxl_config.sh
fi
sync
echo ""
echo "Uruchom ponownie urzadzenie!"
exit 0
