#!/bin/sh
VER_INCORRECT="110"
CORRUPTED="111"
ACNB_MISMATCH="112"
BOOT_NUM=`fw_printenv |grep bootnum |cut -d= -f2`
if [ -z $BOOT_NUM ]; then
	BOOT_NUM=2
fi
. /etc/default/firmware_version_orig.conf
TouchFailFile () {
	touch /var/run/Fail
	echo $1 > /var/run/fw_status
	exit 1
}
FwVersionCheck () {
	if [ -z $FIRMWARE_VERSION ]; then
		TouchFailFile $CORRUPTED
	fi
	OFIELD1=${FIRMWARE_VERSION:0:3}
	OFIELD2=${FIRMWARE_VERSION:4:3}
	OFIELD3=${FIRMWARE_VERSION:8:2}
	
	NEW_VERSION=`cat $1 | cut -d= -f2`
	
	NFIELD1=${NEW_VERSION:1:3}
	NFIELD2=${NEW_VERSION:5:3}
	NFIELD3=${NEW_VERSION:9:2}

	if [ $OFIELD1 = $NFIELD1 ] && [ $OFIELD2 = $NFIELD2 ] && [ $OFIELD3 = $NFIELD3 ]; then
		return 0
	else
		return 1
	fi
}
case "$1" in
     save)
	if [ -z $3 -o ! -f $3 ]; then
		TouchFailFile $CORRUPTED
	fi

	cd /var/www/images/tmp
	mv $3 download.tgz
	zcat download.tgz > /dev/null
	if [ $? -ne 0 ]; then
		TouchFailFile $CORRUPTED
	fi

	if [  $2 -eq 0 ]; then
		tar -zxf download.tgz version.conf
		if [ ! -f version.conf ]; then
			TouchFailFile $VER_INCORRECT
		fi
		FwVersionCheck `pwd`/version.conf
		if [ $? -eq 1 ]; then
			TouchFailFile $ACNB_MISMATCH
		fi
	fi

#	/usr/sbin/ai_button led_off

	#erase the flash of bootp partition.
	BOOT_NUM=`expr $BOOT_NUM % 2 + 1`
	echo "Erase mtd_bootp$BOOT_NUM"
	flash_eraseall  /dev/mtd_bootp$BOOT_NUM
	if [ $? -eq 1 ]; then
		TouchFailFile $CORRUPTED
	fi
	echo "Write firmware image ..."
	tar -zxf download.tgz bootpImage.ub -O | nandwrite -p /dev/mtd_bootp$BOOT_NUM -
	if [ ! $? -eq 0 ]; then
		TouchFailFile $CORRUPTED
	fi
	sleep 1
	sync
	#nanddump must be patch that can be used. (nanddump.c.120314)
#	nanddump -o -b -l "SIZE" -f bootp-dump /dev/mtd_bootp$BOOT_NUM
#	cmp bootp-dump bootpImage.ub
#	if [ $? -eq 0 ]; then
		#change booting partition...
		fw_setenv change_partition 1
#	fi
	##### workaround firmware ....
	tar -zxf download.tgz fw_upg_patch
	if [ -f ./fw_upg_patch/fw_upg_patch.sh ]; then
		chmod 755 ./fw_upg_patch/fw_upg_patch.sh
		./fw_upg_patch/fw_upg_patch.sh
	fi
	echo $COMPLETED > /var/run/fw_status			   
	
	;;

     *)
	echo "Usage: "$0" [save] [0|1] firmware-file"
	exit 1
	;;
esac
exit 0

