Skip to content

Commit 1439133

Browse files
authored
Merge pull request #130 from adafruit/issue129-usr-leds
Add support for alternate USR LED labels
2 parents 237ceda + 14f82d9 commit 1439133

File tree

4 files changed

+105
-15
lines changed

4 files changed

+105
-15
lines changed

source/event_gpio.c

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -182,8 +182,9 @@ int open_value_file(unsigned int gpio)
182182
snprintf(filename, sizeof(filename), "/sys/class/gpio/gpio%d/value", gpio);
183183
}
184184

185-
if ((fd = open(filename, O_RDONLY | O_NONBLOCK)) < 0)
186-
return -1;
185+
if ((fd = open(filename, O_RDONLY | O_NONBLOCK)) < 0) {
186+
return -1;
187+
}
187188
add_fd_list(gpio, fd);
188189
return fd;
189190
}
@@ -288,13 +289,23 @@ int gpio_set_value(unsigned int gpio, unsigned int value)
288289
char vstr[10];
289290

290291
if ((gpio >= USR_LED_GPIO_MIN) && (gpio <= USR_LED_GPIO_MAX)) {
291-
snprintf(filename, sizeof(filename), "/sys/class/leds/beaglebone:green:usr%d/brightness", gpio - USR_LED_GPIO_MIN);
292+
293+
char *usr_led_trigger[] = { "heartbeat", "mmc0", "cpu0", "mmc1" };
294+
int led = gpio - USR_LED_GPIO_MIN;
295+
296+
snprintf(filename, sizeof(filename), "/sys/class/leds/beaglebone:green:usr%d/brightness", led);
297+
298+
if ((fd = open(filename, O_WRONLY)) < 0) {
299+
snprintf(filename, sizeof(filename), "/sys/class/leds/beaglebone:green:%s/brightness", usr_led_trigger[led]);
300+
}
301+
292302
} else {
293303
snprintf(filename, sizeof(filename), "/sys/class/gpio/gpio%d/value", gpio);
294304
}
295305

296-
if ((fd = open(filename, O_WRONLY)) < 0)
306+
if ((fd = open(filename, O_WRONLY)) < 0) {
297307
return -1;
308+
}
298309

299310
if (value) {
300311
strncpy(vstr, "1", ARRAY_SIZE(vstr) - 1);

source/event_gpio.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ SOFTWARE.
4242
#define HIGH 1
4343
#define LOW 0
4444

45-
#define MAX_FILENAME 50
45+
#define MAX_FILENAME 60
4646

4747
#define USR_LED_GPIO_MIN 53
4848
#define USR_LED_GPIO_MAX 56
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
From 88366a61455cbe3e42ab59da939065abeab81597 Mon Sep 17 00:00:00 2001
2+
From: Drew Fustini <drew@pdp7.com>
3+
Date: Thu, 5 Jan 2017 02:33:58 -0600
4+
Subject: [PATCH] rename USR LED names to test Adafruit_BBIO issue #129
5+
6+
Patch for ti-linux-4.4.y branch of ti-linux-kernel-dev which renames
7+
the labels of the USR LED nodes
8+
9+
Related issue:
10+
Doesn't support Ubuntu core beaglebone leds #129
11+
https://github.com/adafruit/adafruit-beaglebone-io-python/issues/129
12+
---
13+
arch/arm/boot/dts/am335x-bone-common.dtsi | 8 ++++----
14+
1 file changed, 4 insertions(+), 4 deletions(-)
15+
16+
diff --git a/arch/arm/boot/dts/am335x-bone-common.dtsi b/arch/arm/boot/dts/am335x-bone-common.dtsi
17+
index 1f496145..ba95ffc 100644
18+
--- a/arch/arm/boot/dts/am335x-bone-common.dtsi
19+
+++ b/arch/arm/boot/dts/am335x-bone-common.dtsi
20+
@@ -26,28 +26,28 @@
21+
compatible = "gpio-leds";
22+
23+
led@2 {
24+
- label = "beaglebone:green:usr0";
25+
+ label = "beaglebone:green:heartbeat";
26+
gpios = <&gpio1 21 GPIO_ACTIVE_HIGH>;
27+
linux,default-trigger = "heartbeat";
28+
default-state = "off";
29+
};
30+
31+
led@3 {
32+
- label = "beaglebone:green:usr1";
33+
+ label = "beaglebone:green:mmc0";
34+
gpios = <&gpio1 22 GPIO_ACTIVE_HIGH>;
35+
linux,default-trigger = "mmc0";
36+
default-state = "off";
37+
};
38+
39+
led@4 {
40+
- label = "beaglebone:green:usr2";
41+
+ label = "beaglebone:green:cpu0";
42+
gpios = <&gpio1 23 GPIO_ACTIVE_HIGH>;
43+
linux,default-trigger = "cpu0";
44+
default-state = "off";
45+
};
46+
47+
led@5 {
48+
- label = "beaglebone:green:usr3";
49+
+ label = "beaglebone:green:mmc1";
50+
gpios = <&gpio1 24 GPIO_ACTIVE_HIGH>;
51+
linux,default-trigger = "mmc1";
52+
default-state = "off";
53+
--
54+
2.9.3

test/test_led.py

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,47 @@
11
import pytest
22
import os
3+
import errno
34

45
import Adafruit_BBIO.GPIO as GPIO
56

67
def teardown_module(module):
78
GPIO.cleanup()
89

910
class TestLED:
11+
def set_brightness(self, state, led, name):
12+
GPIO.setup(led, GPIO.OUT)
13+
GPIO.output(led, state)
14+
prefix = "/sys/class/leds/beaglebone:green:{0}/brightness"
15+
path = prefix.format(led.lower())
16+
value = self.read_led_file(path)
17+
if value < 0:
18+
path = prefix.format(name)
19+
value = self.read_led_file(path)
20+
if state == 1:
21+
assert int(value) > 0
22+
else:
23+
assert int(value) == 0
24+
25+
def read_led_file(self, path):
26+
try:
27+
return open(path).read()
28+
except IOError, e:
29+
if e.errno == errno.ENOENT:
30+
return -1
31+
32+
def set_all_leds(self, state):
33+
test_leds = { "USR0": "heartbeat", \
34+
"USR1": "mmc0", \
35+
"USR2": "cpu0", \
36+
"USR3": "mmc1" }
37+
for led, name in test_leds.iteritems():
38+
self.set_brightness(state, led, name)
39+
GPIO.cleanup()
40+
1041
def test_brightness_high(self):
11-
GPIO.setup("USR0", GPIO.OUT)
12-
GPIO.output("USR0", GPIO.HIGH)
13-
value = open('/sys/class/leds/beaglebone:green:usr0/brightness').read()
14-
assert int(value) > 0
15-
GPIO.cleanup()
42+
self.set_all_leds(GPIO.HIGH)
1643

1744
def test_brightness_low(self):
18-
GPIO.setup("USR0", GPIO.OUT)
19-
GPIO.output("USR0", GPIO.LOW)
20-
value = open('/sys/class/leds/beaglebone:green:usr0/brightness').read()
21-
assert int(value) == 0
22-
GPIO.cleanup()
45+
self.set_all_leds(GPIO.LOW)
46+
47+

0 commit comments

Comments
 (0)