2 * Copyright © 2013 Red Hat, Inc.
4 * Permission to use, copy, modify, distribute, and sell this software and its
5 * documentation for any purpose is hereby granted without fee, provided that
6 * the above copyright notice appear in all copies and that both that copyright
7 * notice and this permission notice appear in supporting documentation, and
8 * that the name of the copyright holders not be used in advertising or
9 * publicity pertaining to distribution of the software without specific,
10 * written prior permission. The copyright holders make no representations
11 * about the suitability of this software for any purpose. It is provided "as
12 * is" without express or implied warranty.
14 * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
15 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
16 * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
17 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
18 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
19 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
30 #include <linux/uinput.h>
33 #include "libevdev-int.h"
34 #include "libevdev-util.h"
35 #include "event-names.h"
39 static int sync_mt_state(struct libevdev *dev, int create_events);
42 init_event_queue(struct libevdev *dev)
44 /* FIXME: count the number of axes, keys, etc. to get a better idea at how many events per
45 EV_SYN we could possibly get. Then multiply that by the actual buffer size we care about */
47 const int QUEUE_SIZE = 256;
49 return queue_alloc(dev, QUEUE_SIZE);
53 _libevdev_log(struct libevdev *dev, const char *format, ...)
57 va_start(args, format);
58 dev->log(format, args);
63 libevdev_noop_log_func(const char *format, va_list args)
72 dev = calloc(1, sizeof(*dev));
77 dev->current_slot = -1;
78 dev->log = libevdev_noop_log_func;
79 dev->grabbed = LIBEVDEV_UNGRAB;
80 dev->sync_state = SYNC_NONE;
86 libevdev_new_from_fd(int fd, struct libevdev **dev)
95 rc = libevdev_set_fd(d, fd);
104 libevdev_free(struct libevdev *dev)
117 libevdev_set_log_handler(struct libevdev *dev, libevdev_log_func_t logfunc)
122 dev->log = logfunc ? logfunc : libevdev_noop_log_func;
126 libevdev_change_fd(struct libevdev *dev, int fd)
135 libevdev_set_fd(struct libevdev* dev, int fd)
144 rc = ioctl(fd, EVIOCGBIT(0, sizeof(dev->bits)), dev->bits);
148 memset(buf, 0, sizeof(buf));
149 rc = ioctl(fd, EVIOCGNAME(sizeof(buf) - 1), buf);
154 dev->name = strdup(buf);
162 memset(buf, 0, sizeof(buf));
163 rc = ioctl(fd, EVIOCGPHYS(sizeof(buf) - 1), buf);
165 /* uinput has no phys */
169 dev->phys = strdup(buf);
178 memset(buf, 0, sizeof(buf));
179 rc = ioctl(fd, EVIOCGUNIQ(sizeof(buf) - 1), buf);
184 dev->uniq = strdup(buf);
191 rc = ioctl(fd, EVIOCGID, &dev->ids);
195 rc = ioctl(fd, EVIOCGVERSION, &dev->driver_version);
199 rc = ioctl(fd, EVIOCGPROP(sizeof(dev->props)), dev->props);
203 rc = ioctl(fd, EVIOCGBIT(EV_REL, sizeof(dev->rel_bits)), dev->rel_bits);
207 rc = ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(dev->abs_bits)), dev->abs_bits);
211 rc = ioctl(fd, EVIOCGBIT(EV_LED, sizeof(dev->led_bits)), dev->led_bits);
215 rc = ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(dev->key_bits)), dev->key_bits);
219 rc = ioctl(fd, EVIOCGBIT(EV_SW, sizeof(dev->sw_bits)), dev->sw_bits);
223 rc = ioctl(fd, EVIOCGBIT(EV_MSC, sizeof(dev->msc_bits)), dev->msc_bits);
227 rc = ioctl(fd, EVIOCGBIT(EV_FF, sizeof(dev->ff_bits)), dev->ff_bits);
231 rc = ioctl(fd, EVIOCGBIT(EV_SND, sizeof(dev->snd_bits)), dev->snd_bits);
235 rc = ioctl(fd, EVIOCGKEY(sizeof(dev->key_values)), dev->key_values);
239 /* rep is a special case, always set it to 1 for both values if EV_REP is set */
240 if (bit_is_set(dev->bits, EV_REP)) {
241 for (i = 0; i < REP_CNT; i++)
242 set_bit(dev->rep_bits, i);
243 rc = ioctl(fd, EVIOCGREP, dev->rep_values);
248 for (i = ABS_X; i <= ABS_MAX; i++) {
249 if (bit_is_set(dev->abs_bits, i)) {
250 struct input_absinfo abs_info;
251 rc = ioctl(fd, EVIOCGABS(i), &abs_info);
255 dev->abs_info[i] = abs_info;
256 if (i == ABS_MT_SLOT) {
257 dev->num_slots = abs_info.maximum + 1;
258 dev->current_slot = abs_info.value;
265 sync_mt_state(dev, 0);
267 rc = init_event_queue(dev);
273 /* not copying key state because we won't know when we'll start to
274 * use this fd and key's are likely to change state by then.
275 * Same with the valuators, really, but they may not change.
279 return rc ? -errno : 0;
283 libevdev_get_fd(const struct libevdev* dev)
289 init_event(struct libevdev *dev, struct input_event *ev, int type, int code, int value)
291 ev->time = dev->last_event_time;
298 sync_key_state(struct libevdev *dev)
302 unsigned long keystate[NLONGS(KEY_MAX)];
304 rc = ioctl(dev->fd, EVIOCGKEY(sizeof(keystate)), keystate);
308 for (i = 0; i < KEY_MAX; i++) {
310 old = bit_is_set(dev->key_values, i);
311 new = bit_is_set(keystate, i);
313 struct input_event *ev = queue_push(dev);
314 init_event(dev, ev, EV_KEY, i, new ? 1 : 0);
316 set_bit_state(dev->key_values, i, new);
321 return rc ? -errno : 0;
325 sync_abs_state(struct libevdev *dev)
330 for (i = ABS_X; i <= ABS_MAX; i++) {
331 struct input_absinfo abs_info;
333 if (i >= ABS_MT_MIN && i <= ABS_MT_MAX)
336 if (!bit_is_set(dev->abs_bits, i))
339 rc = ioctl(dev->fd, EVIOCGABS(i), &abs_info);
343 if (dev->abs_info[i].value != abs_info.value) {
344 struct input_event *ev = queue_push(dev);
346 init_event(dev, ev, EV_ABS, i, abs_info.value);
347 dev->abs_info[i].value = abs_info.value;
353 return rc ? -errno : 0;
357 sync_mt_state(struct libevdev *dev, int create_events)
364 } mt_state[ABS_MT_CNT];
366 for (i = ABS_MT_MIN; i < ABS_MT_MAX; i++) {
368 if (i == ABS_MT_SLOT)
371 if (!libevdev_has_event_code(dev, EV_ABS, i))
374 idx = i - ABS_MT_MIN;
375 mt_state[idx].code = i;
376 rc = ioctl(dev->fd, EVIOCGMTSLOTS(sizeof(struct mt_state)), &mt_state[idx]);
381 for (i = 0; i < dev->num_slots; i++) {
383 struct input_event *ev;
386 ev = queue_push(dev);
387 init_event(dev, ev, EV_ABS, ABS_MT_SLOT, i);
390 for (j = ABS_MT_MIN; j < ABS_MT_MAX; j++) {
391 int jdx = j - ABS_MT_MIN;
393 if (j == ABS_MT_SLOT)
396 if (!libevdev_has_event_code(dev, EV_ABS, j))
399 if (dev->mt_slot_vals[i][jdx] == mt_state[jdx].val[i])
403 ev = queue_push(dev);
404 init_event(dev, ev, EV_ABS, j, mt_state[jdx].val[i]);
406 dev->mt_slot_vals[i][jdx] = mt_state[jdx].val[i];
412 return rc ? -errno : 0;
416 sync_state(struct libevdev *dev)
420 struct input_event *ev;
422 /* FIXME: if we have events in the queue after the SYN_DROPPED (which was
423 queue[0]) we need to shift this backwards. Except that chances are that the
424 queue may be either full or too full to prepend all the events needed for
427 so we search for the last sync event in the queue and drop everything before
428 including that event and rely on the kernel to tell us the right value for that
429 bitfield during the sync process.
432 for (i = queue_num_elements(dev) - 1; i >= 0; i--) {
433 struct input_event e;
434 queue_peek(dev, i, &e);
435 if (e.type == EV_SYN)
440 queue_shift_multiple(dev, i + 1, NULL);
442 if (libevdev_has_event_type(dev, EV_KEY))
443 rc = sync_key_state(dev);
444 if (rc == 0 && libevdev_has_event_type(dev, EV_ABS))
445 rc = sync_abs_state(dev);
446 if (rc == 0 && libevdev_has_event_code(dev, EV_ABS, ABS_MT_SLOT))
447 rc = sync_mt_state(dev, 1);
449 dev->queue_nsync = queue_num_elements(dev);
451 if (dev->queue_nsync > 0) {
452 ev = queue_push(dev);
453 init_event(dev, ev, EV_SYN, SYN_REPORT, 0);
461 update_key_state(struct libevdev *dev, const struct input_event *e)
463 if (!libevdev_has_event_type(dev, EV_KEY))
466 if (e->code > KEY_MAX)
469 set_bit_state(dev->key_values, e->code, e->value != 0);
475 update_mt_state(struct libevdev *dev, const struct input_event *e)
477 if (e->code == ABS_MT_SLOT) {
478 dev->current_slot = e->value;
480 } else if (dev->current_slot == -1)
483 dev->mt_slot_vals[dev->current_slot][e->code - ABS_MT_MIN] = e->value;
489 update_abs_state(struct libevdev *dev, const struct input_event *e)
491 if (!libevdev_has_event_type(dev, EV_ABS))
494 if (e->code > ABS_MAX)
497 if (e->code >= ABS_MT_MIN && e->code <= ABS_MT_MAX)
498 return update_mt_state(dev, e);
500 dev->abs_info[e->code].value = e->value;
506 update_state(struct libevdev *dev, const struct input_event *e)
515 rc = update_key_state(dev, e);
518 rc = update_abs_state(dev, e);
522 dev->last_event_time = e->time;
528 read_more_events(struct libevdev *dev)
532 struct input_event *next;
534 free_elem = queue_num_free_elements(dev);
538 next = queue_next_element(dev);
539 len = read(dev->fd, next, free_elem * sizeof(struct input_event));
542 } else if (len > 0 && len % sizeof(struct input_event) != 0)
545 int nev = len/sizeof(struct input_event);
546 queue_set_num_elements(dev, queue_num_elements(dev) + nev);
552 int libevdev_next_event(struct libevdev *dev, unsigned int flags, struct input_event *ev)
559 if (!(flags & (LIBEVDEV_READ_NORMAL|LIBEVDEV_READ_SYNC|LIBEVDEV_FORCE_SYNC)))
562 if (flags & LIBEVDEV_READ_SYNC) {
563 if (dev->sync_state == SYNC_NEEDED) {
564 rc = sync_state(dev);
567 dev->sync_state = SYNC_IN_PROGRESS;
570 if (dev->queue_nsync == 0) {
571 dev->sync_state = SYNC_NONE;
575 } else if (dev->sync_state != SYNC_NONE) {
576 struct input_event e;
578 /* call update_state for all events here, otherwise the library has the wrong view
580 while (queue_shift(dev, &e) == 0) {
582 update_state(dev, &e);
585 dev->sync_state = SYNC_NONE;
588 /* FIXME: if the first event after SYNC_IN_PROGRESS is a SYN_DROPPED, log this */
590 /* Always read in some more events. Best case this smoothes over a potential SYN_DROPPED,
591 worst case we don't read fast enough and end up with SYN_DROPPED anyway.
593 Except if the fd is in blocking mode and we still have events from the last read, don't
597 if (!(flags & LIBEVDEV_READ_BLOCKING) ||
598 queue_num_elements(dev) == 0) {
599 rc = read_more_events(dev);
600 if (rc < 0 && rc != -EAGAIN)
604 if (flags & LIBEVDEV_FORCE_SYNC) {
605 dev->sync_state = SYNC_NEEDED;
611 if (queue_shift(dev, ev) != 0)
614 update_state(dev, ev);
616 /* if we disabled a code, get the next event instead */
617 } while(!libevdev_has_event_code(dev, ev->type, ev->code));
620 if (ev->type == EV_SYN && ev->code == SYN_DROPPED) {
621 dev->sync_state = SYNC_NEEDED;
625 if (flags & LIBEVDEV_READ_SYNC && dev->queue_nsync > 0) {
628 if (dev->queue_nsync == 0)
629 dev->sync_state = SYNC_NONE;
636 int libevdev_has_event_pending(struct libevdev *dev)
638 struct pollfd fds = { dev->fd, POLLIN, 0 };
644 if (queue_num_elements(dev) != 0)
647 rc = poll(&fds, 1, 0);
648 return (rc >= 0) ? rc : -errno;
652 libevdev_get_name(const struct libevdev *dev)
654 return dev->name ? dev->name : "";
658 libevdev_get_phys(const struct libevdev *dev)
664 libevdev_get_uniq(const struct libevdev *dev)
669 #define STRING_SETTER(field) \
670 void libevdev_set_##field(struct libevdev *dev, const char *field) \
675 dev->field = strdup(field); \
683 #define PRODUCT_GETTER(name, field) \
684 int libevdev_get_##name(const struct libevdev *dev) \
686 return dev->ids.field; \
689 PRODUCT_GETTER(product_id, product); /* DEPRECATED */
690 PRODUCT_GETTER(vendor_id, vendor); /* DEPRECATED */
691 PRODUCT_GETTER(bustype, bustype); /* DEPRECATED */
692 PRODUCT_GETTER(version, version); /* DEPRECATED */
694 PRODUCT_GETTER(id_product, product);
695 PRODUCT_GETTER(id_vendor, vendor);
696 PRODUCT_GETTER(id_bustype, bustype);
697 PRODUCT_GETTER(id_version, version);
699 #define PRODUCT_SETTER(field) \
700 void libevdev_set_id_##field(struct libevdev *dev, int field) \
702 dev->ids.field = field;\
705 PRODUCT_SETTER(product);
706 PRODUCT_SETTER(vendor);
707 PRODUCT_SETTER(bustype);
708 PRODUCT_SETTER(version);
710 int libevdev_get_driver_version(const struct libevdev *dev)
712 return dev->driver_version;
716 libevdev_has_property(const struct libevdev *dev, unsigned int prop)
718 return (prop <= INPUT_PROP_MAX) && bit_is_set(dev->props, prop);
722 libevdev_enable_property(struct libevdev *dev, unsigned int prop)
724 if (prop > INPUT_PROP_MAX)
727 set_bit(dev->props, prop);
732 libevdev_has_event_type(const struct libevdev *dev, unsigned int type)
734 return (type <= EV_MAX) && bit_is_set(dev->bits, type);
738 libevdev_has_event_code(const struct libevdev *dev, unsigned int type, unsigned int code)
740 const unsigned long *mask;
743 if (!libevdev_has_event_type(dev, type))
749 max = type_to_mask_const(dev, type, &mask);
751 if (max == -1 || code > max)
754 return bit_is_set(mask, code);
758 libevdev_get_event_value(const struct libevdev *dev, unsigned int type, unsigned int code)
762 if (!libevdev_has_event_type(dev, type) || !libevdev_has_event_code(dev, type, code))
766 case EV_ABS: value = dev->abs_info[code].value; break;
767 case EV_KEY: value = bit_is_set(dev->key_values, code); break;
777 libevdev_fetch_event_value(const struct libevdev *dev, unsigned int type, unsigned int code, int *value)
779 if (libevdev_has_event_type(dev, type) &&
780 libevdev_has_event_code(dev, type, code)) {
781 *value = libevdev_get_event_value(dev, type, code);
788 libevdev_get_slot_value(const struct libevdev *dev, unsigned int slot, unsigned int code)
790 if (!libevdev_has_event_type(dev, EV_ABS) || !libevdev_has_event_code(dev, EV_ABS, code))
793 if (slot >= dev->num_slots || slot >= MAX_SLOTS)
796 if (code > ABS_MT_MAX || code < ABS_MT_MIN)
799 return dev->mt_slot_vals[slot][code - ABS_MT_MIN];
803 libevdev_fetch_slot_value(const struct libevdev *dev, unsigned int slot, unsigned int code, int *value)
805 if (libevdev_has_event_type(dev, EV_ABS) &&
806 libevdev_has_event_code(dev, EV_ABS, code) &&
807 slot < dev->num_slots && slot < MAX_SLOTS) {
808 *value = libevdev_get_slot_value(dev, slot, code);
815 libevdev_get_num_slots(const struct libevdev *dev)
817 return dev->num_slots;
821 libevdev_get_current_slot(const struct libevdev *dev)
823 return dev->current_slot;
826 const struct input_absinfo*
827 libevdev_get_abs_info(const struct libevdev *dev, unsigned int code)
829 if (!libevdev_has_event_type(dev, EV_ABS) ||
830 !libevdev_has_event_code(dev, EV_ABS, code))
833 return &dev->abs_info[code];
836 #define ABS_GETTER(name, field) \
837 int libevdev_get_abs_##name(const struct libevdev *dev, unsigned int code) \
839 const struct input_absinfo *absinfo = libevdev_get_abs_info(dev, code); \
840 return absinfo ? absinfo->field : 0; \
843 ABS_GETTER(max, maximum); /* DEPRECATED */
844 ABS_GETTER(min, minimum); /* DEPRECATED */
845 ABS_GETTER(maximum, maximum);
846 ABS_GETTER(minimum, minimum);
847 ABS_GETTER(fuzz, fuzz)
848 ABS_GETTER(flat, flat)
849 ABS_GETTER(resolution, resolution)
851 #define ABS_SETTER(field) \
852 void libevdev_set_abs_##field(struct libevdev *dev, unsigned int code, int val) \
854 if (!libevdev_has_event_code(dev, EV_ABS, code)) \
856 dev->abs_info[code].field = val; \
863 ABS_SETTER(resolution)
865 void libevdev_set_abs_info(struct libevdev *dev, unsigned int code, const struct input_absinfo *abs)
867 if (!libevdev_has_event_code(dev, EV_ABS, code))
870 dev->abs_info[code] = *abs;
874 libevdev_enable_event_type(struct libevdev *dev, unsigned int type)
879 if (libevdev_has_event_type(dev, type))
882 set_bit(dev->bits, type);
884 if (type == EV_REP) {
885 int delay = 0, period = 0;
886 libevdev_enable_event_code(dev, EV_REP, REP_DELAY, &delay);
887 libevdev_enable_event_code(dev, EV_REP, REP_PERIOD, &period);
893 libevdev_disable_event_type(struct libevdev *dev, unsigned int type)
895 if (type > EV_MAX || type == EV_SYN)
898 clear_bit(dev->bits, type);
904 libevdev_enable_event_code(struct libevdev *dev, unsigned int type,
905 unsigned int code, const void *data)
910 if (libevdev_enable_event_type(dev, type))
927 max = type_to_mask(dev, type, &mask);
934 if (type == EV_ABS) {
935 const struct input_absinfo *abs = data;
936 dev->abs_info[code] = *abs;
937 } else if (type == EV_REP) {
938 const int *value = data;
939 dev->rep_values[code] = *value;
946 libevdev_disable_event_code(struct libevdev *dev, unsigned int type, unsigned int code)
954 max = type_to_mask(dev, type, &mask);
959 clear_bit(mask, code);
965 libevdev_kernel_set_abs_value(struct libevdev *dev, unsigned int code, const struct input_absinfo *abs)
972 rc = ioctl(dev->fd, EVIOCSABS(code), abs);
976 rc = libevdev_enable_event_code(dev, EV_ABS, code, abs);
982 libevdev_grab(struct libevdev *dev, int grab)
986 if (grab != LIBEVDEV_GRAB && grab != LIBEVDEV_UNGRAB)
989 if (grab == dev->grabbed)
992 if (grab == LIBEVDEV_GRAB)
993 rc = ioctl(dev->fd, EVIOCGRAB, (void *)1);
994 else if (grab == LIBEVDEV_UNGRAB)
995 rc = ioctl(dev->fd, EVIOCGRAB, (void *)0);
1000 return rc < 0 ? -errno : 0;
1004 libevdev_is_event_type(const struct input_event *ev, unsigned int type)
1006 return type < EV_MAX && ev->type == type;
1010 libevdev_is_event_code(const struct input_event *ev, unsigned int type, unsigned int code)
1012 return type < EV_MAX &&
1014 (type == EV_SYN || code <= libevdev_get_event_type_max(type)) &&
1019 libevdev_get_event_type_name(unsigned int type)
1024 return ev_map[type];
1028 libevdev_get_event_code_name(unsigned int type, unsigned int code)
1033 if (code > ev_max[type])
1036 return event_type_map[type][code];
1041 libevdev_get_input_prop_name(unsigned int prop)
1043 return libevdev_get_property_name(prop);
1047 libevdev_get_property_name(unsigned int prop)
1049 if (prop > INPUT_PROP_MAX)
1052 return input_prop_map[prop];
1056 libevdev_get_event_type_max(unsigned int type)
1061 return ev_max[type];
1065 libevdev_get_repeat(struct libevdev *dev, int *delay, int *period)
1067 if (!libevdev_has_event_type(dev, EV_REP))
1071 *delay = dev->rep_values[REP_DELAY];
1073 *period = dev->rep_values[REP_PERIOD];