Re: PROBLEM: keyboard shift not registered under fast typing orauto-repeat

From: Carl Nygard
Date: Fri Aug 29 2003 - 19:15:36 EST


On Wed, 2003-08-27 at 06:50, Andries Brouwer wrote:
> On Tue, Aug 26, 2003 at 08:38:50PM -0400, Carl Nygard wrote:
>

Thanks for the pointers. I was about to argue about what proper
behavior is, between what I see on my desktop 2.4.20 (RH9) and laptop
2.6.0, but then I saw what WinXP does, and some things clicked
irrelevant. Anyway, thanks for the info...
>
> > Kernel doesn't register shift state when typing quickly. Example, 'ls
> > *' shows up as 'ls 8' when typed fast. Also, holding '-' key down, once
> > it's repeating, shift key makes no difference.
>
> So, the first part of what you say, when true, would be a bug.
> But a bug difficult to distinguish from a finger coordination error.
> The second part is correct behaviour.

I don't believe any of this is coordination errors. Shown below is a
log of some debug I added to my kernel (2.6.0-test4). I put debug stmt
at the very top of input.c, before any possible return; and also in all
the relevant if(...){ ...; return; } blocks in keyboard.c, as well as
one or two general info statements in keyboard.c (if you need to see
where, I'll post my patch, but I doubt it's necessary)

Here's the log, I did 'tail -f messages' and then typed 'ls <shift>8' in
the window, so it's obvious at what point I'm typing:

Please note the bad version doesn't receive any notice of the shift-down
event, but gets the shift-up event, proving that I really did press
it;) The good version gets shift-down and shift-up properly.

My question: Is there anywhere else I can look, perhaps the code which
calls input.c::input_event()? Or is this potentially a hardware problem
(i.e. should I return my laptop, because this is too d*mn annoying)?

Thanks for the help
Regards,
Carl



Typing quickly:

lAug 29 15:54:34 traveler kernel: input.c: type: 1 code: 38:0x26 value: 1
Aug 29 15:54:34 traveler kernel: keyboard.c: shift_final: 0
Aug 29 15:54:34 traveler kernel: keyboard.c: raw_mode(1) && type(11) != KT_SPEC(2) && type != KT_SHIFT(7))
Aug 29 15:54:34 traveler kernel: input.c: type: 0 code: 0:0x0 value: 0
s 8Aug 29 15:54:34 traveler kernel: input.c: type: 1 code: 31:0x1f value: 1
Aug 29 15:54:34 traveler kernel: keyboard.c: shift_final: 0
Aug 29 15:54:34 traveler kernel: keyboard.c: raw_mode(1) && type(11) != KT_SPEC(2) && type != KT_SHIFT(7))
Aug 29 15:54:34 traveler kernel: input.c: type: 0 code: 0:0x0 value: 0
Aug 29 15:54:34 traveler kernel: input.c: type: 1 code: 38:0x26 value: 0
Aug 29 15:54:34 traveler kernel: keyboard.c: shift_final: 0
Aug 29 15:54:34 traveler kernel: keyboard.c: raw_mode(1) && type(11) != KT_SPEC(2) && type != KT_SHIFT(7))
Aug 29 15:54:34 traveler kernel: input.c: type: 0 code: 0:0x0 value: 0
Aug 29 15:54:34 traveler kernel: input.c: type: 1 code: 31:0x1f value: 0
Aug 29 15:54:34 traveler kernel: keyboard.c: shift_final: 0
Aug 29 15:54:34 traveler kernel: keyboard.c: raw_mode(1) && type(11) != KT_SPEC(2) && type != KT_SHIFT(7))
Aug 29 15:54:34 traveler kernel: input.c: type: 0 code: 0:0x0 value: 0
Aug 29 15:54:34 traveler kernel: input.c: type: 1 code: 57:0x39 value: 1
Aug 29 15:54:34 traveler kernel: keyboard.c: shift_final: 0
Aug 29 15:54:34 traveler kernel: keyboard.c: raw_mode(1) && type(0) != KT_SPEC(2) && type != KT_SHIFT(7))
Aug 29 15:54:34 traveler kernel: input.c: type: 0 code: 0:0x0 value: 0
Aug 29 15:54:34 traveler kernel: input.c: type: 1 code: 57:0x39 value: 0
Aug 29 15:54:34 traveler kernel: keyboard.c: shift_final: 0
Aug 29 15:54:34 traveler kernel: keyboard.c: raw_mode(1) && type(0) != KT_SPEC(2) && type != KT_SHIFT(7))
Aug 29 15:54:34 traveler kernel: input.c: type: 0 code: 0:0x0 value: 0
Aug 29 15:54:34 traveler kernel: input.c: type: 1 code: 9:0x9 value: 1
Aug 29 15:54:34 traveler kernel: keyboard.c: shift_final: 0
Aug 29 15:54:34 traveler kernel: keyboard.c: raw_mode(1) && type(0) != KT_SPEC(2) && type != KT_SHIFT(7))
Aug 29 15:54:34 traveler kernel: input.c: type: 0 code: 0:0x0 value: 0
Aug 29 15:54:34 traveler kernel: input.c: type: 1 code: 9:0x9 value: 0
Aug 29 15:54:34 traveler kernel: keyboard.c: shift_final: 0
Aug 29 15:54:34 traveler kernel: keyboard.c: raw_mode(1) && type(0) != KT_SPEC(2) && type != KT_SHIFT(7))
Aug 29 15:54:34 traveler kernel: input.c: type: 0 code: 0:0x0 value: 0
Aug 29 15:54:34 traveler kernel: input.c: type: 1 code: 54:0x36 value: 0
## ^--- Shift-up event
Aug 29 15:54:34 traveler kernel: input.c: type: 0 code: 0:0x0 value: 0
Aug 29 15:54:39 traveler kernel: input.c: type: 1 code: 29:0x1d value: 1
Aug 29 15:54:39 traveler kernel: keyboard.c: shift_final: 0

typing slower, at least making sure the space <shift> are separated.

lsAug 29 15:55:07 traveler kernel: input.c: type: 1 code: 28:0x1c value: 0
Aug 29 15:55:07 traveler kernel: keyboard.c: shift_final: 0
Aug 29 15:55:07 traveler kernel: keyboard.c: handling keycode: 28 keysym 61953/1 down: 0
Aug 29 15:55:07 traveler kernel: input.c: type: 0 code: 0:0x0 value: 0
Aug 29 15:55:08 traveler kernel: input.c: type: 1 code: 38:0x26 value: 1
Aug 29 15:55:08 traveler kernel: keyboard.c: shift_final: 0
Aug 29 15:55:08 traveler kernel: keyboard.c: raw_mode(1) && type(11) != KT_SPEC(2) && type != KT_SHIFT(7))
Aug 29 15:55:08 traveler kernel: input.c: type: 0 code: 0:0x0 value: 0
Aug 29 15:55:08 traveler kernel: input.c: type: 1 code: 31:0x1f value: 1
Aug 29 15:55:08 traveler kernel: keyboard.c: shift_final: 0
Aug 29 15:55:08 traveler kernel: keyboard.c: raw_mode(1) && type(11) != KT_SPEC(2) && type != KT_SHIFT(7))
Aug 29 15:55:08 traveler kernel: input.c: type: 0 code: 0:0x0 value: 0
Aug 29 15:55:08 traveler kernel: input.c: type: 1 code: 38:0x26 value: 0
Aug 29 15:55:08 traveler kernel: keyboard.c: shift_final: 0
Aug 29 15:55:08 traveler kernel: keyboard.c: raw_mode(1) && type(11) != KT_SPEC(2) && type != KT_SHIFT(7))
Aug 29 15:55:08 traveler kernel: input.c: type: 0 code: 0:0x0 value: 0
*Aug 29 15:55:08 traveler kernel: input.c: type: 1 code: 31:0x1f value: 0
Aug 29 15:55:08 traveler kernel: keyboard.c: shift_final: 0
Aug 29 15:55:08 traveler kernel: keyboard.c: raw_mode(1) && type(11) != KT_SPEC(2) && type != KT_SHIFT(7))
Aug 29 15:55:08 traveler kernel: input.c: type: 0 code: 0:0x0 value: 0
Aug 29 15:55:08 traveler kernel: input.c: type: 1 code: 57:0x39 value: 1
Aug 29 15:55:08 traveler kernel: keyboard.c: shift_final: 0
Aug 29 15:55:08 traveler kernel: keyboard.c: raw_mode(1) && type(0) != KT_SPEC(2) && type != KT_SHIFT(7))
Aug 29 15:55:08 traveler kernel: input.c: type: 0 code: 0:0x0 value: 0
Aug 29 15:55:08 traveler kernel: input.c: type: 1 code: 57:0x39 value: 0
Aug 29 15:55:08 traveler kernel: keyboard.c: shift_final: 0
Aug 29 15:55:08 traveler kernel: keyboard.c: raw_mode(1) && type(0) != KT_SPEC(2) && type != KT_SHIFT(7))
Aug 29 15:55:08 traveler kernel: input.c: type: 0 code: 0:0x0 value: 0
Aug 29 15:55:08 traveler kernel: input.c: type: 1 code: 54:0x36 value: 1
## ^---- Shift-down event
Aug 29 15:55:08 traveler kernel: keyboard.c: shift_final: 0
Aug 29 15:55:08 traveler kernel: keyboard.c: handling keycode: 54 keysym 63232/0 down: 1
Aug 29 15:55:08 traveler kernel: input.c: type: 0 code: 0:0x0 value: 0
Aug 29 15:55:09 traveler kernel: input.c: type: 1 code: 9:0x9 value: 1
Aug 29 15:55:09 traveler kernel: keyboard.c: shift_final: 1
Aug 29 15:55:09 traveler kernel: keyboard.c: raw_mode(1) && type(0) != KT_SPEC(2) && type != KT_SHIFT(7))
Aug 29 15:55:09 traveler kernel: input.c: type: 0 code: 0:0x0 value: 0
Aug 29 15:55:09 traveler kernel: input.c: type: 1 code: 9:0x9 value: 0
Aug 29 15:55:09 traveler kernel: keyboard.c: shift_final: 1
Aug 29 15:55:09 traveler kernel: keyboard.c: raw_mode(1) && type(0) != KT_SPEC(2) && type != KT_SHIFT(7))
Aug 29 15:55:09 traveler kernel: input.c: type: 0 code: 0:0x0 value: 0
Aug 29 15:55:09 traveler kernel: input.c: type: 1 code: 54:0x36 value: 0
## ^---- Shift-up event
Aug 29 15:55:09 traveler kernel: keyboard.c: shift_final: 1
Aug 29 15:55:09 traveler kernel: keyboard.c: handling keycode: 54 keysym 63232/0 down: 0
Aug 29 15:55:09 traveler kernel: input.c: type: 0 code: 0:0x0 value: 0


--
Carl Nygard <cjnygard@xxxxxxxx>

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/