#!/bin/sh

if [ "o" = "$1" -o "b" = "$1" -o "s" = "$1" ]; then

	echo "Start time: `cat /proc/uptime`"

	for i in `seq 0 4`
	do
		# Noise countermeasures
		/usr/local/sbin/shutdownSensor 1;
		pow1=$?
		sleep 0.05
		/usr/local/sbin/shutdownSensor 1;
		pow2=$?
		sleep 0.05
		/usr/local/sbin/shutdownSensor 1;
		pow3=$?

		if [ $pow1 -eq $pow2 ] && [ $pow2 -eq $pow3 ]; then
			break
		fi

	done

	if [ "x$pow1$pow2$pow3" = "x111" ]; then
		exit
	fi

	#timeout -s 9 2 /usr/bin/tvservice -o
	timeout -s 9 2 /usr/bin/vcgencmd display_power 0

	if [ -e "/usr/local/sbin/system-stop-use-usb" ]; then
		timeout -s 9 10 /usr/local/sbin/system-stop-use-usb
	fi

	if [ -e "/sys/devices/platform/bcm2708_usb/buspower" ]; then
		echo 0 > /sys/devices/platform/bcm2708_usb/buspower
	fi

	if [ -e "/sys/devices/platform/soc/20980000.usb/buspower" ]; then
		echo 0 > /sys/devices/platform/soc/20980000.usb/buspower
	fi

	if [ -e "/sys/devices/platform/soc/3f980000.usb/buspower" ]; then
		echo 0 > /sys/devices/platform/soc/3f980000.usb/buspower
	fi

	if [ -e "/usr/local/sbin/system-stop" ]; then
		timeout -s 9 10 /usr/local/sbin/system-stop
	fi

	/sbin/fake-hwclock save force

	sync

	SS_PIDS=$(pgrep -f 'shutdownSensor');
	for a in $SS_PIDS; do
		XPIDS=$XPIDS" -e $a"
	done

	WD_PIDS=$(pgrep -f 'watchdog');
	for a in $WD_PIDS; do
		XPIDS=$XPIDS" -e $a"
	done

	SD_PIDS=$(pgrep -f 'systemd');
	for a in $SD_PIDS; do
		XPIDS=$XPIDS" -e $a"
	done

	if [ ${#XPIDS} -gt 0 ]; then
		PIDS=$(ps ah -eo "%p" | grep -v $$ | grep -v $XPIDS);
	else
		PIDS=$(ps ah -eo "%p" | grep -v $$);
	fi

	if [ ${#PIDS} -gt 0 ]; then
		kill -9 $PIDS
	fi

	echo "End time: `cat /proc/uptime`"

	exec 0>&- 1>&- 2>&-

	sync

	echo s > /proc/sysrq-trigger

	sleep 1

	echo u > /proc/sysrq-trigger

	if [ "b" = "$1" ]; then
		echo 'b' > /proc/sysrq-trigger
		exit 0
	fi

	/usr/local/sbin/shutdownSensor 1
	if [ "$?" = "1" ]; then
		echo 'b' > /proc/sysrq-trigger
		exit 0
	fi
	/usr/local/sbin/shutdownSensor 2
	echo 'o' > /proc/sysrq-trigger

fi

exit 0

