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
--- /dev/null
+#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
}
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: