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 idx = i - ABS_MT_MIN;
356 mt_state[idx].code = i;
357 rc = ioctl(dev->fd, EVIOCGMTSLOTS(sizeof(struct mt_state)), &mt_state[idx]);
362 for (i = 0; i < dev->num_slots; i++) {
364 struct input_event *ev;
366 ev = queue_push(dev);
367 init_event(dev, ev, EV_ABS, ABS_MT_SLOT, i);
368 for (j = ABS_MT_MIN; j < ABS_MT_MAX; j++) {
369 int jdx = j - ABS_MT_MIN;
371 if (j == ABS_MT_SLOT)
374 if (dev->mt_slot_vals[i][jdx] == mt_state[jdx].val[i])
377 ev = queue_push(dev);
378 init_event(dev, ev, EV_ABS, j, mt_state[jdx].val[i]);
379 dev->mt_slot_vals[i][jdx] = mt_state[jdx].val[i];
385 return rc ? -errno : 0;
389 sync_state(struct libevdev *dev)
393 struct input_event *ev;
395 /* FIXME: if we have events in the queue after the SYN_DROPPED (which was
396 queue[0]) we need to shift this backwards. Except that chances are that the
397 queue may be either full or too full to prepend all the events needed for
400 so we search for the last sync event in the queue and drop everything before
401 including that event and rely on the kernel to tell us the right value for that
402 bitfield during the sync process.
405 for (i = queue_num_elements(dev) - 1; i >= 0; i--) {
406 struct input_event e;
407 queue_peek(dev, i, &e);
408 if (e.type == EV_SYN)
413 queue_shift_multiple(dev, i + 1, NULL);
415 if (libevdev_has_event_type(dev, EV_KEY))
416 rc = sync_key_state(dev);
417 if (rc == 0 && libevdev_has_event_type(dev, EV_ABS))
418 rc = sync_abs_state(dev);
419 if (rc == 0 && libevdev_has_event_code(dev, EV_ABS, ABS_MT_SLOT))
420 rc = sync_mt_state(dev);
422 ev = queue_push(dev);
423 init_event(dev, ev, EV_SYN, SYN_REPORT, 0);
425 dev->queue_nsync = queue_num_elements(dev);
432 update_key_state(struct libevdev *dev, const struct input_event *e)
434 if (!libevdev_has_event_type(dev, EV_KEY))
437 if (e->code > KEY_MAX)
441 clear_bit(dev->key_values, e->code);
443 set_bit(dev->key_values, e->code);
449 update_mt_state(struct libevdev *dev, const struct input_event *e)
451 if (e->code == ABS_MT_SLOT) {
452 dev->current_slot = e->value;
454 } else if (dev->current_slot == -1)
457 dev->mt_slot_vals[dev->current_slot][e->code - ABS_MT_MIN] = e->value;
463 update_abs_state(struct libevdev *dev, const struct input_event *e)
465 if (!libevdev_has_event_type(dev, EV_ABS))
468 if (e->code > ABS_MAX)
471 if (e->code >= ABS_MT_MIN && e->code <= ABS_MT_MAX)
472 return update_mt_state(dev, e);
474 dev->abs_info[e->code].value = e->value;
480 update_state(struct libevdev *dev, const struct input_event *e)
489 rc = update_key_state(dev, e);
492 rc = update_abs_state(dev, e);
496 dev->last_event_time = e->time;
502 read_more_events(struct libevdev *dev)
506 struct input_event *next;
508 free_elem = queue_num_free_elements(dev);
512 next = queue_next_element(dev);
513 len = read(dev->fd, next, free_elem * sizeof(struct input_event));
516 } else if (len > 0 && len % sizeof(struct input_event) != 0)
519 int nev = len/sizeof(struct input_event);
520 queue_set_num_elements(dev, queue_num_elements(dev) + nev);
526 int libevdev_next_event(struct libevdev *dev, unsigned int flags, struct input_event *ev)
533 if (!(flags & (LIBEVDEV_READ_NORMAL|LIBEVDEV_READ_SYNC|LIBEVDEV_FORCE_SYNC)))
536 if (flags & LIBEVDEV_READ_SYNC) {
537 if (!dev->need_sync && dev->queue_nsync == 0)
539 else if (dev->need_sync) {
540 rc = sync_state(dev);
544 } else if (dev->need_sync) {
545 /* FIXME: still need to call update_state for all events
546 * here, otherwise the library has the wrong view of the
548 queue_shift_multiple(dev, dev->queue_nsync, NULL);
551 /* FIXME: check for O_NONBLOCK and if not set, skip if we have an
552 * event in the queue from the previous read.
555 /* FIXME: if the first event after syncing is a SYN_DROPPED, log this */
557 /* Always read in some more events. Best case this smoothes over a potential SYN_DROPPED,
558 worst case we don't read fast enough and end up with SYN_DROPPED anyway */
559 rc = read_more_events(dev);
560 if (rc < 0 && rc != -EAGAIN)
563 if (flags & LIBEVDEV_FORCE_SYNC) {
570 if (queue_shift(dev, ev) != 0)
573 update_state(dev, ev);
576 if (ev->type == EV_SYN && ev->code == SYN_DROPPED) {
581 if (flags & LIBEVDEV_READ_SYNC && dev->queue_nsync > 0) {
591 libevdev_get_name(const struct libevdev *dev)
593 return dev->name ? dev->name : "";
597 libevdev_get_phys(const struct libevdev *dev)
603 libevdev_get_uniq(const struct libevdev *dev)
608 int libevdev_get_product_id(const struct libevdev *dev)
610 return dev->ids.product;
613 int libevdev_get_vendor_id(const struct libevdev *dev)
615 return dev->ids.vendor;
618 int libevdev_get_bustype(const struct libevdev *dev)
620 return dev->ids.bustype;
623 int libevdev_get_version(const struct libevdev *dev)
625 return dev->ids.version;
628 int libevdev_get_driver_version(const struct libevdev *dev)
630 return dev->driver_version;
634 libevdev_has_property(const struct libevdev *dev, unsigned int prop)
636 return (prop <= INPUT_PROP_MAX) && bit_is_set(dev->props, prop);
640 libevdev_has_event_type(const struct libevdev *dev, unsigned int type)
642 return (type <= EV_MAX) && bit_is_set(dev->bits, type);
646 libevdev_has_event_code(const struct libevdev *dev, unsigned int type, unsigned int code)
648 const unsigned long *mask;
651 if (!libevdev_has_event_type(dev, type))
657 max = type_to_mask_const(dev, type, &mask);
659 if (max == -1 || code > max)
662 return bit_is_set(mask, code);
666 libevdev_get_event_value(const struct libevdev *dev, unsigned int type, unsigned int code)
670 if (!libevdev_has_event_type(dev, type) || !libevdev_has_event_code(dev, type, code))
674 case EV_ABS: value = dev->abs_info[code].value; break;
675 case EV_KEY: value = bit_is_set(dev->key_values, code); break;
685 libevdev_fetch_event_value(const struct libevdev *dev, unsigned int type, unsigned int code, int *value)
687 if (libevdev_has_event_type(dev, type) &&
688 libevdev_has_event_code(dev, type, code)) {
689 *value = libevdev_get_event_value(dev, type, code);
696 libevdev_get_slot_value(const struct libevdev *dev, unsigned int slot, unsigned int code)
698 if (!libevdev_has_event_type(dev, EV_ABS) || !libevdev_has_event_code(dev, EV_ABS, code))
701 if (slot >= dev->num_slots || slot >= MAX_SLOTS)
704 if (code > ABS_MT_MAX || code < ABS_MT_MIN)
707 return dev->mt_slot_vals[slot][code - ABS_MT_MIN];
711 libevdev_fetch_slot_value(const struct libevdev *dev, unsigned int slot, unsigned int code, int *value)
713 if (libevdev_has_event_type(dev, EV_ABS) &&
714 libevdev_has_event_code(dev, EV_ABS, code) &&
715 slot < dev->num_slots && slot < MAX_SLOTS) {
716 *value = libevdev_get_slot_value(dev, slot, code);
723 libevdev_get_num_slots(const struct libevdev *dev)
725 return dev->num_slots;
729 libevdev_get_current_slot(const struct libevdev *dev)
731 return dev->current_slot;
734 const struct input_absinfo*
735 libevdev_get_abs_info(const struct libevdev *dev, unsigned int code)
737 if (!libevdev_has_event_type(dev, EV_ABS) ||
738 !libevdev_has_event_code(dev, EV_ABS, code))
741 return &dev->abs_info[code];
745 libevdev_get_abs_min(const struct libevdev *dev, unsigned int code)
747 const struct input_absinfo *absinfo = libevdev_get_abs_info(dev, code);
749 return absinfo ? absinfo->minimum : 0;
753 libevdev_get_abs_max(const struct libevdev *dev, unsigned int code)
755 const struct input_absinfo *absinfo = libevdev_get_abs_info(dev, code);
757 return absinfo ? absinfo->maximum : 0;
761 libevdev_get_abs_fuzz(const struct libevdev *dev, unsigned int code)
763 const struct input_absinfo *absinfo = libevdev_get_abs_info(dev, code);
765 return absinfo ? absinfo->fuzz : 0;
769 libevdev_get_abs_flat(const struct libevdev *dev, unsigned int code)
771 const struct input_absinfo *absinfo = libevdev_get_abs_info(dev, code);
773 return absinfo ? absinfo->flat : 0;
777 libevdev_get_abs_resolution(const struct libevdev *dev, unsigned int code)
779 const struct input_absinfo *absinfo = libevdev_get_abs_info(dev, code);
781 return absinfo ? absinfo->resolution : 0;
785 libevdev_enable_event_type(struct libevdev *dev, unsigned int type)
790 set_bit(dev->bits, type);
796 libevdev_disable_event_type(struct libevdev *dev, unsigned int type)
801 clear_bit(dev->bits, type);
807 libevdev_enable_event_code(struct libevdev *dev, unsigned int type,
808 unsigned int code, const void *data)
813 if (libevdev_enable_event_type(dev, type))
816 max = type_to_mask(dev, type, &mask);
823 if (type == EV_ABS) {
824 const struct input_absinfo *abs = data;
825 dev->abs_info[code] = *abs;
832 libevdev_disable_event_code(struct libevdev *dev, unsigned int type, unsigned int code)
840 max = type_to_mask(dev, type, &mask);
845 clear_bit(mask, code);
851 libevdev_kernel_enable_event_type(struct libevdev *dev, unsigned int type)
858 rc = ioctl(dev->fd, UI_SET_EVBIT, type);
860 libevdev_enable_event_type(dev, type);
862 return (rc != -1) ? 0 : -errno;
866 libevdev_kernel_enable_event_code(struct libevdev *dev, unsigned int type,
867 unsigned int code, const void *data)
872 const unsigned long *mask;
874 rc = libevdev_kernel_enable_event_type(dev, type);
878 max = type_to_mask_const(dev, type, &mask);
879 if (max == -1 || code > max)
883 case EV_KEY: uinput_bit = UI_SET_KEYBIT; break;
884 case EV_REL: uinput_bit = UI_SET_RELBIT; break;
885 case EV_ABS: uinput_bit = UI_SET_ABSBIT; break;
886 case EV_MSC: uinput_bit = UI_SET_MSCBIT; break;
887 case EV_LED: uinput_bit = UI_SET_LEDBIT; break;
888 case EV_SND: uinput_bit = UI_SET_SNDBIT; break;
889 case EV_FF: uinput_bit = UI_SET_FFBIT; break;
890 case EV_SW: uinput_bit = UI_SET_SWBIT; break;
893 rc = ioctl(dev->fd, uinput_bit, type);
897 rc = libevdev_enable_event_type(dev, type);
901 /* FIXME: can't back out of this if it fails */
903 rc = libevdev_kernel_set_abs_value(dev, code, (const struct input_absinfo*)data);
906 return (rc != -1) ? 0 : -errno;
910 libevdev_kernel_set_abs_value(struct libevdev *dev, unsigned int code, const struct input_absinfo *abs)
917 rc = ioctl(dev->fd, EVIOCSABS(code), *abs);
921 rc = libevdev_enable_event_code(dev, EV_ABS, code, abs);
927 libevdev_grab(struct libevdev *dev, int grab)
931 if (grab != LIBEVDEV_GRAB && grab != LIBEVDEV_UNGRAB)
934 if (grab == dev->grabbed)
937 if (grab == LIBEVDEV_GRAB)
938 rc = ioctl(dev->fd, EVIOCGRAB, (void *)1);
939 else if (grab == LIBEVDEV_UNGRAB)
940 rc = ioctl(dev->fd, EVIOCGRAB, (void *)0);
945 return rc < 0 ? -errno : 0;
949 libevdev_get_event_type_name(unsigned int type)
958 libevdev_get_event_code_name(unsigned int type, unsigned int code)
963 if (code > ev_max[type])
966 return event_type_map[type][code];
970 libevdev_get_input_prop_name(unsigned int prop)
972 if (prop > INPUT_PROP_MAX)
975 return input_prop_map[prop];
979 libevdev_get_event_type_max(unsigned int type)
988 libevdev_get_repeat(struct libevdev *dev, int *delay, int *period)
990 if (!libevdev_has_event_type(dev, EV_REP))
994 *delay = dev->rep_values[REP_DELAY];
996 *period = dev->rep_values[REP_PERIOD];