#!/bin/sh /etc/rc.common
# Copyright (C) 2006 OpenWrt.org

START=99

include /lib/upgrade
FLASH_TYPE=$(get_flash_type)

check_bootctrl() {
	local bootctrl=$(get_bootctrl $BOOTCTRL_OFFSET 16)
	local is_ab_partition=$(is_ab_partition)
	echo "FLASH_TYPE=$FLASH_TYPE, bootctrl=$bootctrl, is_ab_partition=$is_ab_partition" > /dev/kmsg
	if [ "$is_ab_partition" -eq 0 ]; then
		echo "not A/B partition" > /dev/kmsg
		return 0
	fi
	local current_slot=$(get_current_slot)
	echo "current_slot=$current_slot" > /dev/kmsg
	if [ "$current_slot" = "_a" ]; then
		local success_a=$(get_bootctrl $BOOTCTRL_OFFSET_SUCCESS_A 1)
		if [ $((0x${success_a})) -ne $((0x01)) ]; then
			if [ $FLASH_TYPE == "nand" ]; then
				local up_a=$(get_bootctrl $BOOTCTRL_OFFSET_UP_A 1)
				local uppl_a=$(( 0x01 & 0x$up_a ))
				echo "uppl_a is $((0x${uppl_a}))" > /dev/kmsg
				if [ $((0x${uppl_a})) -ne $((0x01)) ]; then
					echo "No preloader in sysupgrade" > /dev/kmsg
				else
					echo "Copying preloader to preloader_backup" > /dev/kmsg
					# skip depends on block size of memory
					nanddump -s 262144 --skip-bad-blocks-to-start -l 262144 /dev/mtd0 | mtd -p 262144 write - preloader_backup
				fi
			fi
			local up_b=$(get_bootctrl $BOOTCTRL_OFFSET_UP_B 1)
			if [ $((0x${up_b})) -eq $((0x04)) ]; then
				set_bootctrl_string 0 00 0 00 1 01 0 00 0 00 0 00 0 00 1 01
				#set_bootctrl $BOOTCTRL_OFFSET_UP_B \\x01
			elif [ $((0x${up_b})) -eq $((0x02)) ]; then
				set_bootctrl_string 0 00 0 00 1 01 0 00 0 00 0 00 0 00 1 00
				#set_bootctrl $BOOTCTRL_OFFSET_UP_B \\x00
			else
				set_bootctrl_string 0 00 0 00 1 01 0 00 0 00 0 00 0 00 0 00
			fi
			echo "updating success a $success_a" > /dev/kmsg
			#set_bootctrl $BOOTCTRL_OFFSET_SUCCESS_A \\x01
		fi
	elif [ "$current_slot" = "_b" ]; then
		local success_b=$(get_bootctrl $BOOTCTRL_OFFSET_SUCCESS_B 1)
		if [ $((0x${success_b})) -ne $((0x01)) ]; then
			if [ $FLASH_TYPE == "nand" ]; then
				local up_b=$(get_bootctrl $BOOTCTRL_OFFSET_UP_B 1)
				local uppl_b=$(( 0x01 & 0x$up_b ))
				echo "uppl_b is $((0x${uppl_b}))" > /dev/kmsg
				if [ $((0x${uppl_b})) -ne $((0x01)) ]; then
					echo "No preloader in sysupgrade" > /dev/kmsg
				else
					echo "Copying preloader to preloader_backup" > /dev/kmsg
					# skip depends on block size of memory
					nanddump -s 262144 --skip-bad-blocks-to-start -l 262144 /dev/mtd0 | mtd -p 262144 write - preloader_backup
				fi
			fi
			local up_a=$(get_bootctrl $BOOTCTRL_OFFSET_UP_A 1)
			if [ $((0x${up_a})) -eq $((0x04)) ]; then
				set_bootctrl_string 0 00 0 00 0 00 1 01 0 00 0 00 1 01 0 00
				#set_bootctrl $BOOTCTRL_OFFSET_UP_A \\x01
			elif [ $((0x${up_a})) -eq $((0x02)) ]; then
				set_bootctrl_string 0 00 0 00 0 00 1 00 0 00 0 00 1 01 0 00
				#set_bootctrl $BOOTCTRL_OFFSET_UP_A \\x00
			else
				set_bootctrl_string 0 00 0 00 0 00 0 00 0 00 0 00 1 01 0 00
			fi
			echo "updating success b $success_b" > /dev/kmsg
			#set_bootctrl $BOOTCTRL_OFFSET_SUCCESS_B \\x01
		fi
	else
		echo "current_slot error: $current_slot" > /dev/kmsg
	fi
}

boot() {
	echo -n "Daemons Done" > /proc/bootprof
	check_bootctrl
}
