#!/bin/sh
### BEGIN INIT INFO
# Provides:          Starting prtsoft printer software
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description:
# Description:
### END INIT INFO
# Author: hkoelle@carl-valentin.de

DAEMON_prtsoft=/opt/prtsoft.elf

# loglevel deaktivieren fuer serielle schnittstelle
echo "0" > /proc/sys/kernel/printk

# Action
case "$1" in
    start)
        set -e
        if [ -d "/home/user/update" ] ; then
            echo "Found update in /home/user/update - copy to /"
            cp -r -f /home/user/update/* / &&
            rm -r -f /home/user/update
        fi &&
        if [ ! -f $DAEMON_prtsoft ]; then
            echo "Error: can't start prtsoft: file /opt/prtsoft.elf not found"
            exit "1"
        fi
        echo "Loading FPGA ..." &&
        /opt/fpga_load /opt/fpgaLoadedAfterBoot.bit &&
        if [[ "$(lsmod | grep KM_CvKernelAccess)" == "" && "$(lsmod | grep CvFpgaKiTi)" == "" ]] ; then
            modprobe KM_CvKernelAccess.ko
        fi

		set +e
		echo "S39prtsoft: start" > /tmp/S39
        start="start"
        counter=0
        ps | awk '/\/opt\/boot.elf/{exit 255}'
        if [ $? -eq 255 ]; then
            echo "S39prtsoft: Boot-SW is running" >> /tmp/S39
            timeout=30  # Timeout in Sekunden
        	while [ ! -e "/tmp/prtsoft_start" ]; do
        		if [ "$counter" -ge "$timeout" ]; then
        			echo "S39prtsoft: Timeout: $counter" >> /tmp/S39
        			break;
        		fi
    			sleep 1
    			counter=$(expr "$counter" + 1)
			done
        fi
        if [ -e "/tmp/prtsoft_start" ]; then
        	start=$(cat "/tmp/prtsoft_start")
        fi
		set -e

        if [ "$start" = "start" ]; then
        	echo "S39prtsoft: Starting prtsoft: $counter" >> /tmp/S39
        	echo -e "\001TD\"Starting prtsoft...\n \";1;1;0\027" > /dev/ttyO1 &&
        	echo "You must call fflush(stdout); in your C program to see stdout!!!!" > /home/user/psoft.info_stderr.txt &&
        	start-stop-daemon -S -b -x /bin/ash -- -c "$DAEMON_prtsoft &> /home/user/psoft.stderr.log"
        else
        	echo "S39prtsoft: Do not start prtsoft (should be done by bootsw)" >> /tmp/S39
        fi
        ;;

    quickstart)
        set -e
        if [ -d "/home/user/update" ] ; then
            echo "Found update in /home/user/update - copy to /"
            cp -r -f /home/user/update/* / &&
            rm -r -f /home/user/update
            echo "Loading FPGA ..." &&
            /opt/fpga_load /opt/fpgaLoadedAfterBoot.bit &&
            if [[ "$(lsmod | grep KM_CvKernelAccess)" == "" && "$(lsmod | grep CvFpgaKiTi)" == "" ]] ; then
                modprobe KM_CvKernelAccess.ko
            fi
        fi &&
        if [ ! -f $DAEMON_prtsoft ]; then
            echo "Error: can't start prtsoft: file /opt/prtsoft.elf not found"
            exit "1"
        fi
        echo -e "\001TD\"Starting prtsoft...\n \";1;1;0\027" > /dev/ttyO1 &&
        start-stop-daemon -S -b -x /bin/ash -- -c "$DAEMON_prtsoft &> /home/user/psoft.stderr.log"
        ;;

    stop)
        # stoppe prtsoft
        start-stop-daemon -K -x $DAEMON_prtsoft
        # display steht auf 115200 baud, deshalb seriell auf 115200
        stty 115200 -F /dev/ttyO1
        # display ruecksetzen auf 57600 baud sonst funktioniert es nach erneutem prtsoft start nicht mehr
        echo -e "\001TO75\027" > /dev/ttyO1
        # display steht auf 57600 baud, deshalb seriell auf 57600
        stty 57600 -F /dev/ttyO1
        # echo -e "\001TD\"prtsoft stopped.\n \";1;1;0\027" > /dev/ttyO1
        ;;

    restart)
        echo "Restarting prtsoft.."
        $0 stop
        $0 start
        echo "done."
        ;;
    *)
        echo "Usage: $0 {start|quickstart|stop|restart}"
        exit 1
        ;;
esac

exit 0
