Lines Matching full:hi

183 	struct hidmap_hid_item *hi;  in hidmap_intr()  local
204 for (hi = hm->hid_items; hi < hm->hid_items + hm->nhid_items; hi++) { in hidmap_intr()
206 if (hi->type == HIDMAP_TYPE_FINALCB) { in hidmap_intr()
207 DPRINTFN(hm, 6, "type=%d item=%*D\n", hi->type, in hidmap_intr()
208 (int)sizeof(hi->cb), &hi->cb, " "); in hidmap_intr()
209 if (hi->cb(hm, hi, (union hidmap_cb_ctx){.rid = id}) in hidmap_intr()
216 if (id != hi->id) in hidmap_intr()
225 data = hi->lmin < 0 || hi->lmax < 0 in hidmap_intr()
226 ? hid_get_data(buf, len, &hi->loc) in hidmap_intr()
227 : hid_get_udata(buf, len, &hi->loc); in hidmap_intr()
229 DPRINTFN(hm, 6, "type=%d data=%d item=%*D\n", hi->type, data, in hidmap_intr()
230 (int)sizeof(hi->cb), &hi->cb, " "); in hidmap_intr()
232 if (hi->invert_value && hi->type < HIDMAP_TYPE_ARR_LIST) in hidmap_intr()
233 data = hi->evtype == EV_REL in hidmap_intr()
235 : hi->lmin + hi->lmax - data; in hidmap_intr()
237 switch (hi->type) { in hidmap_intr()
239 if (hi->cb(hm, hi, (union hidmap_cb_ctx){.data = data}) in hidmap_intr()
250 if (data < hi->lmin || data > hi->lmax) in hidmap_intr()
259 if (data == (hi->evtype == EV_REL ? 0 : hi->last_val)) in hidmap_intr()
261 if (hi->evtype == EV_KEY) in hidmap_intr()
262 hidmap_push_key(hm, hi->code, data); in hidmap_intr()
264 evdev_push_event(hm->evdev, hi->evtype, in hidmap_intr()
265 hi->code, data); in hidmap_intr()
266 hi->last_val = data; in hidmap_intr()
275 if (data < hi->lmin || data > hi->lmax) in hidmap_intr()
282 key = hi->codes[data - hi->lmin]; in hidmap_intr()
294 if (data < hi->lmin || data > hi->lmax) in hidmap_intr()
302 usage = data - hi->lmin + hi->umin; in hidmap_intr()
316 if (key == HIDMAP_KEY_NULL || key == hi->last_key) in hidmap_intr()
318 if (hi->last_key != KEY_RESERVED) in hidmap_intr()
319 hidmap_push_key(hm, hi->last_key, 0); in hidmap_intr()
322 hi->last_key = key; in hidmap_intr()
326 KASSERT(0, ("Unknown map type (%d)", hi->type)); in hidmap_intr()
339 can_map_callback(struct hid_item *hi, const struct hidmap_item *mi, in can_map_callback() argument
344 hi->usage == mi->usage + usage_offset && in can_map_callback()
346 !(hi->flags & HIO_RELATIVE) == !(mi->relabs == HIDMAP_RELATIVE))); in can_map_callback()
350 can_map_variable(struct hid_item *hi, const struct hidmap_item *mi, in can_map_variable() argument
354 return ((hi->flags & HIO_VARIABLE) != 0 && !mi->has_cb && in can_map_variable()
355 hi->usage == mi->usage + usage_offset && in can_map_variable()
357 !(hi->flags & HIO_RELATIVE) == !(mi->relabs == HIDMAP_RELATIVE))); in can_map_variable()
361 can_map_arr_range(struct hid_item *hi, const struct hidmap_item *mi, in can_map_arr_range() argument
365 return ((hi->flags & HIO_VARIABLE) == 0 && !mi->has_cb && in can_map_arr_range()
366 hi->usage_minimum <= mi->usage + usage_offset && in can_map_arr_range()
367 hi->usage_maximum >= mi->usage + usage_offset && in can_map_arr_range()
373 can_map_arr_list(struct hid_item *hi, const struct hidmap_item *mi, in can_map_arr_list() argument
377 return ((hi->flags & HIO_VARIABLE) == 0 && !mi->has_cb && in can_map_arr_list()
384 hidmap_probe_hid_item(struct hid_item *hi, const struct hidmap_item *map, in hidmap_probe_hid_item() argument
396 if (can_map_callback(hi, map + i, uoff)) { in hidmap_probe_hid_item()
398 (union hidmap_cb_ctx){.hi = hi}) != 0) in hidmap_probe_hid_item()
405 if (hi->flags & HIO_VARIABLE) { in hidmap_probe_hid_item()
407 if (can_map_variable(hi, map + i, uoff)) { in hidmap_probe_hid_item()
420 if (hi->usage_minimum != 0 || hi->usage_maximum != 0) { in hidmap_probe_hid_item()
422 if (can_map_arr_range(hi, map + i, uoff)) { in hidmap_probe_hid_item()
430 for (j = 0; j < hi->nusages; j++) { in hidmap_probe_hid_item()
432 if (can_map_arr_list(hi, map+i, hi->usages[j], uoff)) { in hidmap_probe_hid_item()
447 struct hid_item hi; in hidmap_probe_hid_descr() local
460 HIDBUS_FOREACH_ITEM(hd, &hi, tlc_index) { in hidmap_probe_hid_descr()
461 if (hi.kind != hid_input) in hidmap_probe_hid_descr()
463 if (hi.flags & HIO_CONST) in hidmap_probe_hid_descr()
465 for (i = 0; i < hi.loc.count; i++, hi.loc.pos += hi.loc.size) in hidmap_probe_hid_descr()
466 if (hidmap_probe_hid_item(&hi, map, nitems_map, caps)) in hidmap_probe_hid_descr()
538 hidmap_parse_hid_item(struct hidmap *hm, struct hid_item *hi, in hidmap_parse_hid_item() argument
548 if (can_map_callback(hi, mi, uoff)) { in hidmap_parse_hid_item()
557 (union hidmap_cb_ctx){.hi = hi}) != 0) in hidmap_parse_hid_item()
564 if (hi->flags & HIO_VARIABLE) { in hidmap_parse_hid_item()
566 if (can_map_variable(hi, mi, uoff)) { in hidmap_parse_hid_item()
569 item->type = hi->flags & HIO_NULLSTATE in hidmap_parse_hid_item()
587 hi->logical_minimum, in hidmap_parse_hid_item()
588 hi->logical_maximum, in hidmap_parse_hid_item()
591 hid_item_resolution(hi)); in hidmap_parse_hid_item()
607 if (hi->usage_minimum != 0 || hi->usage_maximum != 0) { in hidmap_parse_hid_item()
609 if (can_map_arr_range(hi, mi, uoff)) { in hidmap_parse_hid_item()
616 item->umin = hi->usage_minimum; in hidmap_parse_hid_item()
622 for (i = 0; i < hi->nusages; i++) { in hidmap_parse_hid_item()
624 if (can_map_arr_list(hi, mi, hi->usages[i], uoff)) { in hidmap_parse_hid_item()
628 hi->nusages * sizeof(uint16_t), in hidmap_parse_hid_item()
642 item->id = hi->report_ID; in hidmap_parse_hid_item()
643 item->loc = hi->loc; in hidmap_parse_hid_item()
645 item->lmin = hi->logical_minimum; in hidmap_parse_hid_item()
646 item->lmax = hi->logical_maximum; in hidmap_parse_hid_item()
649 hi->usage, hi->report_ID, hi->loc.pos, hi->loc.size, item->type, in hidmap_parse_hid_item()
662 struct hid_item hi; in hidmap_parse_hid_descr() local
675 HIDBUS_FOREACH_ITEM(hd, &hi, tlc_index) { in hidmap_parse_hid_descr()
676 if (hi.kind != hid_input) in hidmap_parse_hid_descr()
678 if (hi.flags & HIO_CONST) in hidmap_parse_hid_descr()
680 for (i = 0; i < hi.loc.count; i++, hi.loc.pos += hi.loc.size) in hidmap_parse_hid_descr()
681 if (hidmap_parse_hid_item(hm, &hi, item)) in hidmap_parse_hid_descr()
806 struct hidmap_hid_item *hi; in hidmap_detach() local
814 for (hi = hm->hid_items; in hidmap_detach()
815 hi < hm->hid_items + hm->nhid_items; in hidmap_detach()
816 hi++) in hidmap_detach()
817 if (hi->type == HIDMAP_TYPE_FINALCB || in hidmap_detach()
818 hi->type == HIDMAP_TYPE_CALLBACK) in hidmap_detach()
819 hi->cb(hm, hi, (union hidmap_cb_ctx){}); in hidmap_detach()
820 else if (hi->type == HIDMAP_TYPE_ARR_LIST) in hidmap_detach()
821 free(hi->codes, M_DEVBUF); in hidmap_detach()