#!/bin/sh
### BEGIN INIT INFO
# Provides:          codesyscontrol
# Required-Start:    hostname $local_fs
# Required-Stop:
# Should-Start:
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: Prepares and starts codesyscontrol
# Description:       Prepares and starts codesyscontrol
### END INIT INFO

PATH=/sbin:/usr/sbin:/bin:/usr/bin

NAME=codesyscontrol
DAEMON=/opt/codesys/bin/codesyscontrol.bin
LOGFILE=/dev/null
CONFIGFILE=/etc/CODESYSControl.cfg
PIDFILE=/var/run/codesyscontrol.pid
WORKDIR=/var/opt/codesys/

#exit script if package is not installed
[ -x "$DAEMON" ] || exit 2



# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions


make_mknod () {
	#create node if not already there
    if [ ! -c /dev/char_dev ]; then
        nodeid=$(cat /sys/devices/virtual/bcm2708_vcio/vcio/dev | tr ':' ' ')
        /bin/mknod /dev/char_dev c $nodeid
        echo "Create char_dev: $nodeid"
    fi

}

do_start () {

	make_mknod

	export PlcConfigFile=/etc/CODESYSControl.cfg

	if [ -d "/sys/bus/platform/drivers/bcm2708_i2c/" ]; then
		echo bcm2708_i2c.0 > /sys/bus/platform/drivers/bcm2708_i2c/unbind
		echo 400000 > /sys/module/i2c_bcm2708/parameters/baudrate
		echo bcm2708_i2c.0 > /sys/bus/platform/drivers/bcm2708_i2c/bind	
	fi

	# 1 wire
	modprobe w1-gpio pullup=1
	modprobe w1-therm


	# Return
	#   0 if daemon has been started
	#   1 if daemon was already running
	#   2 if daemon could not be started
	start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test --chdir $WORKDIR > /dev/null || return 1
	start-stop-daemon --start --background --make-pidfile --pidfile $PIDFILE --chdir $WORKDIR --startas /bin/bash  -- -c "exec $DAEMON $CONFIGFILE  >$LOGFILE 2>&1" || return 2

	# pin codesys to first cpu!
	/usr/bin/taskset -a -p 01 $(cat $PIDFILE);


	sleep 1 && pgrep codesyscontrol > /dev/null && echo "codesyscontrol started" || echo "ERROR: codesyscontrol not started!";

}

do_backuplicenses () {

	# restore und backup ordner...
	#
	# backup immer
	# restore wenn "restore" ordner nicht leer, und tar...
	#

	echo "Backup licenses"	
	ARCHIVE=$WORKDIR/backup/3SLicenseInfo.tar
	ARCHIVE_INFO=$WORKDIR/cmact_licenses/info.lic

	date > $ARCHIVE_INFO
	uname -a >> $ARCHIVE_INFO
	cat /proc/cpuinfo >> $ARCHIVE_INFO
	ifconfig -a >> $ARCHIVE_INFO

	ls -la $WORKDIR/cmact_licenses/ >> $ARCHIVE_INFO

	tar cf $ARCHIVE $WORKDIR/cmact_licenses $WORKDIR/3SLicense.wbb > /dev/null

}

do_restorelicenses () {

	ARCHIVE=$WORKDIR/restore/3SLicenseInfo.tar
	NEWARCHIVE=/tmp/3SLicenseInfo.tar

	if [ -f $ARCHIVE ]; then

		mv $ARCHIVE /tmp/
		tar -xvf $NEWARCHIVE -C /
		echo "Restored licenses"
	fi

}

do_stop () {

	start-stop-daemon --stop --quiet --pidfile $PIDFILE --name $NAME
	RETVAL="$?"
	[ "$RETVAL" = 2 ] && return 2

	start-stop-daemon --stop --quiet --oknodo  --exec $DAEMON
	[ "$?" = 2 ] && return 2
	# Many daemons don't delete their pidfiles when they exit.
	rm -f $PIDFILE
	return "$RETVAL"
}

case "$1" in
  start|"")

	do_restorelicenses
	do_backuplicenses

	do_start


	;;
  restart|reload|force-reload|status)
	echo "Error: argument '$1' not supported" >&2
	exit 3
	;;
  stop)
	do_stop
	;;
  *)
	echo "Usage: codesyscontrol [start|stop]" >&2
	exit 3
	;;
esac

:
