Private
Public Access
2
0

Merge branch 'gpio' of github.com:tingleby/maa into tingleby-gpio

This commit is contained in:
Brendan Le Foll
2014-04-11 16:19:18 +01:00
3 changed files with 77 additions and 2 deletions

View File

@@ -23,6 +23,8 @@
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include <stdio.h>
#ifdef __cplusplus
extern "C" {
#endif
@@ -32,6 +34,7 @@ typedef struct gpio_struct
int pin;
int pinMap;
char path[64];
FILE *value_fp;
} gpio_t;
typedef char gpio_mode_t[16];
@@ -42,6 +45,7 @@ int gpio_set(int pin);
void gpio_mode(gpio_t *gpio, gpio_mode_t mode);
void gpio_dir(gpio_t *gpio, gpio_dir_t dir);
void gpio_close(gpio_t *gpio);
int gpio_read(gpio_t *gpio);
void gpio_write(gpio_t *gpio, int value);

View File

@@ -0,0 +1,14 @@
#!/usr/bin/env python3
import pymaa as maa
import time
x = maa.gpio_t()
maa.gpio_init(x, 26)
maa.gpio_dir(x, "out")
while True:
maa.gpio_write(x,1)
time.sleep(0.2)
maa.gpio_write(x,0)
time.sleep(0.2)

View File

@@ -24,7 +24,9 @@
*/
#include <stdlib.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include "gpio.h"
@@ -32,8 +34,19 @@
extern "C" {
#endif
int
gpio_get_valfp(gpio_t *gpio);
void
gpio_init(gpio_t *gpio, int pin) {
FILE *export_f;
if((export_f = fopen("/sys/class/gpio/export", "w")) == NULL) {
fprintf(stderr, "Failed to open export for writing!\n");
} else {
fprintf(export_f, "%d", pin);
fclose(export_f);
}
gpio->pin = pin;
}
@@ -50,19 +63,63 @@ 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;
char filepath[64];
snprintf(filepath, 64, "/sys/class/gpio/gpio%d/direction", gpio->pin);
int fd;
fd = open(filepath, O_WRONLY);
if(fd == -1) {
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);
}
}
int
gpio_read(gpio_t *gpio) {
return 0;
if(gpio->value_fp == NULL) {
gpio_get_valfp(gpio);
}
fseek(gpio->value_fp, SEEK_SET, 0);
char buffer[2];
fread(buffer, 2, 1, gpio->value_fp);
fseek(gpio->value_fp, SEEK_SET, 0);
return atoi(buffer);
}
void
gpio_write(gpio_t *gpio, int value){
gpio_write(gpio_t *gpio, int value) {
if(gpio->value_fp == NULL) {
gpio_get_valfp(gpio);
}
fseek(gpio->value_fp, SEEK_SET, 0);
fprintf(gpio->value_fp, "%d", value);
fseek(gpio->value_fp, SEEK_SET, 0);
}
void
gpio_close(gpio_t *gpio) {
}
int
gpio_get_valfp(gpio_t *gpio) {
char bu[64];
sprintf(bu, "/sys/class/gpio/gpio%d/value", gpio->pin);
if((gpio->value_fp = fopen(bu, "r+b")) == NULL) {
return 1;
} else {
return 0;
}
return 1;
}
#ifdef __cplusplus
}
#endif