]> rtime.felk.cvut.cz Git - coffee/mt-apps.git/commitdiff
mt_gpio.h, trigger happy keys, mt_gpio in Makefile
authorJiří Matěják <jiri.matejak@fel.cvut.cz>
Fri, 4 May 2018 10:16:45 +0000 (12:16 +0200)
committerJiří Matěják <jiri.matejak@fel.cvut.cz>
Fri, 4 May 2018 10:17:15 +0000 (12:17 +0200)
Makefile
mt_gpio.h [new file with mode: 0644]
mt_keys.c

index 470e9a1d6b490c2b39d8aef5c1e758922c3e4452..c753225112a20488da756c395d392efb383ec849 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -9,11 +9,14 @@ mtserver_LIBS = -lev -lwebsockets
 mtkeys_SRCS   = signal_exit.c mt_keys.c
 mtkeys_LIBS   = -lev
 
+mtgpio_SRCS   = signal_exit.c mt_gpio.c
+mtgpio_LIBS   = -lev -lgpiod
+
 mtaio_SRCS    = signal_exit.c mt_rfid.c mt_keys.c mt_server.c mt_aio.c
 mtaio_LIBS    = -lev -luFCoder-armhf -lwebsockets
 mtaio_DEFS    = -DNO_MAIN
 
-all: mtrfid mtserver mtkeys mtaio
+all: mtrfid mtserver mtkeys mtgpio mtaio
 
 .PHONY: clean
 
diff --git a/mt_gpio.h b/mt_gpio.h
new file mode 100644 (file)
index 0000000..628ac8a
--- /dev/null
+++ b/mt_gpio.h
@@ -0,0 +1,60 @@
+#ifndef MT_GPIO_H
+#define MT_GPIO_H
+
+#include <ev.h>
+#include <gpiod.h>
+
+typedef struct mt_gpio_dev_t {
+    unsigned int chip;
+    unsigned int offset;
+    char key;
+} mt_gpio_dev_t;
+
+#define GPIO_COUNT 20
+#ifndef GPIO_CONSUMER
+#define GPIO_CONSUMER "mtgpio"
+#endif
+#define GPIO_ACTIVE_LOW 1
+
+#define ADV_GPIO_PINS \
+{ \
+    {0, 27, 'A'}, \
+    {0, 29, 'B'}, \
+    {0, 25, 'C'}, \
+    {0, 30, 'D'}, \
+    {5, 31, 'E'}, \
+    {2, 30, 'F'}, \
+    {2, 31, 'G'}, \
+    {2, 21, 'H'}, \
+    {4,  2, 'I'}, \
+    {2, 20, 'J'}, \
+    {2, 23, 'K'}, \
+    {5, 11, 'L'}, \
+    {1,  2, 'M'}, \
+    {5,  9, 'N'}, \
+    {1,  3, 'O'}, \
+    {5, 16, 'P'}, \
+    {5,  7, 'Q'}, \
+    {1,  4, 'R'}, \
+    {1,  0, 'S'}, \
+    {5,  8, 'T'}  \
+}
+
+const mt_gpio_dev_t pins[GPIO_COUNT] = ADV_GPIO_PINS;
+
+typedef struct ev_io_gpio {
+    ev_io w;
+    int fd;
+    char key;
+} ev_io_gpio;
+
+typedef struct mt_gpio_t {
+    ev_io_gpio w[GPIO_COUNT];
+    struct gpiod_chip *chip[GPIO_COUNT];
+} mt_gpio_t;
+
+int mt_gpio_init(mt_gpio_t *self, struct ev_loop *loop, int fd);
+
+void mt_gpio_deinit(mt_gpio_t *self);
+
+#endif
index 59436f409cf5b0fb70ba566d732cd862d783679c..d33635a90883b782daf5e28014c3abdadba86697 100644 (file)
--- a/mt_keys.c
+++ b/mt_keys.c
@@ -25,64 +25,64 @@ static void keys_cb(EV_P_ ev_io *w_, int revents)
     }
     if (ev.type == 1 && ev.value == 1) {
         switch (ev.code) {
-            case KEY_A:
+            case BTN_TRIGGER_HAPPY1:
                 key = 'A';
                 break;
-            case KEY_B:
+            case BTN_TRIGGER_HAPPY2:
                 key = 'B';
                 break;
-            case KEY_C:
+            case BTN_TRIGGER_HAPPY3:
                 key = 'C';
                 break;
-            case KEY_D:
+            case BTN_TRIGGER_HAPPY4:
                 key = 'D';
                 break;
-            case KEY_E:
+            case BTN_TRIGGER_HAPPY5:
                 key = 'E';
                 break;
-            case KEY_F:
+            case BTN_TRIGGER_HAPPY6:
                 key = 'F';
                 break;
-            case KEY_G:
+            case BTN_TRIGGER_HAPPY7:
                 key = 'G';
                 break;
-            case KEY_H:
+            case BTN_TRIGGER_HAPPY8:
                 key = 'H';
                 break;
-            case KEY_I:
+            case BTN_TRIGGER_HAPPY9:
                 key = 'I';
                 break;
-            case KEY_J:
+            case BTN_TRIGGER_HAPPY10:
                 key = 'J';
                 break;
-            case KEY_K:
+            case BTN_TRIGGER_HAPPY11:
                 key = 'K';
                 break;
-            case KEY_L:
+            case BTN_TRIGGER_HAPPY12:
                 key = 'L';
                 break;
-            case KEY_M:
+            case BTN_TRIGGER_HAPPY13:
                 key = 'M';
                 break;
-            case KEY_N:
+            case BTN_TRIGGER_HAPPY14:
                 key = 'N';
                 break;
-            case KEY_O:
+            case BTN_TRIGGER_HAPPY15:
                 key = 'O';
                 break;
-            case KEY_P:
+            case BTN_TRIGGER_HAPPY16:
                 key = 'P';
                 break;
-            case KEY_Q:
+            case BTN_TRIGGER_HAPPY17:
                 key = 'Q';
                 break;
-            case KEY_R:
+            case BTN_TRIGGER_HAPPY18:
                 key = 'R';
                 break;
-            case KEY_S:
+            case BTN_TRIGGER_HAPPY19:
                 key = 'S';
                 break;
-            case KEY_T:
+            case BTN_TRIGGER_HAPPY20:
                 key = 'T';
                 break;
             default: