qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] ps2: add support of auto-repeat


From: Amos Kong
Subject: Re: [Qemu-devel] [PATCH] ps2: add support of auto-repeat
Date: Fri, 17 May 2013 04:37:03 +0800
User-agent: Mutt/1.5.21 (2010-09-15)

On Thu, May 16, 2013 at 05:11:59PM +0800, Lei Li wrote:
> On 05/16/2013 03:35 PM, Amos Kong wrote:
> >On Thu, May 16, 2013 at 03:23:21PM +0800, Lei Li wrote:
> >>On 05/16/2013 12:30 PM, Amos Kong wrote:
> >>>Guest driver sets repeat rate and delay time by KBD_CMD_SET_RATE,
> >>>but ps2 backend doesn't process it and no auto-repeat implementation.
> >>>This patch adds support of auto-repeat feature.
> >>>
> >>>Guest ps2 driver sets autorepeat to fastest possible in reset,
> >>>period: 250ms, delay: 33ms
> >>>
> >>>Tested by 'sendkey' monitor command.
> >>>
> >>>referenced: http://www.computer-engineering.org/ps2keyboard/
> >>>
> >>>Signed-off-by: Amos Kong <address@hidden>
> >
> >>>  /*
> >>>     keycode is expressed as follow:
> >>>     bit 7    - 0 key pressed, 1 = key released
> >>>@@ -167,7 +186,17 @@ static void ps2_put_keycode(void *opaque, int keycode)
> >>>              keycode = ps2_raw_keycode_set3[keycode & 0x7f];
> >>>          }
> >>>        }
> >>>+
> >>>+    /* only auto-repeat press event */
> >>>+    auto_repeat = ~keycode & 0x80;
> >Hi Lei,
> >
> >>Does this check allow to distinguish the difference between auto-repeat and
> >>actual repeated entry by the user?
> >Actual repeat by user:
> >   press event
> >   release event
> >   press event
> >   release event
> >   press event
> >   release event
> >
> >Auto-repeat example:
> >   press event
> >   press event
> >   press event
> >   release event

Hi Lei,
 
> On what platform?


Fedora 18 @ thinkpad t430s

address@hidden amos]# showkey  (hold 'a')
akeycode  30 press
aaaaaaaaaaakeycode  30 press
keycode  30 press
keycode  30 press
keycode  30 press
keycode  30 press
keycode  30 press
keycode  30 press
keycode  30 press
keycode  30 press
keycode  30 press
keycode  30 press
keycode  30 press
keycode  30 press
aakeycode  30 press
keycode  30 press
keycode  30 release   <----(one release event in the end)


Qemu VM (rhel6, using vnc/ SDL) can get same result.
 
> AFAIK, the Auto-repeat event is like below on some GTK-based
> ||||||||||||environments,||||||||||||
> 
> keydown
> keypress
> keyup
> keydown
> keypress
> keyup|||||||||||||
> ...
> as reference link:
> 
> https://developer.mozilla.org/zh-CN/docs/DOM/KeyboardEvent

===== Auto-repeat handling  (it's also mentioned in mozilla page)

When a key is pressed and held down, it begins to auto-repeat. This
results in a sequence of events similar to the following being
dispatched:

keydown
keypress
keydown
keypress
<<repeating until the user releases the key>>
keyup  <----(only one up event in the end)
 
> And on Xwindows:
> 
> keypress
> keyrelease
> keypress
> keyrelease
> ...
> as reference link:
> 
> http://www.ypass.net/blog/2009/06/detecting-xlibs-keyboard-auto-repeat-functionality-and-how-to-fix-it/

"""Just what we’d expect, a bunch of KeyPress Events and one KeyRelease
event. But that’s not how it works in X."""

So pppppppR is expected.



From: http://www.computer-engineering.org/ps2keyboard/

When you press and hold down a key, that key becomes typematic, which
means the keyboard will _keep_ sending that key's _make code_ until the
key is released or another key is pressed.

(repeatedly send the make code, only one break code in the end)


> This would cause it's hard to distinguish them. But looks like the links 
> above is
> a little out of time, and I am not sure if the auto-repeat behaviour on such 
> platforms
> has been changed. :)
> |||||||||||||

Both of them works, but the repeated release events are redundant (no risk).


-- 
                        Amos.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]