#! /bin/bash

MINIPCIE_RST_PIN=88
MINIPCIE_DIS_PIN=89

resize2fs() {
    if [ -f /sbin/expand2fs ]; then
        expand2fs
        mv /sbin/expand2fs /sbin/expand2fs.bak
	check_tpm
	sync
        /sbin/reboot -d -f -i
    fi
}

check_tpm () {
	if i2cdetect -y -r 0 0x20 0x20 | grep "\-\-" > /dev/null; then
		if ! grep "blacklist tpm" "/etc/modprobe.d/fbdev-blacklist.conf" > /dev/null; then
			echo "blacklist tpm" >> "/etc/modprobe.d/fbdev-blacklist.conf"
			echo "blacklist tpm_i2c_infineon" >> "/etc/modprobe.d/fbdev-blacklist.conf"
		fi
	else
		sed -i '/blacklist tpm/d' /etc/modprobe.d/fbdev-blacklist.conf
	fi
}

init_cel() {
	echo $MINIPCIE_RST_PIN > /sys/class/gpio/export
	echo "out" > /sys/class/gpio/gpio${MINIPCIE_RST_PIN}/direction
	echo 0 > /sys/class/gpio/gpio${MINIPCIE_RST_PIN}/value

	echo $MINIPCIE_DIS_PIN > /sys/class/gpio/export
	echo "out" > /sys/class/gpio/gpio${MINIPCIE_DIS_PIN}/direction
	echo 0 > /sys/class/gpio/gpio${MINIPCIE_DIS_PIN}/value
}

off_led() {
        echo 0 > /sys/class/leds/uc811x\:USB/brightness
        echo 0 > /sys/class/leds/uc811x\:SD/brightness
        echo 0 > /sys/class/leds/uc811x\:CEL1/brightness
        echo 0 > /sys/class/leds/uc811x\:CEL2/brightness
        echo 0 > /sys/class/leds/uc811x\:CEL3/brightness
	echo 0 > /sys/class/leds/uc811x\:DIA1/brightness
	echo 0 > /sys/class/leds/uc811x\:DIA2/brightness
	echo 0 > /sys/class/leds/uc811x\:DIA3/brightness
}

check_sd_write_protect () {
        # Get root filesystem status from cmdline.
        rfs_status=$(cat /proc/cmdline)
        rfs_status="${rfs_status##*sd=}"
        rfs_status="${rfs_status%% *}"
        # Get true while setting root filesystem write protect
        rfs_ro=$((((rfs_status >> 0)) & 0x01));
        if [ x"$rfs_ro" = x"1" ]; then
                mount -o remount,ro /
        fi
}

set_uart_mode() {
	# export gpio pin
	echo 61 > /sys/class/gpio/export
	echo "out" > /sys/class/gpio/gpio61/direction	
	
	if [ ! -f /dev/ttyM1 ]; then
		# set uart mode:RS232 as default
		setinterface /dev/ttyM0 0 >/dev/null 2>&1
		setinterface /dev/ttyM1 0 >/dev/null 2>&1
		echo 1 > /sys/class/gpio/gpio61/value
	else
		setinterface /dev/ttyM0 0 >/dev/null 2>&1
		echo 0 > /sys/class/gpio/gpio61/value
	fi
}

exec_push_btn () {
    killall -9 push_btn >/dev/null 2>&1
    /sbin/push_btn >/dev/null 2>&1 &
}

case "$1" in
    start)
		resize2fs
		check_sd_write_protect
		init_cel
		set_uart_mode
		set_module_cfg > /dev/null 2>&1 &
		exec_push_btn
        ;;
    restart|reload|force-reload)
        echo "Error: argument '$1' not supported" >&2
        exit 3
        ;;
    stop)
		killall -9 chk_signal >/dev/null 2>&1
		killall -9 push_btn >/dev/null 2>&1
		cell_mgmt power_off
    		off_led
        ;;
    *)
        echo "Usage: $0 start|stop" >&2
        exit 3
        ;;
esac

