• Home
  • Raw
  • Download

Lines Matching full:dev

46 static int sync_mt_state(struct libevdev *dev,
47 struct slot_change_state changes_out[dev->num_slots]);
50 update_key_state(struct libevdev *dev, const struct input_event *e);
53 slot_value(const struct libevdev *dev, int slot, int axis) in slot_value() argument
55 if (unlikely(slot > dev->num_slots)) { in slot_value()
56 log_bug(dev, "Slot %d exceeds number of slots (%d)\n", slot, dev->num_slots); in slot_value()
60 log_bug(dev, "MT axis %d is outside the valid range [%d,%d]\n", in slot_value()
64 return &dev->mt_slot_vals[slot * ABS_MT_CNT + axis - ABS_MT_MIN]; in slot_value()
68 init_event_queue(struct libevdev *dev) in init_event_queue() argument
83 if (libevdev_has_event_code(dev, type, code)) in init_event_queue()
88 nslots = libevdev_get_num_slots(dev); in init_event_queue()
93 if (libevdev_has_event_code(dev, EV_ABS, code)) in init_event_queue()
101 return queue_alloc(dev, max(MIN_QUEUE_SIZE, nevents * 2)); in init_event_queue()
135 fix_invalid_absinfo(const struct libevdev *dev, in fix_invalid_absinfo() argument
148 log_bug(dev, in fix_invalid_absinfo()
150 dev->name); in fix_invalid_absinfo()
164 _libevdev_log_msg(const struct libevdev *dev, in _libevdev_log_msg() argument
171 if (dev && dev->log.device_handler) { in _libevdev_log_msg()
178 if (unlikely(dev->log.global_handler)) in _libevdev_log_msg()
181 if (priority > dev->log.priority) in _libevdev_log_msg()
190 if (dev && dev->log.device_handler) in _libevdev_log_msg()
191 dev->log.device_handler(dev, priority, dev->log.userdata, file, line, func, format, args); in _libevdev_log_msg()
198 libevdev_reset(struct libevdev *dev) in libevdev_reset() argument
200 enum libevdev_log_priority pri = dev->log.priority; in libevdev_reset()
201 libevdev_device_log_func_t handler = dev->log.device_handler; in libevdev_reset()
203 free(dev->name); in libevdev_reset()
204 free(dev->phys); in libevdev_reset()
205 free(dev->uniq); in libevdev_reset()
206 free(dev->mt_slot_vals); in libevdev_reset()
207 memset(dev, 0, sizeof(*dev)); in libevdev_reset()
208 dev->fd = -1; in libevdev_reset()
209 dev->initialized = false; in libevdev_reset()
210 dev->num_slots = -1; in libevdev_reset()
211 dev->current_slot = -1; in libevdev_reset()
212 dev->grabbed = LIBEVDEV_UNGRAB; in libevdev_reset()
213 dev->sync_state = SYNC_NONE; in libevdev_reset()
214 dev->log.priority = pri; in libevdev_reset()
215 dev->log.device_handler = handler; in libevdev_reset()
216 libevdev_enable_event_type(dev, EV_SYN); in libevdev_reset()
222 struct libevdev *dev; in libevdev_new() local
224 dev = calloc(1, sizeof(*dev)); in libevdev_new()
225 if (!dev) in libevdev_new()
228 libevdev_reset(dev); in libevdev_new()
230 return dev; in libevdev_new()
234 libevdev_new_from_fd(int fd, struct libevdev **dev) in libevdev_new_from_fd() argument
247 *dev = d; in libevdev_new_from_fd()
252 libevdev_free(struct libevdev *dev) in libevdev_free() argument
254 if (!dev) in libevdev_free()
257 queue_free(dev); in libevdev_free()
258 libevdev_reset(dev); in libevdev_free()
259 free(dev); in libevdev_free()
284 libevdev_set_device_log_function(struct libevdev *dev, in libevdev_set_device_log_function() argument
289 if (!dev) { in libevdev_set_device_log_function()
294 dev->log.priority = priority; in libevdev_set_device_log_function()
295 dev->log.device_handler = logfunc; in libevdev_set_device_log_function()
296 dev->log.userdata = data; in libevdev_set_device_log_function()
300 _libevdev_log_priority(const struct libevdev *dev) in _libevdev_log_priority() argument
302 if (dev && dev->log.device_handler) in _libevdev_log_priority()
303 return dev->log.priority; in _libevdev_log_priority()
308 libevdev_change_fd(struct libevdev *dev, int fd) in libevdev_change_fd() argument
310 if (!dev->initialized) { in libevdev_change_fd()
311 log_bug(dev, "device not initialized. call libevdev_set_fd() first\n"); in libevdev_change_fd()
314 dev->fd = fd; in libevdev_change_fd()
315 dev->grabbed = LIBEVDEV_UNGRAB; in libevdev_change_fd()
320 reset_tracking_ids(struct libevdev *dev) in reset_tracking_ids() argument
322 if (dev->num_slots == -1 || in reset_tracking_ids()
323 !libevdev_has_event_code(dev, EV_ABS, ABS_MT_TRACKING_ID)) in reset_tracking_ids()
326 for (int slot = 0; slot < dev->num_slots; slot++) in reset_tracking_ids()
327 libevdev_set_slot_value(dev, slot, ABS_MT_TRACKING_ID, -1); in reset_tracking_ids()
331 free_slots(struct libevdev *dev) in free_slots() argument
333 dev->num_slots = -1; in free_slots()
334 free(dev->mt_slot_vals); in free_slots()
335 dev->mt_slot_vals = NULL; in free_slots()
339 init_slots(struct libevdev *dev) in init_slots() argument
344 free(dev->mt_slot_vals); in init_slots()
345 dev->mt_slot_vals = NULL; in init_slots()
350 if (libevdev_has_event_code(dev, EV_ABS, ABS_RESERVED) || in init_slots()
351 !libevdev_has_event_code(dev, EV_ABS, ABS_MT_SLOT)) { in init_slots()
352 if (dev->num_slots != -1) { in init_slots()
353 free_slots(dev); in init_slots()
358 abs_info = libevdev_get_abs_info(dev, ABS_MT_SLOT); in init_slots()
360 free_slots(dev); in init_slots()
361 dev->num_slots = abs_info->maximum + 1; in init_slots()
362 dev->mt_slot_vals = calloc(dev->num_slots * ABS_MT_CNT, sizeof(int)); in init_slots()
363 if (!dev->mt_slot_vals) { in init_slots()
367 dev->current_slot = abs_info->value; in init_slots()
369 reset_tracking_ids(dev); in init_slots()
375 libevdev_set_fd(struct libevdev* dev, int fd) in libevdev_set_fd() argument
381 if (dev->initialized) { in libevdev_set_fd()
382 log_bug(dev, "device already initialized.\n"); in libevdev_set_fd()
390 libevdev_reset(dev); in libevdev_set_fd()
392 rc = ioctl(fd, EVIOCGBIT(0, sizeof(dev->bits)), dev->bits); in libevdev_set_fd()
401 free(dev->name); in libevdev_set_fd()
402 dev->name = strdup(buf); in libevdev_set_fd()
403 if (!dev->name) { in libevdev_set_fd()
408 free(dev->phys); in libevdev_set_fd()
409 dev->phys = NULL; in libevdev_set_fd()
417 dev->phys = strdup(buf); in libevdev_set_fd()
418 if (!dev->phys) { in libevdev_set_fd()
424 free(dev->uniq); in libevdev_set_fd()
425 dev->uniq = NULL; in libevdev_set_fd()
432 dev->uniq = strdup(buf); in libevdev_set_fd()
433 if (!dev->uniq) { in libevdev_set_fd()
439 rc = ioctl(fd, EVIOCGID, &dev->ids); in libevdev_set_fd()
443 rc = ioctl(fd, EVIOCGVERSION, &dev->driver_version); in libevdev_set_fd()
451 rc = ioctl(fd, EVIOCGPROP(sizeof(dev->props)), dev->props); in libevdev_set_fd()
455 rc = ioctl(fd, EVIOCGBIT(EV_REL, sizeof(dev->rel_bits)), dev->rel_bits); in libevdev_set_fd()
459 rc = ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(dev->abs_bits)), dev->abs_bits); in libevdev_set_fd()
463 rc = ioctl(fd, EVIOCGBIT(EV_LED, sizeof(dev->led_bits)), dev->led_bits); in libevdev_set_fd()
467 rc = ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(dev->key_bits)), dev->key_bits); in libevdev_set_fd()
471 rc = ioctl(fd, EVIOCGBIT(EV_SW, sizeof(dev->sw_bits)), dev->sw_bits); in libevdev_set_fd()
475 rc = ioctl(fd, EVIOCGBIT(EV_MSC, sizeof(dev->msc_bits)), dev->msc_bits); in libevdev_set_fd()
479 rc = ioctl(fd, EVIOCGBIT(EV_FF, sizeof(dev->ff_bits)), dev->ff_bits); in libevdev_set_fd()
483 rc = ioctl(fd, EVIOCGBIT(EV_SND, sizeof(dev->snd_bits)), dev->snd_bits); in libevdev_set_fd()
487 rc = ioctl(fd, EVIOCGKEY(sizeof(dev->key_values)), dev->key_values); in libevdev_set_fd()
491 rc = ioctl(fd, EVIOCGLED(sizeof(dev->led_values)), dev->led_values); in libevdev_set_fd()
495 rc = ioctl(fd, EVIOCGSW(sizeof(dev->sw_values)), dev->sw_values); in libevdev_set_fd()
500 if (bit_is_set(dev->bits, EV_REP)) { in libevdev_set_fd()
502 set_bit(dev->rep_bits, i); in libevdev_set_fd()
503 rc = ioctl(fd, EVIOCGREP, dev->rep_values); in libevdev_set_fd()
509 if (bit_is_set(dev->abs_bits, i)) { in libevdev_set_fd()
515 fix_invalid_absinfo(dev, i, &abs_info); in libevdev_set_fd()
517 dev->abs_info[i] = abs_info; in libevdev_set_fd()
521 dev->fd = fd; in libevdev_set_fd()
523 rc = init_slots(dev); in libevdev_set_fd()
527 if (dev->num_slots != -1) { in libevdev_set_fd()
528 struct slot_change_state unused[dev->num_slots]; in libevdev_set_fd()
529 sync_mt_state(dev, unused); in libevdev_set_fd()
532 rc = init_event_queue(dev); in libevdev_set_fd()
534 dev->fd = -1; in libevdev_set_fd()
543 dev->initialized = true; in libevdev_set_fd()
546 libevdev_reset(dev); in libevdev_set_fd()
551 libevdev_get_fd(const struct libevdev* dev) in libevdev_get_fd() argument
553 return dev->fd; in libevdev_get_fd()
557 sync_key_state(struct libevdev *dev) in sync_key_state() argument
563 rc = ioctl(dev->fd, EVIOCGKEY(sizeof(keystate)), keystate); in sync_key_state()
569 old = bit_is_set(dev->key_values, i); in sync_key_state()
572 queue_push_event(dev, EV_KEY, i, new ? 1 : 0); in sync_key_state()
575 memcpy(dev->key_values, keystate, rc); in sync_key_state()
583 sync_sw_state(struct libevdev *dev) in sync_sw_state() argument
589 rc = ioctl(dev->fd, EVIOCGSW(sizeof(swstate)), swstate); in sync_sw_state()
595 old = bit_is_set(dev->sw_values, i); in sync_sw_state()
598 queue_push_event(dev, EV_SW, i, new ? 1 : 0); in sync_sw_state()
601 memcpy(dev->sw_values, swstate, rc); in sync_sw_state()
609 sync_led_state(struct libevdev *dev) in sync_led_state() argument
615 rc = ioctl(dev->fd, EVIOCGLED(sizeof(ledstate)), ledstate); in sync_led_state()
621 old = bit_is_set(dev->led_values, i); in sync_led_state()
624 queue_push_event(dev, EV_LED, i, new ? 1 : 0); in sync_led_state()
628 memcpy(dev->led_values, ledstate, rc); in sync_led_state()
635 sync_abs_state(struct libevdev *dev) in sync_abs_state() argument
646 if (!bit_is_set(dev->abs_bits, i)) in sync_abs_state()
649 rc = ioctl(dev->fd, EVIOCGABS(i), &abs_info); in sync_abs_state()
653 if (dev->abs_info[i].value != abs_info.value) { in sync_abs_state()
654 queue_push_event(dev, EV_ABS, i, abs_info.value); in sync_abs_state()
655 dev->abs_info[i].value = abs_info.value; in sync_abs_state()
665 sync_mt_state(struct libevdev *dev, in sync_mt_state() argument
666 struct slot_change_state changes_out[dev->num_slots]) in sync_mt_state()
671 unsigned int nslots = min(MAX_SLOTS, dev->num_slots); in sync_mt_state()
681 !libevdev_has_event_code(dev, EV_ABS, axis)) in sync_mt_state()
685 rc = ioctl(dev->fd, EVIOCGMTSLOTS(sizeof(mt_state)), &mt_state); in sync_mt_state()
690 int val_before = *slot_value(dev, slot, axis), in sync_mt_state()
712 *slot_value(dev, slot, axis) = val_after; in sync_mt_state()
720 if (dev->num_slots > MAX_SLOTS) in sync_mt_state()
721 memset(changes_out, 0, sizeof(*changes) * dev->num_slots); in sync_mt_state()
729 terminate_slots(struct libevdev *dev, in terminate_slots() argument
730 const struct slot_change_state changes[dev->num_slots], in terminate_slots()
743 for (int slot = 0; slot < dev->num_slots; slot++) { in terminate_slots()
749 queue_push_event(dev, EV_ABS, ABS_MT_SLOT, slot); in terminate_slots()
750 queue_push_event(dev, EV_ABS, ABS_MT_TRACKING_ID, -1); in terminate_slots()
781 queue_push_event(dev, ev.type, ev.code, ev.value); in terminate_slots()
782 update_key_state(dev, &ev); in terminate_slots()
791 queue_push_event(dev, ev.type, ev.code, ev.value); in terminate_slots()
792 update_key_state(dev, &ev); in terminate_slots()
795 queue_push_event(dev, EV_SYN, SYN_REPORT, 0); in terminate_slots()
800 push_mt_sync_events(struct libevdev *dev, in push_mt_sync_events() argument
801 const struct slot_change_state changes[dev->num_slots], in push_mt_sync_events()
807 for (int slot = 0; slot < dev->num_slots; slot++) { in push_mt_sync_events()
814 queue_push_event(dev, EV_ABS, ABS_MT_SLOT, slot); in push_mt_sync_events()
819 !libevdev_has_event_code(dev, EV_ABS, axis)) in push_mt_sync_events()
823 queue_push_event(dev, EV_ABS, axis, in push_mt_sync_events()
824 *slot_value(dev, slot, axis)); in push_mt_sync_events()
831 rc = ioctl(dev->fd, EVIOCGABS(ABS_MT_SLOT), &abs_info); in push_mt_sync_events()
835 dev->current_slot = abs_info.value; in push_mt_sync_events()
837 if (dev->current_slot != last_reported_slot) in push_mt_sync_events()
838 queue_push_event(dev, EV_ABS, ABS_MT_SLOT, dev->current_slot); in push_mt_sync_events()
846 read_more_events(struct libevdev *dev) in read_more_events() argument
852 free_elem = queue_num_free_elements(dev); in read_more_events()
856 next = queue_next_element(dev); in read_more_events()
857 len = read(dev->fd, next, free_elem * sizeof(struct input_event)); in read_more_events()
866 queue_set_num_elements(dev, queue_num_elements(dev) + nev); in read_more_events()
873 drain_events(struct libevdev *dev) in drain_events() argument
881 queue_shift_multiple(dev, queue_num_elements(dev), NULL); in drain_events()
884 rc = read_more_events(dev); in drain_events()
889 log_error(dev, "Failed to drain events before sync.\n"); in drain_events()
893 nelem = queue_num_elements(dev); in drain_events()
894 queue_shift_multiple(dev, nelem, NULL); in drain_events()
895 } while (iterations++ < max_iterations && nelem >= queue_size(dev)); in drain_events()
904 log_info(dev, "Unable to drain events, buffer size mismatch.\n"); in drain_events()
908 sync_state(struct libevdev *dev) in sync_state() argument
913 struct slot_change_state changes[dev->num_slots > 0 ? dev->num_slots : 1]; in sync_state()
919 drain_events(dev); in sync_state()
930 if (dev->num_slots > -1 && in sync_state()
931 libevdev_has_event_code(dev, EV_ABS, ABS_MT_SLOT)) { in sync_state()
933 rc = sync_mt_state(dev, changes); in sync_state()
935 terminate_slots(dev, changes, &last_reported_slot); in sync_state()
940 if (libevdev_has_event_type(dev, EV_KEY)) in sync_state()
941 rc = sync_key_state(dev); in sync_state()
942 if (libevdev_has_event_type(dev, EV_LED)) in sync_state()
943 rc = sync_led_state(dev); in sync_state()
944 if (libevdev_has_event_type(dev, EV_SW)) in sync_state()
945 rc = sync_sw_state(dev); in sync_state()
946 if (rc == 0 && libevdev_has_event_type(dev, EV_ABS)) in sync_state()
947 rc = sync_abs_state(dev); in sync_state()
949 push_mt_sync_events(dev, changes, last_reported_slot); in sync_state()
951 dev->queue_nsync = queue_num_elements(dev); in sync_state()
953 if (dev->queue_nsync > 0) { in sync_state()
954 queue_push_event(dev, EV_SYN, SYN_REPORT, 0); in sync_state()
955 dev->queue_nsync++; in sync_state()
962 update_key_state(struct libevdev *dev, const struct input_event *e) in update_key_state() argument
964 if (!libevdev_has_event_type(dev, EV_KEY)) in update_key_state()
970 set_bit_state(dev->key_values, e->code, e->value != 0); in update_key_state()
976 update_mt_state(struct libevdev *dev, const struct input_event *e) in update_mt_state() argument
978 if (e->code == ABS_MT_SLOT && dev->num_slots > -1) { in update_mt_state()
980 dev->current_slot = e->value; in update_mt_state()
983 if (libevdev_has_event_code(dev, EV_ABS, i)) in update_mt_state()
984 dev->abs_info[i].value = *slot_value(dev, dev->current_slot, i); in update_mt_state()
990 if (dev->current_slot == -1) in update_mt_state()
993 *slot_value(dev, dev->current_slot, e->code) = e->value; in update_mt_state()
999 update_abs_state(struct libevdev *dev, const struct input_event *e) in update_abs_state() argument
1001 if (!libevdev_has_event_type(dev, EV_ABS)) in update_abs_state()
1008 update_mt_state(dev, e); in update_abs_state()
1010 dev->abs_info[e->code].value = e->value; in update_abs_state()
1016 update_led_state(struct libevdev *dev, const struct input_event *e) in update_led_state() argument
1018 if (!libevdev_has_event_type(dev, EV_LED)) in update_led_state()
1024 set_bit_state(dev->led_values, e->code, e->value != 0); in update_led_state()
1030 update_sw_state(struct libevdev *dev, const struct input_event *e) in update_sw_state() argument
1032 if (!libevdev_has_event_type(dev, EV_SW)) in update_sw_state()
1038 set_bit_state(dev->sw_values, e->code, e->value != 0); in update_sw_state()
1044 update_state(struct libevdev *dev, const struct input_event *e) in update_state() argument
1053 rc = update_key_state(dev, e); in update_state()
1056 rc = update_abs_state(dev, e); in update_state()
1059 rc = update_led_state(dev, e); in update_state()
1062 rc = update_sw_state(dev, e); in update_state()
1066 dev->last_event_time.tv_sec = e->input_event_sec; in update_state()
1067 dev->last_event_time.tv_usec = e->input_event_usec; in update_state()
1076 sanitize_event(const struct libevdev *dev, in sanitize_event() argument
1080 if (!libevdev_has_event_code(dev, ev->type, ev->code)) in sanitize_event()
1083 if (unlikely(dev->num_slots > -1 && in sanitize_event()
1085 (ev->value < 0 || ev->value >= dev->num_slots))) { in sanitize_event()
1086 log_bug(dev, "Device \"%s\" received an invalid slot index %d." in sanitize_event()
1088 dev->name, ev->value, dev->num_slots - 1); in sanitize_event()
1089 ev->value = dev->num_slots - 1; in sanitize_event()
1099 dev->num_slots > -1 && in sanitize_event()
1102 *slot_value(dev, dev->current_slot, ABS_MT_TRACKING_ID) == -1) || in sanitize_event()
1104 *slot_value(dev, dev->current_slot, ABS_MT_TRACKING_ID) != -1)))) { in sanitize_event()
1105 log_bug(dev, "Device \"%s\" received a double tracking ID %d in slot %d.\n", in sanitize_event()
1106 dev->name, ev->value, dev->current_slot); in sanitize_event()
1114 libevdev_next_event(struct libevdev *dev, unsigned int flags, struct input_event *ev) in libevdev_next_event() argument
1123 if (!dev->initialized) { in libevdev_next_event()
1124 log_bug(dev, "device not initialized. call libevdev_set_fd() first\n"); in libevdev_next_event()
1128 if (dev->fd < 0) in libevdev_next_event()
1132 log_bug(dev, "invalid flags %#x.\n", flags); in libevdev_next_event()
1137 if (dev->sync_state == SYNC_NEEDED) { in libevdev_next_event()
1138 rc = sync_state(dev); in libevdev_next_event()
1141 dev->sync_state = SYNC_IN_PROGRESS; in libevdev_next_event()
1144 if (dev->queue_nsync == 0) { in libevdev_next_event()
1145 dev->sync_state = SYNC_NONE; in libevdev_next_event()
1149 } else if (dev->sync_state != SYNC_NONE) { in libevdev_next_event()
1154 while (queue_shift(dev, &e) == 0) { in libevdev_next_event()
1155 dev->queue_nsync--; in libevdev_next_event()
1156 if (sanitize_event(dev, &e, dev->sync_state) != EVENT_FILTER_DISCARD) in libevdev_next_event()
1157 update_state(dev, &e); in libevdev_next_event()
1160 dev->sync_state = SYNC_NONE; in libevdev_next_event()
1170 if (queue_num_elements(dev) == 0) { in libevdev_next_event()
1171 rc = read_more_events(dev); in libevdev_next_event()
1177 dev->sync_state = SYNC_NEEDED; in libevdev_next_event()
1182 if (queue_shift(dev, ev) != 0) in libevdev_next_event()
1185 filter_status = sanitize_event(dev, ev, dev->sync_state); in libevdev_next_event()
1187 update_state(dev, ev); in libevdev_next_event()
1191 !libevdev_has_event_code(dev, ev->type, ev->code)); in libevdev_next_event()
1195 dev->sync_state = SYNC_NEEDED; in libevdev_next_event()
1199 if (flags & LIBEVDEV_READ_FLAG_SYNC && dev->queue_nsync > 0) { in libevdev_next_event()
1200 dev->queue_nsync--; in libevdev_next_event()
1202 if (dev->queue_nsync == 0) in libevdev_next_event()
1203 dev->sync_state = SYNC_NONE; in libevdev_next_event()
1211 libevdev_has_event_pending(struct libevdev *dev) in libevdev_has_event_pending() argument
1213 struct pollfd fds = { dev->fd, POLLIN, 0 }; in libevdev_has_event_pending()
1216 if (!dev->initialized) { in libevdev_has_event_pending()
1217 log_bug(dev, "device not initialized. call libevdev_set_fd() first\n"); in libevdev_has_event_pending()
1221 if (dev->fd < 0) in libevdev_has_event_pending()
1224 if (queue_num_elements(dev) != 0) in libevdev_has_event_pending()
1232 libevdev_get_name(const struct libevdev *dev) in libevdev_get_name() argument
1234 return dev->name ? dev->name : ""; in libevdev_get_name()
1238 libevdev_get_phys(const struct libevdev *dev) in libevdev_get_phys() argument
1240 return dev->phys; in libevdev_get_phys()
1244 libevdev_get_uniq(const struct libevdev *dev) in libevdev_get_uniq() argument
1246 return dev->uniq; in libevdev_get_uniq()
1250 LIBEVDEV_EXPORT void libevdev_set_##field(struct libevdev *dev, const char *field) \
1254 free(dev->field); \
1255 dev->field = strdup(field); \
1263 LIBEVDEV_EXPORT int libevdev_get_id_##name(const struct libevdev *dev) \ in STRING_SETTER()
1265 return dev->ids.name; \ in STRING_SETTER()
1274 LIBEVDEV_EXPORT void libevdev_set_id_##field(struct libevdev *dev, int field) \
1276 dev->ids.field = field;\
1285 libevdev_get_driver_version(const struct libevdev *dev)
1287 return dev->driver_version;
1291 libevdev_has_property(const struct libevdev *dev, unsigned int prop) in libevdev_has_property() argument
1293 return (prop <= INPUT_PROP_MAX) && bit_is_set(dev->props, prop); in libevdev_has_property()
1297 libevdev_enable_property(struct libevdev *dev, unsigned int prop) in libevdev_enable_property() argument
1302 set_bit(dev->props, prop); in libevdev_enable_property()
1307 libevdev_disable_property(struct libevdev *dev, unsigned int prop) in libevdev_disable_property() argument
1312 clear_bit(dev->props, prop); in libevdev_disable_property()
1317 libevdev_has_event_type(const struct libevdev *dev, unsigned int type) in libevdev_has_event_type() argument
1319 return type == EV_SYN ||(type <= EV_MAX && bit_is_set(dev->bits, type)); in libevdev_has_event_type()
1323 libevdev_has_event_code(const struct libevdev *dev, unsigned int type, unsigned int code) in libevdev_has_event_code() argument
1328 if (!libevdev_has_event_type(dev, type)) in libevdev_has_event_code()
1334 max = type_to_mask_const(dev, type, &mask); in libevdev_has_event_code()
1343 libevdev_get_event_value(const struct libevdev *dev, unsigned int type, unsigned int code) in libevdev_get_event_value() argument
1347 if (!libevdev_has_event_type(dev, type) || !libevdev_has_event_code(dev, type, code)) in libevdev_get_event_value()
1351 case EV_ABS: value = dev->abs_info[code].value; break; in libevdev_get_event_value()
1352 case EV_KEY: value = bit_is_set(dev->key_values, code); break; in libevdev_get_event_value()
1353 case EV_LED: value = bit_is_set(dev->led_values, code); break; in libevdev_get_event_value()
1354 case EV_SW: value = bit_is_set(dev->sw_values, code); break; in libevdev_get_event_value()
1358 libevdev_get_repeat(dev, &value, NULL); in libevdev_get_event_value()
1361 libevdev_get_repeat(dev, NULL, &value); in libevdev_get_event_value()
1377 libevdev_set_event_value(struct libevdev *dev, unsigned int type, unsigned int code, int value) in libevdev_set_event_value() argument
1382 if (!libevdev_has_event_type(dev, type) || !libevdev_has_event_code(dev, type, code)) in libevdev_set_event_value()
1389 if (sanitize_event(dev, &e, SYNC_NONE) != EVENT_FILTER_NONE) in libevdev_set_event_value()
1393 case EV_ABS: rc = update_abs_state(dev, &e); break; in libevdev_set_event_value()
1394 case EV_KEY: rc = update_key_state(dev, &e); break; in libevdev_set_event_value()
1395 case EV_LED: rc = update_led_state(dev, &e); break; in libevdev_set_event_value()
1396 case EV_SW: rc = update_sw_state(dev, &e); break; in libevdev_set_event_value()
1406 libevdev_fetch_event_value(const struct libevdev *dev, unsigned int type, unsigned int code, int *v… in libevdev_fetch_event_value() argument
1408 if (libevdev_has_event_type(dev, type) && in libevdev_fetch_event_value()
1409 libevdev_has_event_code(dev, type, code)) { in libevdev_fetch_event_value()
1410 *value = libevdev_get_event_value(dev, type, code); in libevdev_fetch_event_value()
1418 libevdev_get_slot_value(const struct libevdev *dev, unsigned int slot, unsigned int code) in libevdev_get_slot_value() argument
1420 if (!libevdev_has_event_type(dev, EV_ABS) || !libevdev_has_event_code(dev, EV_ABS, code)) in libevdev_get_slot_value()
1423 if (dev->num_slots < 0 || slot >= (unsigned int)dev->num_slots) in libevdev_get_slot_value()
1429 return *slot_value(dev, slot, code); in libevdev_get_slot_value()
1433 libevdev_set_slot_value(struct libevdev *dev, unsigned int slot, unsigned int code, int value) in libevdev_set_slot_value() argument
1435 if (!libevdev_has_event_type(dev, EV_ABS) || !libevdev_has_event_code(dev, EV_ABS, code)) in libevdev_set_slot_value()
1438 if (dev->num_slots == -1 || slot >= (unsigned int)dev->num_slots) in libevdev_set_slot_value()
1445 if (value < 0 || value >= libevdev_get_num_slots(dev)) in libevdev_set_slot_value()
1447 dev->current_slot = value; in libevdev_set_slot_value()
1450 *slot_value(dev, slot, code) = value; in libevdev_set_slot_value()
1456 libevdev_fetch_slot_value(const struct libevdev *dev, unsigned int slot, unsigned int code, int *va… in libevdev_fetch_slot_value() argument
1458 if (libevdev_has_event_type(dev, EV_ABS) && in libevdev_fetch_slot_value()
1459 libevdev_has_event_code(dev, EV_ABS, code) && in libevdev_fetch_slot_value()
1460 dev->num_slots >= 0 && in libevdev_fetch_slot_value()
1461 slot < (unsigned int)dev->num_slots) { in libevdev_fetch_slot_value()
1462 *value = libevdev_get_slot_value(dev, slot, code); in libevdev_fetch_slot_value()
1470 libevdev_get_num_slots(const struct libevdev *dev) in libevdev_get_num_slots() argument
1472 return dev->num_slots; in libevdev_get_num_slots()
1476 libevdev_get_current_slot(const struct libevdev *dev) in libevdev_get_current_slot() argument
1478 return dev->current_slot; in libevdev_get_current_slot()
1482 libevdev_get_abs_info(const struct libevdev *dev, unsigned int code) in libevdev_get_abs_info() argument
1484 if (!libevdev_has_event_type(dev, EV_ABS) || in libevdev_get_abs_info()
1485 !libevdev_has_event_code(dev, EV_ABS, code)) in libevdev_get_abs_info()
1488 return &dev->abs_info[code]; in libevdev_get_abs_info()
1492 LIBEVDEV_EXPORT int libevdev_get_abs_##name(const struct libevdev *dev, unsigned int code) \
1494 const struct input_absinfo *absinfo = libevdev_get_abs_info(dev, code); \
1505 LIBEVDEV_EXPORT void libevdev_set_abs_##field(struct libevdev *dev, unsigned int code, int val) \ in ABS_GETTER()
1507 if (!libevdev_has_event_code(dev, EV_ABS, code)) \ in ABS_GETTER()
1509 dev->abs_info[code].field = val; \ in ABS_GETTER()
1519 libevdev_set_abs_info(struct libevdev *dev, unsigned int code, const struct input_absinfo *abs)
1521 if (!libevdev_has_event_code(dev, EV_ABS, code))
1524 dev->abs_info[code] = *abs;
1528 libevdev_enable_event_type(struct libevdev *dev, unsigned int type) in libevdev_enable_event_type() argument
1535 if (libevdev_has_event_type(dev, type)) in libevdev_enable_event_type()
1542 set_bit(dev->bits, type); in libevdev_enable_event_type()
1546 libevdev_enable_event_code(dev, EV_REP, REP_DELAY, &delay); in libevdev_enable_event_type()
1547 libevdev_enable_event_code(dev, EV_REP, REP_PERIOD, &period); in libevdev_enable_event_type()
1553 libevdev_disable_event_type(struct libevdev *dev, unsigned int type) in libevdev_disable_event_type() argument
1564 clear_bit(dev->bits, type); in libevdev_disable_event_type()
1570 libevdev_enable_event_code(struct libevdev *dev, unsigned int type, in libevdev_enable_event_code() argument
1576 if (libevdev_enable_event_type(dev, type)) in libevdev_enable_event_code()
1593 max = type_to_mask(dev, type, &mask); in libevdev_enable_event_code()
1602 dev->abs_info[code] = *abs; in libevdev_enable_event_code()
1604 if (init_slots(dev) != 0) in libevdev_enable_event_code()
1607 reset_tracking_ids(dev); in libevdev_enable_event_code()
1611 dev->rep_values[code] = *value; in libevdev_enable_event_code()
1618 libevdev_disable_event_code(struct libevdev *dev, unsigned int type, unsigned int code) in libevdev_disable_event_code() argument
1626 max = type_to_mask(dev, type, &mask); in libevdev_disable_event_code()
1635 if (init_slots(dev) != 0) in libevdev_disable_event_code()
1638 reset_tracking_ids(dev); in libevdev_disable_event_code()
1646 libevdev_kernel_set_abs_info(struct libevdev *dev, unsigned int code, const struct input_absinfo *a… in libevdev_kernel_set_abs_info() argument
1650 if (!dev->initialized) { in libevdev_kernel_set_abs_info()
1651 log_bug(dev, "device not initialized. call libevdev_set_fd() first\n"); in libevdev_kernel_set_abs_info()
1655 if (dev->fd < 0) in libevdev_kernel_set_abs_info()
1661 rc = ioctl(dev->fd, EVIOCSABS(code), abs); in libevdev_kernel_set_abs_info()
1665 rc = libevdev_enable_event_code(dev, EV_ABS, code, abs); in libevdev_kernel_set_abs_info()
1671 libevdev_grab(struct libevdev *dev, enum libevdev_grab_mode grab) in libevdev_grab() argument
1675 if (!dev->initialized) { in libevdev_grab()
1676 log_bug(dev, "device not initialized. call libevdev_set_fd() first\n"); in libevdev_grab()
1680 if (dev->fd < 0) in libevdev_grab()
1684 log_bug(dev, "invalid grab parameter %#x\n", grab); in libevdev_grab()
1688 if (grab == dev->grabbed) in libevdev_grab()
1692 rc = ioctl(dev->fd, EVIOCGRAB, (void *)1); in libevdev_grab()
1694 rc = ioctl(dev->fd, EVIOCGRAB, (void *)0); in libevdev_grab()
1697 dev->grabbed = grab; in libevdev_grab()
1776 libevdev_get_repeat(const struct libevdev *dev, int *delay, int *period) in libevdev_get_repeat() argument
1778 if (!libevdev_has_event_type(dev, EV_REP)) in libevdev_get_repeat()
1782 *delay = dev->rep_values[REP_DELAY]; in libevdev_get_repeat()
1784 *period = dev->rep_values[REP_PERIOD]; in libevdev_get_repeat()
1790 libevdev_kernel_set_led_value(struct libevdev *dev, unsigned int code, enum libevdev_led_value valu… in libevdev_kernel_set_led_value() argument
1792 return libevdev_kernel_set_led_values(dev, code, value, -1); in libevdev_kernel_set_led_value()
1796 libevdev_kernel_set_led_values(struct libevdev *dev, ...) in libevdev_kernel_set_led_values() argument
1805 if (!dev->initialized) { in libevdev_kernel_set_led_values()
1806 log_bug(dev, "device not initialized. call libevdev_set_fd() first\n"); in libevdev_kernel_set_led_values()
1810 if (dev->fd < 0) in libevdev_kernel_set_led_values()
1815 va_start(args, dev); in libevdev_kernel_set_led_values()
1828 if (libevdev_has_event_code(dev, EV_LED, code)) { in libevdev_kernel_set_led_values()
1848 rc = write(libevdev_get_fd(dev), ev, nleds * sizeof(ev[0])); in libevdev_kernel_set_led_values()
1852 update_led_state(dev, &ev[nleds]); in libevdev_kernel_set_led_values()
1861 libevdev_set_clock_id(struct libevdev *dev, int clockid) in libevdev_set_clock_id() argument
1863 if (!dev->initialized) { in libevdev_set_clock_id()
1864 log_bug(dev, "device not initialized. call libevdev_set_fd() first\n"); in libevdev_set_clock_id()
1868 if (dev->fd < 0) in libevdev_set_clock_id()
1871 return ioctl(dev->fd, EVIOCSCLOCKID, &clockid) ? -errno : 0; in libevdev_set_clock_id()