Skip to contentSkip to conversation

usb: add numeric keypad support to HID driver

PATCH New Vincent Palatin 4 participants 5 messages Jan 9, 2012 – Feb 26, 2012

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 usb: add numeric keypad support to HID driver

When keys are pressed on the numeric keypad, emit key codes for the numbers, operators, dot and enter.

---
 common/usb_kbd.c |   10 ++++++++++
 1 files changed, 10 insertions(+), 0 deletions(-)
common/usb_kbd.c +10 -0
index aaf7d6f..2472d25 100644
@@ -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;
 
Signature · 1 line
1.7.3.1
#1 lore raw

PATCH 1/1 usb: add numeric keypad support to HID driver

Quoted 26 lines

When keys are pressed on the numeric keypad, emit key codes for the numbers, operators, dot and enter.

---
 common/usb_kbd.c |   10 ++++++++++
 1 files changed, 10 insertions(+), 0 deletions(-)
common/usb_kbd.c +6 -0
index aaf7d6f..2472d25 100644
@@ -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!

common/usb_kbd.c static int usb_kbd_translate(struct usb_kbd_pdata · line 232

Quoted 9 lines
common/usb_kbd.c +4 -0
@@ -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

#2 lore raw

PATCH 1/1 usb: add numeric keypad support to HID driver

Quoted 9 lines · Marek Vasut
Quoted 6 lines

+ ? ? /* 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.

Signature · 1 line
Vincent