> On Jan 13, 2015, at 9:15 AM, William Orr <w...@worrbase.com> wrote: > > Hey, any interest? > > On 12/12/2014 08:29 PM, William Orr wrote: >> Hey, >> >> On some macbook airs, the function keys have different functionality when the >> Fn key is pressed. I've added an additional munge function to handle these >> particular cases. >> >> Thanks, >> William Orr >> >> Index: sys/dev/usb/ukbd.c >> =================================================================== >> RCS file: /cvs/src/sys/dev/usb/ukbd.c,v >> retrieving revision 1.69 >> diff -u -b -w -p -r1.69 ukbd.c >> --- sys/dev/usb/ukbd.c 11 Dec 2014 18:39:27 -0000 1.69 >> +++ sys/dev/usb/ukbd.c 13 Dec 2014 04:18:55 -0000 >> @@ -180,6 +180,7 @@ struct ukbd_translation { >> void ukbd_gdium_munge(void *, uint8_t *, u_int); >> #endif >> void ukbd_apple_munge(void *, uint8_t *, u_int); >> +void ukbd_apple_mba_munge(void *, uint8_t *, u_int); >> void ukbd_apple_iso_munge(void *, uint8_t *, u_int); >> uint8_t ukbd_translate(const struct ukbd_translation *, size_t, >> uint8_t); >> >> @@ -244,13 +245,29 @@ ukbd_attach(struct device *parent, struc >> if (hid_locate(desc, dlen, HID_USAGE2(HUP_APPLE, HUG_FN_KEY), >> uha->reportid, hid_input, &sc->sc_apple_fn, &qflags)) { >> if (qflags & HIO_VARIABLE) { >> + /* Older Macbook Air's have different fn key >> layouts */ Not sure that comment belongs here >> if (iso) >> sc->sc_munge = ukbd_apple_iso_munge; >> - else >> + else { >> + switch (uha->uaa->product) { >> + case >> USB_PRODUCT_APPLE_WELLSPRING4A_ANSI: >> + case >> USB_PRODUCT_APPLE_WELLSPRING4A_ISO: >> + case >> USB_PRODUCT_APPLE_WELLSPRING4A_JIS: >> + case >> USB_PRODUCT_APPLE_WELLSPRING4_ANSI: >> + case >> USB_PRODUCT_APPLE_WELLSPRING4_ISO: >> + case >> USB_PRODUCT_APPLE_WELLSPRING4_JIS: >> + case >> USB_PRODUCT_APPLE_WELLSPRING_ANSI: >> + case >> USB_PRODUCT_APPLE_WELLSPRING_ISO: >> + case >> USB_PRODUCT_APPLE_WELLSPRING_JIS: Any special remaping for *ISO (e.g. one that was done for FOUNTAIN_ISO and GEYSER_ISO)? Remaping for JIS? >> + sc->sc_munge = >> ukbd_apple_mba_munge; >> + break; >> + default: >> sc->sc_munge = ukbd_apple_munge; That code probably can be restructured to support multiple types (ISO, JIS and ANSI) for multiple keyboard versions (WELLSPRING*/FOUNTAIN/GEYSER) >> } >> } >> } >> + } >> + } >> >> if (uha->uaa->vendor == USB_VENDOR_TOPRE && >> uha->uaa->product == USB_PRODUCT_TOPRE_HHKB) { >> @@ -478,6 +495,52 @@ ukbd_apple_munge(void *vsc, uint8_t *ibu >> { 67, 127 }, /* F10 -> audio mute */ >> { 68, 129 }, /* F11 -> audio lower */ >> { 69, 128 }, /* F12 -> audio raise */ >> +#endif >> + { 79, 77 }, /* right -> end */ >> + { 80, 74 }, /* left -> home */ >> + { 81, 78 }, /* down -> page down */ >> + { 82, 75 } /* up -> page up */ >> + }; >> + >> + if (!hid_get_data(ibuf, ilen, &sc->sc_apple_fn)) >> + return; >> + >> + spos = ibuf + kbd->sc_keycodeloc.pos / 8; >> + epos = spos + kbd->sc_nkeycode; >> + >> + for (pos = spos; pos != epos; pos++) { >> + xlat = ukbd_translate(apple_fn_trans, >> + nitems(apple_fn_trans), *pos); >> + if (xlat != 0) >> + *pos = xlat; >> + } there are 3 instances of similar code there now. maybe should be moved to a function. >> +} >> + >> +void >> +ukbd_apple_mba_munge(void *vsc, uint8_t *ibuf, u_int ilen) >> +{ >> + struct ukbd_softc *sc = vsc; >> + struct hidkbd *kbd = &sc->sc_kbd; >> + uint8_t *pos, *spos, *epos, xlat; >> + >> + static const struct ukbd_translation apple_fn_trans[] = { apple_fn_mba_trans? >> + { 40, 73 }, /* return -> insert */ >> + { 42, 76 }, /* backspace -> delete */ >> +#ifdef notyet >> + { 58, 0 }, /* F1 -> screen brightness down */ >> + { 59, 0 }, /* F2 -> screen brightness up */ >> + { 60, 0 }, /* F3 */ >> + { 61, 0 }, /* F4 */ >> + { 62, 0 }, /* F5 */ >> + { 63, 0 }, /* F6 -> audio back */ >> + { 64, 0 }, /* F7 -> audio pause/play */ >> + { 65, 0 }, /* F8 -> audio next */ >> +#endif >> + { 66, 127 }, /* F9 -> audio mute */ >> + { 67, 129 }, /* F10 -> audio lower */ >> + { 68, 128 }, /* F11 -> audio raise */ >> +#ifdef notyet >> + { 69, 0 }, /* F12 -> eject */ >> #endif >> { 79, 77 }, /* right -> end */ >> { 80, 74 }, /* left -> home */ >> >
signature.asc
Description: Message signed with OpenPGP using GPGMail