#!/bin/bash

if [ "$1" != "" ]
then
	BUILDDIR="$1"
else
	BUILDDIR="build-exceet"
fi

if [ "$2" != "" ]
then
	IMAGE="$2"
else
	IMAGE="image-exceet"
fi

PATH=/sbin:/usr/sbin:/bin:/usr/bin
SOURCE_PATH=../$builddir/tmp/deploy/images/
SD_DEVICE=sdc
SDB1=''
SDB2=''
SCRIPT_PATH=/home/user/src/imx6-fsl/local_src/skripte
PARTITION_TEMPLATE=$SCRIPT_PATH/partition.template


UBOOT_BIN=$SOURCE_PATH/u-boot.imx
LINUX=$SOURCE_PATH/uImage
ROOT_FS=$SOURCE_PATH/$IMAGE-mx6sexceet.tar.bz2
DTB=$SOURCE_PATH/mx6s-exceet-glyn-0700.dtb

ROT="\033[36;1;31m"
BLAU="\033[36;1;34m"
GRUEN="\033[36;1;32m"
SCHWARZ="\033[36;0;30m"

###############################################################################
# Funktionen
###############################################################################
function print_error ()
{
	echo -e "	$ROT$1$SCHWARZ"
	exit -1
}

function print_warning ()
{
	echo -e "	$ROT$1$SCHWARZ"
}

function check_file()
{
	if [ -f $1 ];
	then
		echo "	$2 (Datei $1) gefunden"
	else
		print_error "$2 (Datei $1) nicht gefunden"
	fi
}

###############################################################################
date1=$(date +"%s")

echo "Erzeuge bootfähige SD-Karte ..."

echo "Untersuche Voraussetzungen ..."

# suche notwendige Dateien
check_file $UBOOT_BIN "U-Boot Bootloader"
check_file $LINUX "Linux Kernelimage"
check_file $ROOT_FS "Linux Rootfilesystem"
check_file $PARTITION_TEMPLATE "Partitionierungstemplate"

###############################################################################
echo "Suche gemountete SD-Karte ..."

#ist eine SD-Karte gemountet?
mount | sed -n -e "/\/dev\/$SD_DEVICE/p" >/tmp/judo_tmp.txt

if [ -s /tmp/judo_tmp.txt ]; then
	echo "umount der SD-Karten Partitionen:"
	# Bezeichnungen der SD Karten extrahieren
	cat '/tmp/judo_tmp.txt' | sed -n -e 's@.*\(\/media\/.*\)type.*@\1@gp' > /tmp/judo_tmp2.txt
	# umount der SD Karten Partitionen
	cat '/tmp/judo_tmp2.txt' | xargs umount
	cat /tmp/judo_tmp2.txt
else
	echo "keine SD Karte gemountet"
	# suche gesteckte SD Karte
	rm -f /tmp/judo_tmp.txt
	while [ ! -s /tmp/judo_tmp.txt ]; do
		sudo sfdisk -q -l /dev/$SD_DEVICE | grep /dev/$SD_DEVICE: > /tmp/judo_tmp.txt
		if [ -s /tmp/judo_tmp.txt ]; then
			echo "SD Karte ist gesteckt ..."
		else
			print_warning "Bitte SD Karte stecken ..."
			sleep 3
		fi
	done
	
fi

###############################################################################
echo "SD Karte Partitionieren ..."

cat $PARTITION_TEMPLATE | sudo sfdisk -q --force /dev/$SD_DEVICE >/dev/null
partprobe >/dev/null

echo "SD Karte Formatieren ..."
device=$SD_DEVICE"1"
sudo mkfs.vfat /dev/$device >/dev/null
device=$SD_DEVICE"2"
sudo mkfs.ext3 /dev/$device >/dev/null

###############################################################################
echo "Bereich der U-Boot Vars Nullen ..." 
sudo dd if=/dev/zero of=/dev/$SD_DEVICE bs=1024 seek=768 count=64 conv=fsync >/dev/null

echo "Uboot schreiben ..." 
sudo dd if=$UBOOT_BIN of=/dev/$SD_DEVICE bs=512 seek=2 conv=fsync >/dev/null

echo "Kernel schreiben"
sudo dd if=$LINUX of=/dev/$SD_DEVICE bs=512 seek=2048 conv=fsync >/dev/null

echo "Devicetree schreiben ab 7MB"
sudo dd if=$DTB of=/dev/$SD_DEVICE bs=1024 seek=7168 conv=fsync >/dev/null

# Rootfilesystem entpacken
while [ -z $SDB2  ]; do
	mount | sed -n -e "/\/dev\/${SD_DEVICE}2/p" >/tmp/judo_tmp.txt
	if [ -s /tmp/judo_tmp.txt ]; then
		# Bezeichnungen der SD Partition extrahieren
		SDB2=$(cat '/tmp/judo_tmp.txt' | sed -n -e 's@.*\(\/media\/.*\)type.*@\1@gp')
		echo "RootFile System entpacken ..."
		sudo tar zxvf $ROOT_FS -C $SDB2
		sync
	else
		print_warning  "Karte abziehen und wieder einstecken, damit sie gemountet wird ..."
	fi
	sleep 3
done
echo "SDB2 = '$SDB2'"
###############################################################################
date2=$(date +"%s")
diff=$((date2-$date1))
echo -e -n $BLAU
echo -e "SD Karte fertig! Erstellungszeit: $diff Sekunde(n)"
echo -e -n $SCHWARZ