1 #!/bin/sh /etc/rc.common
2 # Copyright (C) 2008 OpenWrt.org
6 extra_command
"turnon" "Put the LEDs into their default state"
7 extra_command
"turnoff" "Turn all LEDs off"
8 extra_command
"blink" "Blink all LEDs"
21 [ -e /sys
/class
/leds
/${sysfs}/multi_intensity
] ||
return
22 [ -e /sys
/class
/leds
/${sysfs}/multi_index
] ||
return
24 max_b
="$(cat /sys/class/leds/${sysfs}/max_brightness)"
25 colors
="$(cat /sys/class/leds/${sysfs}/multi_index | tr " " "\n")"
27 for color
in $colors; do
28 config_get value
$1 "color_${color}" "0"
29 [ "$value" -gt 0 ] && write=1
30 [ "$value" -gt "$max_b" ] && value
="$max_b"
31 multi_intensity
="${multi_intensity}${value} "
34 # Check if any color is configured
35 [ "$write" = 1 ] ||
return
36 # Remove last whitespace
37 multi_intensity
="${multi_intensity:0:-1}"
39 echo "setting '${name}' led color to '${multi_intensity}'"
40 echo "${multi_intensity}" > /sys
/class
/leds
/${sysfs}/multi_intensity
56 config_get sysfs
$1 sysfs
57 config_get name
$1 name
"$sysfs"
58 config_get trigger
$1 trigger
"none"
60 config_get ports
$1 port
61 config_get mode
$1 mode
62 config_get_bool default
$1 default
"0"
63 config_get delayon
$1 delayon
64 config_get delayoff
$1 delayoff
65 config_get interval
$1 interval
"50"
66 config_get port_state
$1 port_state
67 config_get delay
$1 delay
"150"
68 config_get message
$1 message
""
69 config_get gpio
$1 gpio
"0"
70 config_get_bool inverted
$1 inverted
"0"
71 config_get brightness
$1 brightness
73 [ "$2" ] && [ "$sysfs" != "$2" ] && return
75 # execute application led trigger
76 [ -f "/usr/libexec/led-trigger/${trigger}" ] && {
77 .
"/usr/libexec/led-trigger/${trigger}"
81 [ "$trigger" = "usbdev" ] && {
82 # Backward compatibility: translate to the new trigger
84 # Translate port of root hub, e.g. 4-1 -> usb4-port1
85 ports
=$
(echo "$dev" |
sed -n 's/^\([0-9]*\)-\([0-9]*\)$/usb\1-port\2/p')
86 # Translate port of extra hub, e.g. 2-2.4 -> 2-2-port4
87 [ -z "$ports" ] && ports
=$
(echo "$dev" |
sed -n 's/\./-port/p')
90 [ -e /sys
/class
/leds
/${sysfs}/brightness
] && {
91 echo "setting up led ${name}"
95 "$(sed -ne 's/^.*\[\(.*\)\].*$/\1/p' /sys/class/leds/${sysfs}/trigger)" \
96 "$(cat /sys/class/leds/${sysfs}/brightness)" \
98 # Save default color if supported
99 [ -e /sys
/class
/leds
/${sysfs}/multi_intensity
] && {
101 "$(sed 's/\ /:/g' /sys/class/leds/${sysfs}/multi_intensity)" \
102 >> /var
/run
/led.state
104 printf "\n" >> /var
/run
/led.state
106 [ "$default" = 0 ] &&
107 echo 0 >/sys
/class
/leds
/${sysfs}/brightness
109 [ "$default" = 1 ] && {
110 [ -z "$brightness" ] && brightness
="$(cat /sys/class/leds/${sysfs}/max_brightness)"
111 echo "$brightness" > /sys
/class
/leds
/${sysfs}/brightness
114 led_color_set
"$1" "$sysfs"
116 echo $trigger > /sys
/class
/leds
/${sysfs}/trigger
2> /dev
/null
119 echo >&2 "Skipping trigger '$trigger' for led '$name' due to missing kernel module"
124 echo "${inverted}" > "/sys/class/leds/${sysfs}/invert"
129 echo $dev > /sys
/class
/leds
/${sysfs}/device_name
131 [ -e "/sys/class/leds/${sysfs}/$m" ] && \
132 echo 1 > /sys
/class
/leds
/${sysfs}/$m
134 echo $interval > /sys
/class
/leds
/${sysfs}/interval
2>/dev
/null
139 [ -n "$delayon" ] && \
140 echo $delayon > /sys
/class
/leds
/${sysfs}/delay_on
141 [ -n "$delayoff" ] && \
142 echo $delayoff > /sys
/class
/leds
/${sysfs}/delay_off
149 echo 1 > /sys
/class
/leds
/${sysfs}/ports
/$p
154 [ -n "$port_state" ] && \
155 echo $port_state > /sys
/class
/leds
/${sysfs}/port_state
159 echo $gpio > /sys
/class
/leds
/${sysfs}/gpio
160 echo $inverted > /sys
/class
/leds
/${sysfs}/inverted
164 local port_mask speed_mask
166 config_get port_mask
$1 port_mask
167 [ -n "$port_mask" ] && \
168 echo $port_mask > /sys
/class
/leds
/${sysfs}/port_mask
169 config_get speed_mask
$1 speed_mask
170 [ -n "$speed_mask" ] && \
171 echo $speed_mask > /sys
/class
/leds
/${sysfs}/speed_mask
173 echo "$mode" > /sys
/class
/leds
/${sysfs}/mode
180 for led
in `ls /sys/class/leds/`; do
181 echo 0 > /sys
/class
/leds
/$led/brightness
193 for led
in `ls /sys/class/leds/`; do
194 echo 0 > /sys
/class
/leds
/$led/brightness
195 echo timer
> /sys
/class
/leds
/$led/trigger
200 [ "$(uci -q get system.@system[-1].leds_off)" = '1' ] && {
204 [ -e /sys
/class
/leds
/ ] && {
205 [ -s /var
/run
/led.state
] && {
206 local led trigger brightness color
207 while read led trigger brightness color
; do
208 [ "$1" ] && [ "$1" != "$led" ] && continue
209 [ -e "/sys/class/leds/$led/trigger" ] && \
210 echo "$trigger" > "/sys/class/leds/$led/trigger"
212 [ -e "/sys/class/leds/$led/brightness" ] && \
213 echo "$brightness" > "/sys/class/leds/$led/brightness"
215 [ -e "/sys/class/leds/$led/multi_intensity" ] && \
216 echo "$color" |
sed 's/:/\ /g' > \
217 "/sys/class/leds/$led/multi_intensity"
218 done < /var
/run
/led.state
220 grep -v "^$1 " /var
/run
/led.state
> /var
/run
/led.state.new
221 mv /var
/run
/led.state.new
/var
/run
/led.state
223 rm /var
/run
/led.state
228 config_foreach load_led led
"$1"