Skip to contentSkip to conversation

Map MS Presenter 8000 bottom-side buttons

PATCH In review Jan Kiszka 2 participants 3 messages Oct 15, 2007 – Oct 16, 2007 HID

lore
Share & tools
lore

Jan Kiszka

author
#0 lore raw

PATCH 1/1 Map MS Presenter 8000 bottom-side buttons

The MS Presenter 8000 bluetooth mouse is a "dual-use" device: If you press a button on the top, you can turn it around and find special keys on the other side, useful for presentations. This patch maps those three bottom-keys that are not already detected to the intended functions. The magic bottom on the top is mapped to F5 when we switch from mouse to presenter mode in order to activate the presentation mode in the related software (e.g. OpenOffice).

---
 drivers/hid/hid-input.c |   14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)
drivers/hid/hid-input.c +12 -2
Index: linux-2.6.23.1/drivers/hid/hid-input.c
===================================================================
@@ -737,9 +737,19 @@ static void hidinput_configure_usage(str
 					case 0xff0b: map_key_clear(BTN_B);		break;
 					default:    goto ignore;
 				}
-			} else {
+			} else if (device->vendor == 0x045e && device->product == 0x0713) {
+				set_bit(EV_REP, input->evbit);
+				switch(usage->hid & HID_USAGE) {
+					/* Make MS Presenter 8000 bottom-side keys useful,
+					 * e.g. under OOffice */
+					case 0xfd08: map_key_clear(KEY_RIGHT);		break;
+					case 0xfd09: map_key_clear(KEY_LEFT);		break;
+					case 0xfd0b: map_key_clear(KEY_PAUSE);		break;
+					case 0xfd0f: map_key_clear(KEY_F5);		break;
+					default:    goto ignore;
+				}
+			} else
 				goto ignore;
-			}
 			break;
 
 		case HID_UP_CUSTOM: /* Reported on Logitech and Powerbook USB keyboards */
#1 lore raw

drivers/hid/hid-input.c static void hidinput_configure_usage(str · line 751

Quoted 12 lines · Jan Kiszka
drivers/hid/hid-input.c +12 -0
+			} else if (device->vendor == 0x045e && device->product == 0x0713) {
+				set_bit(EV_REP, input->evbit);
+				switch(usage->hid & HID_USAGE) {
+					/* Make MS Presenter 8000 bottom-side keys useful,
+					 * e.g. under OOffice */
+					case 0xfd08: map_key_clear(KEY_RIGHT);		break;
+					case 0xfd09: map_key_clear(KEY_LEFT);		break;
+					case 0xfd0b: map_key_clear(KEY_PAUSE);		break;
+					case 0xfd0f: map_key_clear(KEY_F5);		break;
+					default:    goto ignore;
+				}
+			} else

Hi Jan,

could you please take a short look at current Linus' git tree - there are some more devices using MSVENDOR page, and we have introduced macros to match them. It would be great if you could redo the patch to fit into this picture and send it to me again.

Thanks,

Signature · 2 lines
Jiri Kosina
SUSE Labs
author
#2 lore raw
Quoted 17 lines · Jiri Kosina

Review

Quoted 12 lines · Jan Kiszka
(quoted diff) +12 -0
+			} else if (device->vendor == 0x045e && device->product == 0x0713) {
+				set_bit(EV_REP, input->evbit);
+				switch(usage->hid & HID_USAGE) {
+					/* Make MS Presenter 8000 bottom-side keys useful,
+					 * e.g. under OOffice */
+					case 0xfd08: map_key_clear(KEY_RIGHT);		break;
+					case 0xfd09: map_key_clear(KEY_LEFT);		break;
+					case 0xfd0b: map_key_clear(KEY_PAUSE);		break;
+					case 0xfd0f: map_key_clear(KEY_F5);		break;
+					default:    goto ignore;
+				}
+			} else

Hi Jan,

Quoted 4 lines

could you please take a short look at current Linus' git tree - there are some more devices using MSVENDOR page, and we have introduced macros to match them. It would be great if you could redo the patch to fit into this picture and send it to me again.

OK. Do you mean something like this? Sorry, in a hurry, not even compile-tested...

--snip--

The MS Presenter 8000 bluetooth mouse is a "dual-use" device: If you press a button on the top, you can turn it around and find special keys on the other side, useful for presentations. This patch maps those three bottom-keys that are not already detected to the intended functions. The magic bottom on the top is mapped to F5 when we switch from mouse to presenter mode in order to activate the presentation mode in the related software (e.g. OpenOffice).

---
 drivers/hid/hid-input.c |   16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)
drivers/hid/hid-input.c +14 -2
Index: linux-2.6/drivers/hid/hid-input.c
===================================================================
@@ -89,6 +89,7 @@ static const struct {
 /* hardware needing special handling due to colliding MSVENDOR page usages */
 #define IS_CHICONY_TACTICAL_PAD(x) (x->vendor == 0x04f2 && device->product == 0x0418)
 #define IS_MS_KB(x) (x->vendor == 0x045e && (x->product == 0x00db || x->product == 0x00f9))
+#define IS_MS_PRESENTER_8000(x) (x->vendor == 0x045e && x->product == 0x0713)
 
 #ifdef CONFIG_USB_HIDINPUT_POWERBOOK
 
@@ -780,9 +781,20 @@ static void hidinput_configure_usage(str
 						set_bit(KEY_F18, input->keybit);
 					default:	goto ignore;
 				}
-			} else {
+
+			/* Microsoft Wireless Notebook Presenter Mouse 8000 */
+			} else if (IS_MS_PRESENTER_8000(device)) {
+				set_bit(EV_REP, input->evbit);
+				switch(usage->hid & HID_USAGE) {
+					/* Useful mappings of bottom-side keys for presentations */
+					case 0xfd08: map_key_clear(KEY_RIGHT);		break;
+					case 0xfd09: map_key_clear(KEY_LEFT);		break;
+					case 0xfd0b: map_key_clear(KEY_PAUSE);		break;
+					case 0xfd0f: map_key_clear(KEY_F5);		break;
+					default:    goto ignore;
+				}
+			} else
 				goto ignore;
-			}
 			break;
 
 		case HID_UP_CUSTOM: /* Reported on Logitech and Powerbook USB keyboards */