Lines Matching refs:evdev

100 ffc_slot(struct evdev_dev *evdev, slotset_t slots)  in ffc_slot()  argument
102 return (ffs(~slots & ((2U << MAXIMAL_MT_SLOT(evdev)) - 1)) - 1); in ffc_slot()
106 evdev_mt_init(struct evdev_dev *evdev) in evdev_mt_init() argument
113 type_a = !bit_test(evdev->ev_abs_flags, ABS_MT_SLOT); in evdev_mt_init()
116 evdev_support_abs(evdev, in evdev_mt_init()
118 evdev_support_abs(evdev, in evdev_mt_init()
122 slots = MAXIMAL_MT_SLOT(evdev) + 1; in evdev_mt_init()
124 if (bit_test(evdev->ev_flags, EVDEV_FLAG_MT_TRACK)) { in evdev_mt_init()
130 evdev->ev_mt = mt; in evdev_mt_init()
133 if (bit_test(evdev->ev_flags, EVDEV_FLAG_MT_TRACK)) { in evdev_mt_init()
142 if (!bit_test(evdev->ev_flags, EVDEV_FLAG_MT_KEEPID)) in evdev_mt_init()
143 evdev_support_abs(evdev, in evdev_mt_init()
145 if (bit_test(evdev->ev_flags, EVDEV_FLAG_MT_STCOMPAT)) in evdev_mt_init()
146 evdev_mt_support_st_compat(evdev); in evdev_mt_init()
150 evdev_mt_free(struct evdev_dev *evdev) in evdev_mt_free() argument
152 free(evdev->ev_mt, M_EVDEV); in evdev_mt_free()
156 evdev_mt_sync_frame(struct evdev_dev *evdev) in evdev_mt_sync_frame() argument
158 if (bit_test(evdev->ev_flags, EVDEV_FLAG_MT_TRACK)) in evdev_mt_sync_frame()
159 evdev_mt_replay_events(evdev); in evdev_mt_sync_frame()
160 if (bit_test(evdev->ev_flags, EVDEV_FLAG_MT_AUTOREL)) in evdev_mt_sync_frame()
161 evdev_mt_send_autorel(evdev); in evdev_mt_sync_frame()
162 if (evdev->ev_report_opened && in evdev_mt_sync_frame()
163 bit_test(evdev->ev_flags, EVDEV_FLAG_MT_STCOMPAT)) in evdev_mt_sync_frame()
164 evdev_mt_send_st_compat(evdev); in evdev_mt_sync_frame()
165 evdev->ev_mt->frame = 0; in evdev_mt_sync_frame()
169 evdev_mt_send_slot(struct evdev_dev *evdev, int slot, in evdev_mt_send_slot() argument
173 bool type_a = !bit_test(evdev->ev_abs_flags, ABS_MT_SLOT); in evdev_mt_send_slot()
175 EVDEV_LOCK_ASSERT(evdev); in evdev_mt_send_slot()
176 MPASS(type_a || (slot >= 0 && slot <= MAXIMAL_MT_SLOT(evdev))); in evdev_mt_send_slot()
180 evdev_send_event(evdev, EV_ABS, ABS_MT_SLOT, slot); in evdev_mt_send_slot()
182 evdev_send_event(evdev, EV_ABS, ABS_MT_TRACKING_ID, -1); in evdev_mt_send_slot()
186 bit_foreach_at(evdev->ev_abs_flags, ABS_MT_FIRST, ABS_MT_LAST + 1, i) in evdev_mt_send_slot()
187 evdev_send_event(evdev, EV_ABS, i, in evdev_mt_send_slot()
190 evdev_send_event(evdev, EV_SYN, SYN_MT_REPORT, 1); in evdev_mt_send_slot()
194 evdev_mt_push_slot(struct evdev_dev *evdev, int slot, in evdev_mt_push_slot() argument
197 struct evdev_mt *mt = evdev->ev_mt; in evdev_mt_push_slot()
198 bool type_a = !bit_test(evdev->ev_abs_flags, ABS_MT_SLOT); in evdev_mt_push_slot()
202 if (!type_a && (slot < 0 || slot > MAXIMAL_MT_SLOT(evdev))) in evdev_mt_push_slot()
205 EVDEV_ENTER(evdev); in evdev_mt_push_slot()
206 if (bit_test(evdev->ev_flags, EVDEV_FLAG_MT_TRACK) && mt->type_a) { in evdev_mt_push_slot()
208 evdev_mt_record_event(evdev, EV_SYN, SYN_MT_REPORT, 1); in evdev_mt_push_slot()
209 } else if (bit_test(evdev->ev_flags, EVDEV_FLAG_MT_TRACK)) { in evdev_mt_push_slot()
210 evdev_mt_record_event(evdev, EV_ABS, ABS_MT_SLOT, slot); in evdev_mt_push_slot()
214 evdev_mt_record_event(evdev, EV_ABS, in evdev_mt_push_slot()
217 evdev_mt_send_slot(evdev, slot, state); in evdev_mt_push_slot()
218 EVDEV_EXIT(evdev); in evdev_mt_push_slot()
314 evdev_mt_match_frame(struct evdev_dev *evdev, union evdev_mt_slot *pt, in evdev_mt_match_frame() argument
317 struct evdev_mt *mt = evdev->ev_mt; in evdev_mt_match_frame()
321 EVDEV_LOCK_ASSERT(evdev); in evdev_mt_match_frame()
323 MPASS(size >= 0 && size <= MAXIMAL_MT_SLOT(evdev) + 1); in evdev_mt_match_frame()
369 evdev_mt_send_frame(struct evdev_dev *evdev, union evdev_mt_slot *pt, int size) in evdev_mt_send_frame() argument
371 struct evdev_mt *mt = evdev->ev_mt; in evdev_mt_send_frame()
374 EVDEV_LOCK_ASSERT(evdev); in evdev_mt_send_frame()
375 MPASS(size >= 0 && size <= MAXIMAL_MT_SLOT(evdev) + 1); in evdev_mt_send_frame()
383 slot->id = ffc_slot(evdev, mt->touches | mt->frame); in evdev_mt_send_frame()
385 evdev_mt_send_slot(evdev, slot->id, slot); in evdev_mt_send_frame()
390 evdev_mt_push_frame(struct evdev_dev *evdev, union evdev_mt_slot *pt, int size) in evdev_mt_push_frame() argument
392 if (size < 0 || size > MAXIMAL_MT_SLOT(evdev) + 1) in evdev_mt_push_frame()
395 EVDEV_ENTER(evdev); in evdev_mt_push_frame()
396 evdev_mt_send_frame(evdev, pt, size); in evdev_mt_push_frame()
397 EVDEV_EXIT(evdev); in evdev_mt_push_frame()
403 evdev_mt_record_event(struct evdev_dev *evdev, uint16_t type, uint16_t code, in evdev_mt_record_event() argument
406 struct evdev_mt *mt = evdev->ev_mt; in evdev_mt_record_event()
408 EVDEV_LOCK_ASSERT(evdev); in evdev_mt_record_event()
435 KASSERT(mt->match_slot <= MAXIMAL_MT_SLOT(evdev), in evdev_mt_record_event()
450 evdev_mt_replay_events(struct evdev_dev *evdev) in evdev_mt_replay_events() argument
452 struct evdev_mt *mt = evdev->ev_mt; in evdev_mt_replay_events()
455 EVDEV_LOCK_ASSERT(evdev); in evdev_mt_replay_events()
462 evdev_mt_match_frame(evdev, mt->match_slots, size); in evdev_mt_replay_events()
463 evdev_mt_send_frame(evdev, mt->match_slots, size); in evdev_mt_replay_events()
469 evdev_mt_get_match_slots(struct evdev_dev *evdev) in evdev_mt_get_match_slots() argument
471 return (evdev->ev_mt->match_slots); in evdev_mt_get_match_slots()
475 evdev_mt_get_last_slot(struct evdev_dev *evdev) in evdev_mt_get_last_slot() argument
477 return (evdev->ev_mt->last_reported_slot); in evdev_mt_get_last_slot()
481 evdev_mt_set_last_slot(struct evdev_dev *evdev, int slot) in evdev_mt_set_last_slot() argument
483 struct evdev_mt *mt = evdev->ev_mt; in evdev_mt_set_last_slot()
485 MPASS(slot >= 0 && slot <= MAXIMAL_MT_SLOT(evdev)); in evdev_mt_set_last_slot()
492 evdev_mt_get_value(struct evdev_dev *evdev, int slot, int16_t code) in evdev_mt_get_value() argument
494 struct evdev_mt *mt = evdev->ev_mt; in evdev_mt_get_value()
496 MPASS(slot >= 0 && slot <= MAXIMAL_MT_SLOT(evdev)); in evdev_mt_get_value()
502 evdev_mt_set_value(struct evdev_dev *evdev, int slot, int16_t code, in evdev_mt_set_value() argument
505 struct evdev_mt *mt = evdev->ev_mt; in evdev_mt_set_value()
507 MPASS(slot >= 0 && slot <= MAXIMAL_MT_SLOT(evdev)); in evdev_mt_set_value()
519 evdev_mt_id_to_slot(struct evdev_dev *evdev, int32_t tracking_id) in evdev_mt_id_to_slot() argument
521 struct evdev_mt *mt = evdev->ev_mt; in evdev_mt_id_to_slot()
530 if (bit_test(evdev->ev_flags, EVDEV_FLAG_MT_TRACK)) in evdev_mt_id_to_slot()
531 return (ffc_slot(evdev, mt->match_frame)); in evdev_mt_id_to_slot()
540 return (ffc_slot(evdev, mt->touches | mt->frame)); in evdev_mt_id_to_slot()
544 evdev_mt_reassign_id(struct evdev_dev *evdev, int slot, int32_t id) in evdev_mt_reassign_id() argument
546 struct evdev_mt *mt = evdev->ev_mt; in evdev_mt_reassign_id()
549 if (id == -1 || bit_test(evdev->ev_flags, EVDEV_FLAG_MT_KEEPID)) { in evdev_mt_reassign_id()
554 nid = evdev_mt_get_value(evdev, slot, ABS_MT_TRACKING_ID); in evdev_mt_reassign_id()
565 if (evdev_mt_get_value(evdev, slot, ABS_MT_TRACKING_ID) == nid) in evdev_mt_reassign_id()
582 evdev_mt_support_st_compat(struct evdev_dev *evdev) in evdev_mt_support_st_compat() argument
587 if (evdev->ev_absinfo == NULL) in evdev_mt_support_st_compat()
590 evdev_support_event(evdev, EV_KEY); in evdev_mt_support_st_compat()
591 evdev_support_key(evdev, BTN_TOUCH); in evdev_mt_support_st_compat()
594 if (!bit_test(evdev->ev_prop_flags, INPUT_PROP_DIRECT)) in evdev_mt_support_st_compat()
595 evdev_support_nfingers(evdev, MAXIMAL_MT_SLOT(evdev) + 1); in evdev_mt_support_st_compat()
599 if (!bit_test(evdev->ev_abs_flags, evdev_mtstmap[i].mt) || in evdev_mt_support_st_compat()
600 bit_test(evdev->ev_abs_flags, evdev_mtstmap[i].st)) in evdev_mt_support_st_compat()
602 ai = evdev->ev_absinfo + evdev_mtstmap[i].mt; in evdev_mt_support_st_compat()
603 evdev->ev_mt->mtst_events |= 1U << i; in evdev_mt_support_st_compat()
605 evdev_support_abs(evdev, evdev_mtstmap[i].st, in evdev_mt_support_st_compat()
613 evdev_support_abs(evdev, evdev_mtstmap[i].st, in evdev_mt_support_st_compat()
623 evdev_mt_send_st_compat(struct evdev_dev *evdev) in evdev_mt_send_st_compat() argument
625 struct evdev_mt *mt = evdev->ev_mt; in evdev_mt_send_st_compat()
628 EVDEV_LOCK_ASSERT(evdev); in evdev_mt_send_st_compat()
631 evdev_send_event(evdev, EV_KEY, BTN_TOUCH, nfingers > 0); in evdev_mt_send_st_compat()
637 evdev_send_event(evdev, EV_ABS, evdev_mtstmap[i].st, in evdev_mt_send_st_compat()
638 evdev_mt_normalize(evdev_mt_get_value(evdev, in evdev_mt_send_st_compat()
640 evdev->ev_absinfo[evdev_mtstmap[i].mt].minimum, in evdev_mt_send_st_compat()
641 evdev->ev_absinfo[evdev_mtstmap[i].mt].maximum, in evdev_mt_send_st_compat()
645 if (!bit_test(evdev->ev_prop_flags, INPUT_PROP_DIRECT)) in evdev_mt_send_st_compat()
646 evdev_send_nfingers(evdev, nfingers); in evdev_mt_send_st_compat()
649 evdev_send_event(evdev, EV_ABS, ABS_PRESSURE, 0); in evdev_mt_send_st_compat()
653 evdev_mt_send_autorel(struct evdev_dev *evdev) in evdev_mt_send_autorel() argument
655 struct evdev_mt *mt = evdev->ev_mt; in evdev_mt_send_autorel()
658 EVDEV_LOCK_ASSERT(evdev); in evdev_mt_send_autorel()
662 evdev_mt_send_slot(evdev, slot, NULL); in evdev_mt_send_autorel()
666 evdev_mt_push_autorel(struct evdev_dev *evdev) in evdev_mt_push_autorel() argument
668 EVDEV_ENTER(evdev); in evdev_mt_push_autorel()
669 evdev_mt_send_autorel(evdev); in evdev_mt_push_autorel()
670 EVDEV_EXIT(evdev); in evdev_mt_push_autorel()