8 #include <linux/input.h>
11 #include "../common/input.h"
14 #define BIT(x) (keybits[(x)/sizeof(keybits[0])/8] & \
15 (1 << ((x) & (sizeof(keybits[0])*8-1))))
17 int in_evdev_probe(void)
23 int u, ret, fd, keybits[KEY_MAX/sizeof(int)];
24 int support = 0, count = 0;
27 snprintf(name, sizeof(name), "/dev/input/event%d", i);
28 fd = open(name, O_RDONLY|O_NONBLOCK);
32 /* check supported events */
33 ret = ioctl(fd, EVIOCGBIT(0, sizeof(support)), &support);
35 printf("in_evdev: ioctl failed on %s\n", name);
39 if (!(support & (1 << EV_KEY)))
42 ret = ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(keybits)), keybits);
44 printf("in_evdev: ioctl failed on %s\n", name);
48 /* check for interesting keys */
49 for (u = 0; u < KEY_MAX; u++) {
50 if (BIT(u) && u != KEY_POWER && u != KEY_SLEEP)
57 strcpy(name, "evdev:");
58 ioctl(fd, EVIOCGNAME(sizeof(name)-6), name+6);
59 printf("in_evdev: found \"%s\" with %d events (type %08x)\n",
60 name+6, count, support);
61 in_register(name, IN_DRVID_EVDEV, (void *)fd);
71 void in_evdev_free(void *drv_data)
76 int in_evdev_bind_count(void)
81 int in_evdev_update(void *drv_data, int *binds)
83 struct input_event ev[16];
84 int keybits[KEY_MAX/sizeof(int)];
85 int fd = (int)drv_data;
86 int result = 0, changed = 0;
90 rd = read(fd, ev, sizeof(ev));
91 if (rd < (int)sizeof(ev[0])) {
93 perror("in_evdev: read failed");
104 ret = ioctl(fd, EVIOCGKEY(sizeof(keybits)), keybits);
106 perror("in_evdev: ioctl failed");
111 for (u = 0; u < KEY_MAX; u++) {