#
# SPI NOR Flash (Rev-O, SEYEON Ramdisk linux system)
# firmware upgrade process functions
# 

FWUP_DBG=1

FIRMUP_STATE_FILE=/tmp/fw_upgrade_state.txt

write_firmup_state() {
	echo "PROGRESS=$1;" > $FIRMUP_STATE_FILE
	echo "DESCRIPTION=\"$2\";" >> $FIRMUP_STATE_FILE
	
	if [ "$FWUP_DBG" = "1" ]; then
		echo "---------------------------------------------"
		cat $FIRMUP_STATE_FILE
		echo "---------------------------------------------"
	fi
}

# make bootmode as normal boot
make_normal_bootmode() {
	IMAGE_FILE="$1"
	PartitionName="bootmode"
	MtdNum=`cat /proc/mtd | grep $PartitionName | awk '{print $1}' | sed -e s/^mtd// | sed -e s/\://`
	BOOTMODE_TMP=/bootmode.bin
	echo -n -e \\x00\\x00\\x00\\x00 > $BOOTMODE_TMP
	# /usr/sbin/flash_eraseall /dev/mtd${MtdNum}
	/usr/sbin/flashcp -v $BOOTMODE_TMP /dev/mtd${MtdNum}
}

mtd_image_update(){

	# Check argument
	if [ $# -lt 2 ]; then
		echo "Usage: $0 <image file> <mtd node number>"
		exit 1
	fi

	IMAGE_FILE="$1"
	MTD_NUM="$2"
	START_PROG="$3"
	END_PROG="$4"
	FORCE_ERASE="$5"

	if [ "$IMAGE_FILE" == "" -o "$MTD_NUM" == "" ]; then
		echo "[$0] error: Invilad argument, IMAGE_FILE=\"$IMAGE_FILE\", MTD_NUM=\"$MTD_NUM\""
	else
		if [ -f $IMAGE_FILE ]; then
			# Update a image on flash
			DEV_NODE=/dev/mtd${MTD_NUM}
			if [ $FORCE_ERASE == "1" ]; then
				/usr/sbin/flash_erase $DEV_NODE 0 0
			fi
			if [ -x  "/usr/sbin/flashcp_progress_helper" ]; then
				/usr/sbin/flashcp_progress_helper $IMAGE_FILE $DEV_NODE $START_PROG $END_PROG
			else
				/usr/sbin/flashcp -v $IMAGE_FILE $DEV_NODE
			fi

#			if [ $? -ne 0 ] ; then
#				exit 3
#			fi
		else
			echo "[$0] No such file \"$IMAGE_FILE\""
		fi
	fi
#	exit 0
}

update_uboot_image(){
	IMAGE_FILE="$1"
	START_PROG="$2"
	END_PROG="$3"
	PartitionName="uboot"
	MtdNum=`cat /proc/mtd | grep $PartitionName | awk '{print $1}' | sed -e s/^mtd// | sed -e s/\://`
	mtd_image_update $IMAGE_FILE $MtdNum $START_PROG $END_PROG
}


update_ki_image(){
	IMAGE_FILE="$1"
	START_PROG="$2"
	END_PROG="$3"
	PartitionName="kernel"
	MtdNum=`cat /proc/mtd | grep $PartitionName | awk '{print $1}' | sed -e s/^mtd// | sed -e s/\://`
	mtd_image_update $IMAGE_FILE $MtdNum $START_PROG $END_PROG
}


update_videocore_image(){
        IMAGE_FILE="$1"
        START_PROG="$2"
        END_PROG="$3"
        PartitionName="vcore"
        MtdNum=`cat /proc/mtd | grep $PartitionName | awk '{print $1}' | sed -e s/^mtd// | sed -e s/\://`

        mtd_image_update $IMAGE_FILE $MtdNum $START_PROG $END_PROG
}

update_ri_image(){
        IMAGE_FILE="$1"
        START_PROG="$2"
        END_PROG="$3"
        PartitionName="ramdiskandkernel"
        MtdNum=`cat /proc/mtd | grep $PartitionName | awk '{print $1}' | sed -e s/^mtd// | sed -e s/\://`
        mtd_image_update $IMAGE_FILE $MtdNum $START_PROG $END_PROG
}
