#!/bin/sh
# SPDX-License-Identifier: MIT

led_sysfs="/sys/class/leds/app"	# The APP led is the WLAN led on the router.
check_interval_sec=5

state_init="initializing..."
state_wlan_off="wlan off"
state_wlan_on="wlan on"

current_state="$state_init"

led_on () {
        echo none > "$led_sysfs"/trigger
        echo 1 > "$led_sysfs"/brightness
}

led_off () {
        echo none > "$led_sysfs"/trigger
        echo 0 > "$led_sysfs"/brightness
}

set_led_pulse() {
        echo timer > "$led_sysfs"/trigger
        echo "$1" > "$led_sysfs"/delay_on
        echo "$1" > "$led_sysfs"/delay_off
}

led_blink_slow() {
        set_led_pulse 1000
}

led_blink_fast() {
        set_led_pulse 500
}

led_blink_very_fast() {
        set_led_pulse 250
}

update_status() {
        if [ "$current_state" != "$1" ]; then
                logger -t wlan-led "$1"
                current_state="$1"
        fi
}

check_wlan_status() {
        # Check hostapd status.
        if rc-service hostapd -qq status; then
                # echo "hostapd on"
                led_on
                update_status "$state_wlan_on"
        else
                # Check the client mode as well.
                if nmcli -t -c no -f type,state con 2>/dev/null | grep -q 802-11-wireless:activated; then
                        # echo "sta on"
                        led_on
                        update_status "$state_wlan_on"
                else
                        # echo "sta off"
                        led_off
                        update_status "$state_wlan_off"
                fi
        fi
}

while true; do
        check_wlan_status
        sleep "$check_interval_sec"
done
