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
31 #include "libevdev-int.h"
36 bit_is_set(const unsigned long *array, int bit)
38 return !!(array[bit / LONG_BITS] & (1LL << (bit % LONG_BITS)));
42 set_bit(unsigned long *array, int bit)
44 array[bit / LONG_BITS] |= (1LL << (bit % LONG_BITS));
48 clear_bit(unsigned long *array, int bit)
50 array[bit / LONG_BITS] &= ~(1LL << (bit % LONG_BITS));
54 set_bit_state(unsigned long *array, int bit, int state)
59 clear_bit(array, bit);
63 type_to_mask_const(const struct libevdev *dev, unsigned int type, const unsigned long **mask)
69 *mask = dev->abs_bits;
73 *mask = dev->rel_bits;
77 *mask = dev->key_bits;
81 *mask = dev->led_bits;
92 type_to_mask(struct libevdev *dev, unsigned int type, unsigned long **mask)
98 *mask = dev->abs_bits;
102 *mask = dev->rel_bits;
106 *mask = dev->key_bits;
110 *mask = dev->led_bits;
121 init_event_queue(struct libevdev *dev)
123 /* FIXME: count the number of axes, keys, etc. to get a better idea at how many events per
124 EV_SYN we could possibly get. Then multiply that by the actual buffer size we care about */
126 const int QUEUE_SIZE = 256;
128 return queue_alloc(dev, QUEUE_SIZE);
132 _libevdev_log(struct libevdev *dev, const char *format, ...)
136 va_start(args, format);
137 dev->log(format, args);
142 libevdev_noop_log_func(const char *format, va_list args)
149 struct libevdev *dev;
151 dev = calloc(1, sizeof(*dev));
156 dev->current_slot = -1;
157 dev->log = libevdev_noop_log_func;
163 libevdev_new_from_fd(int fd, struct libevdev **dev)
172 rc = libevdev_set_fd(d, fd);
181 libevdev_free(struct libevdev *dev)
191 libevdev_set_log_handler(struct libevdev *dev, libevdev_log_func_t logfunc)
193 dev->log = logfunc ? logfunc : libevdev_noop_log_func;
197 libevdev_change_fd(struct libevdev *dev, int fd)
206 libevdev_set_fd(struct libevdev* dev, int fd)
215 rc = ioctl(fd, EVIOCGBIT(0, sizeof(dev->bits)), dev->bits);
219 memset(buf, 0, sizeof(buf));
220 rc = ioctl(fd, EVIOCGNAME(sizeof(buf) - 1), buf);
224 dev->name = calloc(strlen(buf) + 1, sizeof(char));
229 strcpy(dev->name, buf);
231 memset(buf, 0, sizeof(buf));
232 rc = ioctl(fd, EVIOCGPHYS(sizeof(buf) - 1), buf);
234 /* uinput has no phys */
238 dev->phys = calloc(strlen(buf) + 1, sizeof(char));
243 strcpy(dev->phys, buf);
246 memset(buf, 0, sizeof(buf));
247 rc = ioctl(fd, EVIOCGUNIQ(sizeof(buf) - 1), buf);
252 dev->uniq = calloc(strlen(buf) + 1, sizeof(char));
257 strcpy(dev->uniq, buf);
260 rc = ioctl(fd, EVIOCGID, &dev->ids);
264 rc = ioctl(fd, EVIOCGVERSION, &dev->driver_version);
268 rc = ioctl(fd, EVIOCGPROP(sizeof(dev->props)), dev->props);
272 rc = ioctl(fd, EVIOCGBIT(EV_REL, sizeof(dev->rel_bits)), dev->rel_bits);
276 rc = ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(dev->abs_bits)), dev->abs_bits);
280 rc = ioctl(fd, EVIOCGBIT(EV_LED, sizeof(dev->led_bits)), dev->led_bits);
284 rc = ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(dev->key_bits)), dev->key_bits);
288 for (i = ABS_X; i <= ABS_MAX; i++) {
289 if (bit_is_set(dev->abs_bits, i)) {
290 struct input_absinfo abs_info;
291 rc = ioctl(fd, EVIOCGABS(i), &abs_info);
295 dev->abs_info[i] = abs_info;
296 if (i == ABS_MT_SLOT) {
297 dev->num_slots = abs_info.maximum + 1; /* FIXME: non-zero min? */
298 dev->current_slot = abs_info.value;
304 rc = init_event_queue(dev);
308 /* not copying key state because we won't know when we'll start to
309 * use this fd and key's are likely to change state by then.
310 * Same with the valuators, really, but they may not change.
316 return rc ? -errno : 0;
320 libevdev_get_fd(const struct libevdev* dev)
326 init_event(struct libevdev *dev, struct input_event *ev, int type, int code, int value)
328 ev->time = dev->last_event_time;
335 sync_key_state(struct libevdev *dev)
339 unsigned long keystate[NLONGS(KEY_MAX)];
341 rc = ioctl(dev->fd, EVIOCGKEY(sizeof(keystate)), keystate);
345 for (i = 0; i < KEY_MAX; i++) {
347 old = bit_is_set(dev->key_values, i);
348 new = bit_is_set(keystate, i);
350 struct input_event *ev = queue_push(dev);
351 init_event(dev, ev, EV_KEY, i, new ? 1 : 0);
353 set_bit_state(dev->key_values, i, new);
358 return rc ? -errno : 0;
362 sync_abs_state(struct libevdev *dev)
367 for (i = ABS_X; i <= ABS_MAX; i++) {
368 struct input_absinfo abs_info;
370 if (i >= ABS_MT_MIN && i <= ABS_MT_MAX)
373 if (!bit_is_set(dev->abs_bits, i))
376 rc = ioctl(dev->fd, EVIOCGABS(i), &abs_info);
380 if (dev->abs_info[i].value != abs_info.value) {
381 struct input_event *ev = queue_push(dev);
383 init_event(dev, ev, EV_ABS, i, abs_info.value);
384 dev->abs_info[i].value = abs_info.value;
390 return rc ? -errno : 0;
394 sync_mt_state(struct libevdev *dev)
401 } mt_state[ABS_MT_CNT];
403 for (i = ABS_MT_MIN; i < ABS_MT_MAX; i++) {
405 if (i == ABS_MT_SLOT)
408 idx = i - ABS_MT_MIN;
409 mt_state[idx].code = i;
410 rc = ioctl(dev->fd, EVIOCGMTSLOTS(sizeof(struct mt_state)), &mt_state[idx]);
415 for (i = 0; i < dev->num_slots; i++) {
417 struct input_event *ev;
419 ev = queue_push(dev);
420 init_event(dev, ev, EV_ABS, ABS_MT_SLOT, i);
421 for (j = ABS_MT_MIN; j < ABS_MT_MAX; j++) {
422 int jdx = j - ABS_MT_MIN;
424 if (j == ABS_MT_SLOT)
427 if (dev->mt_slot_vals[i][jdx] == mt_state[jdx].val[i])
430 ev = queue_push(dev);
431 init_event(dev, ev, EV_ABS, j, mt_state[jdx].val[i]);
432 dev->mt_slot_vals[i][jdx] = mt_state[jdx].val[i];
438 return rc ? -errno : 0;
442 sync_state(struct libevdev *dev)
446 struct input_event *ev;
448 /* FIXME: if we have events in the queue after the SYN_DROPPED (which was
449 queue[0]) we need to shift this backwards. Except that chances are that the
450 queue may be either full or too full to prepend all the events needed for
453 so we search for the last sync event in the queue and drop everything before
454 including that event and rely on the kernel to tell us the right value for that
455 bitfield during the sync process.
458 for (i = queue_num_elements(dev) - 1; i >= 0; i--) {
459 struct input_event e;
460 queue_peek(dev, i, &e);
461 if (e.type == EV_SYN)
466 queue_shift_multiple(dev, i + 1, NULL);
468 if (libevdev_has_event_type(dev, EV_KEY))
469 rc = sync_key_state(dev);
470 if (rc == 0 && libevdev_has_event_type(dev, EV_ABS))
471 rc = sync_abs_state(dev);
472 if (rc == 0 && libevdev_has_event_code(dev, EV_ABS, ABS_MT_SLOT))
473 rc = sync_mt_state(dev);
475 ev = queue_push(dev);
476 init_event(dev, ev, EV_SYN, SYN_REPORT, 0);
478 dev->queue_nsync = queue_num_elements(dev);
485 update_key_state(struct libevdev *dev, const struct input_event *e)
487 if (!libevdev_has_event_type(dev, EV_KEY))
490 if (e->code > KEY_MAX)
494 clear_bit(dev->key_values, e->code);
496 set_bit(dev->key_values, e->code);
502 update_mt_state(struct libevdev *dev, const struct input_event *e)
504 if (e->code == ABS_MT_SLOT) {
505 dev->current_slot = e->value;
507 } else if (dev->current_slot == -1)
510 dev->mt_slot_vals[dev->current_slot][e->code - ABS_MT_MIN] = e->value;
516 update_abs_state(struct libevdev *dev, const struct input_event *e)
518 if (!libevdev_has_event_type(dev, EV_ABS))
521 if (e->code > ABS_MAX)
524 if (e->code >= ABS_MT_MIN && e->code <= ABS_MT_MAX)
525 return update_mt_state(dev, e);
527 dev->abs_info[e->code].value = e->value;
533 update_state(struct libevdev *dev, const struct input_event *e)
542 rc = update_key_state(dev, e);
545 rc = update_abs_state(dev, e);
549 dev->last_event_time = e->time;
555 read_more_events(struct libevdev *dev)
559 struct input_event *next;
561 free_elem = queue_num_free_elements(dev);
565 next = queue_next_element(dev);
566 len = read(dev->fd, next, free_elem * sizeof(struct input_event));
569 } else if (len > 0 && len % sizeof(struct input_event) != 0)
572 int nev = len/sizeof(struct input_event);
573 queue_set_num_elements(dev, queue_num_elements(dev) + nev);
579 int libevdev_next_event(struct libevdev *dev, unsigned int flags, struct input_event *ev)
586 if (flags & LIBEVDEV_READ_SYNC) {
587 if (!dev->need_sync && dev->queue_nsync == 0)
589 else if (dev->need_sync) {
590 rc = sync_state(dev);
594 } else if (dev->need_sync) {
595 /* FIXME: still need to call update_state for all events
596 * here, otherwise the library has the wrong view of the
598 queue_shift_multiple(dev, dev->queue_nsync, NULL);
601 /* FIXME: check for O_NONBLOCK and if not set, skip if we have an
602 * event in the queue from the previous read.
605 /* Always read in some more events. Best case this smoothes over a potential SYN_DROPPED,
606 worst case we don't read fast enough and end up with SYN_DROPPED anyway */
607 rc = read_more_events(dev);
608 if (rc < 0 && rc != -EAGAIN)
611 if (queue_shift(dev, ev) != 0)
614 update_state(dev, ev);
617 if (ev->type == EV_SYN && ev->code == SYN_DROPPED) {
622 if (flags & LIBEVDEV_READ_SYNC && dev->queue_nsync > 0) {
632 libevdev_get_name(const struct libevdev *dev)
638 libevdev_get_phys(const struct libevdev *dev)
644 libevdev_get_uniq(const struct libevdev *dev)
649 int libevdev_get_product_id(const struct libevdev *dev)
651 return dev->ids.product;
654 int libevdev_get_vendor_id(const struct libevdev *dev)
656 return dev->ids.vendor;
659 int libevdev_get_bustype(const struct libevdev *dev)
661 return dev->ids.bustype;
664 int libevdev_get_version(const struct libevdev *dev)
666 return dev->ids.version;
669 int libevdev_get_driver_version(const struct libevdev *dev)
671 return dev->driver_version;
675 libevdev_has_property(const struct libevdev *dev, unsigned int prop)
677 return (prop <= INPUT_PROP_MAX) && bit_is_set(dev->props, prop);
681 libevdev_has_event_type(const struct libevdev *dev, unsigned int type)
683 return (type <= EV_MAX) && bit_is_set(dev->bits, type);
687 libevdev_has_event_code(const struct libevdev *dev, unsigned int type, unsigned int code)
689 const unsigned long *mask;
692 if (!libevdev_has_event_type(dev, type))
698 max = type_to_mask_const(dev, type, &mask);
703 return bit_is_set(mask, code);
707 libevdev_get_event_value(const struct libevdev *dev, unsigned int type, unsigned int code)
711 if (!libevdev_has_event_type(dev, type) || !libevdev_has_event_code(dev, type, code))
715 case EV_ABS: value = dev->abs_info[code].value; break;
716 case EV_KEY: value = bit_is_set(dev->key_values, code); break;
726 libevdev_fetch_event_value(const struct libevdev *dev, unsigned int type, unsigned int code, int *value)
728 if (libevdev_has_event_type(dev, type) &&
729 libevdev_has_event_code(dev, type, code)) {
730 *value = libevdev_get_event_value(dev, type, code);
737 libevdev_get_slot_value(const struct libevdev *dev, unsigned int slot, unsigned int code)
739 if (!libevdev_has_event_type(dev, EV_ABS) || !libevdev_has_event_code(dev, EV_ABS, code))
742 if (slot >= dev->num_slots || slot >= MAX_SLOTS)
745 if (code > ABS_MT_MAX || code < ABS_MT_MIN)
748 return dev->mt_slot_vals[slot][code - ABS_MT_MIN];
752 libevdev_fetch_slot_value(const struct libevdev *dev, unsigned int slot, unsigned int code, int *value)
754 if (libevdev_has_event_type(dev, EV_ABS) &&
755 libevdev_has_event_code(dev, EV_ABS, code) &&
756 slot < dev->num_slots && slot < MAX_SLOTS) {
757 *value = libevdev_get_slot_value(dev, slot, code);
764 libevdev_get_num_slots(const struct libevdev *dev)
766 return dev->num_slots;
770 libevdev_get_current_slot(const struct libevdev *dev)
772 return dev->current_slot;
775 const struct input_absinfo*
776 libevdev_get_abs_info(const struct libevdev *dev, unsigned int code)
778 if (!libevdev_has_event_type(dev, EV_ABS) ||
779 !libevdev_has_event_code(dev, EV_ABS, code))
782 return &dev->abs_info[code];
786 libevdev_get_abs_min(const struct libevdev *dev, unsigned int code)
788 const struct input_absinfo *absinfo = libevdev_get_abs_info(dev, code);
790 return absinfo ? absinfo->minimum : 0;
794 libevdev_get_abs_max(const struct libevdev *dev, unsigned int code)
796 const struct input_absinfo *absinfo = libevdev_get_abs_info(dev, code);
798 return absinfo ? absinfo->maximum : 0;
802 libevdev_get_abs_fuzz(const struct libevdev *dev, unsigned int code)
804 const struct input_absinfo *absinfo = libevdev_get_abs_info(dev, code);
806 return absinfo ? absinfo->fuzz : 0;
810 libevdev_get_abs_flat(const struct libevdev *dev, unsigned int code)
812 const struct input_absinfo *absinfo = libevdev_get_abs_info(dev, code);
814 return absinfo ? absinfo->flat : 0;
818 libevdev_get_abs_resolution(const struct libevdev *dev, unsigned int code)
820 const struct input_absinfo *absinfo = libevdev_get_abs_info(dev, code);
822 return absinfo ? absinfo->resolution : 0;
826 libevdev_enable_event_type(struct libevdev *dev, unsigned int type)
831 set_bit(dev->bits, type);
833 /* FIXME: pass through to kernel */
839 libevdev_disable_event_type(struct libevdev *dev, unsigned int type)
844 clear_bit(dev->bits, type);
846 /* FIXME: pass through to kernel */
852 libevdev_enable_event_code(struct libevdev *dev, unsigned int type,
853 unsigned int code, const void *data)
858 if (libevdev_enable_event_type(dev, type))
861 max = type_to_mask(dev, type, &mask);
868 if (type == EV_ABS) {
869 const struct input_absinfo *abs = data;
870 dev->abs_info[code] = *abs;
873 /* FIXME: pass through to kernel */
879 libevdev_disable_event_code(struct libevdev *dev, unsigned int type, unsigned int code)
887 max = type_to_mask(dev, type, &mask);
892 clear_bit(mask, code);
894 /* FIXME: pass through to kernel */
900 libevdev_kernel_set_abs_value(struct libevdev *dev, unsigned int code, const struct input_absinfo *abs)
907 rc = ioctl(dev->fd, EVIOCSABS(code), *abs);
911 rc = libevdev_enable_event_code(dev, EV_ABS, code, abs);
917 libevdev_grab(struct libevdev *dev, int grab)
921 if (grab != LIBEVDEV_GRAB && grab != LIBEVDEV_UNGRAB)
924 if (grab == dev->grabbed)
927 if (grab == LIBEVDEV_GRAB)
928 rc = ioctl(dev->fd, EVIOCGRAB, (void *)1);
929 else if (grab == LIBEVDEV_UNGRAB)
930 rc = ioctl(dev->fd, EVIOCGRAB, (void *)0);
935 return rc < 0 ? -errno : 0;