#!/bin/sh


# some configuration variables - adjust them to your application
export APP_DIR=ledarray
export APP_BINARY=bbb_ledarray
DTB=bbb-ledarray-linux3.12.dtb

# some variables we need
export PROJECT_DIR=..

export BUILDROOT=/home/user/Coding/buildroot_git
export BUILDROOT_STAGING=$BUILDROOT/output/staging
BUILDROOT_IMAGES=$BUILDROOT/output/images

BOOTDIR=/media/user/BOOT
TFTP_DIR=/home/user/BBB/tftp
BUILDROOT_CETONI=/home/user/Coding/buildroot-cetoni
BBB_DIR=$BUILDROOT_CETONI/board/beaglebone


# check if SD card is properly mounted
check_sd_mount() {
	if [ "$target" = "n" ]
    then
		return;
    fi

	mountpoint="/media/user"	
	volume="$mountpoint/BOOT"
	if ! mount|grep $volume; then
		echo "Volume $volume not mounted"	
		exit;
	fi

	volume="$mountpoint/LINUX"
	if ! mount|grep $volume; then
		echo "Volume $volume not mounted"	
		exit;
	fi

	volume="$mountpoint/DATA"
	if ! mount|grep $volume; then
		echo "Volume $volume not mounted"	
		exit;
	fi
}


# some functions we need
set_sd_target_vars() {
	export ROOTFS_DIR=/media/user/LINUX
	export APP_PATH=$ROOTFS_DIR/$APP_DIR
}

set_nfs_target_vars() {
	export ROOTFS_DIR=/home/user/BBB/rootfs
	export APP_PATH=$ROOTFS_DIR/$APP_DIR
}


#------------------------------------------------------------------------------
# Install buildroot to SD or NFS
#------------------------------------------------------------------------------
install_buildroot () {
	if [ ! -d "$BOOTDIR" ] && [ "$target" = "s" ]
	then
		echo "SD card not mounted - canceling buildroot installation"
		return;	
	fi
	
	# clear rootfs and boot dir
	rm -r $ROOTFS_DIR/*
	if [ -d "$BOOTDIR" ]
    then
    	rm -r $BOOTDIR/*  
    fi

	# extract root filesystem to rootfs dir
	tar -xf $BUILDROOT_IMAGES/rootfs.tar -C $ROOTFS_DIR
	mv $ROOTFS_DIR/boot/$DTB $ROOTFS_DIR/boot/am335x-boneblack.dtb

    if [ -d "$BOOTDIR" ]
    then
	    cp $BUILDROOT_IMAGES/MLO $BOOTDIR
		cp $BUILDROOT_IMAGES/u-boot.img $BOOTDIR
		cp $BBB_DIR/uEnv_zImage_Debian.txt $BOOTDIR/uEnv.txt
		echo "Installing $BBB_DIR/uEnv_zImage_Debian.txt"
    fi

	# copy some additional helper scripts
	cp $BBB_DIR/etc/wpa_supplicant.conf $ROOTFS_DIR/etc/wpa_supplicant.conf
	cp -r -f $BBB_DIR/usr/bin/* $ROOTFS_DIR/usr/bin
	cp -vf $BUILDROOT_CETONI/scripts/bbb-SD-eMMC-copy.sh $ROOTFS_DIR/usr/sbin/
}


#------------------------------------------------------------------------------
# Install cetoni libraries to SD or NFS
#------------------------------------------------------------------------------
install_cetoni_libs() {
	# set write permissions for rootfs /usr/lib and /usr/bin for development
	# system
	if [ "$target" = "n" ]
	then
		chmod o+w $ROOTFS_DIR/usr/lib
		chmod o+w $ROOTFS_DIR/usr/bin
		cp -f -av $BUILDROOT_STAGING/usr/bin/*_test $ROOTFS_DIR/usr/bin
	fi
	
	# copy libraries
	cp -f -av $BUILDROOT_STAGING/usr/lib/libusl* $ROOTFS_DIR/usr/lib
	cp -f -av $BUILDROOT_STAGING/usr/lib/libcanoo* $ROOTFS_DIR/usr/lib
	cp -f -av $BUILDROOT_STAGING/usr/lib/liblabbcan* $ROOTFS_DIR/usr/lib
	cp -f -av $BUILDROOT_STAGING/usr/lib/liblabbCAN* $ROOTFS_DIR/usr/lib
	cp -f -av $BUILDROOT_STAGING/usr/lib/libcsi* $ROOTFS_DIR/usr/lib
	cp -f -av $BUILDROOT_STAGING/usr/lib/libled_array_api* $ROOTFS_DIR/usr/lib
}


#------------------------------------------------------------------------------
# Installs the application to SD or NFS
#------------------------------------------------------------------------------
install_app() {
    echo "APP_PATH = $APP_PATH"
	#mkdir -p $APP_PATH/data/embedded_linux
	#mkdir -p $APP_PATH/userdata
	
	# copy application
	#cp -f -av $PROJECT_DIR/$APP_BINARY $APP_PATH
	#cp -f -av $PROJECT_DIR/data/start_app.sh $APP_PATH
	#cp -f -av $PROJECT_DIR/data/embedded_linux/* $APP_PATH/data/embedded_linux
	#chmod 777 $APP_PATH/$APP_BINARY
	
	# copy install script
	#if [ "$target" = "s" ]
	#then
	#	cp -f -av S45application $ROOTFS_DIR/etc/init.d/
	#fi
	#cp -f -av S30usb $ROOTFS_DIR/etc/init.d/
    #cp -f -av S41usbgadget $ROOTFS_DIR/etc/init.d/
	#cp -f -av interfaces $ROOTFS_DIR/etc/network/
}



# The script must be run as root to have access to root file system ------------
if ! id | grep -q root; 
then
	echo "must be run as root"
	exit
fi

while true; do
    echo "What do you want to install? (c=complete | a=app | b=buildroot | l=cetoni libs)"
    read -p ": " installtype
    case $installtype in
        [c]* ) break;;
        [a]* ) break;;
		[b]* ) break;;
		[l]* ) break;;
        * ) echo "Please select a valid ID.";;
    esac
done

while true; do
    read -p "Where to you want to install? (s=SDCard | n=NFS): " target
    case $target in
        [s]* ) set_sd_target_vars; break;;
        [n]* ) set_nfs_target_vars; break;;
        * ) echo "Please select a valid ID.";;
    esac
done

check_sd_mount


if [ "$installtype" = "b" ] || [ "$installtype" = "c" ]
then
	install_buildroot
fi

if [ "$installtype" = "l" ] || [ "$installtype" = "c" ]
then
	install_cetoni_libs
fi

if [ "$installtype" = "a" ] || [ "$installtype" = "c" ]
then
	install_app
fi