BeagleBoneのオンボードLED制御

BeagleBoneでLED4つ実装している。それぞれの名称はusr0、usr1、usr2、usr3だ。
LEDはトリガー(trigger)によって制御されている。
下記のフォルダにそれぞれLEDの制御フォルダがある
/sys/class/leds/
しかし、本体は/sys/devices/platform/leds-gpio/leds
に指しているシンボリックリンクだ
beaglebone::usr0 -> ../../devices/platform/leds-gpio/leds/beaglebone::usr0
beaglebone::usr1 -> ../../devices/platform/leds-gpio/leds/beaglebone::usr1
beaglebone::usr2 -> ../../devices/platform/leds-gpio/leds/beaglebone::usr2
beaglebone::usr3 -> ../../devices/platform/leds-gpio/leds/beaglebone::usr3
それぞれのLED制御フォルダに下記にファイルがある:
1,brightness
説明:値が0なら消灯、値が1なら点灯となる。
例:echo 1 > brightness

2,device -> ../../../leds-gpio
説明:特に使い道なし
 
3,max_brightness
説明:(TBD)

4,power
説明:(TBD)

5、subsystem -> ../../../../../class/leds
説明:特に使い道なし

6,trigger
説明:LED制御トリガー
トリガーはnone mmc0 timer heartbeat backlight gpio default-on7種類だ。
設定するため、viで編集するのではなく、echo で変更する
例:$ echo none > trigger
有効中の設定は四角カッコで囲っている
例:
$ cat trigger
[none] mmc0 timer heartbeat backlight gpio default-on

none:未設定

mmc0:SDカードスロット(SDカードにアクセスした場合LED点灯)

timer:LEDのon,offタイマー設定
$ echo timer > trigger
この設定を有効にした場合、delay_offとdelay_onファイルが作成される。
delay_off:消灯間隔(ms)
delay_on:点灯間隔(ms)
例:点灯5秒消灯1秒のパターン
$ echo 5000 > delay_on
$ echo 1000 > delay_off
設定しない場合デフォルトはどちらも500msとなっている。

heartbeat:生存監視

backlight:(TBD)

gpio:(TBD)

default-on:(TBD)

7,uevent
説明:(TBD)
デフォルトで付属のAngstromLinuxでは下記の動作となっている。

usr0:heartbeat
usr1:mmc(つまりSDカードアクセス)
usr2:未使用
usr3:未使用

LEDテストスクリプトを作成した:testled.sh

#!/bin/sh
led="/sys/class/leds/beaglebone::"

get_led_state () {
usr0_trigger=`cat ${led}usr0/trigger | sed -e "s/^.*\[\(.*\)\].*$/\1/"`
usr1_trigger=`cat ${led}usr1/trigger | sed -e "s/^.*\[\(.*\)\].*$/\1/"`
usr2_trigger=`cat ${led}usr2/trigger | sed -e "s/^.*\[\(.*\)\].*$/\1/"`
usr3_trigger=`cat ${led}usr3/trigger | sed -e "s/^.*\[\(.*\)\].*$/\1/"`
usr0_brightness=`cat ${led}usr0/brightness`
usr1_brightness=`cat ${led}usr1/brightness`
usr2_brightness=`cat ${led}usr2/brightness`
usr3_brightness=`cat ${led}usr3/brightness`
echo "USR0 LED state ($usr0_brightness) [$usr0_trigger]"
echo "USR1 LED state ($usr1_brightness) [$usr1_trigger]"
echo "USR2 LED state ($usr2_brightness) [$usr2_trigger]"
echo "USR3 LED state ($usr3_brightness) [$usr3_trigger]"
}

get_led_state
save0t="$usr0_trigger"
save0b="$usr0_brightness"
save1t="$usr1_trigger"
save1b="$usr1_brightness"
save2t="$usr2_trigger"
save2b="$usr2_brightness"
save3t="$usr3_trigger"
save3b="$usr3_brightness"

echo "Turning LEDs on for 3 seconds..."
echo "none" > ${led}usr0/trigger
echo "none" > ${led}usr1/trigger
echo "none" > ${led}usr2/trigger
echo "none" > ${led}usr3/trigger
echo "1" > ${led}usr0/brightness
echo "1" > ${led}usr1/brightness
echo "1" > ${led}usr2/brightness
echo "1" > ${led}usr3/brightness
get_led_state
sleep 3

echo "Turning USR0 LED off for 3 seconds..."
echo "0" > ${led}usr0/brightness
get_led_state
sleep 3

echo "Turning USR1 LED off for 3 seconds..."
echo "0" > ${led}usr1/brightness
get_led_state
sleep 3

echo "Turning USR2 LED off for 3 seconds..."
echo "0" > ${led}usr2/brightness
get_led_state
sleep 3

echo "Turning USR3 LED off for 3 seconds..."
echo "0" > ${led}usr3/brightness
get_led_state
sleep 3

echo "Restoring LEDs to their original state..."
echo "$save0b" > ${led}usr0/brightness
echo "$save1b" > ${led}usr1/brightness
echo "$save2b" > ${led}usr2/brightness
echo "$save3b" > ${led}usr3/brightness
echo "$save0t" > ${led}usr0/trigger
echo "$save1t" > ${led}usr1/trigger
echo "$save2t" > ${led}usr2/trigger
echo "$save3t" > ${led}usr3/trigger
get_led_state