[vdr] ATi Remote key repeat
Artur Skawina
art_k at o2.pl
Tue Jun 27 12:35:55 CEST 2006
Chris Jones wrote:
> Does anyone know how I can control the repeat rate of my ATi Remote Bob
> (which appears as a regular keyboard in /dev/input)? It's a great
> remote, but at the moment (Ubuntu Dapper) I basically can't use it
> because each button press prodces 4 or 5 events, so I can't use the OSD.
is this an x10 remote using the kernel ati_remote driver? if yes, you can try the attached patch.
A Medion remote i have was unusable w/o this change; eg. pressing the same key twice resulted in six events: one for the first key press and five for the second. Switching to channel '11' or moving two lines down triggers this...
With the patch the (pseudo-)auto-repeat rate goes down 5x, but the remote becomes usable. I don't have any ati remotes so i can't tell if this problem affects them. (the patch also adds some extra keycodes for the medion remote)
artur
-------------- next part --------------
--- v2.6.17/drivers/usb/input/ati_remote.c 2006-06-20 17:16:36.000000000 +0000
+++ v2.6.17-dtnode/drivers/usb/input/ati_remote.c 2006-06-27 10:00:10.000000000 +0000
@@ -156,8 +156,9 @@ static const char accel[] = { 1, 2, 4, 6
* and we have to take this into account for an accurate repeat
* behaviour.
* (HZ / 20) == 50 ms and works well for me.
+ * "+ 1" is needed for HZ==250 etc.
*/
-#define FILTER_TIME (HZ / 20)
+#define FILTER_TIME (HZ/20 + 1)
struct ati_remote {
struct input_dev *idev;
@@ -277,6 +278,21 @@ static const struct {
{KIND_FILTERED, 0xf4, 0x2F, EV_KEY, KEY_END, 1}, /* END */
{KIND_FILTERED, 0xf5, 0x30, EV_KEY, KEY_SELECT, 1}, /* SELECT */
+ /* Medion remote keys */
+ {KIND_FILTERED, 0xf1, 0x2c, EV_KEY, KEY_TV, 1}, /* TV */
+ {KIND_FILTERED, 0xf6, 0x31, EV_KEY, KEY_VIDEO, 1}, /* (VIDEO DESKTOP) */
+
+ {KIND_FILTERED, 0xf7, 0x32, EV_KEY, KEY_RED, 1}, /* <RED> */
+ {KIND_FILTERED, 0xf8, 0x33, EV_KEY, KEY_GREEN, 1}, /* <GREEN> */
+ {KIND_FILTERED, 0xf9, 0x34, EV_KEY, KEY_YELLOW, 1}, /* <YELLOW> */
+ {KIND_FILTERED, 0xfa, 0x35, EV_KEY, KEY_BLUE, 1}, /* <BLUE> */
+
+ {KIND_FILTERED, 0xfb, 0x36, EV_KEY, KEY_MOVE, 1}, /* RENAME */
+ {KIND_FILTERED, 0xfc, 0x37, EV_KEY, KEY_NEW, 1}, /* ACQUIRE IMAGE */
+ {KIND_FILTERED, 0xfd, 0x38, EV_KEY, KEY_EDIT, 1}, /* EDIT */
+ {KIND_FILTERED, 0xfe, 0x39, EV_KEY, KEY_SCREEN, 1}, /* FULL SCREEN */
+ {KIND_FILTERED, 0xff, 0x3a, EV_KEY, KEY_AUDIO, 1}, /* DVD AUDIO */
+
{KIND_END, 0x00, 0x00, EV_MAX + 1, 0, 0}
};
@@ -480,6 +496,8 @@ static void ati_remote_input_report(stru
ati_remote->old_data[1] = data[2];
ati_remote->old_jiffies = jiffies;
+ if (ati_remote->repeat_count > 4)
+ ati_remote->repeat_count = 0;
if ((ati_remote->repeat_count > 0)
&& (ati_remote->repeat_count < 5))
return;
More information about the vdr
mailing list