#!/bin/sh

. /etc/profile

cmd=/tmp/fdisk_cmds
lockfile="/mnt/.eMMC_lock"

format_emmc()
{
	timeout -t 100 -s 9 mkfs.ext4 -F -O ^has_journal /dev/mmcblk0p1
}

part_emmc()
{
	touch "${lockfile}"
	# erase partition table
	echo -e "o\nw" > $cmd
	fdisk /dev/mmcblk0 < ${cmd} > /dev/null
	usleep 100

	# create partition table
	echo -e "n\np\n1\n \n " > $cmd
	echo "w" >> $cmd
	fdisk /dev/mmcblk0 < ${cmd}  > /dev/null
	sleep 5
	format_emmc
	sleep 1
	# Mount it
	mkdir -p /mnt/mmcblk0p1
	timeout -t 20 -s 9 mount -t ext4 -o rw,noauto,nodev,noatime /dev/mmcblk0p1 /mnt/mmcblk0p1
	# Unlock
	rm -f "${lockfile}"
}


check_emmc()
{
	if [ -f "${lockfile}" ]
	then
		# Formatting eMMC will take care of mount, exit
		exit 1
	fi

	echo "Check eMMC"
	e2fsck -y /dev/mmcblk0p1 > /var/log/emmc_fsck.log 2>&1

	# Disable format to avoid losing data ...
	if false; then
	#if [ $? -eq 8 ]; then
		# Operational error, need format
		format_emmc
	fi
	mkdir -p /mnt/mmcblk0p1
	timeout -t 20 -s 9 mount -t ext4 -o rw,noauto,nodev,noatime /dev/mmcblk0p1 /mnt/mmcblk0p1
	# Disable format to avoid losing data ...
	if false; then
	# if [ $? -ne 0 ]; then
		# Retry after format
		format_emmc
		timeout -t 20 -s 9 mount -t ext4 -o rw,noauto,nodev,noatime /dev/mmcblk0p1 /mnt/mmcblk0p1
	fi
}

# Main script
case "$1" in
	start)
		if [ ! -e /dev/mmcblk0p1 ]; then
			(part_emmc) &
		else
			(check_emmc) &
		fi
		;;
	load)
		(check_emmc) &
		;;
	*)
		echo "Usage: $0 {load}"
		exit 1
		;;
esac

exit 0
