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
29 #include <linux/uinput.h>
32 #include "libevdev-int.h"
33 #include "libevdev-util.h"
34 #include "event-names.h"
39 init_event_queue(struct libevdev *dev)
41 /* FIXME: count the number of axes, keys, etc. to get a better idea at how many events per
42 EV_SYN we could possibly get. Then multiply that by the actual buffer size we care about */
44 const int QUEUE_SIZE = 256;
46 return queue_alloc(dev, QUEUE_SIZE);
50 _libevdev_log(struct libevdev *dev, const char *format, ...)
54 va_start(args, format);
55 dev->log(format, args);
60 libevdev_noop_log_func(const char *format, va_list args)
69 dev = calloc(1, sizeof(*dev));
74 dev->current_slot = -1;
75 dev->log = libevdev_noop_log_func;
76 dev->grabbed = LIBEVDEV_UNGRAB;
82 libevdev_new_from_fd(int fd, struct libevdev **dev)
91 rc = libevdev_set_fd(d, fd);
100 libevdev_free(struct libevdev *dev)
113 libevdev_set_log_handler(struct libevdev *dev, libevdev_log_func_t logfunc)
118 dev->log = logfunc ? logfunc : libevdev_noop_log_func;
122 libevdev_change_fd(struct libevdev *dev, int fd)
131 libevdev_set_fd(struct libevdev* dev, int fd)
140 rc = ioctl(fd, EVIOCGBIT(0, sizeof(dev->bits)), dev->bits);
144 memset(buf, 0, sizeof(buf));
145 rc = ioctl(fd, EVIOCGNAME(sizeof(buf) - 1), buf);
149 dev->name = strdup(buf);
155 memset(buf, 0, sizeof(buf));
156 rc = ioctl(fd, EVIOCGPHYS(sizeof(buf) - 1), buf);
158 /* uinput has no phys */
162 dev->phys = strdup(buf);
169 memset(buf, 0, sizeof(buf));
170 rc = ioctl(fd, EVIOCGUNIQ(sizeof(buf) - 1), buf);
175 dev->uniq = strdup(buf);
182 rc = ioctl(fd, EVIOCGID, &dev->ids);
186 rc = ioctl(fd, EVIOCGVERSION, &dev->driver_version);
190 rc = ioctl(fd, EVIOCGPROP(sizeof(dev->props)), dev->props);
194 rc = ioctl(fd, EVIOCGBIT(EV_REL, sizeof(dev->rel_bits)), dev->rel_bits);
198 rc = ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(dev->abs_bits)), dev->abs_bits);
202 rc = ioctl(fd, EVIOCGBIT(EV_LED, sizeof(dev->led_bits)), dev->led_bits);
206 rc = ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(dev->key_bits)), dev->key_bits);
210 rc = ioctl(fd, EVIOCGBIT(EV_SW, sizeof(dev->sw_bits)), dev->sw_bits);
214 rc = ioctl(fd, EVIOCGBIT(EV_MSC, sizeof(dev->msc_bits)), dev->msc_bits);
218 rc = ioctl(fd, EVIOCGBIT(EV_FF, sizeof(dev->ff_bits)), dev->ff_bits);
222 rc = ioctl(fd, EVIOCGBIT(EV_SND, sizeof(dev->snd_bits)), dev->snd_bits);
226 /* rep is a special case, always set it to 1 for both values if EV_REP is set */
227 if (bit_is_set(dev->bits, EV_REP)) {
228 for (i = 0; i < REP_MAX; i++)
229 set_bit(dev->rep_bits, i);
230 rc = ioctl(fd, EVIOCGREP, dev->rep_values);
235 for (i = ABS_X; i <= ABS_MAX; i++) {
236 if (bit_is_set(dev->abs_bits, i)) {
237 struct input_absinfo abs_info;
238 rc = ioctl(fd, EVIOCGABS(i), &abs_info);
242 dev->abs_info[i] = abs_info;
243 if (i == ABS_MT_SLOT) {
244 dev->num_slots = abs_info.maximum + 1;
245 dev->current_slot = abs_info.value;
251 rc = init_event_queue(dev);
255 /* not copying key state because we won't know when we'll start to
256 * use this fd and key's are likely to change state by then.
257 * Same with the valuators, really, but they may not change.
263 return rc ? -errno : 0;
267 libevdev_get_fd(const struct libevdev* dev)
273 init_event(struct libevdev *dev, struct input_event *ev, int type, int code, int value)
275 ev->time = dev->last_event_time;
282 sync_key_state(struct libevdev *dev)
286 unsigned long keystate[NLONGS(KEY_MAX)];
288 rc = ioctl(dev->fd, EVIOCGKEY(sizeof(keystate)), keystate);
292 for (i = 0; i < KEY_MAX; i++) {
294 old = bit_is_set(dev->key_values, i);
295 new = bit_is_set(keystate, i);
297 struct input_event *ev = queue_push(dev);
298 init_event(dev, ev, EV_KEY, i, new ? 1 : 0);
300 set_bit_state(dev->key_values, i, new);
305 return rc ? -errno : 0;
309 sync_abs_state(struct libevdev *dev)
314 for (i = ABS_X; i <= ABS_MAX; i++) {
315 struct input_absinfo abs_info;
317 if (i >= ABS_MT_MIN && i <= ABS_MT_MAX)
320 if (!bit_is_set(dev->abs_bits, i))
323 rc = ioctl(dev->fd, EVIOCGABS(i), &abs_info);
327 if (dev->abs_info[i].value != abs_info.value) {
328 struct input_event *ev = queue_push(dev);
330 init_event(dev, ev, EV_ABS, i, abs_info.value);
331 dev->abs_info[i].value = abs_info.value;
337 return rc ? -errno : 0;
341 sync_mt_state(struct libevdev *dev)
348 } mt_state[ABS_MT_CNT];
350 for (i = ABS_MT_MIN; i < ABS_MT_MAX; i++) {
352 if (i == ABS_MT_SLOT)
355 if (!libevdev_has_event_code(dev, EV_ABS, i))
358 idx = i - ABS_MT_MIN;
359 mt_state[idx].code = i;
360 rc = ioctl(dev->fd, EVIOCGMTSLOTS(sizeof(struct mt_state)), &mt_state[idx]);
365 for (i = 0; i < dev->num_slots; i++) {
367 struct input_event *ev;
369 ev = queue_push(dev);
370 init_event(dev, ev, EV_ABS, ABS_MT_SLOT, i);
371 for (j = ABS_MT_MIN; j < ABS_MT_MAX; j++) {
372 int jdx = j - ABS_MT_MIN;
374 if (j == ABS_MT_SLOT)
377 if (!libevdev_has_event_code(dev, EV_ABS, j))
380 if (dev->mt_slot_vals[i][jdx] == mt_state[jdx].val[i])
383 ev = queue_push(dev);
384 init_event(dev, ev, EV_ABS, j, mt_state[jdx].val[i]);
385 dev->mt_slot_vals[i][jdx] = mt_state[jdx].val[i];
391 return rc ? -errno : 0;
395 sync_state(struct libevdev *dev)
399 struct input_event *ev;
401 /* FIXME: if we have events in the queue after the SYN_DROPPED (which was
402 queue[0]) we need to shift this backwards. Except that chances are that the
403 queue may be either full or too full to prepend all the events needed for
406 so we search for the last sync event in the queue and drop everything before
407 including that event and rely on the kernel to tell us the right value for that
408 bitfield during the sync process.
411 for (i = queue_num_elements(dev) - 1; i >= 0; i--) {
412 struct input_event e;
413 queue_peek(dev, i, &e);
414 if (e.type == EV_SYN)
419 queue_shift_multiple(dev, i + 1, NULL);
421 if (libevdev_has_event_type(dev, EV_KEY))
422 rc = sync_key_state(dev);
423 if (rc == 0 && libevdev_has_event_type(dev, EV_ABS))
424 rc = sync_abs_state(dev);
425 if (rc == 0 && libevdev_has_event_code(dev, EV_ABS, ABS_MT_SLOT))
426 rc = sync_mt_state(dev);
428 ev = queue_push(dev);
429 init_event(dev, ev, EV_SYN, SYN_REPORT, 0);
431 dev->queue_nsync = queue_num_elements(dev);
438 update_key_state(struct libevdev *dev, const struct input_event *e)
440 if (!libevdev_has_event_type(dev, EV_KEY))
443 if (e->code > KEY_MAX)
447 clear_bit(dev->key_values, e->code);
449 set_bit(dev->key_values, e->code);
455 update_mt_state(struct libevdev *dev, const struct input_event *e)
457 if (e->code == ABS_MT_SLOT) {
458 dev->current_slot = e->value;
460 } else if (dev->current_slot == -1)
463 dev->mt_slot_vals[dev->current_slot][e->code - ABS_MT_MIN] = e->value;
469 update_abs_state(struct libevdev *dev, const struct input_event *e)
471 if (!libevdev_has_event_type(dev, EV_ABS))
474 if (e->code > ABS_MAX)
477 if (e->code >= ABS_MT_MIN && e->code <= ABS_MT_MAX)
478 return update_mt_state(dev, e);
480 dev->abs_info[e->code].value = e->value;
486 update_state(struct libevdev *dev, const struct input_event *e)
495 rc = update_key_state(dev, e);
498 rc = update_abs_state(dev, e);
502 dev->last_event_time = e->time;
508 read_more_events(struct libevdev *dev)
512 struct input_event *next;
514 free_elem = queue_num_free_elements(dev);
518 next = queue_next_element(dev);
519 len = read(dev->fd, next, free_elem * sizeof(struct input_event));
522 } else if (len > 0 && len % sizeof(struct input_event) != 0)
525 int nev = len/sizeof(struct input_event);
526 queue_set_num_elements(dev, queue_num_elements(dev) + nev);
532 int libevdev_next_event(struct libevdev *dev, unsigned int flags, struct input_event *ev)
539 if (!(flags & (LIBEVDEV_READ_NORMAL|LIBEVDEV_READ_SYNC|LIBEVDEV_FORCE_SYNC)))
542 if (flags & LIBEVDEV_READ_SYNC) {
543 if (!dev->need_sync && dev->queue_nsync == 0)
545 else if (dev->need_sync) {
546 rc = sync_state(dev);
550 } else if (dev->need_sync) {
551 struct input_event e;
553 /* call update_state for all events here, otherwise the library has the wrong view
555 while (queue_shift(dev, &e) == 0)
556 update_state(dev, &e);
559 /* FIXME: check for O_NONBLOCK and if not set, skip if we have an
560 * event in the queue from the previous read.
563 /* FIXME: if the first event after syncing is a SYN_DROPPED, log this */
565 /* Always read in some more events. Best case this smoothes over a potential SYN_DROPPED,
566 worst case we don't read fast enough and end up with SYN_DROPPED anyway */
568 rc = read_more_events(dev);
569 if (rc < 0 && rc != -EAGAIN)
572 if (flags & LIBEVDEV_FORCE_SYNC) {
579 if (queue_shift(dev, ev) != 0)
582 update_state(dev, ev);
584 /* if we disabled a code, get the next event instead */
585 } while(!libevdev_has_event_code(dev, ev->type, ev->code));
588 if (ev->type == EV_SYN && ev->code == SYN_DROPPED) {
593 if (flags & LIBEVDEV_READ_SYNC && dev->queue_nsync > 0) {
603 libevdev_get_name(const struct libevdev *dev)
605 return dev->name ? dev->name : "";
609 libevdev_get_phys(const struct libevdev *dev)
615 libevdev_get_uniq(const struct libevdev *dev)
620 int libevdev_get_product_id(const struct libevdev *dev)
622 return dev->ids.product;
625 int libevdev_get_vendor_id(const struct libevdev *dev)
627 return dev->ids.vendor;
630 int libevdev_get_bustype(const struct libevdev *dev)
632 return dev->ids.bustype;
635 int libevdev_get_version(const struct libevdev *dev)
637 return dev->ids.version;
640 int libevdev_get_driver_version(const struct libevdev *dev)
642 return dev->driver_version;
646 libevdev_has_property(const struct libevdev *dev, unsigned int prop)
648 return (prop <= INPUT_PROP_MAX) && bit_is_set(dev->props, prop);
652 libevdev_has_event_type(const struct libevdev *dev, unsigned int type)
654 return (type <= EV_MAX) && bit_is_set(dev->bits, type);
658 libevdev_has_event_code(const struct libevdev *dev, unsigned int type, unsigned int code)
660 const unsigned long *mask;
663 if (!libevdev_has_event_type(dev, type))
669 max = type_to_mask_const(dev, type, &mask);
671 if (max == -1 || code > max)
674 return bit_is_set(mask, code);
678 libevdev_get_event_value(const struct libevdev *dev, unsigned int type, unsigned int code)
682 if (!libevdev_has_event_type(dev, type) || !libevdev_has_event_code(dev, type, code))
686 case EV_ABS: value = dev->abs_info[code].value; break;
687 case EV_KEY: value = bit_is_set(dev->key_values, code); break;
697 libevdev_fetch_event_value(const struct libevdev *dev, unsigned int type, unsigned int code, int *value)
699 if (libevdev_has_event_type(dev, type) &&
700 libevdev_has_event_code(dev, type, code)) {
701 *value = libevdev_get_event_value(dev, type, code);
708 libevdev_get_slot_value(const struct libevdev *dev, unsigned int slot, unsigned int code)
710 if (!libevdev_has_event_type(dev, EV_ABS) || !libevdev_has_event_code(dev, EV_ABS, code))
713 if (slot >= dev->num_slots || slot >= MAX_SLOTS)
716 if (code > ABS_MT_MAX || code < ABS_MT_MIN)
719 return dev->mt_slot_vals[slot][code - ABS_MT_MIN];
723 libevdev_fetch_slot_value(const struct libevdev *dev, unsigned int slot, unsigned int code, int *value)
725 if (libevdev_has_event_type(dev, EV_ABS) &&
726 libevdev_has_event_code(dev, EV_ABS, code) &&
727 slot < dev->num_slots && slot < MAX_SLOTS) {
728 *value = libevdev_get_slot_value(dev, slot, code);
735 libevdev_get_num_slots(const struct libevdev *dev)
737 return dev->num_slots;
741 libevdev_get_current_slot(const struct libevdev *dev)
743 return dev->current_slot;
746 const struct input_absinfo*
747 libevdev_get_abs_info(const struct libevdev *dev, unsigned int code)
749 if (!libevdev_has_event_type(dev, EV_ABS) ||
750 !libevdev_has_event_code(dev, EV_ABS, code))
753 return &dev->abs_info[code];
757 libevdev_get_abs_min(const struct libevdev *dev, unsigned int code)
759 const struct input_absinfo *absinfo = libevdev_get_abs_info(dev, code);
761 return absinfo ? absinfo->minimum : 0;
765 libevdev_get_abs_max(const struct libevdev *dev, unsigned int code)
767 const struct input_absinfo *absinfo = libevdev_get_abs_info(dev, code);
769 return absinfo ? absinfo->maximum : 0;
773 libevdev_get_abs_fuzz(const struct libevdev *dev, unsigned int code)
775 const struct input_absinfo *absinfo = libevdev_get_abs_info(dev, code);
777 return absinfo ? absinfo->fuzz : 0;
781 libevdev_get_abs_flat(const struct libevdev *dev, unsigned int code)
783 const struct input_absinfo *absinfo = libevdev_get_abs_info(dev, code);
785 return absinfo ? absinfo->flat : 0;
789 libevdev_get_abs_resolution(const struct libevdev *dev, unsigned int code)
791 const struct input_absinfo *absinfo = libevdev_get_abs_info(dev, code);
793 return absinfo ? absinfo->resolution : 0;
797 libevdev_enable_event_type(struct libevdev *dev, unsigned int type)
802 set_bit(dev->bits, type);
808 libevdev_disable_event_type(struct libevdev *dev, unsigned int type)
810 if (type > EV_MAX || type == EV_SYN)
813 clear_bit(dev->bits, type);
819 libevdev_enable_event_code(struct libevdev *dev, unsigned int type,
820 unsigned int code, const void *data)
825 if (libevdev_enable_event_type(dev, type))
828 if (type != EV_ABS && data != NULL)
831 max = type_to_mask(dev, type, &mask);
838 if (type == EV_ABS) {
839 const struct input_absinfo *abs = data;
840 dev->abs_info[code] = *abs;
847 libevdev_disable_event_code(struct libevdev *dev, unsigned int type, unsigned int code)
855 max = type_to_mask(dev, type, &mask);
860 clear_bit(mask, code);
866 libevdev_kernel_set_abs_value(struct libevdev *dev, unsigned int code, const struct input_absinfo *abs)
873 rc = ioctl(dev->fd, EVIOCSABS(code), abs);
877 rc = libevdev_enable_event_code(dev, EV_ABS, code, abs);
883 libevdev_grab(struct libevdev *dev, int grab)
887 if (grab != LIBEVDEV_GRAB && grab != LIBEVDEV_UNGRAB)
890 if (grab == dev->grabbed)
893 if (grab == LIBEVDEV_GRAB)
894 rc = ioctl(dev->fd, EVIOCGRAB, (void *)1);
895 else if (grab == LIBEVDEV_UNGRAB)
896 rc = ioctl(dev->fd, EVIOCGRAB, (void *)0);
901 return rc < 0 ? -errno : 0;
905 libevdev_get_event_type_name(unsigned int type)
914 libevdev_get_event_code_name(unsigned int type, unsigned int code)
919 if (code > ev_max[type])
922 return event_type_map[type][code];
926 libevdev_get_input_prop_name(unsigned int prop)
928 if (prop > INPUT_PROP_MAX)
931 return input_prop_map[prop];
935 libevdev_get_event_type_max(unsigned int type)
944 libevdev_get_repeat(struct libevdev *dev, int *delay, int *period)
946 if (!libevdev_has_event_type(dev, EV_REP))
950 *delay = dev->rep_values[REP_DELAY];
952 *period = dev->rep_values[REP_PERIOD];