#!/bin/sh

# led 12.0.1 (Rockchip)
# Copyright (c)2017-2026 John Lawson & Sons
# All Rights Reserved

# Color  State     Meaning
# -----  -----     -------
# Green  ON        Ethernet
#        FLASHING  WiFi
# Red    OFF       NORMAL
#        FLASHING  NO NETWORK
#        ON        NO MONITOR/TV (WAITING)

# These board LEDs use inverted brightness values (0 is illuminated).
RED_BRIGHTNESS="/sys/class/leds/led-2/brightness"
RED_TRIGGER="/sys/class/leds/led-2/trigger"
GREEN_BRIGHTNESS="/sys/class/leds/led-0/brightness"
GREEN_TRIGGER="/sys/class/leds/led-0/trigger"
DISPLAY_STANDBY_MARKER="/run/signage-display-standby"

set_led() {
	trigger_file="$1"
	brightness_file="$2"
	trigger="$3"
	brightness="$4"
	[ -e "$brightness_file" ] && printf '%s\n' "$brightness" > "$brightness_file"
	[ -e "$trigger_file" ] && printf '%s\n' "$trigger" > "$trigger_file"
}

interface_up() {
	[ -r "$1/carrier" ] && [ "$(cat "$1/carrier" 2>/dev/null)" = "1" ] && return 0
	[ -r "$1/operstate" ] && [ "$(cat "$1/operstate" 2>/dev/null)" = "up" ]
}

network_state() {
	wifi_up=0
	for interface in /sys/class/net/*; do
		[ -e "$interface" ] || continue
		case "${interface##*/}" in
			lo) ;;
			eth*|en*) interface_up "$interface" && { echo ethernet; return; } ;;
			wlan*|wl*) interface_up "$interface" && wifi_up=1 ;;
		esac
	done
	[ "$wifi_up" -eq 1 ] && echo wifi || echo offline
}

monitor_connected() {
	found_connector=0
	for status_file in /sys/class/drm/card*-*/status; do
		[ -r "$status_file" ] || continue
		found_connector=1
		[ "$(cat "$status_file" 2>/dev/null)" = "connected" ] && return 0
	done
	# Do not report a missing monitor when this kernel exposes no DRM status.
	[ "$found_connector" -eq 0 ] && return 0
	return 1
}

trap 'set_led "$GREEN_TRIGGER" "$GREEN_BRIGHTNESS" none 1; set_led "$RED_TRIGGER" "$RED_BRIGHTNESS" none 1; exit 0' INT TERM HUP

last_state=""

while :; do
	if [ -e "$DISPLAY_STANDBY_MARKER" ] || ! monitor_connected; then
		state="display-off"
	else
		state="$(network_state)"
	fi

	if [ "$state" != "$last_state" ]; then
		case "$state" in
			display-off)
				set_led "$GREEN_TRIGGER" "$GREEN_BRIGHTNESS" none 1
				set_led "$RED_TRIGGER" "$RED_BRIGHTNESS" default-on 0
				;;
			ethernet)
				set_led "$GREEN_TRIGGER" "$GREEN_BRIGHTNESS" default-on 0
				set_led "$RED_TRIGGER" "$RED_BRIGHTNESS" none 1
				;;
			wifi)
				set_led "$GREEN_TRIGGER" "$GREEN_BRIGHTNESS" timer 0
				set_led "$RED_TRIGGER" "$RED_BRIGHTNESS" none 1
				;;
			offline)
				set_led "$GREEN_TRIGGER" "$GREEN_BRIGHTNESS" none 1
				set_led "$RED_TRIGGER" "$RED_BRIGHTNESS" timer 0
				;;
		esac
		last_state="$state"
	fi

	sleep 1
done
