#!/bin/sh

#################################################################################
# jcg led basic control
# see usage
#################################################################################

red_led_path=/sys/class/leds/led_red
green_led_path=/sys/class/leds/led_green
blue_led_path=/sys/class/leds/led_blue

wifi_led_24g_path=/sys/class/leds/led_24g
wifi_led_5g_path=/sys/class/leds/led_5g

boardModel=$(cat /etc/productInfo |grep 'boardModel=' |cut -d= -f2)

# these boards have differnt mesh led: 
#  PK968M PK963M
mesh_led_path=/sys/class/leds/led_mesh
all_led_path=/sys/class/leds/led_all

led=$1
action=$2
on_time=$3
off_time=$4

usage() {
	echo "$0 [led] [action] [action_para1] [action_para2]"
	echo "	[led]: red/green/mesh"
	echo "	[action]: on/off/blink"
	echo "	[action_para1]: when action is blink, this is on time in ms"
	echo "	[action_para2]: when action is blink, this is off time in ms"
	echo "	for example:"
	echo "		$0 red on : means make red led on"
	echo "		$0 red blink 500 500 : means make red led 500ms on then 500ms off"
}

[ -z "$led" ] && usage && exit 0
[ -z "$action" ] && usage && exit 0

if [ "$action" == "blink" ]; then
	[ -z "$on_time" -o -z "$off_time" ] && usage && exit 0
fi

# red led
red_led_on() {
	echo none > $red_led_path/trigger
	echo 1 > $red_led_path/brightness
}

red_led_off() {
	echo none > $red_led_path/trigger
	echo 0 > $red_led_path/brightness
}

red_led_blink() {
	echo timer > $red_led_path/trigger
	echo $on_time  > $red_led_path/delay_on
	echo $off_time > $red_led_path/delay_off
}

# green led
green_led_on() {
	echo none > $green_led_path/trigger
	echo 1 > $green_led_path/brightness
}

green_led_off() {
	echo none > $green_led_path/trigger
	echo 0 > $green_led_path/brightness
}

green_led_blink() {	
	echo timer > $green_led_path/trigger
	echo $on_time  > $green_led_path/delay_on
	echo $off_time > $green_led_path/delay_off
}

# blue led
blue_led_on() {
	echo none > $blue_led_path/trigger
	echo 1 > $blue_led_path/brightness
}

blue_led_off() {
	echo none > $blue_led_path/trigger
	echo 0 > $blue_led_path/brightness
}

blue_led_blink() {
	echo timer > $blue_led_path/trigger
	echo $on_time  > $blue_led_path/delay_on
	echo $off_time > $blue_led_path/delay_off
}

# wifi 2.4g led
wifi_led_24g_on() {
	echo none > $wifi_led_24g_path/trigger
	echo 1 > $wifi_led_24g_path/brightness
}

wifi_led_24g_off() {
	echo none > $wifi_led_24g_path/trigger
	echo 0 > $wifi_led_24g_path/brightness
}

wifi_led_24g_blink() {
	echo timer > $wifi_led_24g_path/trigger
	echo $on_time  > $wifi_led_24g_path/delay_on
	echo $off_time > $wifi_led_24g_path/delay_off
}

# wifi 5g led
wifi_led_5g_on() {
	echo none > $wifi_led_5g_path/trigger
	echo 1 > $wifi_led_5g_path/brightness
}

wifi_led_5g_off() {
	echo none > $wifi_led_5g_path/trigger
	echo 0 > $wifi_led_5g_path/brightness
}

wifi_led_5g_blink() {
	echo timer > $wifi_led_5g_path/trigger
	echo $on_time  > $wifi_led_5g_path/delay_on
	echo $off_time > $wifi_led_5g_path/delay_off
}

# mesh led
# only some boards have seperate mesh led, see above
mesh_led_on() {
	if [ "$boardModel" == "PK964M" -o "$boardModel" == "AX618M" ]; then
		green_led_on
	elif [ "$boardModel" == "PK963M" -o "$boardModel" == "PK968M" ]; then
		echo none > $mesh_led_path/trigger
		echo 1 > $mesh_led_path/brightness
	elif [ "$boardModel" == "PK970M" ]; then
		blue_led_on
	else
		green_led_on
	fi
}

mesh_led_off() {
	if [ "$boardModel" == "PK964M" -o "$boardModel" == "AX618M" ]; then
		green_led_off
	elif [ "$boardModel" == "PK963M" -o "$boardModel" == "PK968M" ]; then
		echo none > $mesh_led_path/trigger
		echo 0 > $mesh_led_path/brightness
	elif [ "$boardModel" == "PK970M" ]; then
		blue_led_off
	else
		green_led_off
	fi
}

mesh_led_blink() {	
	if [ "$boardModel" == "PK964M" -o "$boardModel" == "AX618M" ]; then
		green_led_blink
	elif [ "$boardModel" == "PK963M" -o "$boardModel" == "PK968M" ]; then
		echo timer > $mesh_led_path/trigger;
		echo $on_time  > $mesh_led_path/delay_on
		echo $off_time > $mesh_led_path/delay_off
	elif [ "$boardModel" == "PK970M" ]; then
		blue_led_blink
	else
		green_led_blink
	fi
}

all_led_on() {
	if [ "$boardModel" == "PK964M" -o "$boardModel" == "PK970M" -o "$boardModel" == "AX618M" ]; then
		echo "964M/970M/AX618M board all_led_on function no need green red led on"
	elif [ "$boardModel" == "PK963M" -o "$boardModel" == "PK968M" ]; then
			echo none > $all_led_path/trigger;
	else
		green_led_on
		red_led_on
	fi
}

all_led_off() {
	if [ "$boardModel" == "PK964M" -o "$boardModel" == "AX618M" ]; then
		green_led_off
		red_led_off
	elif [ "$boardModel" == "PK963M" -o "$boardModel" == "PK968M" ]; then
			echo default-on > $all_led_path/trigger;
	elif [ "$boardModel" == "PK970M" ]; then
		red_led_off
		green_led_off
		blue_led_off
	else
		green_led_off
		red_led_off
	fi
}

all_led_blink() {
	if [ "$boardModel" == "PK964M" -o "$boardModel" == "AX618M" ]; then
		green_led_blink
		red_led_blink
	elif [ "$boardModel" == "PK963M" -o "$boardModel" == "PK968M" ]; then
		echo timer > $all_led_path/trigger;
		echo $on_time  > $all_led_path/delay_on
		echo $off_time > $all_led_path/delay_off
	elif [ "$boardModel" == "PK970M" ]; then
		red_led_blink
		green_led_blink
		blue_led_blink
	else
		green_led_blink
		red_led_blink
	fi
}

led_on() {
	if [ "$led" == "red" ]; then
		red_led_on
	elif [ "$led" == "green" ]; then
		green_led_on
	elif [ "$led" == "blue" ]; then
		blue_led_on
	elif [ "$led" == "24g" ]; then
		wifi_led_24g_on
	elif [ "$led" == "5g" ]; then
		wifi_led_5g_on
	elif [ "$led" == "mesh" ]; then
		mesh_led_on
	elif [ "$led" == "all" ]; then
		all_led_on
	fi
}

led_off() {
	if [ "$led" == "red" ]; then
		red_led_off
	elif [ "$led" == "green" ]; then
		green_led_off
	elif [ "$led" == "blue" ]; then
		blue_led_off
	elif [ "$led" == "24g" ]; then
		wifi_led_24g_off
	elif [ "$led" == "5g" ]; then
		wifi_led_5g_off
	elif [ "$led" == "mesh" ]; then
		mesh_led_off    
	elif [ "$led" == "all" ]; then
		all_led_off
	fi
}

led_blink() {
	if [ "$led" == "red" ]; then
		red_led_blink
	elif [ "$led" == "green" ]; then
		green_led_blink
	elif [ "$led" == "blue" ]; then
		blue_led_blink
	elif [ "$led" == "24g" ]; then
		wifi_led_24g_blink
	elif [ "$led" == "5g" ]; then
		wifi_led_5g_blink
	elif [ "$led" == "mesh" ]; then
		mesh_led_blink
	elif [ "$led" == "all" ]; then
		all_led_blink
	fi
}

## main ##
if [ "$action" == "on" ]; then
	led_on
elif [ "$action" == "off" ]; then
	led_off
elif [ "$action" == "blink" ]; then
	led_blink
fi
