6 #include <linux/input.h>
7 #include <linux/input-event-codes.h>
10 #include "signal_exit.h"
11 #include "json_helpers.h"
13 static void keys_cb(EV_P_ ev_io *w_, int revents)
15 ev_io_keys *w = (ev_io_keys *)w_;
17 struct input_event ev;
19 ssize_t n = read(w->w.fd, &ev, sizeof(ev));
20 if (n != sizeof(ev)) {
24 if (ev.type == 1 && ev.value == 1) {
26 case BTN_TRIGGER_HAPPY1:
29 case BTN_TRIGGER_HAPPY2:
32 case BTN_TRIGGER_HAPPY3:
35 case BTN_TRIGGER_HAPPY4:
38 case BTN_TRIGGER_HAPPY5:
41 case BTN_TRIGGER_HAPPY6:
44 case BTN_TRIGGER_HAPPY7:
47 case BTN_TRIGGER_HAPPY8:
50 case BTN_TRIGGER_HAPPY9:
53 case BTN_TRIGGER_HAPPY10:
56 case BTN_TRIGGER_HAPPY11:
59 case BTN_TRIGGER_HAPPY12:
62 case BTN_TRIGGER_HAPPY13:
65 case BTN_TRIGGER_HAPPY14:
68 case BTN_TRIGGER_HAPPY15:
71 case BTN_TRIGGER_HAPPY16:
74 case BTN_TRIGGER_HAPPY17:
77 case BTN_TRIGGER_HAPPY18:
80 case BTN_TRIGGER_HAPPY19:
83 case BTN_TRIGGER_HAPPY20:
87 fprintf(stderr, "unsupported event code: %d\n", ev.code);
92 keys_json_print(fd, key);
96 int mt_keys_init(mt_keys_t *self, struct ev_loop *loop, int fd)
98 char *dev = getenv("INPUT");
101 dev = "/dev/input/by-path/platform-gpio-keys-event";
103 int ev = open(dev, O_RDONLY);
110 ev_io_keys *w = &(self->w);
112 ev_io_init(&(w->w), keys_cb, ev, EV_READ);
113 ev_io_start(loop, (ev_io *)w);
118 void mt_keys_deinit(mt_keys_t *self)
120 if (close(self->fd) == 0) {
121 fprintf(stderr, "closed %d\n", self->fd);
128 int main(int argc, char **argv)
130 struct ev_loop *loop = EV_DEFAULT;
133 set_signal_exit(loop);
135 if (mt_keys_init(&keys, loop, STDOUT_FILENO) != 0) {
141 mt_keys_deinit(&keys);
142 ev_loop_destroy(loop);