From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:34156) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UcuEf-0002CL-NV for qemu-devel@nongnu.org; Thu, 16 May 2013 05:12:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UcuEa-0004Bs-No for qemu-devel@nongnu.org; Thu, 16 May 2013 05:12:29 -0400 Received: from e23smtp04.au.ibm.com ([202.81.31.146]:57272) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UcuEa-0004Bn-15 for qemu-devel@nongnu.org; Thu, 16 May 2013 05:12:24 -0400 Received: from /spool/local by e23smtp04.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 16 May 2013 18:59:34 +1000 Received: from d23relay04.au.ibm.com (d23relay04.au.ibm.com [9.190.234.120]) by d23dlp02.au.ibm.com (Postfix) with ESMTP id 85B302BB0023 for ; Thu, 16 May 2013 19:12:19 +1000 (EST) Received: from d23av02.au.ibm.com (d23av02.au.ibm.com [9.190.235.138]) by d23relay04.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r4G8wHV417104904 for ; Thu, 16 May 2013 18:58:17 +1000 Received: from d23av02.au.ibm.com (loopback [127.0.0.1]) by d23av02.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r4G9CHVS010907 for ; Thu, 16 May 2013 19:12:18 +1000 Message-ID: <5194A2DF.9010608@linux.vnet.ibm.com> Date: Thu, 16 May 2013 17:11:59 +0800 From: Lei Li MIME-Version: 1.0 References: <1368678651-3561-1-git-send-email-akong@redhat.com> <51948969.5050604@linux.vnet.ibm.com> <20130516073521.GE3785@t430s.nay.redhat.com> In-Reply-To: <20130516073521.GE3785@t430s.nay.redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] ps2: add support of auto-repeat List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Amos Kong Cc: aliguori@us.ibm.com, lcapitulino@redhat.com, lersek@redhat.com, qemu-devel@nongnu.org, kraxel@redhat.com 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 > >>> /* >>> 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 On what platform? 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 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/ 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. :) ||||||||||||| > > so here we check if it's a press event, only set repeat_timer for > press event. When we get release event, we just stop repeat action. > > >>> ps2_queue(&s->common, keycode); >>> + >>> + if (auto_repeat) { >>> + s->repeat_key = keycode; >>> + /* delay a while before first repeat */ >>> + qemu_mod_timer(repeat_timer, qemu_get_clock_ns(vm_clock) + >>> + muldiv64(get_ticks_per_sec(), s->repeat_delay, 1000)); >>> + } >>> } -- Lei