Lines Matching refs:evdev
101 ffc_slot(struct evdev_dev *evdev, slotset_t slots) in ffc_slot() argument
103 return (ffs(~slots & ((2U << MAXIMAL_MT_SLOT(evdev)) - 1)) - 1); in ffc_slot()
107 evdev_mt_init(struct evdev_dev *evdev) in evdev_mt_init() argument
114 type_a = !bit_test(evdev->ev_abs_flags, ABS_MT_SLOT); in evdev_mt_init()
117 evdev_support_abs(evdev, in evdev_mt_init()
119 evdev_support_abs(evdev, in evdev_mt_init()
123 slots = MAXIMAL_MT_SLOT(evdev) + 1; in evdev_mt_init()
125 if (bit_test(evdev->ev_flags, EVDEV_FLAG_MT_TRACK)) { in evdev_mt_init()
131 evdev->ev_mt = mt; in evdev_mt_init()
134 if (bit_test(evdev->ev_flags, EVDEV_FLAG_MT_TRACK)) { in evdev_mt_init()
143 if (!bit_test(evdev->ev_flags, EVDEV_FLAG_MT_KEEPID)) in evdev_mt_init()
144 evdev_support_abs(evdev, in evdev_mt_init()
146 if (bit_test(evdev->ev_flags, EVDEV_FLAG_MT_STCOMPAT)) in evdev_mt_init()
147 evdev_support_mt_compat(evdev); in evdev_mt_init()
151 evdev_mt_free(struct evdev_dev *evdev) in evdev_mt_free() argument
153 free(evdev->ev_mt, M_EVDEV); in evdev_mt_free()
157 evdev_mt_sync_frame(struct evdev_dev *evdev) in evdev_mt_sync_frame() argument
159 if (bit_test(evdev->ev_flags, EVDEV_FLAG_MT_TRACK)) in evdev_mt_sync_frame()
160 evdev_mt_replay_events(evdev); in evdev_mt_sync_frame()
161 if (bit_test(evdev->ev_flags, EVDEV_FLAG_MT_AUTOREL)) in evdev_mt_sync_frame()
162 evdev_mt_send_autorel(evdev); in evdev_mt_sync_frame()
163 if (evdev->ev_report_opened && in evdev_mt_sync_frame()
164 bit_test(evdev->ev_flags, EVDEV_FLAG_MT_STCOMPAT)) in evdev_mt_sync_frame()
165 evdev_mt_send_st_compat(evdev); in evdev_mt_sync_frame()
166 evdev->ev_mt->frame = 0; in evdev_mt_sync_frame()
170 evdev_mt_send_slot(struct evdev_dev *evdev, int slot, in evdev_mt_send_slot() argument
174 bool type_a = !bit_test(evdev->ev_abs_flags, ABS_MT_SLOT); in evdev_mt_send_slot()
176 EVDEV_LOCK_ASSERT(evdev); in evdev_mt_send_slot()
177 MPASS(type_a || (slot >= 0 && slot <= MAXIMAL_MT_SLOT(evdev))); in evdev_mt_send_slot()
181 evdev_send_event(evdev, EV_ABS, ABS_MT_SLOT, slot); in evdev_mt_send_slot()
183 evdev_send_event(evdev, EV_ABS, ABS_MT_TRACKING_ID, -1); in evdev_mt_send_slot()
187 bit_foreach_at(evdev->ev_abs_flags, ABS_MT_FIRST, ABS_MT_LAST + 1, i) in evdev_mt_send_slot()
188 evdev_send_event(evdev, EV_ABS, i, in evdev_mt_send_slot()
191 evdev_send_event(evdev, EV_SYN, SYN_MT_REPORT, 1); in evdev_mt_send_slot()
195 evdev_mt_push_slot(struct evdev_dev *evdev, int slot, in evdev_mt_push_slot() argument
198 struct evdev_mt *mt = evdev->ev_mt; in evdev_mt_push_slot()
199 bool type_a = !bit_test(evdev->ev_abs_flags, ABS_MT_SLOT); in evdev_mt_push_slot()
203 if (!type_a && (slot < 0 || slot > MAXIMAL_MT_SLOT(evdev))) in evdev_mt_push_slot()
206 EVDEV_ENTER(evdev); in evdev_mt_push_slot()
207 if (bit_test(evdev->ev_flags, EVDEV_FLAG_MT_TRACK) && mt->type_a) { in evdev_mt_push_slot()
209 evdev_mt_record_event(evdev, EV_SYN, SYN_MT_REPORT, 1); in evdev_mt_push_slot()
210 } else if (bit_test(evdev->ev_flags, EVDEV_FLAG_MT_TRACK)) { in evdev_mt_push_slot()
211 evdev_mt_record_event(evdev, EV_ABS, ABS_MT_SLOT, slot); in evdev_mt_push_slot()
215 evdev_mt_record_event(evdev, EV_ABS, in evdev_mt_push_slot()
218 evdev_mt_send_slot(evdev, slot, state); in evdev_mt_push_slot()
219 EVDEV_EXIT(evdev); in evdev_mt_push_slot()
315 evdev_mt_match_frame(struct evdev_dev *evdev, union evdev_mt_slot *pt, in evdev_mt_match_frame() argument
318 struct evdev_mt *mt = evdev->ev_mt; in evdev_mt_match_frame()
322 EVDEV_LOCK_ASSERT(evdev); in evdev_mt_match_frame()
324 MPASS(size >= 0 && size <= MAXIMAL_MT_SLOT(evdev) + 1); in evdev_mt_match_frame()
370 evdev_mt_send_frame(struct evdev_dev *evdev, union evdev_mt_slot *pt, int size) in evdev_mt_send_frame() argument
372 struct evdev_mt *mt = evdev->ev_mt; in evdev_mt_send_frame()
375 EVDEV_LOCK_ASSERT(evdev); in evdev_mt_send_frame()
376 MPASS(size >= 0 && size <= MAXIMAL_MT_SLOT(evdev) + 1); in evdev_mt_send_frame()
384 slot->id = ffc_slot(evdev, mt->touches | mt->frame); in evdev_mt_send_frame()
386 evdev_mt_send_slot(evdev, slot->id, slot); in evdev_mt_send_frame()
391 evdev_mt_push_frame(struct evdev_dev *evdev, union evdev_mt_slot *pt, int size) in evdev_mt_push_frame() argument
393 if (size < 0 || size > MAXIMAL_MT_SLOT(evdev) + 1) in evdev_mt_push_frame()
396 EVDEV_ENTER(evdev); in evdev_mt_push_frame()
397 evdev_mt_send_frame(evdev, pt, size); in evdev_mt_push_frame()
398 EVDEV_EXIT(evdev); in evdev_mt_push_frame()
404 evdev_mt_record_event(struct evdev_dev *evdev, uint16_t type, uint16_t code, in evdev_mt_record_event() argument
407 struct evdev_mt *mt = evdev->ev_mt; in evdev_mt_record_event()
409 EVDEV_LOCK_ASSERT(evdev); in evdev_mt_record_event()
436 KASSERT(mt->match_slot <= MAXIMAL_MT_SLOT(evdev), in evdev_mt_record_event()
451 evdev_mt_replay_events(struct evdev_dev *evdev) in evdev_mt_replay_events() argument
453 struct evdev_mt *mt = evdev->ev_mt; in evdev_mt_replay_events()
456 EVDEV_LOCK_ASSERT(evdev); in evdev_mt_replay_events()
463 evdev_mt_match_frame(evdev, mt->match_slots, size); in evdev_mt_replay_events()
464 evdev_mt_send_frame(evdev, mt->match_slots, size); in evdev_mt_replay_events()
470 evdev_mt_get_match_slots(struct evdev_dev *evdev) in evdev_mt_get_match_slots() argument
472 return (evdev->ev_mt->match_slots); in evdev_mt_get_match_slots()
476 evdev_mt_get_last_slot(struct evdev_dev *evdev) in evdev_mt_get_last_slot() argument
478 return (evdev->ev_mt->last_reported_slot); in evdev_mt_get_last_slot()
482 evdev_mt_set_last_slot(struct evdev_dev *evdev, int slot) in evdev_mt_set_last_slot() argument
484 struct evdev_mt *mt = evdev->ev_mt; in evdev_mt_set_last_slot()
486 MPASS(slot >= 0 && slot <= MAXIMAL_MT_SLOT(evdev)); in evdev_mt_set_last_slot()
493 evdev_mt_get_value(struct evdev_dev *evdev, int slot, int16_t code) in evdev_mt_get_value() argument
495 struct evdev_mt *mt = evdev->ev_mt; in evdev_mt_get_value()
497 MPASS(slot >= 0 && slot <= MAXIMAL_MT_SLOT(evdev)); in evdev_mt_get_value()
503 evdev_mt_set_value(struct evdev_dev *evdev, int slot, int16_t code, in evdev_mt_set_value() argument
506 struct evdev_mt *mt = evdev->ev_mt; in evdev_mt_set_value()
508 MPASS(slot >= 0 && slot <= MAXIMAL_MT_SLOT(evdev)); in evdev_mt_set_value()
520 evdev_get_mt_slot_by_tracking_id(struct evdev_dev *evdev, int32_t tracking_id) in evdev_get_mt_slot_by_tracking_id() argument
522 struct evdev_mt *mt = evdev->ev_mt; in evdev_get_mt_slot_by_tracking_id()
531 if (bit_test(evdev->ev_flags, EVDEV_FLAG_MT_TRACK)) in evdev_get_mt_slot_by_tracking_id()
532 return (ffc_slot(evdev, mt->match_frame)); in evdev_get_mt_slot_by_tracking_id()
541 return (ffc_slot(evdev, mt->touches | mt->frame)); in evdev_get_mt_slot_by_tracking_id()
545 evdev_mt_reassign_id(struct evdev_dev *evdev, int slot, int32_t id) in evdev_mt_reassign_id() argument
547 struct evdev_mt *mt = evdev->ev_mt; in evdev_mt_reassign_id()
550 if (id == -1 || bit_test(evdev->ev_flags, EVDEV_FLAG_MT_KEEPID)) { in evdev_mt_reassign_id()
555 nid = evdev_mt_get_value(evdev, slot, ABS_MT_TRACKING_ID); in evdev_mt_reassign_id()
566 if (evdev_mt_get_value(evdev, slot, ABS_MT_TRACKING_ID) == nid) in evdev_mt_reassign_id()
583 evdev_support_mt_compat(struct evdev_dev *evdev) in evdev_support_mt_compat() argument
588 if (evdev->ev_absinfo == NULL) in evdev_support_mt_compat()
591 evdev_support_event(evdev, EV_KEY); in evdev_support_mt_compat()
592 evdev_support_key(evdev, BTN_TOUCH); in evdev_support_mt_compat()
595 if (!bit_test(evdev->ev_prop_flags, INPUT_PROP_DIRECT)) in evdev_support_mt_compat()
596 evdev_support_nfingers(evdev, MAXIMAL_MT_SLOT(evdev) + 1); in evdev_support_mt_compat()
600 if (!bit_test(evdev->ev_abs_flags, evdev_mtstmap[i].mt) || in evdev_support_mt_compat()
601 bit_test(evdev->ev_abs_flags, evdev_mtstmap[i].st)) in evdev_support_mt_compat()
603 ai = evdev->ev_absinfo + evdev_mtstmap[i].mt; in evdev_support_mt_compat()
604 evdev->ev_mt->mtst_events |= 1U << i; in evdev_support_mt_compat()
606 evdev_support_abs(evdev, evdev_mtstmap[i].st, in evdev_support_mt_compat()
614 evdev_support_abs(evdev, evdev_mtstmap[i].st, in evdev_support_mt_compat()
624 evdev_mt_send_st_compat(struct evdev_dev *evdev) in evdev_mt_send_st_compat() argument
626 struct evdev_mt *mt = evdev->ev_mt; in evdev_mt_send_st_compat()
629 EVDEV_LOCK_ASSERT(evdev); in evdev_mt_send_st_compat()
632 evdev_send_event(evdev, EV_KEY, BTN_TOUCH, nfingers > 0); in evdev_mt_send_st_compat()
638 evdev_send_event(evdev, EV_ABS, evdev_mtstmap[i].st, in evdev_mt_send_st_compat()
639 evdev_mt_normalize(evdev_mt_get_value(evdev, in evdev_mt_send_st_compat()
641 evdev->ev_absinfo[evdev_mtstmap[i].mt].minimum, in evdev_mt_send_st_compat()
642 evdev->ev_absinfo[evdev_mtstmap[i].mt].maximum, in evdev_mt_send_st_compat()
646 if (!bit_test(evdev->ev_prop_flags, INPUT_PROP_DIRECT)) in evdev_mt_send_st_compat()
647 evdev_send_nfingers(evdev, nfingers); in evdev_mt_send_st_compat()
650 evdev_send_event(evdev, EV_ABS, ABS_PRESSURE, 0); in evdev_mt_send_st_compat()
654 evdev_push_mt_compat(struct evdev_dev *evdev) in evdev_push_mt_compat() argument
657 EVDEV_ENTER(evdev); in evdev_push_mt_compat()
658 evdev_mt_send_st_compat(evdev); in evdev_push_mt_compat()
659 EVDEV_EXIT(evdev); in evdev_push_mt_compat()
663 evdev_mt_send_autorel(struct evdev_dev *evdev) in evdev_mt_send_autorel() argument
665 struct evdev_mt *mt = evdev->ev_mt; in evdev_mt_send_autorel()
668 EVDEV_LOCK_ASSERT(evdev); in evdev_mt_send_autorel()
672 evdev_mt_send_slot(evdev, slot, NULL); in evdev_mt_send_autorel()
676 evdev_mt_push_autorel(struct evdev_dev *evdev) in evdev_mt_push_autorel() argument
678 EVDEV_ENTER(evdev); in evdev_mt_push_autorel()
679 evdev_mt_send_autorel(evdev); in evdev_mt_push_autorel()
680 EVDEV_EXIT(evdev); in evdev_mt_push_autorel()