#!/bin/sh

#
# led 9.1.0
# Copyright (c)2017-2024 John Lawson & Sons
# All Rights Reserved
#
# Radxa ROCK 4SE:
#		NO LED CONTROL
#
# Radxa ROCK 4C+:
#    Color  State     Meaning
#    -----  -----     -------
#    Green  ON        Ethernet
#    Green  FLASHING  WiFi
#    Blue   OFF       isignage.app online (normal)
#    Blue   ON        isignage.app offline (fault)
#

# CONSTANTS
DNS='isignage.app'
PWR_BRIGHTNESS="/sys/class/leds/blue:status/brightness"
PWR_TRIGGER="/sys/class/leds/blue:status/trigger"
ACT_BRIGHTNESS="/sys/class/leds/green:power/brightness"
ACT_TRIGGER="/sys/class/leds/green:power/trigger"

isServerAlive() {

	if ping -c 1 -W 1 ${DOMAIN_NAME} &> /dev/null; then

		# BLUE LED ON
		echo "255" > ${PWR_BRIGHTNESS}
		echo "default-on" > ${PWR_TRIGGER}

	else

		# BLUE LED OFF
		echo "0" > ${PWR_BRIGHTNESS}
		echo "none" > ${PWR_TRIGGER}

	fi
}

# FOREVER
while [ 1 ]
do

	# GET LIST OF NETWORK INTERFACES EXCLUDING 'lo'
	interfaces=$(ls /sys/class/net/ | grep -v '^lo$')

	# LOOP THROUGH EACH INTERFACE
	ethernet=""
	wifi=""
	for interface in $interfaces; do
	
		# CHECK IF THE INTERFACE NAME STARTS WITH 'e' OR 'w'
		if [[ "$interface" =~ ^e ]]; then
	
			ethernet="$ethernet $interface"
			ethernet="${ethernet#"${ethernet%%[![:space:]]*}"}"  # remove whitespace
	
		elif [[ "$interface" =~ ^w ]]; then
	
			wifi="$wifi $interface"
			wifi="${wifi#"${wifi%%[![:space:]]*}"}"  # remove whitespace
	
		fi
	done

	# IF USING ETHERNET
	if [ -f "/sys/class/net/${ethernet}/operstate" ] && [ "$(cat /sys/class/net/${ethernet}/operstate)" = "up" ]; then

		# GREEN LED ON
		echo "255" > ${ACT_BRIGHTNESS}
		echo "default-on" > ${ACT_TRIGGER}  # conditioned value fix, see above

		# BLUE LED
		isServerAlive

	# IF USING WIFI
	elif [ -f "/sys/class/net/${wifi}/operstate" ] && [ "$(cat /sys/class/net/${wifi}/operstate)" = "up" ]; then

		# FLASH GREEN LED
		echo "255" > ${ACT_BRIGHTNESS}
		echo "timer" > ${ACT_TRIGGER}

		# BLUE LED
		isServerAlive

	# NO CONNECTION
	else

		# GREEN LED OFF
		echo "0" > ${ACT_BRIGHTNESS}
		echo "none" > ${ACT_TRIGGER}  # conditioned value fix, see above

		# FLASH BLUE LED
		echo "255" > ${PWR_BRIGHTNESS}
		echo "timer" > ${PWR_TRIGGER}

	fi

	sleep 1

done

# SUCCESS
exit 0
