SnarlingFox

leds.sh supporting multiple leds

Nov 17th, 2023
749
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.34 KB | None | 0 0
  1. # Copyright (C) 2013 OpenWrt.org
  2.  
  3. get_dt_led_path() {
  4.     local basepath="/proc/device-tree"
  5.     local nodepath="$basepath/aliases/led-$1"
  6.     local ledlist
  7.  
  8.     for ledpath in $(ls -1 "$nodepath"* 2>/dev/null); do
  9.         [ -f "$ledpath" ] && ledpath=$(cat "$ledpath")
  10.         [ -n "$ledpath" ] && ledpath="$basepath$ledpath"
  11.         ledlist="${ledlist} ${ledpath}"
  12.     done
  13.  
  14.     echo "$ledlist" | sed 's/ /\n/g' | sort | uniq
  15. }
  16.  
  17. get_dt_led() {
  18.     local label
  19.     local ledpaths=$(get_dt_led_path $1 | sed 's/ /\n/g')
  20.     local ledpathlist
  21.  
  22.     for ledpath in ${ledpaths}; do
  23.         [ -n "$ledpath" ] && \
  24.             label=$(cat "$ledpath/label" 2>/dev/null) || \
  25.             label=$(cat "$ledpath/chan-name" 2>/dev/null) || \
  26.             label=$(basename "$ledpath")
  27.         ledpathlist="${ledpathlist} ${label}"
  28.     done
  29.  
  30.     echo "$ledpathlist" | awk '{$1=$1};1'
  31. }
  32.  
  33. led_set_attr() {
  34.     for ledpath in $(echo "$1" | sed 's/ /\n/g'); do
  35.         [ -f "/sys/class/leds/$ledpath/$2" ] && echo "$3" > "/sys/class/leds/$ledpath/$2"
  36.     done
  37. }
  38.  
  39. led_timer() {
  40.     led_set_attr "${1}" "delay_on" "$2"
  41.     led_set_attr "${1}" "delay_off" "$3"
  42.     led_set_attr "${1}" "trigger" "timer"
  43. }
  44.  
  45. led_on() {
  46.     led_set_attr "${1}" "trigger" "none"
  47.     led_set_attr "${1}" "brightness" 255
  48. }
  49.  
  50. led_off() {
  51.     led_set_attr "${1}" "trigger" "none"
  52.     led_set_attr "${1}" "brightness" 0
  53. }
  54.  
  55. status_led_restore_trigger() {
  56.     local trigger
  57.     local ledpaths=$(get_dt_led_path $1 | sed 's/ /\n/g')
  58.  
  59.     for ledpath in ${ledpaths}; do
  60.         [ -n "$ledpath" ] && \
  61.             trigger=$(cat "$ledpath/linux,default-trigger" 2>/dev/null)
  62.  
  63.         [ -n "$trigger" ] && \
  64.             led_set_attr "$(get_dt_led $1)" "trigger" "$trigger"
  65.     done
  66. }
  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.  
  73. status_led_set_heartbeat() {
  74.     led_set_attr "${status_led}" "trigger" "heartbeat"
  75. }
  76.  
  77. status_led_on() {
  78.     led_on "${status_led}"
  79.     [ -n "$status_led2" ] && led_on $status_led2
  80. }
  81.  
  82. status_led_off() {
  83.     led_off "${status_led}"
  84.     [ -n "$status_led2" ] && led_off $status_led2
  85. }
  86.  
  87. status_led_blink_slow() {
  88.     led_timer "${status_led}" 1000 1000
  89. }
  90.  
  91. status_led_blink_fast() {
  92.     led_timer "${status_led}" 100 100
  93. }
  94.  
  95. status_led_blink_preinit() {
  96.     led_timer "${status_led}" 100 100
  97. }
  98.  
  99. status_led_blink_failsafe() {
  100.     led_timer "${status_led}" 50 50
  101. }
  102.  
  103. status_led_blink_preinit_regular() {
  104.     led_timer "${status_led}" 200 200
  105. }
  106.  
Advertisement
Add Comment
Please, Sign In to add comment