#!/bin/bash
set -x

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


echo "Uruchamianie spdxl"

#-----USTAWIENIA RTL-TCP
RTLPORT=1234
DEVICE=0                #ID DONGLA
BLOCKSIZE=20

#------------------ustawienia wspolne ---------------------
DXL_WWW=/var/www/html/spdxl
DXL_LOG=/var/log
DXL_TMP=/tmp
DXL_BIN=/usr/local/bin

RDIR="$( dirname "${BASH_SOURCE[0]}" )"
DIR="$( cd "$RDIR" && pwd )"

source $DIR/dxl_config.sh

PASSWORD=`php aprs_pass.php $SIGN`


#-----USTAWIENIA SDRTST
SQUELCHPOS=100 # closed squelch needs about 1% cpu of open squelch
SDRTSTCONF=${DXL_TMP}/sdrcfg.txt #NASLUCHIWANE KANALY, MAX PASMO 2MHz
SDRTST_BAND0=${DXL_WWW}/conf/sdrcfg0.txt
SDRTST_BAND1=${DXL_WWW}/conf/sdrcfg1.txt
SDRTST_BAND2=${DXL_WWW}/conf/sdrcfg2.txt
SDRTST_BAND3=${DXL_WWW}/conf/sdrcfg3.txt


if [ ! -f ${SDRTST_BAND0} ];
then
cat >${SDRTST_BAND0} <<EOF
p 5 ${PPMERROR}
p 8 1
f 400.600 10 0 0 60 12000 #Poprad
#f 401.000 10 0 0 60 12000 #Vienna,Payerne
f 401.100 10 0 0 60 12000 #Praha
#f 401.300 2 -6500 60 0 25000 #M10
#f 402.000 10 0 0 60 12000 #Zagreb,Payerne
#f 402.000 2 -6500 60 0 25000 #M10
#f 402.010 10 0 0 60 12000 #Segedyn
f 402.100 10 0 0 60 12000 #Prostejov
f 402.300 10 0 0 60 12000 #Greifswald
#f 402.500 10 0 0 60 12000 #Scheswig
#f 402.470 40 1200 0 60 12000 #Pilotsonde
EOF
fi

if [ ! -f ${SDRTST_BAND1} ];
then
cat >${SDRTST_BAND1} <<EOF
p 5 ${PPMERROR}
p 8 1
f 402.700 10 0 0 60 12000 #Kummersbruck
#f 402.768 10 0 0 60 12000 
#f 402.800 10 0 0 60 12000
f 402.870 10 0 0 60 12000 #Lindenberg_DFM
f 403.000 10 0 0 60 12000 #Wroclaw
#f 403.400 10 0 0 60 12000 
#f 403.500 10 0 0 60 12000 #Vienna
#f 403.580 10 0 0 60 12000 #DFM
#f 404.100 10 0 0 60 12000 #Essen
EOF
fi

if [ ! -f ${SDRTST_BAND2} ];
then
cat >${SDRTST_BAND2} <<EOF
p 5 ${PPMERROR}
p 8 1
#f 404.000 10 0 0 60 12000
#f 404.100 10 0 0 60 12000 #Norderney
#f 404.340 10 0 0 60 12000
f 404.500 10 0 0 60 12000 #Legionowo
#f 404.600 10 0 0 60 12000 #Leba
#f 404.700 10 0 0 60 12000 #Meinigen
#f 404.800 10 0 0 60 12000 #San_Pietro
#f 404.900 10 0 0 60 12000 #Kummersbruck
f 405.100 10 0 0 60 12000 #Lindenberg
#f 405.300 10 0 0 60 12000 #Praha_2
#f 405.700 10 0 0 60 12000 #Bergen
f 405.800 10 0 0 60 12000 #Lindenberg2
#f 405.900 10 0 0 60 12000
EOF
fi

ln -s  ${SDRTST_BAND0} /tmp/sdrtst0.cfg
ln -s  ${SDRTST_BAND1} /tmp/sdrtst1.cfg
ln -s  ${SDRTST_BAND2} /tmp/sdrtst2.cfg
ln -s  ${SDRTST_BAND3} /tmp/sdrtst3.cfg

cp ${SDRTST_BAND2} ${SDRTSTCONF}

chown .www-data ${SDRTST_BAND0} ${SDRTST_BAND1} ${SDRTST_BAND2} ${SDRTST_BAND3}
chmod 664 ${SDRTST_BAND0} ${SDRTST_BAND1} ${SDRTST_BAND2} ${SDRTST_BAND3}



IPADDR=127.0.0.1
SIGN_SUF_GATE=15        #10 [APLWS2 via qAU, ...-10]
SIGN_SUF_SONDE=14       #11 ....-11>APLWS2,qAU,...-10:;M.... *HHMMSSh9999.99N/99999E (from .$
SIGN_SUF_SENDER=16

#-----USTAWIENIA RINEX
RINEXPYSCRIPT=${DXL_BIN}/getrinex.sh
RINEXFILE=${DXL_TMP}/rinex.txt
RINEXORDER=getalmanach

FIFOFILEMULTICHANNEL=${DXL_TMP}/multichannel.fifo

#-----USTAWIENIA SONDEUDP
MAXCHANNELS=0 #0-auto ${MAXACTIVERX} # ile na raz czytac strumieni wejsciowych
BUFLEN=128
#probkowanie audio
ADCRATE=25000
SONDESIGN="${SIGN}-${SIGN_SUF_SONDE}"
SONDEGATE=${IPADDR}":4000"
SONDEGATE_2="78.9.173.153:4001" #radiosondy.pl UDP gate

#-----USTAWIENIA UDPGATE4
GATELOCALUDPPORT=9001
GATELOCALAUXUDPPORT=4010
GATER="${IPADDR}:4011:${GATELOCALAUXUDPPORT}"
GATELOCALPORT=14580
GATESIGN="${SIGN}-${SIGN_SUF_GATE}"
GATELOGLVL=6
GATELOG=/dev/null
UDPRFLOCAL="${IPADDR}:14581:${GATELOCALUDPPORT}"
NETBEACONFILE=${DXL_TMP}/netbeacon.txt
BEACONINFOFRM="!${LAT}N/${LON}E\`${GATE_INFO}"
NTBCNIMIN=15
WWW=${DXL_WWW}
WWWPORT=8080

echo "${BEACONINFOFRM}" >${NETBEACONFILE}

APRSISFILE=${DXL_TMP}/aprs-is.lst
cat >${APRSISFILE} <<EOF
euro.aprs2.net:14580
EOF

#-----USTAWIENIA SONDEMOD
ALMANACHGPSRINEX=${RINEXFILE}
DECODERPORT=4000
GATEADDRESS=${IPADDR}:${GATELOCALAUXUDPPORT}
SENDERSIGN="${SIGN}-${SIGN_SUF_SENDER}"
REQUESTNEWALMANACHMIN=30
#LOWERALTITUDE=3000
#LOWERALTINTERVALSEC=1
#HIGHALTINTERVALSEC=30
SENDTYPE=2 #0- if weather data ready 1- if MHz known 2- send immediatly

OWNCOMMENTFILE=${DXL_TMP}/sondemod_comment.txt

cat >${OWNCOMMENTFILE} <<EOF
 Znalazles sonde? Pochwal sie na http://bit.ly/2y48Y8P
%u
EOF

#-----KOMENDY DO STARTOWANIA PROGRAMOW
RTL_CMD="${DXL_BIN}/rtl_tcp \
-a ${IPADDR} \
-p ${RTLPORT} \
-g ${GAIN} \
-P ${PPMERROR} \
-d ${DEVICE} \
-b ${BLOCKSIZE} \
"

RTL_TCPTOAUDIO_CMD="${DXL_BIN}/sdrtst \
-c ${SDRTSTCONF} \
-t ${IPADDR}:${RTLPORT} \
-r ${ADCRATE} \
-k \
-v -n 1 \
-Z ${SQUELCHPOS} \
-s ${FIFOFILEMULTICHANNEL} \
"

SONDEFRAME_CMD="${DXL_BIN}/sondeudp \
-f ${ADCRATE} \
-l ${BUFLEN} \
-c ${MAXCHANNELS} \
-o ${FIFOFILEMULTICHANNEL} \
-I ${SONDESIGN} \
-v \
-n 172 \
-u ${SONDEGATE} \
-u ${SONDEGATE_2} \
"

GATE_CMD="${DXL_BIN}/udpgate4 \
-v \
-R ${GATER} \
-M ${UDPRFLOCAL} \
-s ${GATESIGN} \
-n ${NTBCNIMIN}:${NETBEACONFILE} \
-l 7:${GATELOG} \
-t ${GATELOCALPORT} \
-g :${APRSISFILE} \
-p ${PASSWORD} \
-D ${WWW} \
-w ${WWWPORT} \
"

MULTISONDEDECODER_CMD="while true; do ${DXL_BIN}/sondemod \
-v -e \
-x ${ALMANACHGPSRINEX} \
-o ${DECODERPORT} \
-I ${SENDERSIGN} \
-R ${REQUESTNEWALMANACHMIN} \
-T 1440 \
-d \
-p ${SENDTYPE} \
-t ${OWNCOMMENTFILE} \
-K ${SKPPASS} \
; done"

if [ -z $SKPPASS ]; then
echo "Bez hasla do bazy SP9SKP! Uzupelnij haslo w pliku ~/dxl_config.sh";
MULTISONDEDECODER_CMD="while true; do ${DXL_BIN}/sondemod \
-v -D -e \
-x ${ALMANACHGPSRINEX} \
-o ${DECODERPORT} \
-I ${SENDERSIGN} \
-R ${REQUESTNEWALMANACHMIN} \
-T 1440 \
-d \
-p ${SENDTYPE} \
-t ${OWNCOMMENTFILE} \
; done"
fi

ROTATEBAND_CMD="${DXL_BIN}/rotate_band_spdxl.sh \
"

${DXL_BIN}/getrinex.sh 2>/dev/null

screen -X -S dxl quit 1>/dev/null
screen -wipe 1>/dev/null

rm -f ${FIFOFILEMULTICHANNEL}
mkfifo ${FIFOFILEMULTICHANNEL}

echo "Startowanie screenow"

screen -S dxl -t main -A -d -m bash

screen -S dxl -X screen -t rtl_tcp
screen -S dxl -p rtl_tcp -X stuff $"${RTL_CMD} \n"

sleep 5

screen -S dxl -X screen -t sdrtst
screen -S dxl -p sdrtst -X stuff $"${RTL_TCPTOAUDIO_CMD} \n"

screen -S dxl -X screen -t sondeudp
screen -S dxl -p sondeudp -X stuff $"${SONDEFRAME_CMD} \n"

screen -S dxl -X screen -t sondemod
screen -S dxl -p sondemod -X stuff $"${MULTISONDEDECODER_CMD} \n"

if [ ${START_UDPGATE} -eq 1 ]
then
screen -S dxl -X screen -t udpgate4
screen -S dxl -p udpgate4 -X stuff $"${GATE_CMD} \n"
fi
sleep 10


screen -S dxl -X screen -t rotate
screen -S dxl -p rotate -X stuff $"${ROTATEBAND_CMD} \n"

if [ ${START_SECOND_RTL} -eq 1 ]
then
cp /tmp/sdrcfg.txt /tmp/second.cfg
rm -f /tmp/second.fifo
mkfifo /tmp/second.fifo
$DXL_BIN/rtl_tcp -d 1 -a 127.0.0.1 -p 1235 -s 2400000 -f 403M  </dev/null >/dev/null 2> /dev/null &
sleep 5
$DXL_BIN/sdrtst -c /tmp/second.cfg -t 127.0.0.1:1235 -i 2400000 -r 24000 -k -v -n 2 -Z ${SQUELCHPOS} -s /tmp/second.fifo </dev/null >/dev/null 2> /dev/null &
sleep 2
$DXL_BIN/sondeudp -v -f 24000 -l 128 -c 0 -o /tmp/second.fifo -I $SONDESIGN -v -n 172 -u ${SONDEGATE} -u ${SONDEGATE_2} </dev/null >/dev/null 2> /dev/null &
sleep 2
$DIR/freq_cycler.py -c 10 -bc 8 -ppm 0 -bw 2400 $DIR/cycler.cfg /tmp/second.cfg  </dev/null >/dev/null 2> /dev/null &
fi

echo "Uruchomione!"
screen -ls

