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..1538956 100644 --- a/src/gpio/gpio.c +++ b/src/gpio/gpio.c @@ -63,19 +63,19 @@ 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) { + 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; } } @@ -104,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