Created
December 29, 2012 15:40
-
-
Save hiroeorz/4407647 to your computer and use it in GitHub Desktop.
Controlling LED on beagleboard-xm on Ubuntu Linux from Ruby.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# control led on beagleboard. | |
class BeagleBoardXmLed | |
LED_FILE_FORMAT = | |
"/sys/devices/platform/leds-gpio/leds/beagleboard::@name@/brightness" | |
# led: ledname (usr0 : usr1 : pmu_stat) | |
def on(led) | |
control(led, 1) | |
end | |
# led: ledname (usr0 : usr1 : pmu_stat) | |
def off(led) | |
control(led, 0) | |
end | |
# led: ledname (usr0 : usr1 : pmu_stat) | |
def status(led) | |
File.open(filepath(led)) do |f| | |
state = f.read.chomp | |
return (state == "1") | |
end | |
end | |
# led: ledname (usr0 : usr1 : pmu_stat) | |
# interval: brink interval | |
# count: blink count | |
def blink(led, opts = {:interval => 1, :count => 5}) | |
interval = opts[:interval] | |
count = opts[:count].to_i * 2 | |
count.times do | |
status(led) ? off(led) : on(led) | |
sleep interval | |
end | |
end | |
private | |
# led: ledname (usr0 : usr1 : pmu_stat) | |
# output: 1 or 0 | |
def control(led, output) | |
check_output output | |
File.open(filepath(led), "w") do |f| | |
f.print output.to_s | |
end | |
end | |
# output: 1 or 0 | |
def check_output(output) | |
unless [1,0].include? output | |
raise ArgumentError.new "invalid control output:#{output}" | |
end | |
end | |
# led: ledname (usr0 : usr1 : pmu_stat) | |
def filepath(led) | |
filepath = LED_FILE_FORMAT.sub(/@name@/, led.to_s) | |
raise "no such device:#{led}" unless File.exist?(filepath) | |
filepath | |
end | |
end | |
if __FILE__ == $0 | |
led = BeagleBoardXmLed.new | |
led.blink :usr0, interval:0.1, count:10 | |
led.blink :usr1, interval:0.1, count:10 | |
led.blink :pmu_stat, interval:0.1, count:10 | |
end | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment