From 40438d709a5f84dd838ab8749b3389b3ca2a682f Mon Sep 17 00:00:00 2001 From: Thomas Ingleby Date: Fri, 11 Apr 2014 17:57:53 +0100 Subject: [PATCH 1/2] gpio: Add cpp example to use IO. * Patch direction setting Signed-off-by: Thomas Ingleby --- examples/blink-io8.cpp | 20 ++++++++++++++++++++ src/gpio/gpio.c | 17 +++++++++-------- 2 files changed, 29 insertions(+), 8 deletions(-) create mode 100644 examples/blink-io8.cpp diff --git a/examples/blink-io8.cpp b/examples/blink-io8.cpp new file mode 100644 index 0000000..5eeae17 --- /dev/null +++ b/examples/blink-io8.cpp @@ -0,0 +1,20 @@ +#include "stdio.h" + +#include "maa.h" + +int +main(int argc, char **argv) +{ + fprintf(stdout, "MAA Version: %d\n Starting Blinking on IO8", get_version()); + gpio_t gpio; + gpio_init(&gpio, 26); + gpio_dir(&gpio, "out"); + + while(1){ + gpio_write(&gpio, 0); + sleep(1); + gpio_write(&gpio, 1); + sleep(1); + } + return 0; +} diff --git a/src/gpio/gpio.c b/src/gpio/gpio.c index 4726ee7..73bfeb6 100644 --- a/src/gpio/gpio.c +++ b/src/gpio/gpio.c @@ -63,19 +63,20 @@ gpio_mode(gpio_t *gpio, gpio_mode_t mode) { void gpio_dir(gpio_t *gpio, gpio_dir_t dir) { - fclose(gpio->value_fp); - gpio->value_fp = NULL; +//if(gpio->value_fp != NULL) { +// fclose(gpio->value_fp); +// gpio->value_fp = NULL; +// } char filepath[64]; snprintf(filepath, 64, "/sys/class/gpio/gpio%d/direction", gpio->pin); - int fd; - fd = open(filepath, O_WRONLY); - if(fd == -1) { + FILE *direction; + if((direction = fopen(filepath, "w")) == NULL) { fprintf(stderr, "Failed to open direction for writing!\n"); - } else if(write(fd, dir, 5) == -1) { - fprintf(stderr, "Failed to set direction\n"); } else { - close(fd); + fprintf(direction, dir); + fclose(direction); + gpio->value_fp = NULL; } } From 791c4b4d71d9639631e46d1fba0f0f5aaeca110b Mon Sep 17 00:00:00 2001 From: Thomas Ingleby Date: Mon, 14 Apr 2014 17:13:31 +0100 Subject: [PATCH 2/2] gpio: Tempory fix when changing direction * Added unexport feature Signed-off-by: Thomas Ingleby --- src/gpio/gpio.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/gpio/gpio.c b/src/gpio/gpio.c index 73bfeb6..1538956 100644 --- a/src/gpio/gpio.c +++ b/src/gpio/gpio.c @@ -63,10 +63,9 @@ gpio_mode(gpio_t *gpio, gpio_mode_t mode) { void gpio_dir(gpio_t *gpio, gpio_dir_t dir) { -//if(gpio->value_fp != NULL) { -// fclose(gpio->value_fp); -// gpio->value_fp = NULL; -// } + if(gpio->value_fp != NULL) { + gpio->value_fp = NULL; + } char filepath[64]; snprintf(filepath, 64, "/sys/class/gpio/gpio%d/direction", gpio->pin); @@ -105,7 +104,14 @@ gpio_write(gpio_t *gpio, int value) { void gpio_close(gpio_t *gpio) { + FILE *unexport_f; + if((unexport_f = fopen("/sys/class/gpio/unexport", "w")) == NULL) { + fprintf(stderr, "Failed to open unexport for writing!\n"); + } else { + fprintf(unexport_f, "%d", gpio->pin); + fclose(unexport_f); + } } int