diff --git a/sys/dev/adb/adb_kbd.c b/sys/dev/adb/adb_kbd.c index 62fb70cd51f..2bc5a79a7e2 100644 --- a/sys/dev/adb/adb_kbd.c +++ b/sys/dev/adb/adb_kbd.c @@ -688,18 +688,10 @@ akbd_check_char(keyboard_t *kbd) static int set_typematic(keyboard_t *kbd, int code) { - /* These numbers are in microseconds, so convert to ticks */ - - static int delays[] = { 250, 500, 750, 1000 }; - static int rates[] = { 34, 38, 42, 46, 50, 55, 59, 63, - 68, 76, 84, 92, 100, 110, 118, 126, - 136, 152, 168, 184, 200, 220, 236, 252, - 272, 304, 336, 368, 400, 440, 472, 504 }; - if (code & ~0x7f) return EINVAL; - kbd->kb_delay1 = delays[(code >> 5) & 3]; - kbd->kb_delay2 = rates[code & 0x1f]; + kbd->kb_delay1 = kbdelays[(code >> 5) & 3]; + kbd->kb_delay2 = kbrates[code & 0x1f]; return 0; } diff --git a/sys/dev/atkbdc/atkbd.c b/sys/dev/atkbdc/atkbd.c index 0c9f2592d6b..dcb5805982f 100644 --- a/sys/dev/atkbdc/atkbd.c +++ b/sys/dev/atkbdc/atkbd.c @@ -1571,22 +1571,16 @@ get_kbd_id(KBDC kbdc) return ((id2 << 8) | id1); } -static int delays[] = { 250, 500, 750, 1000 }; -static int rates[] = { 34, 38, 42, 46, 50, 55, 59, 63, - 68, 76, 84, 92, 100, 110, 118, 126, - 136, 152, 168, 184, 200, 220, 236, 252, - 272, 304, 336, 368, 400, 440, 472, 504 }; - static int typematic_delay(int i) { - return delays[(i >> 5) & 3]; + return (kbdelays[(i >> 5) & 3]); } static int typematic_rate(int i) { - return rates[i & 0x1f]; + return (kbrates[i & 0x1f]); } static int @@ -1595,13 +1589,13 @@ typematic(int delay, int rate) int value; int i; - for (i = nitems(delays) - 1; i > 0; --i) { - if (delay >= delays[i]) + for (i = nitems(kbdelays) - 1; i > 0; --i) { + if (delay >= kbdelays[i]) break; } value = i << 5; - for (i = nitems(rates) - 1; i > 0; --i) { - if (rate >= rates[i]) + for (i = nitems(kbrates) - 1; i > 0; --i) { + if (rate >= kbrates[i]) break; } value |= i; diff --git a/sys/dev/gpio/gpiokeys.c b/sys/dev/gpio/gpiokeys.c index 86f684535be..e21b53db9a4 100644 --- a/sys/dev/gpio/gpiokeys.c +++ b/sys/dev/gpio/gpiokeys.c @@ -975,17 +975,11 @@ gpiokeys_poll(keyboard_t *kbd, int on) static int gpiokeys_set_typematic(keyboard_t *kbd, int code) { - static const int delays[] = {250, 500, 750, 1000}; - static const int rates[] = {34, 38, 42, 46, 50, 55, 59, 63, - 68, 76, 84, 92, 100, 110, 118, 126, - 136, 152, 168, 184, 200, 220, 236, 252, - 272, 304, 336, 368, 400, 440, 472, 504}; - if (code & ~0x7f) { return (EINVAL); } - kbd->kb_delay1 = delays[(code >> 5) & 3]; - kbd->kb_delay2 = rates[code & 0x1f]; + kbd->kb_delay1 = kbdelays[(code >> 5) & 3]; + kbd->kb_delay2 = kbrates[code & 0x1f]; return (0); } diff --git a/sys/dev/hid/hkbd.c b/sys/dev/hid/hkbd.c index 6d9ad52469b..922256a8f23 100644 --- a/sys/dev/hid/hkbd.c +++ b/sys/dev/hid/hkbd.c @@ -1832,17 +1832,11 @@ hkbd_set_typematic(keyboard_t *kbd, int code) #ifdef EVDEV_SUPPORT struct hkbd_softc *sc = kbd->kb_data; #endif - static const int delays[] = {250, 500, 750, 1000}; - static const int rates[] = {34, 38, 42, 46, 50, 55, 59, 63, - 68, 76, 84, 92, 100, 110, 118, 126, - 136, 152, 168, 184, 200, 220, 236, 252, - 272, 304, 336, 368, 400, 440, 472, 504}; - if (code & ~0x7f) { return (EINVAL); } - kbd->kb_delay1 = delays[(code >> 5) & 3]; - kbd->kb_delay2 = rates[code & 0x1f]; + kbd->kb_delay1 = kbdelays[(code >> 5) & 3]; + kbd->kb_delay2 = kbrates[code & 0x1f]; #ifdef EVDEV_SUPPORT if (sc->sc_evdev != NULL) evdev_push_repeats(sc->sc_evdev, kbd); diff --git a/sys/dev/kbdmux/kbdmux.c b/sys/dev/kbdmux/kbdmux.c index 71f5dc7295e..97ea7ba14a6 100644 --- a/sys/dev/kbdmux/kbdmux.c +++ b/sys/dev/kbdmux/kbdmux.c @@ -963,17 +963,6 @@ kbdmux_check_char(keyboard_t *kbd) static int kbdmux_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg) { - static int delays[] = { - 250, 500, 750, 1000 - }; - - static int rates[] = { - 34, 38, 42, 46, 50, 55, 59, 63, - 68, 76, 84, 92, 100, 110, 118, 126, - 136, 152, 168, 184, 200, 220, 236, 252, - 272, 304, 336, 368, 400, 440, 472, 504 - }; - kbdmux_state_t *state = (kbdmux_state_t *) kbd->kb_data; kbdmux_kbd_t *k; keyboard_info_t *ki; @@ -1206,14 +1195,14 @@ kbdmux_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg) int i; /* lookup delay */ - for (i = sizeof(delays)/sizeof(delays[0]) - 1; i > 0; i --) - if (((int *)arg)[0] >= delays[i]) + for (i = nitems(kbdelays) - 1; i > 0; i--) + if (((int *)arg)[0] >= kbdelays[i]) break; mode = i << 5; /* lookup rate */ - for (i = sizeof(rates)/sizeof(rates[0]) - 1; i > 0; i --) - if (((int *)arg)[1] >= rates[i]) + for (i = nitems(kbrates) - 1; i > 0; i--) + if (((int *)arg)[1] >= kbrates[i]) break; mode |= i; } else @@ -1225,8 +1214,8 @@ kbdmux_ioctl(keyboard_t *kbd, u_long cmd, caddr_t arg) return (EINVAL); } - kbd->kb_delay1 = delays[(mode >> 5) & 3]; - kbd->kb_delay2 = rates[mode & 0x1f]; + kbd->kb_delay1 = kbdelays[(mode >> 5) & 3]; + kbd->kb_delay2 = kbrates[mode & 0x1f]; #ifdef EVDEV_SUPPORT if (state->ks_evdev != NULL && evdev_rcpt_mask & EVDEV_RCPT_KBDMUX) diff --git a/sys/dev/usb/input/ukbd.c b/sys/dev/usb/input/ukbd.c index 0e964da3ef1..0dd6d41f7a8 100644 --- a/sys/dev/usb/input/ukbd.c +++ b/sys/dev/usb/input/ukbd.c @@ -2002,17 +2002,11 @@ ukbd_set_typematic(keyboard_t *kbd, int code) #ifdef EVDEV_SUPPORT struct ukbd_softc *sc = kbd->kb_data; #endif - static const int delays[] = {250, 500, 750, 1000}; - static const int rates[] = {34, 38, 42, 46, 50, 55, 59, 63, - 68, 76, 84, 92, 100, 110, 118, 126, - 136, 152, 168, 184, 200, 220, 236, 252, - 272, 304, 336, 368, 400, 440, 472, 504}; - if (code & ~0x7f) { return (EINVAL); } - kbd->kb_delay1 = delays[(code >> 5) & 3]; - kbd->kb_delay2 = rates[code & 0x1f]; + kbd->kb_delay1 = kbdelays[(code >> 5) & 3]; + kbd->kb_delay2 = kbrates[code & 0x1f]; #ifdef EVDEV_SUPPORT if (sc->sc_evdev != NULL) evdev_push_repeats(sc->sc_evdev, kbd); diff --git a/sys/dev/vkbd/vkbd.c b/sys/dev/vkbd/vkbd.c index ebf9b09996c..bb91c85b271 100644 --- a/sys/dev/vkbd/vkbd.c +++ b/sys/dev/vkbd/vkbd.c @@ -1305,22 +1305,16 @@ vkbd_poll(keyboard_t *kbd, int on) * Local functions */ -static int delays[] = { 250, 500, 750, 1000 }; -static int rates[] = { 34, 38, 42, 46, 50, 55, 59, 63, - 68, 76, 84, 92, 100, 110, 118, 126, - 136, 152, 168, 184, 200, 220, 236, 252, - 272, 304, 336, 368, 400, 440, 472, 504 }; - static int typematic_delay(int i) { - return (delays[(i >> 5) & 3]); + return (kbdelays[(i >> 5) & 3]); } static int typematic_rate(int i) { - return (rates[i & 0x1f]); + return (kbrates[i & 0x1f]); } static int @@ -1329,13 +1323,13 @@ typematic(int delay, int rate) int value; int i; - for (i = nitems(delays) - 1; i > 0; i --) { - if (delay >= delays[i]) + for (i = nitems(kbdelays) - 1; i > 0; i--) { + if (delay >= kbdelays[i]) break; } value = i << 5; - for (i = nitems(rates) - 1; i > 0; i --) { - if (rate >= rates[i]) + for (i = nitems(kbrates) - 1; i > 0; i--) { + if (rate >= kbrates[i]) break; } value |= i; diff --git a/sys/sys/kbio.h b/sys/sys/kbio.h index 80a58bf8e51..3b632bf9636 100644 --- a/sys/sys/kbio.h +++ b/sys/sys/kbio.h @@ -70,6 +70,13 @@ struct keyboard_info { }; typedef struct keyboard_info keyboard_info_t; +/* keyboard repeat rate mapping table */ +static const int kbdelays[] = { 250, 500, 750, 1000 }; +static const int kbrates[] = { 34, 38, 42, 46, 50, + 55, 59, 63, 68, 76, 84, 92, 100, 110, 118, 126, + 136, 152, 168, 184, 200, 220, 236, 252, 272, 304, 336, + 368, 400, 440, 472, 504 }; + /* add/remove keyboard to/from mux */ #define KBADDKBD _IOW('K', 68, keyboard_info_t) /* add keyboard */ #define KBRELKBD _IOW('K', 69, keyboard_info_t) /* release keyboard */ diff --git a/usr.sbin/kbdcontrol/kbdcontrol.c b/usr.sbin/kbdcontrol/kbdcontrol.c index 4f3be144132..614734e6123 100644 --- a/usr.sbin/kbdcontrol/kbdcontrol.c +++ b/usr.sbin/kbdcontrol/kbdcontrol.c @@ -40,6 +40,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include "path.h" @@ -70,13 +71,13 @@ static const char ctrl_names[32][4] = { static const char acc_names[15][5] = { "dgra", "dacu", "dcir", "dtil", "dmac", "dbre", "ddot", - "duml", "dsla", "drin", "dced", "dapo", "ddac", "dogo", + "duml", "dsla", "drin", "dced", "dapo", "ddac", "dogo", "dcar", }; static const char acc_names_u[15][5] = { "DGRA", "DACU", "DCIR", "DTIL", "DMAC", "DBRE", "DDOT", - "DUML", "DSLA", "DRIN", "DCED", "DAPO", "DDAC", "DOGO", + "DUML", "DSLA", "DRIN", "DCED", "DAPO", "DDAC", "DOGO", "DCAR", }; @@ -107,13 +108,8 @@ static const char fkey_table[96][MAXFK] = { /* 93-96 */ "" , "" , "" , "" , }; -static const int delays[] = {250, 500, 750, 1000}; -static const int repeats[] = { 34, 38, 42, 46, 50, 55, 59, 63, - 68, 76, 84, 92, 100, 110, 118, 126, - 136, 152, 168, 184, 200, 220, 236, 252, - 272, 304, 336, 368, 400, 440, 472, 504}; -static const int ndelays = (sizeof(delays) / sizeof(int)); -static const int nrepeats = (sizeof(repeats) / sizeof(int)); +static const int ndelays = nitems(kbdelays); +static const int nrepeats = nitems(kbrates); static int hex = 0; static int paths_configured = 0; static int token; @@ -298,7 +294,7 @@ get_definition_line(FILE *file, keymap_t *keymap, accentmap_t *accentmap) if (token < 0) token = yylex(); - switch (token) { + switch (token) { case TNUM: c = get_key_definition_line(keymap); if (c < 0) @@ -751,7 +747,7 @@ dump_key_definition(char *name, keymap_t *keymap) dump_entry(keymap->key[i].map[j]); } printf("}, 0x%02X,0x%02X },\n", - (unsigned)keymap->key[i].spcl, + (unsigned)keymap->key[i].spcl, (unsigned)keymap->key[i].flgs); } printf("} };\n\n"); @@ -764,7 +760,7 @@ dump_accent_definition(char *name, accentmap_t *accentmap) int c; printf("static accentmap_t accentmap_%s = { %d", - name, accentmap->n_accs); + name, accentmap->n_accs); if (accentmap->n_accs <= 0) { printf(" };\n\n"); return; @@ -785,7 +781,7 @@ dump_accent_definition(char *name, accentmap_t *accentmap) } else printf(" 0x%02x, {", c); for (j = 0; j < NUM_ACCENTCHARS; j++) { - c = accentmap->acc[i].map[j][0]; + c = accentmap->acc[i].map[j][0]; if (c == 0) break; if ((j > 0) && ((j % 4) == 0)) @@ -793,7 +789,7 @@ dump_accent_definition(char *name, accentmap_t *accentmap) if (isascii(c) && isprint(c)) printf(" { '%c',", c); else - printf(" { 0x%02x,", c); + printf(" { 0x%02x,", c); printf("0x%02x },", accentmap->acc[i].map[j][1]); } printf(" }, },\n"); @@ -900,8 +896,8 @@ load_keymap(char *opt, int dumponly) fclose(file); return; } - if ((accentmap.n_accs > 0) - && (ioctl(0, PIO_DEADKEYMAP, &accentmap) < 0)) { + if ((accentmap.n_accs > 0) + && (ioctl(0, PIO_DEADKEYMAP, &accentmap) < 0)) { #ifdef OPIO_DEADKEYMAP to_old_accentmap(&accentmap, &oaccentmap); if (ioctl(0, OPIO_DEADKEYMAP, &oaccentmap) < 0) @@ -1058,14 +1054,20 @@ set_keyrates(char *opt) int r, d; if (!strcmp(opt, "slow")) { - delay = 1000, repeat = 500; - d = 3, r = 31; + delay = 1000; + repeat = 504; + d = 3; + r = 31; } else if (!strcmp(opt, "normal")) { - delay = 500, repeat = 125; - d = 1, r = 15; + delay = 500; + repeat = 126; + d = 1; + r = 15; } else if (!strcmp(opt, "fast")) { - delay = repeat = 0; - d = r = 0; + delay = 0; + repeat = 0; + d = 0; + r = 0; } else { int n; char *v1; @@ -1081,11 +1083,11 @@ set_keyrates(char *opt) return; } for (n = 0; n < ndelays - 1; n++) - if (delay <= delays[n]) + if (delay <= kbdelays[n]) break; d = n; for (n = 0; n < nrepeats - 1; n++) - if (repeat <= repeats[n]) + if (repeat <= kbrates[n]) break; r = n; } @@ -1093,6 +1095,7 @@ set_keyrates(char *opt) arg[0] = delay; arg[1] = repeat; if (ioctl(0, KDSETREPEAT, arg)) { + warn("fallback, setting keyboard rate via legacy interface (KDSETRAD), will be removed soon"); if (ioctl(0, KDSETRAD, (d << 5) | r)) warn("setting keyboard rate"); } @@ -1151,7 +1154,7 @@ set_keyboard(char *device) } /* * The keyboard device driver won't release the keyboard by - * the following ioctl, but it automatically will, when the device + * the following ioctl, but it automatically will, when the device * is closed. So, we don't check error here. */ ioctl(fd, CONS_RELKBD, 0);