diff options
author | Jakob Kaivo <jakob@kaivo.net> | 2018-11-10 14:03:13 -0500 |
---|---|---|
committer | Jakob Kaivo <jakob@kaivo.net> | 2018-11-10 14:03:13 -0500 |
commit | 0a30f3c2324995ec9da685930e0d34b9e1ccae8b (patch) | |
tree | e563853a59dddd9394c257bcef2a26922e9e6917 | |
parent | b3931d57b8f1a46d3e5d0d50109e80f16427a338 (diff) |
complete gpio_init(), room for improvement
-rw-r--r-- | freeonebook.c | 190 |
1 files changed, 102 insertions, 88 deletions
diff --git a/freeonebook.c b/freeonebook.c index e9be2e2..584013f 100644 --- a/freeonebook.c +++ b/freeonebook.c @@ -1,12 +1,14 @@ #include <stdint.h> #include <stdio.h> +#include <string.h> #include <fcntl.h> #include <unistd.h> -#define GPIO_EXPORT "/sys/class/gpio/export" +#define GPIO_BASEDIR "/sys/class/gpio" +#define GPIO_EXPORT GPIO_BASEDIR "/export" -#define ENABLE_LEFT_PATH "/sys/class/gpio/gpio5/value" -#define ENABLE_RIGHT_PATH "/sys/class/gpio/gpio4/value" +#define ENABLE_LEFT_PATH GPIO_BASEDIR "/gpio5/value" +#define ENABLE_RIGHT_PATH GPIO_BASEDIR "/gpio4/value" #define ENABLE_VALUE "1" @@ -24,101 +26,111 @@ void enable_displays(void) close(right); } +void gpio_write(int port, const char *field, const char *value) +{ + char path[256]; + sprintf(path, "%s/gpio%d/%s", GPIO_BASEDIR, field); + int fd = open(path, O_WRONLY); + write(fd, value, strlen(value)); + close(fd); +} + void gpio_init(void) { struct { uint8_t port; enum { in, out } direction; + uint8_t value; } ports[] = { - { 100, in }, /* 4a58 */ + { 100, in }, { 91, in }, { 96, in }, { 89, in }, { 95, in }, { 92, in }, - { 108, out }, /* 4aec */ - { 94, out }, - { 101, out }, /* 95, 92 */ + { 108, out, 0 }, + { 94, out, 0 }, + { 101, out, 0 }, /* 95, 92 */ { 5, out }, { 4, out }, { 93, in }, - { 98, out }, - { 90, out }, + { 98, out, 1 }, + { 90, out, 1 }, /* 108, 94, 101 */ { 88, in }, - { 0, out }, - { 1, out }, - { 2, out }, - { 3, out }, - { 6, out }, - { 28, out }, - { 29, out }, - { 30, out }, - { 33, out }, - { 37, out }, - { 38, out }, - { 47, out }, - { 48, out }, - { 49, out }, - { 50, out }, - { 51, out }, - { 52, out }, - { 53, out }, - { 54, out }, - { 55, out }, - { 56, out }, - { 57, out }, - { 58, out }, - { 59, out }, - { 60, out }, - { 61, out }, - { 62, out }, - { 63, out }, - { 64, out }, - { 65, out }, - { 66, out }, - { 67, out }, - { 68, out }, - { 69, out }, - { 70, out }, - { 71, out }, - { 72, out }, - { 73, out }, - { 74, out }, - { 75, out }, /* not enabled */ - { 78, out }, - { 79, out }, - { 86, out }, - { 87, out }, - { 97, out }, - { 99, out }, - { 104, out }, - { 105, out }, - { 106, out }, - { 107, out }, - { 109, out }, - { 110, out }, - { 111, out }, - { 112, out }, - { 113, out }, - { 114, out }, - { 115, out }, - { 116, out }, - { 117, out }, - { 118, out }, - { 119, out }, - { 120, out }, - { 121, out }, - { 122, out }, - { 135, out }, - { 137, out }, - { 138, out }, - { 140, out }, - { 144, out }, - { 145, out }, - { 146, out }, - { 147, out }, - { 148, out }, - { 149, out }, + { 0, out, 0 }, + { 1, out, 0 }, + { 2, out, 0 }, + { 3, out, 0 }, + { 6, out, 0 }, + { 28, out, 0 }, + { 29, out, 0 }, + { 30, out, 0 }, + { 33, out, 0 }, + { 37, out, 0 }, + { 38, out, 0 }, + { 47, out, 0 }, + { 48, out, 0 }, + { 49, out, 0 }, + { 50, out, 0 }, + { 51, out, 0 }, + { 52, out, 0 }, + { 53, out, 0 }, + { 54, out, 0 }, + { 55, out, 0 }, + { 56, out, 0 }, + { 57, out, 0 }, + { 58, out, 0 }, + { 59, out, 0 }, + { 60, out, 0 }, + { 61, out, 0 }, + { 62, out, 0 }, + { 63, out, 0 }, + { 64, out, 0 }, + { 65, out, 0 }, + { 66, out, 0 }, + { 67, out, 0 }, + { 68, out, 0 }, + { 69, out, 0 }, + { 70, out, 0 }, + { 71, out, 0 }, + { 72, out, 0 }, + { 73, out, 0 }, + { 74, out, 0 }, + { 75, out, 0 }, /* not enabled */ + { 78, out, 0 }, + { 79, out, 0 }, + { 86, out, 0 }, + { 87, out, 0 }, + { 97, out, 0 }, + { 99, out, 0 }, + { 104, out, 0 }, + { 105, out, 0 }, + { 106, out, 0 }, + { 107, out, 0 }, + { 109, out, 0 }, + { 110, out, 0 }, + { 111, out, 0 }, + { 112, out, 0 }, + { 113, out, 0 }, + { 114, out, 0 }, + { 115, out, 0 }, + { 116, out, 0 }, + { 117, out, 0 }, + { 118, out, 0 }, + { 119, out, 0 }, + { 120, out, 0 }, + { 121, out, 0 }, + { 122, out, 0 }, + { 135, out, 0 }, + { 137, out, 0 }, + { 138, out, 0 }, + { 140, out, 0 }, + { 144, out, 0 }, + { 145, out, 0 }, + { 146, out, 0 }, + { 147, out, 0 }, + { 148, out, 0 }, + { 149, out, 0 }, }; int gpio_export = open(GPIO_EXPORT, O_WRONLY); for (int i = 0; i < sizeof(ports) / sizeof(ports[0]); i++) { @@ -128,11 +140,13 @@ void gpio_init(void) close(gpio_export); for (int i = 0; i < sizeof(ports) / sizeof(ports[0]); i++) { - char path[256]; - sprintf(path, "/sys/class/gpio/gpio%hhd/direction", ports[i].port); - int dir = open(path, O_WRONLY); - dprintf(dir, "%s", ports[i].direction == in ? "in" : "out"); - close(dir); + gpio_write(ports[i].port, "direction", ports[i].direction == in ? "in" : "out"); + } + + for (int i = 0; i < sizeof(ports) / sizeof(ports[0]); i++) { + if (ports[i].direction == out) { + gpio_write(ports[i].port, "value", ports[i].value == 1 ? "1" : "0"); + } } } |