leds.sh 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. # Copyright (C) 2013 OpenWrt.org
  2. get_dt_led_path() {
  3. local ledpath
  4. local basepath="/proc/device-tree"
  5. local nodepath="$basepath/aliases/led-$1"
  6. [ -f "$nodepath" ] && ledpath=$(cat "$nodepath")
  7. [ -n "$ledpath" ] && ledpath="$basepath$ledpath"
  8. echo "$ledpath"
  9. }
  10. get_dt_led_color_func() {
  11. local enum
  12. local func
  13. local idx
  14. local label
  15. [ -e "$1/function" ] && func=$(cat "$1/function")
  16. [ -e "$1/color" ] && idx=$((0x$(hexdump -n 4 -e '4/1 "%02x"' "$1/color")))
  17. [ -e "$1/function-enumerator" ] && \
  18. enum=$((0x$(hexdump -n 4 -e '4/1 "%02x"' "$1/function-enumerator")))
  19. [ -z "$idx" ] && [ -z "$func" ] && return 2
  20. if [ -n "$idx" ]; then
  21. for color in "white" "red" "green" "blue" "amber" \
  22. "violet" "yellow" "ir" "multicolor" "rgb" \
  23. "purple" "orange" "pink" "cyan" "lime"
  24. do
  25. [ $idx -eq 0 ] && label="$color" && break
  26. idx=$((idx-1))
  27. done
  28. fi
  29. label="$label:$func"
  30. [ -n "$enum" ] && label="$label-$enum"
  31. echo "$label"
  32. return 0
  33. }
  34. get_dt_led() {
  35. local label
  36. local ledpath=$(get_dt_led_path $1)
  37. [ -n "$ledpath" ] && \
  38. label=$(cat "$ledpath/label" 2>/dev/null) || \
  39. label=$(cat "$ledpath/chan-name" 2>/dev/null) || \
  40. label=$(get_dt_led_color_func "$ledpath") || \
  41. label=$(basename "$ledpath")
  42. echo "$label"
  43. }
  44. led_set_attr() {
  45. [ -f "/sys/class/leds/$1/$2" ] && echo "$3" > "/sys/class/leds/$1/$2"
  46. }
  47. led_timer() {
  48. led_set_attr $1 "trigger" "timer"
  49. led_set_attr $1 "delay_on" "$2"
  50. led_set_attr $1 "delay_off" "$3"
  51. }
  52. led_on() {
  53. led_set_attr $1 "trigger" "none"
  54. led_set_attr $1 "brightness" 255
  55. }
  56. led_off() {
  57. led_set_attr $1 "trigger" "none"
  58. led_set_attr $1 "brightness" 0
  59. }
  60. status_led_restore_trigger() {
  61. local trigger
  62. local ledpath=$(get_dt_led_path $1)
  63. [ -n "$ledpath" ] && \
  64. trigger=$(cat "$ledpath/linux,default-trigger" 2>/dev/null)
  65. [ -n "$trigger" ] && \
  66. led_set_attr "$(get_dt_led $1)" "trigger" "$trigger"
  67. }
  68. status_led_set_timer() {
  69. led_timer $status_led "$1" "$2"
  70. [ -n "$status_led2" ] && led_timer $status_led2 "$1" "$2"
  71. }
  72. status_led_set_heartbeat() {
  73. led_set_attr $status_led "trigger" "heartbeat"
  74. }
  75. status_led_on() {
  76. led_on $status_led
  77. [ -n "$status_led2" ] && led_on $status_led2
  78. }
  79. status_led_off() {
  80. led_off $status_led
  81. [ -n "$status_led2" ] && led_off $status_led2
  82. }
  83. status_led_blink_slow() {
  84. led_timer $status_led 1000 1000
  85. }
  86. status_led_blink_fast() {
  87. led_timer $status_led 100 100
  88. }
  89. status_led_blink_preinit() {
  90. led_timer $status_led 100 100
  91. }
  92. status_led_blink_failsafe() {
  93. led_timer $status_led 50 50
  94. }
  95. status_led_blink_preinit_regular() {
  96. led_timer $status_led 200 200
  97. }