diff --git a/package/base-files/files/etc/init.d/led b/package/base-files/files/etc/init.d/led index 277fb4e76f7eb9bf812ad4f0831edb8ff4f1189c..80239c8f87a868c112d0d0bd6095a3bf834047e8 100755 --- a/package/base-files/files/etc/init.d/led +++ b/package/base-files/files/etc/init.d/led @@ -1,140 +1,62 @@ #!/bin/sh /etc/rc.common -# Copyright (C) 2008 OpenWrt.org -START=96 +START=20 +USE_PROCD=1 -load_led() { - local name - local sysfs - local trigger - local dev - local ports - local mode - local default - local delayon - local delayoff - local interval +setled() { + local enable + local brightness - config_get sysfs $1 sysfs - config_get name $1 name "$sysfs" - config_get trigger $1 trigger "none" - config_get dev $1 dev - config_get ports $1 port - config_get mode $1 mode - config_get_bool default $1 default "0" - config_get delayon $1 delayon - config_get delayoff $1 delayoff - config_get interval $1 interval "50" - config_get port_state $1 port_state - config_get delay $1 delay "150" - config_get message $1 message "" - config_get gpio $1 gpio "0" - config_get inverted $1 inverted "0" - - if [ "$trigger" = "rssi" ]; then - # handled by rssileds userspace process - return - fi - - [ "$trigger" = "usbdev" ] && { - # Backward compatibility: translate to the new trigger - trigger="usbport" - # Translate port of root hub, e.g. 4-1 -> usb4-port1 - ports=$(echo "$dev" | sed -n 's/^\([0-9]*\)-\([0-9]*\)$/usb\1-port\2/p') - # Translate port of extra hub, e.g. 2-2.4 -> 2-2-port4 - [ -z "$ports" ] && ports=$(echo "$dev" | sed -n 's/\./-port/p') - } - - [ -e /sys/class/leds/${sysfs}/brightness ] && { - echo "setting up led ${name}" - - printf "%s %s %d\n" \ - "$sysfs" \ - "$(sed -ne 's/^.*\[\(.*\)\].*$/\1/p' /sys/class/leds/${sysfs}/trigger)" \ - "$(cat /sys/class/leds/${sysfs}/brightness)" \ - >> /var/run/led.state - - [ "$default" = 0 ] && - echo 0 >/sys/class/leds/${sysfs}/brightness - - echo $trigger > /sys/class/leds/${sysfs}/trigger 2> /dev/null - ret="$?" - - [ $default = 1 ] && - cat /sys/class/leds/${sysfs}/max_brightness > /sys/class/leds/${sysfs}/brightness + config_get_bool enable $1 enable 1 + config_get brightness $1 brightness 100 + ubus call led.$1 set "{\"enable\":$enable,\"brightness\":$brightness}" +} - [ $ret = 0 ] || { - echo >&2 "Skipping trigger '$trigger' for led '$name' due to missing kernel module" - return 1 - } - case "$trigger" in - "netdev") - [ -n "$dev" ] && { - echo $dev > /sys/class/leds/${sysfs}/device_name - for m in $mode; do - [ -e "/sys/class/leds/${sysfs}/$m" ] && \ - echo 1 > /sys/class/leds/${sysfs}/$m - done - echo $interval > /sys/class/leds/${sysfs}/interval - } - ;; +start_service() { + local enable - "timer"|"oneshot") - [ -n "$delayon" ] && \ - echo $delayon > /sys/class/leds/${sysfs}/delay_on - [ -n "$delayoff" ] && \ - echo $delayoff > /sys/class/leds/${sysfs}/delay_off - ;; + config_load leds + config_foreach setled led + config_get_bool enable leds enable 1 - "usbport") - local p + if [ "$enable" == "0" ]; then + ubus call leds set '{"state" : "alloff"}' + else + ubus call leds set '{"state" : "normal"}' + fi +} - for p in $ports; do - echo 1 > /sys/class/leds/${sysfs}/ports/$p - done - ;; +boot() { + local led ledname - "port_state") - [ -n "$port_state" ] && \ - echo $port_state > /sys/class/leds/${sysfs}/port_state - ;; + ubus list led* >/dev/null || sleep 1 + ubus list led* >/dev/null || sleep 1 - "gpio") - echo $gpio > /sys/class/leds/${sysfs}/gpio - echo $inverted > /sys/class/leds/${sysfs}/inverted - ;; + [ -f /etc/config/leds ] || touch /etc/config/leds - switch[0-9]*) - local port_mask speed_mask + if ! uci -q get leds.leds >/dev/null; then + uci set leds.leds=leds + uci set leds.leds.enable=1 + fi - config_get port_mask $1 port_mask - [ -n "$port_mask" ] && \ - echo $port_mask > /sys/class/leds/${sysfs}/port_mask - config_get speed_mask $1 speed_mask - [ -n "$speed_mask" ] && \ - echo $speed_mask > /sys/class/leds/${sysfs}/speed_mask - [ -n "$mode" ] && \ - echo "$mode" > /sys/class/leds/${sysfs}/mode - ;; + for led in $(ubus list led.*); do + ledname=${led:4} + case $ledname in + *phy*) continue ;; esac - } -} + if ! uci -q get leds.$ledname >/dev/null; then + uci set leds.$ledname=led + uci set leds.$ledname.enable=1 + fi + done -start() { - [ -e /sys/class/leds/ ] && { - [ -s /var/run/led.state ] && { - local led trigger brightness - while read led trigger brightness; do - [ -e "/sys/class/leds/$led/trigger" ] && \ - echo "$trigger" > "/sys/class/leds/$led/trigger" + uci commit leds - [ -e "/sys/class/leds/$led/brightness" ] && \ - echo "$brightness" > "/sys/class/leds/$led/brightness" - done < /var/run/led.state - rm /var/run/led.state - } + start +} - config_load system - config_foreach load_led led - } +service_triggers() +{ + procd_add_reload_trigger "leds" } +