Skip to content

Commit 93f3558

Browse files
committed
Merge pull request #88 from pdp7/master
Add support for on-board LEDs (USR0-USR3)
2 parents 6dad329 + b620b3f commit 93f3558

File tree

4 files changed

+63
-5
lines changed

4 files changed

+63
-5
lines changed

README.rst

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,28 @@ Setup the pin for output, and write GPIO.HIGH or GPIO.LOW. Or you can use 1 or 0
7070

7171
import Adafruit_BBIO.GPIO as GPIO
7272
GPIO.setup("P8_14", GPIO.OUT) GPIO.output("P8_14", GPIO.HIGH)
73+
74+
**On-Board LEDs**
75+
76+
On-board LEDs (USR0-USR3) are handled by LED class driver rather than the GPIO pin driver.
77+
78+
They have a different path in the /sys/ filesystem.
79+
80+
Setup the pin for output and write GPIO.HIGH or GPIO.LOW.
81+
82+
import Adafruit_BBIO.GPIO as GPIO
83+
import time
84+
85+
for i in range(4):
86+
GPIO.setup("USR%d" % i, GPIO.OUT)
87+
88+
while True:
89+
for i in range(4):
90+
GPIO.output("USR%d" % i, GPIO.HIGH)
91+
time.sleep(1)
92+
for i in range(4):
93+
GPIO.output("USR%d" % i, GPIO.LOW)
94+
time.sleep(1)
7395

7496
**GPIO Input**
7597

source/event_gpio.c

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -170,12 +170,17 @@ int add_fd_list(unsigned int gpio, int fd)
170170
int open_value_file(unsigned int gpio)
171171
{
172172
int fd;
173-
char filename[40];
173+
char filename[MAX_FILENAME];
174174

175175
// create file descriptor of value file
176-
snprintf(filename, sizeof(filename), "/sys/class/gpio/gpio%d/value", gpio);
176+
if ((gpio >= USR_LED_GPIO_MIN) && (gpio <= USR_LED_GPIO_MAX)) {
177+
snprintf(filename, sizeof(filename), "/sys/class/leds/beaglebone:green:usr%d/brightness", gpio - USR_LED_GPIO_MIN);
178+
} else {
179+
snprintf(filename, sizeof(filename), "/sys/class/gpio/gpio%d/value", gpio);
180+
}
181+
177182
if ((fd = open(filename, O_RDONLY | O_NONBLOCK)) < 0)
178-
return -1;
183+
return -1;
179184
add_fd_list(gpio, fd);
180185
return fd;
181186
}
@@ -262,10 +267,14 @@ int gpio_get_direction(unsigned int gpio, unsigned int *value)
262267
int gpio_set_value(unsigned int gpio, unsigned int value)
263268
{
264269
int fd;
265-
char filename[40];
270+
char filename[MAX_FILENAME];
266271
char vstr[10];
267272

268-
snprintf(filename, sizeof(filename), "/sys/class/gpio/gpio%d/value", gpio);
273+
if ((gpio >= USR_LED_GPIO_MIN) && (gpio <= USR_LED_GPIO_MAX)) {
274+
snprintf(filename, sizeof(filename), "/sys/class/leds/beaglebone:green:usr%d/brightness", gpio - USR_LED_GPIO_MIN);
275+
} else {
276+
snprintf(filename, sizeof(filename), "/sys/class/gpio/gpio%d/value", gpio);
277+
}
269278

270279
if ((fd = open(filename, O_WRONLY)) < 0)
271280
return -1;

source/event_gpio.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ SOFTWARE.
4040
#define HIGH 1
4141
#define LOW 0
4242

43+
#define MAX_FILENAME 50
44+
45+
#define USR_LED_GPIO_MIN 53
46+
#define USR_LED_GPIO_MAX 56
47+
4348
#define PUD_OFF 0
4449
#define PUD_DOWN 1
4550
#define PUD_UP 2

test/test_led.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import pytest
2+
import os
3+
4+
import Adafruit_BBIO.GPIO as GPIO
5+
6+
def teardown_module(module):
7+
GPIO.cleanup()
8+
9+
class TestLED:
10+
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()
16+
17+
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()

0 commit comments

Comments
 (0)