Hello,

I recently bought a Logitech Cordless Desktop S510 with Remote which
works nicely, except few extra keys for which I can't get any events.
After some investigation and googling I found out that all these
non-working keys had keycodes bigger than or equal to 4120.

As there are some patches floating on the net which try fix the problem
by making the keycode suitable for mappable area, but after trying one
these, I still can't get any usable data (except the debug message ;))
from my devices.

I have attached the patch and hopefully someone can point out what I am
doing wrong.

Cheers,
Priit
--- drivers/usb/input/hid-core.c.orig	2006-09-13 20:52:23.000000000 +0300
+++ drivers/usb/input/hid-core.c	2006-09-15 22:51:25.000000000 +0300
@@ -814,6 +814,18 @@
 
 			value[n] = min < 0 ? snto32(extract(data, offset + n * size, size), size) :
 						    extract(data, offset + n * size, size);
+			if ((value[n] >= 0xff)) 
+				printk(KERN_DEBUG __FILE__ ": keycode %u out of default mappable range.\n", value[n]);
+
+			/* Logitech Cordless Desktop S510 Keyboard and remote media keys (4120 - 4139) */
+			// FIXME: Big Endian?? ;)
+			if ((value[n] >= 0x1018) && (value[n] <= 0x102c))
+				value[n] -= 0xd8b;
+
+			/* Logitech Cordless Desktop S510 Keyboard alternate F-keys (4161 - 4172) */
+			// FIXME: Big Endian?? ;)
+			if ((value[n] >= 0x1041) && (value[n] <= 0x104C))
+				value[n] -= 0xda0;
 
 			if (!(field->flags & HID_MAIN_ITEM_VARIABLE) /* Ignore report if ErrorRollOver */
 			    && value[n] >= min && value[n] <= max
--- drivers/usb/input/hid-input.c.orig	2006-09-15 18:33:58.000000000 +0300
+++ drivers/usb/input/hid-input.c	2006-09-15 22:50:02.000000000 +0300
@@ -453,6 +453,48 @@
 				case 0x289: map_key_clear(KEY_REPLY);		break;
 				case 0x28b: map_key_clear(KEY_FORWARDMAIL);	break;
 				case 0x28c: map_key_clear(KEY_SEND);		break;
+				/* Logitech Cordless Desktop S510 Keyboard and Remote which have keycodes >= 4120*/
+				/* Media keys */
+				case 0x28d: map_key_clear(KEY_MEDIA);		break; /* 4120 (653) - Media button on Remote */
+#if 0
+				case 0x28e: map_key_clear(KEY_); break; /* 4121 (654) - Media preset key 1 on Remote */
+				case 0x28f: map_key_clear(KEY_); break; /* 4122 (655) - Media preset key 2 on Remote */
+				case 0x28a: map_key_clear(KEY_); break; /* 4123 (656) - Media preset key 3 on Remote */
+
+				/* Zoom keys on keyboard and remote */
+				case 0x294: map_key_clear(KEY_); break; /* 4127 (660) - Zoom - */
+				case 0x295: map_key_clear(KEY_); break; /* 4128 (661) - Zoom + */
+#endif
+				case 0x296: map_key_clear(KEY_ZOOM); 		break; /* 4129 (662) - Zoom 1:1 (100%)*/
+
+				case 0x298: map_key_clear(KEY_CLOSE); 		break; /* 4131 (664) - Close */
+				case 0x29C: map_key_clear(KEY_MENU); 		break; /* 4135 (668) - Custom menu */
+#if 0
+				case 0x29d: map_key_clear(KEY_); break; /* 4136 (669) - Rotate */
+#endif
+				case 0x29e: map_key_clear(KEY_SHUFFLE); 	break; /* 4137 (670) - Shuffle */
+				case 0x29f: map_key_clear(KEY_BACK); 		break; /* 4138 (671) - Back */
+#if 0
+				case 0x2a0: map_key_clear(KEY_); break; /* 4139 (672)- Maximise/Fullscreen */
+#endif
+
+				/* Keyboard alternate F-codes */
+#if 0
+				case 0x2a1: map_key_clear(KEY_); break;	/* 4161 (673) - Battery - Suspend? */
+				case 0x2a2: map_key_clear(KEY_); break;	/* 4162 (674) - MS Word icon ;) */
+				case 0x2a3: map_key_clear(KEY_); break;	/* 4163 (675) - MS Excel icon ;) */
+				case 0x2a4: map_key_clear(KEY_); break;	/* 4164 (676) - MS Powerpoint icon ;) */
+#endif
+				case 0x2a5: map_key_clear(KEY_UNDO);		break;	/* 4165 (677) - Undo */
+				case 0x2a6: map_key_clear(KEY_REDO);		break;	/* 4166 (678) - Redo */
+				case 0x2a7: map_key_clear(KEY_PRINT);		break;	/* 4167 (679) - Print */
+				case 0x2a8: map_key_clear(KEY_SAVE);		break;	/* 4168 (680) - Save */
+#if 0
+				case 0x2a9: map_key_clear(KEY_); break;	/* 4169 (681) - Custom programmable - A */
+				case 0x2aa: map_key_clear(KEY_); break;	/* 4170 (682) - Custom programmable - B */
+				case 0x2ab: map_key_clear(KEY_); break;	/* 4171 (683) - Custom programmable - C */
+				case 0x2ac: map_key_clear(KEY_); break;	/* 4172 (684) - Custom programmable - D */
+#endif
 
 				/* Reported on a Cherry Cymotion keyboard */
 				case 0x301: map_key_clear(KEY_PROG1);		break;
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Linux-usb-users@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-users

Reply via email to