Patchwork [U-Boot] usb: add numeric keypad support to HID driver

login
register
mail settings
Submitter Vincent Palatin
Date Jan. 9, 2012, 10:59 p.m.
Message ID <1326149976-19976-1-git-send-email-vpalatin@chromium.org>
Download mbox | patch
Permalink /patch/135139/
State Accepted
Commit d53da847cf274b8fd3ea362a3dfff68ea6206613
Delegated to: Marek Vasut
Headers show

Comments

Vincent Palatin - Jan. 9, 2012, 10:59 p.m.
When keys are pressed on the numeric keypad, emit key codes for the numbers,
operators, dot and enter.

Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
---
 common/usb_kbd.c |   10 ++++++++++
 1 files changed, 10 insertions(+), 0 deletions(-)
Marek Vasut - Jan. 9, 2012, 11:13 p.m.
> When keys are pressed on the numeric keypad, emit key codes for the
> numbers, operators, dot and enter.
> 
> Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
> ---
>  common/usb_kbd.c |   10 ++++++++++
>  1 files changed, 10 insertions(+), 0 deletions(-)
> 
> diff --git a/common/usb_kbd.c b/common/usb_kbd.c
> index aaf7d6f..2472d25 100644
> --- a/common/usb_kbd.c
> +++ b/common/usb_kbd.c
> @@ -87,6 +87,12 @@ static const unsigned char usb_kbd_numkey_shifted[] = {
>  	'|', '~', ':', '"', '~', '<', '>', '?'
>  };
> 
> +static const unsigned char usb_kbd_num_keypad[] = {
> +	'/', '*', '-', '+', '\r',
> +	'1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
> +	'.', 0, 0, 0, '='
> +};
> +
>  /*
>   * NOTE: It's important for the NUM, CAPS, SCROLL-lock bits to be in this
>   *       order. See usb_kbd_setled() function!
> @@ -218,6 +224,10 @@ static int usb_kbd_translate(struct usb_kbd_pdata
> *data, unsigned char scancode, keycode = usb_kbd_numkey[scancode - 0x1e];
>  	}
> 
> +	/* Numeric keypad */
> +	if ((scancode >= 0x54) && (scancode <= 0x67))
> +		keycode = usb_kbd_num_keypad[scancode - 0x54];
> +
>  	if (data->flags & USB_KBD_CTRL)
>  		keycode = scancode - 0x3;

This is good, but what happens if you press "Ctrl + numpad_key" ? Check line 221 
in usb_kbd.c for what I mean.

M
Vincent Palatin - Jan. 9, 2012, 11:33 p.m.
On Mon, Jan 9, 2012 at 15:13, Marek Vasut <marek.vasut@gmail.com> wrote:
>> +     /* Numeric keypad */
>> +     if ((scancode >= 0x54) && (scancode <= 0x67))
>> +             keycode = usb_kbd_num_keypad[scancode - 0x54];
>> +
>>       if (data->flags & USB_KBD_CTRL)
>>               keycode = scancode - 0x3;
>
> This is good, but what happens if you press "Ctrl + numpad_key" ? Check line 221
> in usb_kbd.c for what I mean.

As before the patch, it returns some random uppercase letters.
This is broken : IMO not only for those keys, but for all keys excepted A-Z.
Remy Bohmer - Jan. 15, 2012, 7:49 p.m.
Hi,

2012/1/9 Vincent Palatin <vpalatin@chromium.org>:
> When keys are pressed on the numeric keypad, emit key codes for the numbers,
> operators, dot and enter.
>
> Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
> ---
>  common/usb_kbd.c |   10 ++++++++++
>  1 files changed, 10 insertions(+), 0 deletions(-)

Applied to u-boot-usb. Thanks.

Kind regards,

Remy
Marek Vasut - Feb. 26, 2012, 11:10 p.m.
> When keys are pressed on the numeric keypad, emit key codes for the
> numbers, operators, dot and enter.
> 
> Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
> ---

Hi,

what's the status of this patch/patchset?

Thanks
M

Patch

diff --git a/common/usb_kbd.c b/common/usb_kbd.c
index aaf7d6f..2472d25 100644
--- a/common/usb_kbd.c
+++ b/common/usb_kbd.c
@@ -87,6 +87,12 @@  static const unsigned char usb_kbd_numkey_shifted[] = {
 	'|', '~', ':', '"', '~', '<', '>', '?'
 };
 
+static const unsigned char usb_kbd_num_keypad[] = {
+	'/', '*', '-', '+', '\r',
+	'1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
+	'.', 0, 0, 0, '='
+};
+
 /*
  * NOTE: It's important for the NUM, CAPS, SCROLL-lock bits to be in this
  *       order. See usb_kbd_setled() function!
@@ -218,6 +224,10 @@  static int usb_kbd_translate(struct usb_kbd_pdata *data, unsigned char scancode,
 			keycode = usb_kbd_numkey[scancode - 0x1e];
 	}
 
+	/* Numeric keypad */
+	if ((scancode >= 0x54) && (scancode <= 0x67))
+		keycode = usb_kbd_num_keypad[scancode - 0x54];
+
 	if (data->flags & USB_KBD_CTRL)
 		keycode = scancode - 0x3;