#!/bin/sh
# Runtime-only R1350 LED probe v2. No flash writes, no reboot.

set_led_class() {
	local led_name="$1"
	local led_value="$2"
	local led_path="/sys/class/leds/$led_name"
	if [ ! -d "$led_path" ]; then
		echo "MISSING LED CLASS: $led_name"
		return 1
	fi
	echo none > "$led_path/trigger" 2>&1 || true
	echo "$led_value" > "$led_path/brightness" 2>&1
	printf 'class=%s value=%s readback=' "$led_name" "$led_value"
	cat "$led_path/brightness" 2>&1
}

raw_gpio() {
	local gpio_num="$1"
	local gpio_value="$2"
	local gpio_path="/sys/class/gpio/gpio$gpio_num"
	if [ ! -d /sys/class/gpio ]; then
		echo "GPIO SYSFS MISSING"
		return 1
	fi
	if [ ! -d "$gpio_path" ]; then
		echo "$gpio_num" > /sys/class/gpio/export 2>/tmp/gpio-export-error || {
			echo "GPIO $gpio_num export failed: $(cat /tmp/gpio-export-error 2>/dev/null)"
			return 1
		}
	fi
	echo out > "$gpio_path/direction" 2>/tmp/gpio-direction-error || true
	echo "$gpio_value" > "$gpio_path/value" 2>/tmp/gpio-value-error || {
		echo "GPIO $gpio_num write failed: $(cat /tmp/gpio-value-error 2>/dev/null)"
		return 1
	}
	printf 'gpio=%s value=%s readback=' "$gpio_num" "$gpio_value"
	cat "$gpio_path/value" 2>&1
}

class_off() {
	local off_name
	for off_name in blue:system yellow:system blue:function yellow:function; do
		set_led_class "$off_name" 0 >/dev/null 2>&1 || true
	done
}

raw_off() {
	local off_gpio
	for off_gpio in 5 7 8 15; do
		raw_gpio "$off_gpio" 1 >/dev/null 2>&1 || true
	done
}

trap 'class_off; raw_off' EXIT INT TERM

echo '=== Available LED classes ==='
for p in /sys/class/leds/*; do [ -e "$p" ] && basename "$p"; done

echo '=== LED class tests; each ON for 3 seconds ==='
for test_name in blue:system yellow:system blue:function yellow:function; do
	class_off
	echo "TEST CLASS: $test_name"
	set_led_class "$test_name" 1
	sleep 3
	set_led_class "$test_name" 0
	sleep 1
done

echo '=== AC2350 raw GPIO tests; active-low, each ON for 3 seconds ==='
for test_gpio in 5 7 8 15; do
	raw_off
	echo "TEST GPIO: $test_gpio"
	raw_gpio "$test_gpio" 0
	sleep 3
	raw_gpio "$test_gpio" 1
	sleep 1
done

class_off
raw_off
echo DONE
