#!/bin/sh

# efusA9X pin 96
EFUSA9X_PWR_PIN=gpio48

# PicoCoreMX6UL100 pin J1 44
PICOCOREMX6UL100_PWR_PIN=gpio22

PWR_PIN=$EFUSA9X_PWR_PIN

if [ `cat /sys/bdinfo/board_name` = "PicoCoreMX6UL100" ]
then
	# PicoCoreMX6UL100
	PWR_PIN=$PICOCOREMX6UL100_PWR_PIN
fi


RUNNING_FOLDER="/Core/Runapp/"
echo "Creating folder "$RUNNING_FOLDER
mkdir $RUNNING_FOLDER

RUNNING_FILE=$(date +"%Y-%m-%d__%H-%M-%S")".txt"

PBX_ITEMS=0
SHUTDOWN=0
RUN=-1
RUN_NEW=$RUN
SLEEP_DURATION=200
POLLING_INTERVAL=2000
POLL_TIME=0
APP_NAME="PBX32LinuxApp"
ERROR_CORE_FLD="/Core/Error/"
ERR_CACHE_FLD=0

has_substring () {
	[[ "$1" != "${2/$1/}" ]]
}

while true; do
	if [ `cat /sys/class/gpio/$PWR_PIN/value` != '1' ]; then
		date >> ${RUNNING_FOLDER}${RUNNING_FILE}
		echo -e "\tSystem shutting down..." >> ${RUNNING_FOLDER}${RUNNING_FILE}
		sleep 12
		cd /tmp
		ERR_CACHE_FLD=`find 20*_*_* -maxdepth 0 -type d`
		for k in $ERR_CACHE_FLD
		do
			echo "$k"
			cd "$k"
			cp *.log "$ERROR_CORE_FLD""$k"
			cd ..
		done
		echo -e "\tError log has been copied from cache" >> ${RUNNING_FOLDER}${RUNNING_FILE}
		SHUTDOWN=1
		echo ...unmounting /Core
		umount -r /Core
#		echo ...unmounting rootfs
#		umount /
#		echo ...unmounting /app
#		umount /app
		poweroff
		break
	fi;

	if [ $POLL_TIME -eq 0 ] && [ $RUN -lt 0 ]; then
		date >> ${RUNNING_FOLDER}${RUNNING_FILE}
		echo -e "\t Starting monitor script..." >> ${RUNNING_FOLDER}${RUNNING_FILE}
		echo -e "\t-----------------------------------> Starting monitor script writing into "${RUNNING_FILE}
	fi

	msleep $SLEEP_DURATION

	if [ $SHUTDOWN -eq 0 ]; then
	    POLL_TIME=$((POLL_TIME + SLEEP_DURATION))
#	    echo $POLL_TIME

 	    if [ $POLL_TIME -ge $POLLING_INTERVAL ]; then
		POLL_TIME=0
		PBX_ITEMS=`ps|grep PBX32LinuxApp|grep -v 'grep'`
		
#		echo $PBX_ITEMS

		RUN_NEW=0

		if [ -n "$PBX_ITEMS" ]; then
			for i in $PBX_ITEMS
			do
#				if grep -q "$i" <<< "$APP_NAME"; then
				if has_substring "$i" "$APP_NAME"; then
#				if [ $i == "PBX32LinuxApp" ]; then
#					echo $i
					RUN_NEW=$((RUN_NEW+1))
				fi
			done
		fi
		
		if [ $RUN_NEW -ne $RUN ]; then
			date >> ${RUNNING_FOLDER}${RUNNING_FILE}

			if [ $RUN_NEW -eq 0 ]; then
				echo -e "\tNo process in memory!" >> ${RUNNING_FOLDER}${RUNNING_FILE}
			elif [ $RUN_NEW -gt 0 ]; then
				echo $PBX_ITEMS >> ${RUNNING_FOLDER}${RUNNING_FILE}
#				echo $PBX_ITEMS
			else	
				echo -e "\tIncorrect state!" >> ${RUNNING_FOLDER}${RUNNING_FILE}
			fi

			RUN=$RUN_NEW
		fi
	    fi
	fi
done;
