#!/bin/sh
#
# Start binaries needed by radio modem
#

MISTD=false
[ -r /etc/mist-daemon.conf ] && MISTD=true

RABBIT=true
$MISTD && RABBIT=false

check() {
	# $1: file to check
	[ -f "${1}" ] && return 0
	echo "Missing < ${1} >"
	return 1
}

# Make sure needed progams and files exist
check /usr/bin/sf               || exit 0
check /usr/bin/mist-setrtc      || exit 0
if $MISTD; then
	check /usr/bin/mist-daemon  || exit 0
	check /etc/mist-daemon.conf || exit 0
fi
if $RABBIT; then
	check /usr/bin/rabbit-mist             || exit 0
	check /usr/bin/announcement-mediator   || exit 0
	# adapter.conf: rabbit-mist conf
	check /etc/adapter.conf                || exit 0
	check /etc/announcement-mediator.conf  || exit 0
	check /etc/init.d/rabbit.sh            || exit 0
	check /etc/init.d/rabbit_log.sh        || exit 0
fi

SETRTC_DAEMON_CONN='sf@localhost:32000'
SETRTC_DAEMON_OPTIONS='-p 600 -n 0.pool.ntp.org'

if [ -r '/etc/mist-setrtc/mist-setrtc.conf' ]; then
	. /etc/mist-setrtc/mist-setrtc.conf
fi

umask 077

start_sf() {
	printf "Starting sf: "
	/usr/bin/sf control-port 31000 32000 /dev/ttymxc4 115200
	echo "OK"
}

stop_sf() {
	printf "Stopping sf: "
	killall sf
	echo "OK"
}

start_mist() {
	printf "Starting mist-setrtc: "
	/usr/bin/mist-setrtc ${SETRTC_DAEMON_CONN} ${SETRTC_DAEMON_OPTIONS}
	echo "OK"
}

stop_mist() {
	printf "Stopping mist-setrtc: "
	killall mist-setrtc
	echo "OK"
}

start_am() {
	printf "Starting announcement-mediator: "
	/usr/bin/announcement-mediator --conf-file /etc/announcement-mediator.conf \
	| gwpipelog "/var/log/announcement-mediator.log"
	echo "OK"
}

stop_am() {
	printf "Stopping announcement-mediator: "
	killall -e /usr/bin/announcement-mediator
	echo "OK"
}

start_rotate_rabbit() {
	/etc/init.d/rabbit_log.sh
}

stop_rotate_rabbit() {
	killall rabbit_log.sh
}

start_rabbit() {
	printf "Starting rabbit-mist: "
	/etc/init.d/rabbit.sh
	echo "OK"
}

stop_rabbit() {
	printf "Stopping rabbit-mist: "
	killall rabbit.sh
	killall rabbit-mist
	echo "OK"
}

start_mist_daemon() {
	printf "Starting mist-daemon: "
	/etc/init.d/mistd.sh
	echo "OK"
}

stop_mist_daemon() {
	printf "Stopping mist-daemon: "
	killall mistd.sh
	killall mist-daemon
	echo "OK"
}

start() {
	start_sf &
	start_mist &
	$MISTD && start_mist_daemon &
	$RABBIT && start_rotate_rabbit &
	$RABBIT && start_rabbit &
	$RABBIT && start_am &
}
stop() {
	$MISTD && stop_mist_daemon
	$RABBIT && stop_rabbit
	$RABBIT && stop_rotate_rabbit
	stop_mist
	stop_sf
	$RABBIT && stop_am
}

restart() {
	stop
	start
}

case "$1" in
	start)
		start
		;;
	stop)
		stop
		;;
	restart|reload)
		restart
		;;
	*)
		echo "Usage: $0 {start|stop|restart}"
		exit 1
esac

exit $?
