#!/bin/sh

# led 9.2.0 (Raspberry Pi)
# Copyright (c)2017-2024 John Lawson & Sons
# All Rights Reserved

# Color  State     Meaning
# -----  -----     -------
#
# Green  ON        Ethernet
#        FLASHING  WiFi
# Red    OFF       ONLINE
#        ON        NOT ONLINE

# CONSTANTS
PWR_BRIGHTNESS="/sys/class/leds/PWR/brightness"
PWR_TRIGGER="/sys/class/leds/PWR/trigger"
ACT_BRIGHTNESS="/sys/class/leds/ACT/brightness"
ACT_TRIGGER="/sys/class/leds/ACT/trigger"

# FUNCTIONS
stringContains() {

	string="$1"
	pattern="$2"
	if [[ "$string" == *"$pattern"* ]]; then
		return 0  # Pattern found
	else
		return 1  # Pattern not found
	fi
}

# THIS IS TO CATCH HARDWARE THAT HAS SIGNAL INVERSION ON THE GREEN LED
actON="default-on"
actOFF="none"
actLIGHT=1
actDARK=0

# GET DEVICE TYPE
cpuinfo=$(</proc/cpuinfo)

# CHECK FOR ANY INVERTS ACT
if stringContains "${cpuinfo}" "Raspberry Pi 3 Model B" && ! stringContains "${cpuinfo}" "Raspberry Pi 3 Model B Plus"; then
	actON="none"
	actOFF="default-on"
fi

# CHECK FOR ANY MODEL THAT INVERT BOTH ACT AND BRIGHTNESS
if stringContains "${cpuinfo}" "Raspberry Pi 5 Model B"; then
	actON="none"
	actOFF="default-on"
	actLIGHT=0
	actDARK=1
fi

# TURN OFF FIRMWARE CONTROL OF LEDS
echo none > ${PWR_TRIGGER}
echo none > ${ACT_TRIGGER}

# FOREVER
powerup=1
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'
		if [[ "$interface" == e* ]]; then

			# ETHERNET
			ethernet="$ethernet $interface"
			ethernet="${ethernet#"${ethernet%%[![:space:]]*}"}"  # remove whitespace

		# CHECK IF THE INTERFACE NAME STARTS WITH 'w'
		elif [[ "$interface" == w* ]]; then

			# WIFI
			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 ${actLIGHT} > ${ACT_BRIGHTNESS}
		echo ${actON} > ${ACT_TRIGGER}

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

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

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

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

	# NO CONNECTION
	else

		# GREEN LED OFF
		echo none > ${ACT_TRIGGER}
		echo ${actDARK} > ${ACT_BRIGHTNESS}

		# RED LED ON
		echo default-on > ${PWR_TRIGGER}
		echo 1 > ${PWR_BRIGHTNESS}

	fi

	# SLEEP FOR ONE SECOND
	sleep 1

done

# SUCCESS
exit 0
