Merge pull request #130 from adafruit/issue129-usr-leds

Add support for alternate USR LED labels
This commit is contained in:
Drew Fustini 2017-01-08 21:38:42 -06:00 committed by GitHub
commit 1439133c8d
4 changed files with 105 additions and 15 deletions

View file

@ -182,8 +182,9 @@ int open_value_file(unsigned int gpio)
snprintf(filename, sizeof(filename), "/sys/class/gpio/gpio%d/value", gpio);
}
if ((fd = open(filename, O_RDONLY | O_NONBLOCK)) < 0)
return -1;
if ((fd = open(filename, O_RDONLY | O_NONBLOCK)) < 0) {
return -1;
}
add_fd_list(gpio, fd);
return fd;
}
@ -288,13 +289,23 @@ int gpio_set_value(unsigned int gpio, unsigned int value)
char vstr[10];
if ((gpio >= USR_LED_GPIO_MIN) && (gpio <= USR_LED_GPIO_MAX)) {
snprintf(filename, sizeof(filename), "/sys/class/leds/beaglebone:green:usr%d/brightness", gpio - USR_LED_GPIO_MIN);
char *usr_led_trigger[] = { "heartbeat", "mmc0", "cpu0", "mmc1" };
int led = gpio - USR_LED_GPIO_MIN;
snprintf(filename, sizeof(filename), "/sys/class/leds/beaglebone:green:usr%d/brightness", led);
if ((fd = open(filename, O_WRONLY)) < 0) {
snprintf(filename, sizeof(filename), "/sys/class/leds/beaglebone:green:%s/brightness", usr_led_trigger[led]);
}
} else {
snprintf(filename, sizeof(filename), "/sys/class/gpio/gpio%d/value", gpio);
}
if ((fd = open(filename, O_WRONLY)) < 0)
if ((fd = open(filename, O_WRONLY)) < 0) {
return -1;
}
if (value) {
strncpy(vstr, "1", ARRAY_SIZE(vstr) - 1);

View file

@ -42,7 +42,7 @@ SOFTWARE.
#define HIGH 1
#define LOW 0
#define MAX_FILENAME 50
#define MAX_FILENAME 60
#define USR_LED_GPIO_MIN 53
#define USR_LED_GPIO_MAX 56

View file

@ -0,0 +1,54 @@
From 88366a61455cbe3e42ab59da939065abeab81597 Mon Sep 17 00:00:00 2001
From: Drew Fustini <drew@pdp7.com>
Date: Thu, 5 Jan 2017 02:33:58 -0600
Subject: [PATCH] rename USR LED names to test Adafruit_BBIO issue #129
Patch for ti-linux-4.4.y branch of ti-linux-kernel-dev which renames
the labels of the USR LED nodes
Related issue:
Doesn't support Ubuntu core beaglebone leds #129
https://github.com/adafruit/adafruit-beaglebone-io-python/issues/129
---
arch/arm/boot/dts/am335x-bone-common.dtsi | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/arch/arm/boot/dts/am335x-bone-common.dtsi b/arch/arm/boot/dts/am335x-bone-common.dtsi
index 1f496145..ba95ffc 100644
--- a/arch/arm/boot/dts/am335x-bone-common.dtsi
+++ b/arch/arm/boot/dts/am335x-bone-common.dtsi
@@ -26,28 +26,28 @@
compatible = "gpio-leds";
led@2 {
- label = "beaglebone:green:usr0";
+ label = "beaglebone:green:heartbeat";
gpios = <&gpio1 21 GPIO_ACTIVE_HIGH>;
linux,default-trigger = "heartbeat";
default-state = "off";
};
led@3 {
- label = "beaglebone:green:usr1";
+ label = "beaglebone:green:mmc0";
gpios = <&gpio1 22 GPIO_ACTIVE_HIGH>;
linux,default-trigger = "mmc0";
default-state = "off";
};
led@4 {
- label = "beaglebone:green:usr2";
+ label = "beaglebone:green:cpu0";
gpios = <&gpio1 23 GPIO_ACTIVE_HIGH>;
linux,default-trigger = "cpu0";
default-state = "off";
};
led@5 {
- label = "beaglebone:green:usr3";
+ label = "beaglebone:green:mmc1";
gpios = <&gpio1 24 GPIO_ACTIVE_HIGH>;
linux,default-trigger = "mmc1";
default-state = "off";
--
2.9.3

View file

@ -1,5 +1,6 @@
import pytest
import os
import errno
import Adafruit_BBIO.GPIO as GPIO
@ -7,16 +8,40 @@ def teardown_module(module):
GPIO.cleanup()
class TestLED:
def set_brightness(self, state, led, name):
GPIO.setup(led, GPIO.OUT)
GPIO.output(led, state)
prefix = "/sys/class/leds/beaglebone:green:{0}/brightness"
path = prefix.format(led.lower())
value = self.read_led_file(path)
if value < 0:
path = prefix.format(name)
value = self.read_led_file(path)
if state == 1:
assert int(value) > 0
else:
assert int(value) == 0
def read_led_file(self, path):
try:
return open(path).read()
except IOError, e:
if e.errno == errno.ENOENT:
return -1
def set_all_leds(self, state):
test_leds = { "USR0": "heartbeat", \
"USR1": "mmc0", \
"USR2": "cpu0", \
"USR3": "mmc1" }
for led, name in test_leds.iteritems():
self.set_brightness(state, led, name)
GPIO.cleanup()
def test_brightness_high(self):
GPIO.setup("USR0", GPIO.OUT)
GPIO.output("USR0", GPIO.HIGH)
value = open('/sys/class/leds/beaglebone:green:usr0/brightness').read()
assert int(value) > 0
GPIO.cleanup()
self.set_all_leds(GPIO.HIGH)
def test_brightness_low(self):
GPIO.setup("USR0", GPIO.OUT)
GPIO.output("USR0", GPIO.LOW)
value = open('/sys/class/leds/beaglebone:green:usr0/brightness').read()
assert int(value) == 0
GPIO.cleanup()
self.set_all_leds(GPIO.LOW)