#!/bin/sh

SKIP_HW_DESC_TTY_IRQS=1
source /etc/mod-hardware-descriptor.env

if [ $# -ne 1 ]; then
    echo "usage: ${0} <binary_file>"
    exit 1
fi

FILE=${1}

# stop services if needed
if [ -f /bin/systemctl ]; then
    if [ -f /etc/systemd/system/mod-self-test.service ]; then
        echo "Stopping mod-self-test..."
        /bin/systemctl stop mod-self-test
    fi
    if [ -f /etc/systemd/system/mod-ui.service ]; then
        echo "Stopping mod-ui..."
        /bin/systemctl stop mod-ui
    fi
fi

# configure GPIOs as output
echo "Configuring HMI..."
echo out > ${HMI_ISP_GPIO_PATH}/direction
echo out > ${HMI_RST_GPIO_PATH}/direction

# set initial state of the GPIOs
echo 0 > ${HMI_RST_GPIO_PATH}/value
echo 0 > ${HMI_ISP_GPIO_PATH}/value
usleep 100000

# enable ISP programming mode
echo 1 > ${HMI_ISP_GPIO_PATH}/value
# reset microcontroller
echo 1 > ${HMI_RST_GPIO_PATH}/value
usleep 100000

#go low, high again, just in case
# dissable ISP programming mode
echo 0 > ${HMI_ISP_GPIO_PATH}/value
# reset microcontroller
echo 0 > ${HMI_RST_GPIO_PATH}/value
usleep 100000

# enable ISP programming mode
echo 1 > ${HMI_ISP_GPIO_PATH}/value
# reset microcontroller
echo 1 > ${HMI_RST_GPIO_PATH}/value
usleep 1500000

# release reset and ISP
echo 0 > ${HMI_RST_GPIO_PATH}/value
usleep 100000
echo 0 > ${HMI_ISP_GPIO_PATH}/value

# proceed to upgrade firmware
echo "Flashing HMI..."
lpc21isp -wipe -bin ${FILE} ${HMI_SERIAL_PORT} ${HMI_ISP_BAUD_RATE} ${HMI_SYS_CLOCK}
