Home | History | Annotate | Download | only in hid

Lines Matching defs:kbd

253 hidkbd_attach(device_t self, struct hidkbd *kbd, int console,
258 kbd->sc_var = NULL;
260 parserr = hidkbd_parse_desc(kbd, id, desc, dlen);
268 kbd->sc_nvar, kbd->sc_nkeycode);
271 kbd->sc_device = self;
272 kbd->sc_debounce = (qflags & HIDKBD_SPUR_BUT_UP) != 0;
281 kbd->sc_console_keyboard = hidkbd_is_console;
286 callout_init(&kbd->sc_delay, 0);
287 callout_setfunc(&kbd->sc_delay, hidkbd_delayed_decode, kbd);
293 hidkbd_attach_wskbd(struct hidkbd *kbd, kbd_t layout,
300 a.console = kbd->sc_console_keyboard;
303 a.accesscookie = device_private(kbd->sc_device);
304 kbd->sc_wskbddev = config_found(kbd->sc_device, &a,
309 hidkbd_detach(struct hidkbd *kbd, int flags)
313 DPRINTF(("hidkbd_detach: sc=%p flags=%d\n", device_private(kbd->sc_device), flags));
315 if (kbd->sc_console_keyboard) {
323 device_printf(kbd->sc_device, "was console keyboard\n");
327 if (kbd->sc_wskbddev != NULL)
328 rv = config_detach(kbd->sc_wskbddev, flags);
330 if (kbd->sc_var != NULL)
331 kmem_free(kbd->sc_var,
332 kbd->sc_nvar * sizeof(struct hidkbd_variable));
352 struct hidkbd *kbd = vsc;
355 spos = ibuf + kbd->sc_keycodeloc.pos / 8;
356 epos = spos + kbd->sc_nkeycode;
368 struct hidkbd *kbd = vsc;
370 if (!hid_get_data(ibuf, ilen, &kbd->sc_fn))
380 struct hidkbd *kbd = vsc;
382 if (!hid_get_data(ibuf, ilen, &kbd->sc_fn))
402 struct hidkbd *kbd = vsc;
404 if (!hid_get_data(ibuf, ilen, &kbd->sc_fn))
421 hidkbd_input(struct hidkbd *kbd, uint8_t *data, u_int len)
423 struct hidkbd_data *ud = &kbd->sc_ndata;
426 if (kbd->sc_munge != NULL)
427 (*kbd->sc_munge)(kbd, (uint8_t *)data, len);
439 for (i = 0; i < kbd->sc_nvar; i++)
442 &kbd->sc_var[i].loc);
445 &kbd->sc_var[i].loc);
449 if (kbd->sc_keycodeloc.pos / 8 + kbd->sc_nkeycode <= len)
450 memcpy(ud->keycode, data + kbd->sc_keycodeloc.pos / 8,
451 kbd->sc_nkeycode);
453 memset(ud->keycode, 0, kbd->sc_nkeycode);
455 if (kbd->sc_debounce && !kbd->sc_polling) {
462 kbd->sc_data = *ud;
463 callout_schedule(&kbd->sc_delay, mstohz(20));
465 hidkbd_decode(kbd, ud);
472 struct hidkbd *kbd = addr;
474 hidkbd_decode(kbd, &kbd->sc_data);
478 hidkbd_decode(struct hidkbd *kbd, struct hidkbd_data *ud)
493 p->unit = device_unit(kbd->sc_device);
516 for (i = 0; i < kbd->sc_nvar; i++)
517 if ((kbd->sc_odata.var[i] & kbd->sc_var[i].mask) !=
518 (ud->var[i] & kbd->sc_var[i].mask)) {
519 ADDKEY(kbd->sc_var[i].key |
520 ((ud->var[i] & kbd->sc_var[i].mask) ?
524 if (memcmp(ud->keycode, kbd->sc_odata.keycode, kbd->sc_nkeycode) != 0) {
526 for (i = 0; i < kbd->sc_nkeycode; i++) {
527 key = kbd->sc_odata.keycode[i];
530 for (j = 0; j < kbd->sc_nkeycode; j++)
540 for (i = 0; i < kbd->sc_nkeycode; i++) {
544 for (j = 0; j < kbd->sc_nkeycode; j++)
545 if (key == kbd->sc_odata.keycode[j])
553 kbd->sc_odata = *ud;
558 if (kbd->sc_polling) {
560 memcpy(kbd->sc_pollchars, ibuf, nkeys * sizeof(u_int16_t));
561 kbd->sc_npollchar = nkeys;
565 if (kbd->sc_wskbddev == NULL)
569 if (kbd->sc_rawkbd) {
589 wskbd_rawinput(kbd->sc_wskbddev, cbuf, j);
606 wskbd_input(kbd->sc_wskbddev,
621 wskbd_input(kbd->sc_wskbddev,
630 hidkbd_enable(struct hidkbd *kbd, int on)
632 if (kbd->sc_enabled == on)
635 kbd->sc_enabled = on;
640 hidkbd_set_leds(struct hidkbd *kbd, int leds, uint8_t *report)
642 if (kbd->sc_leds == leds)
645 kbd->sc_leds = leds;
653 if ((leds & WSKBD_LED_SCROLL) && kbd->sc_scroloc.size == 1)
654 *report |= 1 << kbd->sc_scroloc.pos;
655 if ((leds & WSKBD_LED_NUM) && kbd->sc_numloc.size == 1)
656 *report |= 1 << kbd->sc_numloc.pos;
657 if ((leds & WSKBD_LED_CAPS) && kbd->sc_capsloc.size == 1)
658 *report |= 1 << kbd->sc_capsloc.pos;
659 if ((leds & WSKBD_LED_COMPOSE) && kbd->sc_compose.size == 1)
660 *report |= 1 << kbd->sc_compose.pos;
666 hidkbd_ioctl(struct hidkbd *kbd, u_long cmd, void *data, int flag,
671 *(int *)data = kbd->sc_leds;
676 kbd->sc_rawkbd = *(int *)data == WSKBD_RAW;
685 hidkbd_cngetc(struct hidkbd *kbd, u_int *type, int *data)
689 c = kbd->sc_pollchars[0];
690 kbd->sc_npollchar--;
691 memmove(kbd->sc_pollchars, kbd->sc_pollchars+1,
692 kbd->sc_npollchar * sizeof(u_int16_t));
698 hidkbd_parse_desc(struct hidkbd *kbd, int id, void *desc, int dlen)
704 kbd->sc_nkeycode = 0;
722 kbd->sc_nvar = ivar;
723 kbd->sc_var = kmem_zalloc(
724 kbd->sc_nvar * sizeof(struct hidkbd_variable),
747 kbd->sc_var[i].loc = h.loc;
748 kbd->sc_var[i].mask = 1 << (i % 8);
749 kbd->sc_var[i].key = HID_GET_USAGE(h.usage);
762 if (kbd->sc_nkeycode != 0) {
766 kbd->sc_keycodeloc = h.loc;
769 kbd->sc_nkeycode = MAXKEYCODE;
771 kbd->sc_nkeycode = h.loc.count;
778 if (kbd->sc_nkeycode == 0 && ivar == 0)
782 id, hid_output, &kbd->sc_numloc, NULL);
784 id, hid_output, &kbd->sc_capsloc, NULL);
786 id, hid_output, &kbd->sc_scroloc, NULL);
788 id, hid_output, &kbd->sc_compose, NULL);