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), &dev->abs_info[i]);
295 if (i == ABS_MT_SLOT) {
296 dev->num_slots = abs_info.maximum + 1; /* FIXME: non-zero min? */
297 dev->current_slot = abs_info.value;
303 rc = init_event_queue(dev);
307 /* not copying key state because we won't know when we'll start to
308 * use this fd and key's are likely to change state by then.
309 * Same with the valuators, really, but they may not change.
315 return rc ? -errno : 0;
319 libevdev_get_fd(const struct libevdev* dev)
325 init_event(struct libevdev *dev, struct input_event *ev, int type, int code, int value)
327 ev->time = dev->last_event_time;
334 sync_key_state(struct libevdev *dev)
338 unsigned long keystate[NLONGS(KEY_MAX)];
340 rc = ioctl(dev->fd, EVIOCGKEY(sizeof(keystate)), keystate);
344 for (i = 0; i < KEY_MAX; i++) {
346 old = bit_is_set(dev->key_values, i);
347 new = bit_is_set(keystate, i);
349 struct input_event *ev = queue_push(dev);
350 init_event(dev, ev, EV_KEY, i, new ? 1 : 0);
352 set_bit_state(dev->key_values, i, new);
357 return rc ? -errno : 0;
361 sync_abs_state(struct libevdev *dev)
366 for (i = ABS_X; i <= ABS_MAX; i++) {
367 struct input_absinfo abs_info;
369 if (i >= ABS_MT_MIN && i <= ABS_MT_MAX)
372 if (!bit_is_set(dev->abs_bits, i))
375 rc = ioctl(dev->fd, EVIOCGABS(i), &abs_info);
379 if (dev->abs_info[i].value != abs_info.value) {
380 struct input_event *ev = queue_push(dev);
382 init_event(dev, ev, EV_ABS, i, abs_info.value);
383 dev->abs_info[i].value = abs_info.value;
389 return rc ? -errno : 0;
393 sync_mt_state(struct libevdev *dev)
400 } mt_state[ABS_MT_CNT];
402 for (i = ABS_MT_MIN; i < ABS_MT_MAX; i++) {
404 if (i == ABS_MT_SLOT)
407 idx = i - ABS_MT_MIN;
408 mt_state[idx].code = i;
409 rc = ioctl(dev->fd, EVIOCGMTSLOTS(sizeof(struct mt_state)), &mt_state[idx]);
414 for (i = 0; i < dev->num_slots; i++) {
416 struct input_event *ev;
418 ev = queue_push(dev);
419 init_event(dev, ev, EV_ABS, ABS_MT_SLOT, i);
420 for (j = ABS_MT_MIN; j < ABS_MT_MAX; j++) {
421 int jdx = j - ABS_MT_MIN;
423 if (dev->mt_slot_vals[i][jdx] == mt_state[jdx].val[i])
426 ev = queue_push(dev);
427 init_event(dev, ev, EV_ABS, j, mt_state[jdx].val[i]);
428 dev->mt_slot_vals[i][jdx] = mt_state[jdx].val[i];
434 return rc ? -errno : 0;
438 sync_state(struct libevdev *dev)
442 struct input_event *ev;
444 /* FIXME: if we have events in the queue after the SYN_DROPPED (which was
445 queue[0]) we need to shift this backwards. Except that chances are that the
446 queue may be either full or too full to prepend all the events needed for
449 so we search for the last sync event in the queue and drop everything before
450 including that event and rely on the kernel to tell us the right value for that
451 bitfield during the sync process.
454 for (i = queue_num_elements(dev) - 1; i >= 0; i--) {
455 struct input_event e;
456 queue_peek(dev, i, &e);
457 if (e.type == EV_SYN)
462 queue_shift_multiple(dev, i + 1, NULL);
464 if (libevdev_has_event_type(dev, EV_KEY))
465 rc = sync_key_state(dev);
466 if (rc == 0 && libevdev_has_event_type(dev, EV_ABS))
467 rc = sync_abs_state(dev);
468 if (rc == 0 && libevdev_has_event_code(dev, EV_ABS, ABS_MT_SLOT))
469 rc = sync_mt_state(dev);
471 ev = queue_push(dev);
472 init_event(dev, ev, EV_SYN, SYN_REPORT, 0);
474 dev->queue_nsync = queue_num_elements(dev);
481 update_key_state(struct libevdev *dev, const struct input_event *e)
483 if (!libevdev_has_event_type(dev, EV_KEY))
486 if (e->code > KEY_MAX)
490 clear_bit(dev->key_values, e->code);
492 set_bit(dev->key_values, e->code);
498 update_mt_state(struct libevdev *dev, const struct input_event *e)
500 if (e->code == ABS_MT_SLOT) {
501 dev->current_slot = e->value;
503 } else if (dev->current_slot == -1)
506 dev->mt_slot_vals[dev->current_slot][e->code - ABS_MT_MIN] = e->value;
512 update_abs_state(struct libevdev *dev, const struct input_event *e)
514 if (!libevdev_has_event_type(dev, EV_ABS))
517 if (e->code > ABS_MAX)
520 if (e->code >= ABS_MT_MIN && e->code <= ABS_MT_MAX)
521 return update_mt_state(dev, e);
523 dev->abs_info[e->code].value = e->value;
529 update_state(struct libevdev *dev, const struct input_event *e)
538 rc = update_key_state(dev, e);
541 rc = update_abs_state(dev, e);
545 dev->last_event_time = e->time;
551 read_more_events(struct libevdev *dev)
555 struct input_event *next;
557 free_elem = queue_num_free_elements(dev);
561 next = queue_next_element(dev);
562 len = read(dev->fd, next, free_elem * sizeof(struct input_event));
565 } else if (len > 0 && len % sizeof(struct input_event) != 0)
568 int nev = len/sizeof(struct input_event);
569 queue_set_num_elements(dev, queue_num_elements(dev) + nev);
575 int libevdev_next_event(struct libevdev *dev, unsigned int flags, struct input_event *ev)
582 if (flags & LIBEVDEV_READ_SYNC) {
583 if (!dev->need_sync && dev->queue_nsync == 0)
585 else if (dev->need_sync) {
586 rc = sync_state(dev);
590 } else if (dev->need_sync) {
591 /* FIXME: still need to call update_state for all events
592 * here, otherwise the library has the wrong view of the
594 queue_shift_multiple(dev, dev->queue_nsync, NULL);
597 /* FIXME: check for O_NONBLOCK and if not set, skip if we have an
598 * event in the queue from the previous read.
601 /* Always read in some more events. Best case this smoothes over a potential SYN_DROPPED,
602 worst case we don't read fast enough and end up with SYN_DROPPED anyway */
603 rc = read_more_events(dev);
604 if (rc < 0 && rc != -EAGAIN)
607 if (queue_shift(dev, ev) != 0)
610 update_state(dev, ev);
613 if (ev->type == EV_SYN && ev->code == SYN_DROPPED) {
618 if (flags & LIBEVDEV_READ_SYNC && dev->queue_nsync > 0) {
628 libevdev_get_name(const struct libevdev *dev)
634 libevdev_get_phys(const struct libevdev *dev)
640 libevdev_get_uniq(const struct libevdev *dev)
645 int libevdev_get_product_id(const struct libevdev *dev)
647 return dev->ids.product;
650 int libevdev_get_vendor_id(const struct libevdev *dev)
652 return dev->ids.vendor;
655 int libevdev_get_bustype(const struct libevdev *dev)
657 return dev->ids.bustype;
660 int libevdev_get_version(const struct libevdev *dev)
662 return dev->ids.version;
665 int libevdev_get_driver_version(const struct libevdev *dev)
667 return dev->driver_version;
671 libevdev_has_property(const struct libevdev *dev, unsigned int prop)
673 return (prop <= INPUT_PROP_MAX) && bit_is_set(dev->props, prop);
677 libevdev_has_event_type(const struct libevdev *dev, unsigned int type)
679 return (type <= EV_MAX) && bit_is_set(dev->bits, type);
683 libevdev_has_event_code(const struct libevdev *dev, unsigned int type, unsigned int code)
685 const unsigned long *mask;
688 if (!libevdev_has_event_type(dev, type))
694 max = type_to_mask_const(dev, type, &mask);
699 return bit_is_set(mask, code);
703 libevdev_get_event_value(const struct libevdev *dev, unsigned int type, unsigned int code)
707 if (!libevdev_has_event_type(dev, type) || !libevdev_has_event_code(dev, type, code))
711 case EV_ABS: value = dev->abs_info[code].value; break;
712 case EV_KEY: value = bit_is_set(dev->key_values, code); break;
722 libevdev_fetch_event_value(const struct libevdev *dev, unsigned int type, unsigned int code, int *value)
724 if (libevdev_has_event_type(dev, type) &&
725 libevdev_has_event_code(dev, type, code)) {
726 *value = libevdev_get_event_value(dev, type, code);
733 libevdev_get_slot_value(const struct libevdev *dev, unsigned int slot, unsigned int code)
735 if (!libevdev_has_event_type(dev, EV_ABS) || !libevdev_has_event_code(dev, EV_ABS, code))
738 if (slot >= dev->num_slots || slot >= MAX_SLOTS)
741 if (code > ABS_MT_MAX || code < ABS_MT_MIN)
744 return dev->mt_slot_vals[slot][code - ABS_MT_MIN];
748 libevdev_fetch_slot_value(const struct libevdev *dev, unsigned int slot, unsigned int code, int *value)
750 if (libevdev_has_event_type(dev, EV_ABS) &&
751 libevdev_has_event_code(dev, EV_ABS, code) &&
752 slot < dev->num_slots && slot < MAX_SLOTS) {
753 *value = libevdev_get_slot_value(dev, slot, code);
760 libevdev_get_num_slots(const struct libevdev *dev)
762 return dev->num_slots;
766 libevdev_get_current_slot(const struct libevdev *dev)
768 return dev->current_slot;
771 const struct input_absinfo*
772 libevdev_get_abs_info(const struct libevdev *dev, unsigned int code)
774 if (!libevdev_has_event_type(dev, EV_ABS) ||
775 !libevdev_has_event_code(dev, EV_ABS, code))
778 return &dev->abs_info[code];
782 libevdev_get_abs_min(const struct libevdev *dev, unsigned int code)
784 const struct input_absinfo *absinfo = libevdev_get_abs_info(dev, code);
786 return absinfo ? absinfo->minimum : 0;
790 libevdev_get_abs_max(const struct libevdev *dev, unsigned int code)
792 const struct input_absinfo *absinfo = libevdev_get_abs_info(dev, code);
794 return absinfo ? absinfo->maximum : 0;
798 libevdev_get_abs_fuzz(const struct libevdev *dev, unsigned int code)
800 const struct input_absinfo *absinfo = libevdev_get_abs_info(dev, code);
802 return absinfo ? absinfo->fuzz : 0;
806 libevdev_get_abs_flat(const struct libevdev *dev, unsigned int code)
808 const struct input_absinfo *absinfo = libevdev_get_abs_info(dev, code);
810 return absinfo ? absinfo->flat : 0;
814 libevdev_get_abs_resolution(const struct libevdev *dev, unsigned int code)
816 const struct input_absinfo *absinfo = libevdev_get_abs_info(dev, code);
818 return absinfo ? absinfo->resolution : 0;
822 libevdev_enable_event_type(struct libevdev *dev, unsigned int type)
827 set_bit(dev->bits, type);
829 /* FIXME: pass through to kernel */
835 libevdev_disable_event_type(struct libevdev *dev, unsigned int type)
840 clear_bit(dev->bits, type);
842 /* FIXME: pass through to kernel */
848 libevdev_enable_event_code(struct libevdev *dev, unsigned int type,
849 unsigned int code, const void *data)
854 if (libevdev_enable_event_type(dev, type))
857 max = type_to_mask(dev, type, &mask);
864 if (type == EV_ABS) {
865 const struct input_absinfo *abs = data;
866 dev->abs_info[code] = *abs;
869 /* FIXME: pass through to kernel */
875 libevdev_disable_event_code(struct libevdev *dev, unsigned int type, unsigned int code)
883 max = type_to_mask(dev, type, &mask);
888 clear_bit(mask, code);
890 /* FIXME: pass through to kernel */
896 libevdev_kernel_set_abs_value(struct libevdev *dev, unsigned int code, const struct input_absinfo *abs)
903 rc = ioctl(dev->fd, EVIOCSABS(code), *abs);
907 rc = libevdev_enable_event_code(dev, EV_ABS, code, abs);
913 libevdev_grab(struct libevdev *dev, int grab)
917 if (grab != LIBEVDEV_GRAB && grab != LIBEVDEV_UNGRAB)
920 if (grab == dev->grabbed)
923 if (grab == LIBEVDEV_GRAB)
924 rc = ioctl(dev->fd, EVIOCGRAB, (void *)1);
925 else if (grab == LIBEVDEV_UNGRAB)
926 rc = ioctl(dev->fd, EVIOCGRAB, (void *)0);
931 return rc < 0 ? -errno : 0;