int btkbd_ioctl(void *self, u_long cmd, caddr_t data, int flag, struct proc *p) { struct btkbd_softc *sc = (struct btkbd_softc *)self; struct hidkbd *kbd = &sc->sc_kbd; switch (cmd) { case WSKBDIO_GTYPE: *(int *)data = WSKBD_TYPE_BLUETOOTH; return 0; case WSKBDIO_SETLEDS: btkbd_set_leds(sc, *(int *)data); return 0; default: return hidkbd_ioctl(kbd, cmd, data, flag, p); } }
int ukbd_ioctl(void *v, u_long cmd, caddr_t data, int flag, struct proc *p) { struct ukbd_softc *sc = v; struct hidkbd *kbd = &sc->sc_kbd; int rc; switch (cmd) { case WSKBDIO_GTYPE: *(int *)data = WSKBD_TYPE_USB; return (0); case WSKBDIO_SETLEDS: ukbd_set_leds(v, *(int *)data); return (0); default: rc = uhidev_ioctl(&sc->sc_hdev, cmd, data, flag, p); if (rc != -1) return rc; else return hidkbd_ioctl(kbd, cmd, data, flag, p); } }