#!/bin/sh

eval `sncfg mget PWM_HOTSPOT_TRAFFIC_TIMEOUT PRODUCT_TYPE`
LOCK_FILE=/tmp/pwm_script.lock
	
lock_pwm() {
	i=0
	while [ $i!=3 ]
	do
		if mkdir "$LOCK_FILE" ; then
			echo "pwm lock success"
			return 0
		else
			echo "pwm lock retry" 
			i=$i+1
			sleep 0.5
		fi
	done
	echo "pwm lock failed" 	
	exit 1
}

unlock_pwm() {
	if [ -d "$LOCK_FILE" ] ; then
		rmdir $LOCK_FILE
		echo "pwm unlock success"
	else
		echo "pwm lock file missing!!"
		exit 1
	fi
}

pw_product=0 #default is hotspot
if [ $PRODUCT_TYPE = "MIFI" ] ; then
	pw_product=0
elif [ $PRODUCT_TYPE = "DONGLE" ] ; then
	pw_product=1
fi

stop() {
	killall pwm_handler.elf
	rmmod pwm
	if [ -f /lib/modules/pwm_hal/ko ] ; then
		rmmod pwm_hal
	fi
	rm -f /dev/pwm
}

start() {
	if [ -f /lib/modules/pwm_hal/ko ] ; then
		insmod /lib/modules/pwm_hal.ko
	fi
	insmod /lib/modules/pwm.ko pw_product=$pw_product

	dev=$(cat /proc/devices | grep pwm | cut -f0 -d ' ')
	rm -f /dev/pwm
	mknod /dev/pwm c $dev 0
	/sbin/pwm_handler.elf -s
	echo $PWM_HOTSPOT_TRAFFIC_TIMEOUT > /sys/power/wake_traffic
	sleep 1

	if [ $pw_product = "1" ] ; then  #dongle
		scen_kmod=`ls /lib/modules/*.ko | grep pwm_dongle`
		insmod $scen_kmod
	elif [ $pw_product = "0" ] ; then  #mifi
		bat_kmod=`ls /lib/modules/*.ko | grep pwm_bat`
		insmod $bat_kmod
		chg_kmod=`ls /lib/modules/*.ko | grep pwm_chg`
		insmod $chg_kmod
		chr_kmod=`ls /lib/modules/*.ko | grep pwm_chr`
		insmod $chr_kmod
		scen_kmod=`ls /lib/modules/*.ko | grep pwm_mifi`
		insmod $scen_kmod
	fi
	/sbin/pwmctrl.elf mode pwsave
}


reload() {
				
	/sbin/pwmctrl.elf mode normal
	echo 0 > /proc/pwm/scenario/auto_pwsave
        if [ $pw_product = "1" ] ; then  #dongle
                scen_kmod=`ls /lib/modules/*.ko | grep pwm_dongle`
        elif [ $pw_product = "0" ] ; then  #mifi
                bat_kmod=`ls /lib/modules/*.ko | grep pwm_bat`
                chg_kmod=`ls /lib/modules/*.ko | grep pwm_chg`
                chr_kmod=`ls /lib/modules/*.ko | grep pwm_chr`
                scen_kmod=`ls /lib/modules/*.ko | grep pwm_mifi`
        fi


        killall pwm_handler.elf

        if [ $pw_product = "1" ] ; then  #dongle
                rmmod `echo $scen_kmod | awk -F/ '{print $NF}'| sed 's/.ko//'`
        elif [ $pw_product = "0" ] ; then  #mifi
                rmmod `echo $scen_kmod | awk -F/ '{print $NF}'| sed 's/.ko//'`
                rmmod `echo $chr_kmod | awk -F/ '{print $NF}'| sed 's/.ko//'`
                rmmod `echo $chg_kmod | awk -F/ '{print $NF}'| sed 's/.ko//'`
                rmmod `echo $bat_kmod | awk -F/ '{print $NF}'| sed 's/.ko//'`
        fi

        /sbin/pwm_handler.elf -s
	sleep 1
        if [ $pw_product = "1" ] ; then  #dongle
                insmod $scen_kmod
        elif [ $pw_product = "0" ] ; then  #mifi
                insmod $bat_kmod
                insmod $chg_kmod
                insmod $chr_kmod
                insmod $scen_kmod
        fi
	/sbin/pwmctrl.elf mode pwsave
	
}

local() {
	if [ -f /lib/modules/pwm_hal/ko ] ; then
		insmod ./pwm_hal.ko
	fi
	insmod ./pwm.ko
	dev=$(cat /proc/devices | grep pwm | cut -f0 -d ' ')
	rm -f /dev/pwm
	mknod /dev/pwm c $dev 0
	./pwm_handler.elf -c `pwd`/pwm.cfg
	echo $PWM_HOTSPOT_TRAFFIC_TIMEOUT > /sys/power/wake_traffic
	sleep 1
	./pwmctrl.elf mode pwsave
}

get() {
	wget http://192.168.0.100/pwm -O pwm
	wget http://192.168.0.100/pwm_hal.ko -O pwm_hal.ko
	wget http://192.168.0.100/pwm.ko -O pwm.ko
	wget http://192.168.0.100/pwmctrl.elf -O pwmctrl.elf
	wget http://192.168.0.100/pwm.cfg -O pwm.cfg
	wget http://192.168.0.100/pwm_handler.elf -O pwm_handler.elf
	chmod 755 pwmctrl.elf pwm_handler.elf
}

teststandby() {
	modemd_sender 1 sim at%TSTLTE=\"RRC\",\"IDLE\",\"1\"
	modemd_sender 1 sim at%setcfg=\"pw_idle\",\"shallow\"
	modemd_sender 1 sim at%setlog=\"ALL\",\"CRIT\"
}

case "$1" in
	start)
		start
		;;
	stop)
		stop
		;;
	reload)
		echo "lock pwm"
		lock_pwm
		echo "reload"
		reload
		echo "unlock_pwm"
		unlock_pwm
		;;
	get)
		get
		;;
	local)
		local
		;;
	teststandby)
		teststandby
		;;
esac



