#!/usr/bin/env bash
#
# sdr_shell.sh
#
# Synopsis: 	 The script starts jack, dttsp, connects the jack ports, starts sdr-shell
#
# Version:      $Revision: 31 $
#
# Author:	    Andrea Montefusco iw0hdv
#               Excerpted from Edson Pereira startup script
#
# Usage:        ./sdr-shell.sh
#

function trapped {

   JACKD_PID=`cat $VARRUN/jackd.pid`
#   echo "Killing....... jackd ($JACKD_PID)"
#   kill  $JACKD_PID

#   rm -f $PMSDR_CMDPATH
}

trap "trapped" EXIT
trap "trapped" INT
trap "trapped" KILL


#
# Read the local configuration
#
. ./sdr-shell.conf

##############################################################################

VARRUN=/tmp/

# Test if we have the needed executables and directories
if [ ! -x $JACKD ]; then
  echo "Can't find $JACKD executable."
  exit 1
fi

if [ ! -d $DTTSP ]; then 
  echo "Can't find directory $DTTSP"
  exit 1
fi

DTTSP_EXEC=$DTTSP/sdr-core

if [ ! -x $DTTSP_EXEC ]; then 
  echo "Can't find $DTTSP_EXEC executable."
  exit 1
fi

if [ ! -x /usr/local/bin/./jack_connect ]; then
  echo "Can't find /usr/local/bin/./jack_connect"
  exit 1
fi

# If we have RT capability, get the realtime module ready
if [ $REALTIME ]; then
  echo "Configuring realtime module"
  JACKD="$JACKDRT -R"
  rmmod capability
  rmmod commoncap
  modprobe realcap any=1 allcaps=1
fi
  
##########################################################################
# Create FIFOs if needed
if [ ! -p /dev/shm/SDRcommands ]; then
mkfifo /dev/shm/SDRcommands
fi

if [ ! -p /dev/shm/SDRmeter ]; then
mkfifo /dev/shm/SDRmeter
fi

if [ ! -p /dev/shm/SDRspectrum ]; then
mkfifo /dev/shm/SDRspectrum
fi

# Sanity check
#
if [ ! -p /dev/shm/SDRcommands ]; then
   echo "Error while creating $PMSDR_CMDPATH fifo"
   exit 1
fi

##########################################################################
# Make sure jack and dttsp are not already running
TMP=`ps -ef | grep jackd | grep -v grep | wc -l`
if [ ! $TMP == 0 ]; then
  echo "jackd is already running. Stopping it..."
  killall jackd
fi

TMP=`ps -ef | grep sdr-core | grep -v grep | wc -l`
if [ ! $TMP == 0 ]; then
  echo "sdr-core is already running. Stopping it..."
  killall sdr-core
fi
echo "opening pipes with socat"
socat -u -b 65536 UDP-LISTEN:19002   PIPE:/dev/shm/SDRspectrum  &
socat -u          UDP-LISTEN:19003   PIPE:/dev/shm/SDRmeter &
##########################################################################
# Start jackd
# echo ">>>> Starting jack: $JACKD $JACKD_PARAM $JACKD_CUSTOM_PARAM"

#$JACKD $JACKD_PARAM $JACKD_CUSTOM_PARAM &
sleep 2
echo " R P70 "
echo ">>>>Starting jack: firewire 48000 1024 2"
$JACKD -R -P70 -d firewire -r 48000 -p1024 -n2  &

JACKD_PID=$!
if [ $JACKD_PID ] 
then
  echo $JACKD_PID > $VARRUN/jackd.pid
  echo "  Succeeded. JackD PID is $JACKD_PID"
  echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
else
  echo "  Failed"
  exit 1
fi

##########################################################################
# 
# wait for jackd startup 
#
sleep 2

##########################################################################
# Start dttsp
echo ">>>> Starting dttsp: $DTTSP_EXEC $DTTSP_PARAM..."
cd $DTTSP
#$DTTSP_EXEC $DTTSP_PARAM &
/dttsp-cgran/src/./sdr-core -s -m  &
DTTSP_RC=$?
DTTSP_PID=$!

if [ $DTTSP_RC == 0 ] 
then
   echo "$DTTSP_RC"
   if [ $DTTSP_PID ] 
   then
     echo $DTTSP_PID > $VARRUN/sdr-core.pid
     echo "  Succeeded. DttSP PID is $DTTSP_PID"
     echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
   else
     echo "  Failed to start $DTTSP_EXEC"
     exit 1
   fi
else
   echo "  Failed"
   exit 1
fi 


##########################################################################
#
# Connect Dttsp to jack ports
#
echo ">>>> Connecting dttsp to jack..."

#echo "  sdr-$DTTSP_PID:ol -> alsa_pcm:playback_1"
#/usr/bin/./jack_connect sdr-$DTTSP_PID:ol alsa_pcm:playback_1
#echo "  sdr-$DTTSP_PID:or -> alsa_pcm:playback_2"
#/usr/bin/./jack_connect sdr-$DTTSP_PID:or alsa_pcm:playback_2
#echo "  alsa_pcm:capture_1 -> sdr-$DTTSP_PID:il"
#/usr/bin/./jack_connect alsa_pcm:capture_1 sdr-$DTTSP_PID:il
#echo "  alsa_pcm:capture_2 -> sdr-$DTTSP_PID:ir"
#/usr/bin/./jack_connect alsa_pcm:capture_2 sdr-$DTTSP_PID:ir

echo "> Connecting dttsp to FireBox"
sleep 3
echo " sdr-$DTTSP_PID:ol -> freebob_pcm:P0_dev1p_MainOut 1+2 left"
#/usr/local/bin/./jack_connect sdr-$DTTSP_PID:ol "freebob_pcm:P0_dev1p_MainOut 1+2 left"
/usr/local/bin/./jack_connect sdr-$DTTSP_PID:ol system:playback_7
sleep 2
echo " sdr-$DTTSP_PID:or -> freebob_pcm:P1_dev1p_MainOut 1+2 right"
/usr/local/bin/./jack_connect sdr-$DTTSP_PID:or system:playback_8
sleep 2
echo " freebob_pcm:C2_dev1c_LineIn 3+4 left -> sdr-$DTTSP_PID:il"
/usr/local/bin/./jack_connect system:capture_3 sdr-$DTTSP_PID:il
sleep 2
echo " freebob_pcm:C3_dev1c_LineIn 3+4 right -> sdr-$DTTSP_PID:ir"
/usr/local/bin/./jack_connect system:capture_4 sdr-$DTTSP_PID:ir
sleep 2

##########################################################################
#
# Start the real thing ....

passport /dev/shm/SDRcommands &

sleep 2

sdr-shell &

#SDRSHELL_RC=$?

#exit $SDRSHELL_RC


