1 // vim:shiftwidth=2:expandtab
11 #include <linux/input.h>
15 static int ifds[2] = { -1, -1 };
19 static void init(void)
24 for (ifd = -1, i = 0; ifds[0] == -1 || ifds[1] == -1; i++) {
25 snprintf(buff, sizeof(buff), "/dev/input/event%i", i);
26 ifd = open(buff, O_RDONLY | O_NONBLOCK);
30 ret = ioctl(ifd, EVIOCGNAME(sizeof(buff)), buff);
34 if (strcasestr(buff, "gpio") != NULL) {
38 if (strcasestr(buff, "keypad") != NULL) {
46 fprintf(stderr, PFX "missing buttons\n");
48 fprintf(stderr, PFX "missing keypad\n");
56 { KEY_LEFT, GP2X_LEFT },
57 { KEY_RIGHT, GP2X_RIGHT },
59 { KEY_DOWN, GP2X_DOWN },
60 { KEY_PAGEUP, GP2X_Y },
63 { BTN_BASE2, GP2X_B },
64 { KEY_PAGEDOWN, GP2X_X },
65 { BTN_BASE3, GP2X_X },
67 { BTN_BASE4, GP2X_A },
68 { KEY_RIGHTSHIFT, GP2X_L },
70 { KEY_RIGHTCTRL, GP2X_R },
72 { KEY_LEFTALT, GP2X_START },
73 { BTN_START, GP2X_START },
74 { KEY_LEFTCTRL, GP2X_SELECT },
75 { BTN_SELECT, GP2X_SELECT },
76 { KEY_COMMA, GP2X_VOL_DOWN },
77 { KEY_DOT, GP2X_VOL_UP },
81 int host_read_btns(void)
83 struct input_event ev;
91 ret = read(ifds[0], &ev, sizeof(ev));
92 if (ret < (int) sizeof(ev)) {
93 if (errno != EAGAIN && errno != EWOULDBLOCK)
94 perror(PFX "read error");
96 ret = read(ifds[1], &ev, sizeof(ev));
97 if (ret < (int) sizeof(ev))
98 if (errno != EAGAIN && errno != EWOULDBLOCK)
99 perror(PFX "read error");
102 if (ret < (int) sizeof(ev))
105 if (ev.type != EV_KEY)
108 for (i = 0; i < sizeof(key_map) / sizeof(key_map[0]); i++) {
109 if (key_map[i].key != ev.code)
112 keystate |= (1 << key_map[i].btn);
114 keystate &= ~(1 << key_map[i].btn);