Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 14 Mar 2010 06:49:37 -0800
From:      Steven Noonan <steven@uplinklabs.net>
To:        Kai Wang <kaiwang27@gmail.com>
Cc:        freebsd-gnats-submit@freebsd.org, Christoph Langguth <christoph@rosenkeller.org>, freebsd-usb@freebsd.org
Subject:   Re: usb/144414: Apple "Fn" key doesn't work properly
Message-ID:  <f488382f1003140749n30df2f7ai64d27f6c6211527@mail.gmail.com>
In-Reply-To: <20100314144601.GA2534@viskning>
References:  <201003141030.o2EAU40v018339@freefall.freebsd.org> <201003141448.30747.hselasky@c2i.net> <f488382f1003140701s7fd7a639neb16c4cbba22247d@mail.gmail.com> <201003141527.37644.hselasky@c2i.net> <f488382f1003140737v2dedc56dvd1db6a70c467ad96@mail.gmail.com> <20100314144601.GA2534@viskning>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Mar 14, 2010 at 6:46 AM, Kai Wang <kaiwang27@gmail.com> wrote:
> On Sun, Mar 14, 2010 at 06:37:04AM -0800, Steven Noonan wrote:
>> On Sun, Mar 14, 2010 at 6:27 AM, Hans Petter Selasky <hselasky@c2i.net> =
wrote:
>> > On Sunday 14 March 2010 15:01:39 Steven Noonan wrote:
>> >> On Sun, Mar 14, 2010 at 5:48 AM, Hans Petter Selasky <hselasky@c2i.ne=
t>
>> > wrote:
>> >> > On Sunday 14 March 2010 14:22:33 Steven Noonan wrote:
>> >> >> On Sun, Mar 14, 2010 at 3:01 AM, Hans Petter Selasky <hselasky@c2i=
.net>
>> >> >
>> >> > wrote:
>> >> >> > On Sunday 14 March 2010 11:30:04 Steven Noonan wrote:
>> >> >> >> The following reply was made to PR usb/144414; it has been note=
d by
>> >> >> >> GNATS.
>> >> >> >>
>> >> >> >> From: Steven Noonan <steven@uplinklabs.net>
>> >> >> >> To: perryh@pluto.rain.com
>> >> >> >> Cc: freebsd-usb@freebsd.org, freebsd-gnats-submit@freebsd.org
>> >> >> >> Subject: Re: usb/144414: Apple "Fn" key doesn't work properly
>> >> >> >> Date: Sun, 14 Mar 2010 03:26:19 -0700
>> >> >> >>
>> >> >> >> =C2=A0On Thu, Mar 4, 2010 at 12:01 AM, Steven Noonan
>> >> >> >> <steven@uplinklabs.net> wrot=3D
>> >> >> >>
>> >> >> >> =C2=A0e:
>> >> >> >> =C2=A0> On Wed, Mar 3, 2010 at 11:00 PM, Steven Noonan
>> >> >> >> <steven@uplinklabs.net> > wr=3D
>> >> >> >>
>> >> >> >> =C2=A0ote:
>> >> >> >> =C2=A0>> On Wed, Mar 3, 2010 at 10:36 PM, =3DC2=3DA0<perryh@plu=
to.rain.com>
>> >> >> >> wrote: >>> Steven Noonan <steven@uplinklabs.net> wrote:
>> >> >> >> =C2=A0>>>> Interestingly, my tilde key doesn't work either (tho=
ugh the key
>> >> >> >> =C2=A0>>>> press is detected, no character shows when the key i=
s pressed).
>> >> >> >> =C2=A0>>>
>> >> >> >> =C2=A0>>> Any chance it is configured as a "dead" key? =3DC2=3D=
A0If you press
>> >> >> >> =C2=A0>>> tilde followed by n do you get an n with a tilde over=
 it?
>> >> >> >> =C2=A0>>
>> >> >> >> =C2=A0>> Nope. It simply does nothing in the console.
>> >> >> >> =C2=A0>>
>> >> >> >> =C2=A0>> But in X11, it does something very odd. Shift+Tilde Ke=
y gives me
>> >> >> >> '>', >> and Tilde Key gives me '<'. And Alt+Tilde gives me... W=
hat? I
>> >> >> >> don't >> even know what action. It's grabbing some arbitrary co=
mmand
>> >> >> >> in my >> .bash_history. It gave me the first item in my .bash_h=
istory
>> >> >> >> the first >> time I tried it. Then I tried an arbitrary command
>> >> >> >> ("echo"), and then >> Alt+Tilde gave me the second command in m=
y
>> >> >> >> .bash_history. Whaa?
>> >> >> >>
>> >> >> >> =C2=A0Any more ideas/news on this from anyone?
>> >> >> >>
>> >> >> >> =C2=A0The tilde key thing is especially irritating.
>> >> >> >
>> >> >> > static uint8_t
>> >> >> > ukbd_apple_swap(uint8_t keycode) {
>> >> >> > =C2=A0 =C2=A0 =C2=A0 =C2=A0switch (keycode) {
>> >> >> > =C2=A0 =C2=A0 =C2=A0 =C2=A0case 0x35: return 0x64;
>> >> >> > =C2=A0 =C2=A0 =C2=A0 =C2=A0case 0x64: return 0x35;
>> >> >> > =C2=A0 =C2=A0 =C2=A0 =C2=A0default: return keycode;
>> >> >> > =C2=A0 =C2=A0 =C2=A0 =C2=A0}
>> >> >> > }
>> >> >> >
>> >> >> > Can you try to change the function above in ukbd.c to only retur=
n
>> >> >> > keycode? Any difference?
>> >> >>
>> >> >> Yep, commenting the two case lines brought my tilde key back. Any =
idea
>> >> >> what the ukbd_apple_swap() function was _supposed_ to be doing?
>> >> >>
>> >> >> Also, there's only one thing left (input-wise) that I can't get to
>> >> >> work, and that's the 'delete' key (Fn+Backspace). I'm pretty certa=
in
>> >> >> that it's not a problem with Fn+Backspace failing to map to Delete=
,
>> >> >> because my non-Mac i386 box has the same problem.
>> >> >>
>> >> >> Everything I read online keeps saying to muck with an .inputrc fil=
e
>> >> >> (for bash, anyway), but I haven't been able to get it to work. Pla=
ces
>> >> >> I've looked have said to add this to .inputrc:
>> >> >>
>> >> >> "\e[3~": delete-char
>> >> >>
>> >> >> But this seems to have no effect (and I tried bind -f .inputrc in =
case
>> >> >> my INPUTRC environment variable wasn't working). Is there somethin=
g
>> >> >> FreeBSD-specific I'm not seeing, or what?
>> >> >>
>> >> >> - Steven
>> >> >
>> >> > Hi Steven,
>> >> >
>> >> > Can you talk this over with Christoph and send me a patch when you
>> >> > agreed? He's the one that made the Apple-SWAP key patch. Meanwhile =
I
>> >> > suggest the following patch:
>> >> >
>> >> > =3D=3D=3D=3D //depot/projects/usb/src/sys/dev/usb/input/ukbd.c#47 -
>> >> > src/sys/dev/usb/input/ukbd.c =3D=3D=3D=3D
>> >> > @@ -896,8 +896,7 @@
>> >> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0hid_input, 0, &sc->sc_loc_apple_fn, &flags,
>> >> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0&temp_id)) {
>> >> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0if (flags & HIO_VARIABLE)
>> >> > - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 sc->sc_flags |=3D UKBD_FLAG_APPLE=
_FN |
>> >> > - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 UKBD_FLAG_APPLE_SWA=
P;
>> >> > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 sc->sc_flags |=3D UKBD_FLAG_APPLE=
_FN;
>> >> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0DPRINTFN(1, "Found Apple FN-key\n");
>> >> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0apple_keys =3D 1;
>> >> > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0sc->sc_kbd_id =3D temp_id;
>> >> >
>> >> >
>> >> > The hardware that Christoph was using had an Eject-key, while yours
>> >> > didn't. I think the patch above will make both cases work.
>> >> >
>> >> > Christoph, do you have any comments?
>> >> >
>> >> > http://p4db.freebsd.org/fileViewer.cgi?FSPC=3D//depot/projects/usb/=
src/sys/
>> >> >dev/usb/input/ukbd.c&REV=3D47
>> >>
>> >> Not quite true, my keyboard _does_ have an Eject key. The code doesn'=
t
>> >> detect it though.
>> >>
>> >> - Steven
>> >>
>> >
>> > Could you try to figure out what key-press number corresponds to the e=
ject
>> > key?
>> >
>> > --HPS
>> >
>>
>> I'm not certain how to do so. It's somewhat of a chicken-and-the-egg
>> problem: unless it detects that the key is there, I can't find it.
>> Enabling 'hw.usb.ukbd.debug' doesn't print anything when Eject is
>> pressed.
>
> It's very possible that your Eject key is in a separate interface and
> is handled by uhid(4) instead of ukbd(4).
>
> /Kai
>

Enabling 'hw.usb.uhid.debug' doesn't print anything on an Eject
keypress either, but that could just mean that uhid(4) doesn't have
necessary DPRINTFs to show it.

- Steven



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?f488382f1003140749n30df2f7ai64d27f6c6211527>