#!/bin/sh
# /etc/init.d/

set -e

DAEMON=/usr/local/sbin/rescuebutton
DAEMONOPTS=""
NAME=rescuebutton
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin

test -x $DAEMON || exit 0

case "$1" in
  start)
    DAEMONOPTS=""
    echo -n "Starting rescuebutton app: $NAME  "
	if [ ! -d /sys/class/gpio/gpio150 ]; then
    	echo "149" > /sys/class/gpio/export
        echo "150" > /sys/class/gpio/export
	    echo "in" > /sys/class/gpio/gpio150/direction
	    echo "low" > /sys/class/gpio/gpio149/direction
	fi
    [ -d /var/run/rescuebutton ] || mkdir -p /var/run/rescuebutton
    start-stop-daemon --start --background -m --pidfile /var/run/rescuebutton/rescuebutton.pid --exec $DAEMON
    echo "."
    ;;
  stop)
    echo -n "Stopping rescuebutton app: $NAME  "
    start-stop-daemon --stop --pidfile /var/run/rescuebutton/rescuebutton.pid --oknodo --exec $DAEMON -- $DAEMONOPTS
    rm -f /var/run/rescuebutton/rescuebutton.pid
    echo "."
      ;;
  debug)
    DAEMONOPTS="-NR"
    echo -n "Starting rescuebutton in debug mode : $NAME  "
	if [ ! -d /sys/class/gpio/gpio150 ]; then
    	echo "149" > /sys/class/gpio/export
        echo "150" > /sys/class/gpio/export
	    echo "in" > /sys/class/gpio/gpio150/direction
	    echo "low" > /sys/class/gpio/gpio149/direction
	fi
    [ -d /var/run/rescuebutton ] || mkdir -p /var/run/rescuebutton
    start-stop-daemon --start --background -m --pidfile /var/run/rescuebutton/rescuebutton.pid --exec $DAEMON -- -b $DAEMONOPTS
    echo "."
    ;;
  restart)
    echo -n "Restarting rescuebutton app: $NAME  "
	
	set +e #enable error checking incase process wasn't running
    start-stop-daemon --stop --pidfile /var/run/rescuebutton/rescuebutton.pid  -q --exec $DAEMON
	if [ "$?" = "1" ]; then
		sleep 5 #if process wasn't running give it five seconds to see if it comes up (incase this script gets called twice really fast) and try again
		start-stop-daemon --stop --pidfile /var/run/rescuebutton/rescuebutton.pid  --oknodo --exec $DAEMON
	fi
 
	#now that we have sent the kill signal lets monitor it to see when it actually closes
	PID=`cat /var/run/rescuebutton/rescuebutton.pid`
	for i in 1 2 3 4 5
	do
		kill -s 0 $PID 2> /dev/null #redriect stderr to null as we want this to throw a no process found message
		if [ "$?" = "0" ]; then
			sleep 1  #process is running, give it some time to exit
		else
		    rm -f /var/run/rescuebutton/rescuebutton.pid
	    	if [ ! -d /sys/class/gpio/gpio150 ]; then
            	echo "149" > /sys/class/gpio/export
                echo "150" > /sys/class/gpio/export
	            echo "in" > /sys/class/gpio/gpio150/direction
	            echo "low" > /sys/class/gpio/gpio149/direction
	        fi
			start-stop-daemon --start --background -m --pidfile /var/run/rescuebutton/rescuebutton.pid --exec $DAEMON -- $DAEMONOPTS
			echo "."
			exit 0
		fi
	done	
	
	rm -f /var/run/rescuebutton/rescuebutton.pid
				
	#process wouldn't peacefully go down, time to be less forgiving
	killall -9 rescuebutton #boom
	sleep 5 
	start-stop-daemon --start --background -m --pidfile /var/run/rescuebutton/rescuebutton.pid --exec $DAEMON -- $DAEMONOPTS
	echo "."
	exit 0
	
    ;;
  reload|force-reload)
    echo "Reloading $NAME configuration files  "
    start-stop-daemon --stop --pidfile /var/run/rescuebutton/rescuebutton.pid --signal 1 --exec $DAEMON -- $DAEMONOPTS
    echo "."
    ;;
  *)
    echo "Usage: /etc/init.d/$NAME {start|stop|restart|reload}"
    exit 1
    ;;
esac

exit 0