led 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #!/bin/sh /etc/rc.common
  2. # Copyright (C) 2008 OpenWrt.org
  3. START=96
  4. load_led() {
  5. local name
  6. local sysfs
  7. local trigger
  8. local dev
  9. local ports
  10. local mode
  11. local default
  12. local delayon
  13. local delayoff
  14. local interval
  15. config_get sysfs $1 sysfs
  16. config_get name $1 name "$sysfs"
  17. config_get trigger $1 trigger "none"
  18. config_get dev $1 dev
  19. config_get ports $1 port
  20. config_get mode $1 mode
  21. config_get_bool default $1 default "0"
  22. config_get delayon $1 delayon
  23. config_get delayoff $1 delayoff
  24. config_get interval $1 interval "50"
  25. config_get port_state $1 port_state
  26. config_get delay $1 delay "150"
  27. config_get message $1 message ""
  28. config_get gpio $1 gpio "0"
  29. config_get inverted $1 inverted "0"
  30. # execute application led trigger
  31. [ -f "/usr/libexec/led-trigger/${trigger}" ] && {
  32. . "/usr/libexec/led-trigger/${trigger}"
  33. return 0
  34. }
  35. [ "$trigger" = "usbdev" ] && {
  36. # Backward compatibility: translate to the new trigger
  37. trigger="usbport"
  38. # Translate port of root hub, e.g. 4-1 -> usb4-port1
  39. ports=$(echo "$dev" | sed -n 's/^\([0-9]*\)-\([0-9]*\)$/usb\1-port\2/p')
  40. # Translate port of extra hub, e.g. 2-2.4 -> 2-2-port4
  41. [ -z "$ports" ] && ports=$(echo "$dev" | sed -n 's/\./-port/p')
  42. }
  43. [ -e /sys/class/leds/${sysfs}/brightness ] && {
  44. echo "setting up led ${name}"
  45. printf "%s %s %d\n" \
  46. "$sysfs" \
  47. "$(sed -ne 's/^.*\[\(.*\)\].*$/\1/p' /sys/class/leds/${sysfs}/trigger)" \
  48. "$(cat /sys/class/leds/${sysfs}/brightness)" \
  49. >> /var/run/led.state
  50. [ "$default" = 0 ] &&
  51. echo 0 >/sys/class/leds/${sysfs}/brightness
  52. echo $trigger > /sys/class/leds/${sysfs}/trigger 2> /dev/null
  53. ret="$?"
  54. [ $default = 1 ] &&
  55. cat /sys/class/leds/${sysfs}/max_brightness > /sys/class/leds/${sysfs}/brightness
  56. [ $ret = 0 ] || {
  57. echo >&2 "Skipping trigger '$trigger' for led '$name' due to missing kernel module"
  58. return 1
  59. }
  60. case "$trigger" in
  61. "netdev")
  62. [ -n "$dev" ] && {
  63. echo $dev > /sys/class/leds/${sysfs}/device_name
  64. for m in $mode; do
  65. [ -e "/sys/class/leds/${sysfs}/$m" ] && \
  66. echo 1 > /sys/class/leds/${sysfs}/$m
  67. done
  68. echo $interval > /sys/class/leds/${sysfs}/interval
  69. }
  70. ;;
  71. "timer"|"oneshot")
  72. [ -n "$delayon" ] && \
  73. echo $delayon > /sys/class/leds/${sysfs}/delay_on
  74. [ -n "$delayoff" ] && \
  75. echo $delayoff > /sys/class/leds/${sysfs}/delay_off
  76. ;;
  77. "usbport")
  78. local p
  79. for p in $ports; do
  80. echo 1 > /sys/class/leds/${sysfs}/ports/$p
  81. done
  82. ;;
  83. "port_state")
  84. [ -n "$port_state" ] && \
  85. echo $port_state > /sys/class/leds/${sysfs}/port_state
  86. ;;
  87. "gpio")
  88. echo $gpio > /sys/class/leds/${sysfs}/gpio
  89. echo $inverted > /sys/class/leds/${sysfs}/inverted
  90. ;;
  91. switch[0-9]*)
  92. local port_mask speed_mask
  93. config_get port_mask $1 port_mask
  94. [ -n "$port_mask" ] && \
  95. echo $port_mask > /sys/class/leds/${sysfs}/port_mask
  96. config_get speed_mask $1 speed_mask
  97. [ -n "$speed_mask" ] && \
  98. echo $speed_mask > /sys/class/leds/${sysfs}/speed_mask
  99. [ -n "$mode" ] && \
  100. echo "$mode" > /sys/class/leds/${sysfs}/mode
  101. ;;
  102. esac
  103. }
  104. }
  105. start() {
  106. [ -e /sys/class/leds/ ] && {
  107. [ -s /var/run/led.state ] && {
  108. local led trigger brightness
  109. while read led trigger brightness; do
  110. [ -e "/sys/class/leds/$led/trigger" ] && \
  111. echo "$trigger" > "/sys/class/leds/$led/trigger"
  112. [ -e "/sys/class/leds/$led/brightness" ] && \
  113. echo "$brightness" > "/sys/class/leds/$led/brightness"
  114. done < /var/run/led.state
  115. rm /var/run/led.state
  116. }
  117. config_load system
  118. config_foreach load_led led
  119. }
  120. }