#!/bin/sh
#
# Start the qlx application
#

RUN_SPECIFIC_FILE="/home/qlx/cfg/run_specific"

case "$1" in
  start)
	echo "Starting Qlx application..."
	fbv -i -d 1 /home/qlx/boot/boot50.png
	# Initialize Qlx Option card drivers
	modprobe oc_module

	# Start udhcpd server for wifi direct connected client IP addresses.
        if [ -e ${RUN_SPECIFIC_FILE} ]; then
		# force udhcp to cpu core 2 affinity
		/usr/bin/taskset 0x02 /sbin/start-stop-daemon -S -x /usr/sbin/udhcpd -S /etc/udhcpd.conf
		echo "RUN_SPECIFIC"
	else
		# NO core affinity is being used
		/sbin/start-stop-daemon -S -x /usr/sbin/udhcpd -S /etc/udhcpd.conf
		echo "RUN_GENERAL"
	fi;
	# File needed for udhcpd server.
	/bin/touch /var/lib/misc/udhcpd.leases

	# Set correct rights for Ethernet/WiFi/BT configuration
	chown root.qlx /etc/network/interfaces
	chmod 660 /etc/network/interfaces
	chown root.qlx /var/run/ifstate
	chmod 660 /var/run/ifstate
	chown root.qlx /etc/resolv.conf
	chmod 660 /etc/resolv.conf
	chown root.qlx /etc/wpa_supplicant.conf
	chmod 660 /etc/wpa_supplicant.conf
	chown root.qlx /etc/p2p_supplicant.conf
	chmod 660 /etc/p2p_supplicant.conf
	chown root.qlx /sbin/iwconfig
	chmod a+s /sbin/iwconfig
	chown root.qlx /usr/sbin/wpa_supplicant
	chmod a+s /usr/sbin/wpa_supplicant
	chown root.qlx /usr/sbin/hciattach
	chmod a+s /usr/sbin/hciattach
	chown root.qlx /usr/sbin/hciconfig
	chmod a+s /usr/sbin/hciconfig
	chown root.qlx /usr/sbin/ethtool
	chmod a+s /usr/sbin/ethtool
	chown root.qlx /sbin/ip
	chmod a+s /sbin/ip

	#Set rights for Qlx to modify audit/database/SD/USB partitions
	chown qlx.qlx /media
	chown qlx.qlx -R /mnt/audit
	chown qlx.qlx -R /mnt/database

	#Set rights for ftpdir partition and ftpuser
	chown root.qlx /mnt/ftpdir
	addgroup qlx ftpuser
	# Check if ftp directory exists
	if [ ! -d /mnt/ftpdir/ftpuser/ftp ]
	then
		mkdir -p /mnt/ftpdir/ftpuser/ftp
		/bin/sync
		chown nobody.nogroup /mnt/ftpdir/ftpuser/ftp
		chmod a-w /mnt/ftpdir/ftpuser/ftp
		/bin/sync
		mkdir -p /mnt/ftpdir/ftpuser/ftp/files
		/bin/sync
		chown ftpuser.ftpuser /mnt/ftpdir/ftpuser/ftp/files
		chmod g+w /mnt/ftpdir/ftpuser/ftp/files
		/bin/sync
	fi
	# Disable ftpuser shell login access
	chmod a+x /bin/ftponly

	#Give rights to Qlx user to modify the backlight
	chown root.qlx /sys/class/backlight/backlight.16/brightness
	chmod 660 /sys/class/backlight/backlight.16/brightness

	#Need access to some GPIO :
	#Setup Switch
	echo 29 > /sys/class/gpio/export
	#Audit Switch
	echo 38 > /sys/class/gpio/export

	#GPIO to turn fan on & off
	echo 78 > /sys/class/gpio/export
	echo out > /sys/class/gpio/gpio78/direction	

	#Give rights to Qlx user to modify gpio78's value
	#GPIO to turn fan on & off
	chown root.qlx /sys/class/gpio/gpio78/value
	chmod 660 /sys/class/gpio/gpio78/value

	#Export GPIO for RS232/485 control
	#For serial 1: 
	echo 76 > /sys/class/gpio/export
	echo out > /sys/class/gpio/gpio76/direction
	echo 6 > /sys/class/gpio/export
	echo out > /sys/class/gpio/gpio6/direction
	echo 204 > /sys/class/gpio/export
	echo out > /sys/class/gpio/gpio204/direction
	#For serial 2: 
	echo 75 > /sys/class/gpio/export
	echo out > /sys/class/gpio/gpio75/direction
	echo 151 > /sys/class/gpio/export
	echo out > /sys/class/gpio/gpio151/direction
	echo 7 > /sys/class/gpio/export
	echo out > /sys/class/gpio/gpio7/direction

	#Give rights to Qlx user to modify GPIOs value
	#Export GPIO for RS232/485 control
	chown root.qlx /sys/class/gpio/gpio75/value
	chmod 660 /sys/class/gpio/gpio75/value
	chown root.qlx /sys/class/gpio/gpio151/value
	chmod 660 /sys/class/gpio/gpio151/value
	chown root.qlx /sys/class/gpio/gpio7/value
	chmod 660 /sys/class/gpio/gpio7/value
	chown root.qlx /sys/class/gpio/gpio76/value
	chmod 660 /sys/class/gpio/gpio76/value
	chown root.qlx /sys/class/gpio/gpio6/value
	chmod 660 /sys/class/gpio/gpio6/value
	chown root.qlx /sys/class/gpio/gpio204/value
	chmod 660 /sys/class/gpio/gpio204/value
	
	#Add nodejs to qlx group to run 'touch' command
	sed -i 's/qlx:x:202:$/qlx:x:202:nodejs/' /etc/group

	#Create a link named 'sdimages' for node to /media/sdcard1/sdimages
	ln -s /media/sdcard1/sdimages /var/node/public/images/sdimages

	#Create a link named '/etc/localtime' to a time zone in /usr/share/zoneinfo
	#Defaulting to central standard time
	#ln -s /usr/share/zoneinfo/CST6CDT /etc/localtime

	#Give rights to Qlx user to access the watchdog device
	chown root.qlx /dev/watchdog0
	chmod 660 /dev/watchdog0

	# Check for DEV build image
	# if fw_setenv exists and is executeable 
	# set console for debug output and enable uboot access
	BOOT_DELAY=$(fw_printenv bootdelay|cut -d= -f2)
	if [ -x /usr/sbin/fw_setenv ] && [ $BOOT_DELAY -eq 0 ]
	then
		fw_setenv bootdelay 1
		fw_setenv mmcargs 'setenv bootargs console=${console},${baudrate} root=${mmcroot}'
		touch /etc/devbuild
		/bin/sync
	else
		if [ $BOOT_DELAY -eq 0 ]
		then
			rm /etc/devbuild
			/bin/sync
		fi
	fi

	# Check if versions shell script exists
	if [ -f /home/qlx/bin/versions.sh ]
	then
		sh /home/qlx/bin/versions.sh
		/bin/sync
	else
		# We don't want old data hanging around
		#echo "No versions.sh script found."
		rm -f /etc/RLWS_versions
		/bin/sync
	fi

	#Check if we need to do a touchscreen calibration
	if [  \( ! -f /etc/pointercal \) -a \( -e /dev/input/event1 \) ] || [ -f /var/node/recalibration_request ]; then
		TSLIB_TSDEVICE=/dev/input/event1 ts_calibrate
		rm -f /var/node/recalibration_request
	fi
	fbv -i -d 1 /home/qlx/boot/boot60.png

	# allows QlxCore to raise its own priority level
	/usr/sbin/setcap 'cap_sys_nice=ep' /home/qlx/bin/QlxCore

	su qlx -c 'sh /home/qlx/start-script.sh&'
	;;
  stop)
	echo -n "Stopping Qlx application..."
	su qlx -c 'killall qlxuihost'
	;;
  restart|reload)
	"$0" stop
	"$0" start
	;;
  *)
	echo "Usage: $0 {start|stop|restart}"
	exit 1
esac

exit $?

