#!/bin/sh
# /etc/init.d/micro
#
### BEGIN INIT INFO
# Provides:          micro
# Required-Start:    $local_fs
# Required-Stop:     $local_fs
# Default-Start:     5
# Default-Stop:      0 6
# Short-Description: micro startup stuffs
# Description:       Dbus hooks to turn control microcontroller
### END INIT INFO

USBTerminal()
{
		dbus-send --system --print-reply --dest=com.raven.hardware.microcontroller.v1 /com/raven/hardware/microcontroller/v1/debug com.raven.hardware.microcontroller.v1.debug.manual_tx byte:3 byte:1 array:byte:$1 >> /dev/null
}

SetLEDColor()
{
		dbus-send --system --print-reply --dest=com.raven.hardware.microcontroller.v1 /com/raven/hardware/microcontroller/v1/led com.raven.hardware.microcontroller.v1.led.setLED_color uint32:$1 >> /dev/null
}

SendShutdown()
{
		dbus-send --system --print-reply --dest=com.raven.hardware.microcontroller.v1 /com/raven/hardware/microcontroller/v1/diagnostics com.raven.hardware.microcontroller.v1.diagnostics.sendShutdown >> /dev/null
}

SetVout()
{
		if [ $1 -eq 1 ]; then
			#enable 12VOut
			dbus-send --system --print-reply --dest=com.raven.hardware.microcontroller.v1 /com/raven/hardware/microcontroller/v1/power com.raven.hardware.microcontroller.v1.power.setOutputs uint32:65600  >> /dev/null
		else
			#disable 12Vout
			dbus-send --system --print-reply --dest=com.raven.hardware.microcontroller.v1 /com/raven/hardware/microcontroller/v1/power com.raven.hardware.microcontroller.v1.power.setOutputs uint32:64  >> /dev/null
		fi
}

EnableCANTranceivers()
{
		if [ $1 -eq 0 ]; then
			#disable 
			dbus-send --system --print-reply --dest=com.raven.hardware.microcontroller.v1 /com/raven/hardware/microcontroller/v1/power com.raven.hardware.microcontroller.v1.power.setOutputs uint32:112 >> /dev/null
		else
			#enable STM and PROCESSOR, leave GPS off
			dbus-send --system --print-reply --dest=com.raven.hardware.microcontroller.v1 /com/raven/hardware/microcontroller/v1/power com.raven.hardware.microcontroller.v1.power.setOutputs uint32:65632 >> /dev/null
		fi
}

EnableCAN0Termination()
{
		if [ $1 -eq 0 ]; then
			#disable 
			/usr/bin/dbus-send --system --print-reply --dest=com.raven.hardware.microcontroller.v1 /com/raven/hardware/microcontroller/v1/power com.raven.hardware.microcontroller.v1.power.setOutputs uint32:4096 >> /dev/null
		else
			#enable
			/usr/bin/dbus-send --system --print-reply --dest=com.raven.hardware.microcontroller.v1 /com/raven/hardware/microcontroller/v1/power com.raven.hardware.microcontroller.v1.power.setOutputs uint32:69632 >> /dev/null
		fi
}

EnableCAN1Termination()
{
		if [ $1 -eq 0 ]; then
			#disable 
			/usr/bin/dbus-send --system --print-reply --dest=com.raven.hardware.microcontroller.v1 /com/raven/hardware/microcontroller/v1/power com.raven.hardware.microcontroller.v1.power.setOutputs uint32:8192 >> /dev/null
		else
			#enable
			/usr/bin/dbus-send --system --print-reply --dest=com.raven.hardware.microcontroller.v1 /com/raven/hardware/microcontroller/v1/power com.raven.hardware.microcontroller.v1.power.setOutputs uint32:73728 >> /dev/null
		fi
}


#0x7F0000
COLOR_RED="8323072"

#0x007F00
COLOR_GREEN="32512"

#0x00007F
COLOR_BLUE="127"

#0x7F7F00
COLOR_YELLOW="8355584"

#0x7F7F7F
COLOR_WHITE="8355711"

PLATFORM=`cat /etc/raven/platform`
CAN0TERM="/etc/raven/net/can0term"
CAN1TERM="/etc/raven/net/can1term"

DAEMON=/usr/sbin/hwMicroCon
DAEMONOPTS=""
NAME=hwMicroCon

case "$1" in
  start)
        echo -n "Starting app: $NAME  "
        [ -d /var/run/${NAME} ] || mkdir -p /var/run/${NAME}
        start-stop-daemon --start --background -m --pidfile /var/run/${NAME}/${NAME}.pid --exec ${DAEMON} -- ${DAEMONOPTS}
        sleep 1
        echo "."
        
        USBTerminal 1
        SetLEDColor $COLOR_GREEN

        if [ "${PLATFORM}" = "VIPER4PLUS" ]; then
            SetVout 1
		elif [ "${PLATFORM}" = "SPITFIRE" ]; then
            SetVout 1
        elif [ "${PLATFORM}" = "PINEHURST" ]; then
            if [ -f ${CAN0TERM} ]; then
                EnableCAN0Termination 1
            else
                EnableCAN0Termination 0
            fi
            
            if [ -f ${CAN1TERM} ]; then
                EnableCAN1Termination 1
            else
                EnableCAN1Termination 0
            fi
            
            EnableCANTranceivers 1
        fi
  ;;
  stop)
        USBTerminal 0
        SendShutdown

        if [ "${PLATFORM}" = "VIPER4PLUS" ]; then
            SetVout 0
		elif [ "${PLATFORM}" = "SPITFIRE" ]; then
            SetVout 0
        elif [ "${PLATFORM}" = "PINEHURST" ]; then
            EnableCANTranceivers 0
        fi
        
        echo -n "Stopping app: $NAME  "
        start-stop-daemon --stop --pidfile /var/run/${NAME}/${NAME}.pid --oknodo --exec ${DAEMON} -- ${DAEMONOPTS}
        rm -f /var/run/${NAME}/${NAME}.pid
  ;;
  color)
        case "$2" in
            red)
                SetLEDColor $COLOR_RED
            ;;
            green)
                SetLEDColor $COLOR_GREEN
            ;;
            blue)
                SetLEDColor $COLOR_BLUE
            ;;
            yellow)
                SetLEDColor $COLOR_YELLOW
            ;;
            white)
                SetLEDColor $COLOR_WHITE
            ;;
            *)
                echo "Available colors : red, green blue, yellow, white"
                exit -1
            ;;
        esac
  ;;
  reset)
        USBTerminal 0
        
        sleep 1

        USBTerminal 1
  ;;
  disable)
        echo -n "Stopping app: $NAME  "
        #Using stop daemon causes something to be left in dbus -> fix this
        killall -9 ${NAME}
        #start-stop-daemon --stop --pidfile /var/run/${NAME}/${NAME}.pid --oknodo --exec ${DAEMON} -- ${DAEMONOPTS}
        rm -f /var/run/${NAME}/${NAME}.pid    
  ;;
  enable)
        echo -n "Starting app: $NAME  "
        [ -d /var/run/${NAME} ] || mkdir -p /var/run/${NAME}
        start-stop-daemon --start --background -m --pidfile /var/run/${NAME}/${NAME}.pid --exec ${DAEMON} -- ${DAEMONOPTS}
        echo "."
  ;;
  *)
	echo "Usage /etc/init.d/micro [start|stop|reset|disable|enable]"
	exit -1
  ;;
esac

exit 0
