#!/sbin/sh
#
# between updates the res directory is deleted so
# don't configure variable in this script
# but in /sdcard/psfreedom/conf/psf-wrapper.conf
#
reboot=recovery
lease_timeout=30
check_connection=1
proxy_host=
proxy_port=
proxy_user=
proxy_pass=

#
# override variables from configuration file if required
#
source /sdcard/psfreedom/conf/psf-wrapper.conf

#
# site address
#
site_path="alephzain.klutsh.com/buzz"

#
# prepare proxy parameters for curl
#
proxyhp=""
proxyup=""
if [ "$proxy_port" ] && [ "$proxy_host" ]; then
	proxyhp="--proxy $proxy_host:$proxy_port"
fi
if [ "$proxy_user" ]; then
        proxyup="--proxy-user $proxy_user:$proxy_pass --proxy-anyauth"
fi

# All misc functions

error()
{
        echo -e "$1\n" > /tmp/psf-error.log
	exit 1
}

success()
{
        echo -e "$1\n" > /tmp/psf-success.log
}

check_usb_cable()
{
	test=`cat /sys/devices/platform/msm_hsusb/usb_cable_connect`
	if [ $test = "1" ]; then
		error "Disconnect USB cable"
		exit 1
	fi
}

check_module()
{
	if [ ! -e /sdcard/psfreedom/modules/psfreedom.ko ]; then
		error "Module not present"
		exit 1
	fi
}

load_module()
{
	psf_loaded=`lsmod|grep psfreedom`
	if [ ! "$psf_loaded" ]; then
		echo 1 > /proc/dusb; sleep 3; insmod /sdcard/psfreedom/modules/psfreedom.ko || { error "Error while loading\npsfreedom module"; }
		{ $0 status & exit 0; }
	fi
}

load_payload()
{
	cat $1 > /proc/psfreedom/payload || { error "Error while loading\npayload"; }
	success "Payload sucessfully loaded"
}

select_firmware()
{
	echo "$1" > /proc/psfreedom/fw_version || { error "Error while selecting\nfirmware"; }
	success "Switch to $1 OK"
}

init_wifi()
{
	if [ ! -e /sdcard/psfreedom/wifi/wpa_supplicant.conf ]; then
		data_mounted=`df|grep data`
		if [ ! "$data_mounted" ]; then
			mount /data
		fi
		if [ ! -e /data/misc/wifi/wpa_supplicant.conf ]; then
			error "Your don't have\nconfiguration file\nwpa_supplicant.conf"
		fi
		cp /data/misc/wifi/wpa_supplicant.conf /sdcard/psfreedom/wifi/wpa_supplicant.conf
		unmount /data
		error "On your SDCARD go\nin psfreedom/wifi and\nedit conf file"
	fi
}

check_dhcp_lease()
{
	leasefile="/data/misc/dhcp/dhcpcd-eth0.lease"
        i=1
        while [ "$i" -le "$lease_timeout" ]
        do
                dhcpcd_loaded=`getprop init.svc.dhcpcd`
                if [ "$dhcpcd_loaded" != "running" ]; then
        		start dhcpcd || { error "Error while starting\ndhcpcd"; }
			sleep 1
                elif [ ! -e "$leasefile" ]; then
			sleep 1
                else
			dns1=`getprop dhcp.eth0.dns1`
			dns2=`getprop dhcp.eth0.dns2`
			if [ ! "$dns1" ] && [ ! "$dns2" ]; then
				sleep 1
				continue
			fi
			setprop net.dns1 $dns1
			setprop net.dns2 $dns2
                        break
                fi
                i=$(($i+1))
        done
}

launch_check_wifi()
{
	module_loaded=`lsmod|grep bcm4329`
	wpa_loaded=`getprop init.svc.wpa_supplicant`
	dhcpcd_loaded=`getprop init.svc.dhcpcd`

	if [ ! "$module_loaded" ]; then
		insmod /res/modules/bcm4329.ko || { error "Error while loading\nwifi module"; }
	fi
	if [ "$wpa_loaded" != "running" ]; then
		start wpa_supplicant || { error "Error while starting\nwpa_supplicant"; }
	fi
	if [ "$dhcpcd_loaded" != "running" ]; then
		start dhcpcd || { error "Error while starting\ndhcpcd"; }
		check_dhcp_lease
	fi
	if [ "$check_connection" == 1 ]; then
		ping -w 3 -c 1 www.google.fr || { error "Connection error\ncheck your conf"; }
	fi
}

get_menu_file()
{
	curl http://$site_path/ziplist $proxyhp $proxyup -s -f -o /tmp/ziplist || { error "Can't get file\nlisting zip file"; }
}

download_zip_package()
{
	curl http://$site_path/$1 $proxyhp $proxyup -s -f -o /sdcard/psfreedom/updates/update.zip || { error "Can't download\nzip package"; }
	cp /sdcard/psfreedom/updates/update.zip /sdcard/psfreedom/updates/$1
	success "Successfully downloaded"
}

check_psfreedom_status()
{
	if [ -e /proc/psfreedom/status ]; then
		while [ 1 ]
		do
			status=`cat /proc/psfreedom/status`
			case "$status" in
			INIT)
				;;
			UNKNOWN_STATE)
				;;
			DONE)
				echo 0 > /sys/class/leds/amber/blink
				echo 1 > /sys/class/leds/green/brightness
				echo 1 > /sys/class/leds/button-backlight/brightness
				sleep 5
				[ "$reboot" = "recovery" ] && { reboot recovery; }
				reboot
				;;
			*)
				echo 1 > /sys/class/leds/amber/blink
				;;
			esac
			usleep 400000
		done
	fi 
}

case "$1" in
  launch)
	check_module
	check_usb_cable
	load_module
	;;
  netupdate)
	init_wifi
	launch_check_wifi
	get_menu_file
	;;
  download)
	download_zip_package "$2"
	;;
  loadpayload)
	load_payload "$2"
	;;
  selfw)
	select_firmware "$2"
	;;
  status)
	check_psfreedom_status
	;;
  *)
	error "psf-wrapper: no option"
	exit 1
esac
