#!/bin/sh
# Check if the Plugin Manager reports a stable firmware

INTERVAL=240
WDT_FILE="/tmp/updatewatchdog"

sleep ${INTERVAL}

p1=`cat /proc/cmdline | grep ubi.mtd=3 | wc -l`
p2=`cat /proc/cmdline | grep ubi.mtd=4 | wc -l`

# Key to unlock the u-boot environment
KEY=`cat /etc/fw_env.key`

rootfs_mtd=`fw_printenv -a ${KEY} rootfs_mtd`
rootfs_part=`fw_printenv -a ${KEY} rootfs_part`

SAVEOLDPARTITION=/data/keep_old_partition
UPDATECOUNTERFILE=/data/updatecounter

# Check the current partition and update uboot env variables
if [ $p1 -gt 0 ] && [ $p2 = 0 ]; then
    if [ -f $UPDATECOUNTERFILE ]; then
        logger -p1 "FW: Checking partition 1"
        # System is updated
        if [ ! -e "$WDT_FILE" ]; then
            logger -p1 "FW: Update seems to have failed. Expect reboot..."
            res="`ps ax | grep python | sed -n '1p' | awk '{print $1;}'`";  echo "killing PID $res .."; kill -9 $res; sleep 1
            logger -p1 "FW: PluginManager killed"

            # Reboot will start from the previous partition
            logger -p1 "FW: Rebooting...."
            reboot
            exit 1
        else
            fw_setenv -a ${KEY} rootfs_mtd 3
            fw_setenv -a ${KEY} rootfs_part filesystem

            if [ -f $SAVEOLDPARTITION ];
            then
                logger -p 5 "FW: Do not remove old partition"
            else
                logger -p 5 "FW: Remove old partition"
                ubidetach -p /dev/mtd4
                ubiformat /dev/mtd4
                ubiattach -p /dev/mtd4 -d 4
                ubimkvol /dev/ubi4 -N rootfs -m
            fi

            logger -p 5 "FW: Updated u-boot environment"
        fi
    fi
elif [ $p2 -gt 0 ] && [ $p1 = 0 ]; then
    if [ -f $UPDATECOUNTERFILE ]; then
	    logger -p1 "FW: Checking partition 2"
        # System is updated
        if [ ! -e "$WDT_FILE" ]; then
            logger -p1 "FW: Update seems to have failed. Expect reboot..."
            res="`ps ax | grep python | sed -n '1p' | awk '{print $1;}'`";  echo "killing PID $res .."; kill -9 $res; sleep 1
            logger -p1 "FW: PluginManager killed"
            
            # Reboot will start from the previous partition
            logger -p1 "FW: Rebooting...."
            reboot
            exit 1
        else
            fw_setenv -a ${KEY} rootfs_mtd 4
            fw_setenv -a ${KEY} rootfs_part redundant-filesystem

            if [ -f $SAVEOLDPARTITION ];
            then
                logger -p 5 "FW: Do not remove old partition"
            else
                logger -p 5 "FW: Remove old partition"
                ubidetach -p /dev/mtd3
                ubiformat /dev/mtd3
                ubiattach -p /dev/mtd3 -d 3
                ubimkvol /dev/ubi3 -N rootfs -m
            fi

            logger -p 5 "FW: Updated u-boot environment"
        fi
    fi
else
    logger -p 3 "FW: Error partition unknown"
    exit 1
fi

# Reset u-boot bootcount
[ -f "/sys/class/misc/bootcount/bootcount" ] && echo 0 > /sys/class/misc/bootcount/bootcount || logger -p3 "FW: Bootcount not accessible"
rm -f $UPDATECOUNTERFILE

exit 0

