[vdr] Control VDR with RF remote
Wolfgang Fritz
wolfgang.fritz at gmx.net
Sun Jul 13 10:01:14 CEST 2008
Artur Skawina schrieb:
> Wolfgang Fritz wrote:
>> Artur Skawina schrieb:
>>> Peer Oliver Schmidt wrote:
>>>> Hello Michael,
>>>>
>>>>> Does anybody use RF remote control with VDR instead of IR? How to
>>>>> configure such remotes?
>>>> I used the ATI RemoteWonder with it. LIRC has support for it.
>>> Or, if your remote is supported by the kernel input layer, you can use
>>> the remote plugin. eg the X10 remotes work nicely this way:
>>>
>>> $ modprobe -v ati-remote
>>> $ EV="/dev/input/"$( cd "/sys/class/input" && grep -l 'X10' event*/device/manufacturer | sed -e 's,/.*,,' )
>>> $ vdr ... -P "remote -i $EV"
>>>
>>> (some remotes such as medion need a small kernel patch in order to handle
>>> all keys and detect autorepeat properly)
>> Can you post this Kernel patch here (or send it to me via mail if it's
>> to big for the list)? I am using the Medion remote since quite a long
>> time with a patched ati-remote driver but I don't remember if I have
>> published the patch or not. And if this is not my patch, it might be
>> better than mine ;-)
>
> sure, patch vs 2.6.25 below. These are just the minimal changes needed to make
> ati-remote work w/ one type of medion rf remotes (P/N 20018071). i did this
Mine is P/N 20014751
> years ago, but haven't updated it since, because eventually i'll need to rewrite
> the driver to handle many remotes and map them to different input devices (each
> remote can be set to a different channel/id, but ati-remote lets you only choose
> which ones it listens to and provides a single /dev/input device for all of them).
>
> Other items on the TODO list:
>
> The keymap for medion remotes is different from the one for ati, but as i'm
> currently using mine just for vdr i never needed to fix this up (vdr does its
> own mapping anyway).
>
I have added an additional table for Medion (selected by product ID),
but this might not work if the different Medion types have the same
product ID.
> There are other types of medion rf remotes, iirc i have 3 or 4 of them, quick tests
> showed they all seem to work w/ this patch, but may need some extra quirks (mostly
> trivial keymap mods, possibly handling of scroll wheel and touchpad). (if you have
> one that doesn't work w/ this patch and can't figure out how to make it work, post
> a link identifying it, and if i have that model i'll do the necessary changes)
>
> artur
>
> diff --git a/drivers/input/misc/ati_remote.c b/drivers/input/misc/ati_remote.c
> index f3b86c2..38f3183 100644
> --- a/drivers/input/misc/ati_remote.c
> +++ b/drivers/input/misc/ati_remote.c
> @@ -281,6 +281,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}
> };
>
> @@ -405,6 +420,15 @@ static int ati_remote_event_lookup(int rem, unsigned char d1, unsigned char d2)
> {
> int i;
>
> + /*
> + * Some remotes alternate codes, this makes it easier to detect autorepeat;
> + * to keep things simple we simply "undo" the code change here.
> + */
> + if (d2 & 0x80) {
> + d1 += 0x80;
> + d2 -= 0x80;
> + }
> +
Interesting. I have to check if my Medion needs this. Autorepeat is
working OK but my solution is more complicated than yours, and this
might be the reason.
> for (i = 0; ati_remote_tbl[i].kind != KIND_END; i++) {
> /*
> * Decide if the table entry matches the remote input.
> @@ -524,6 +548,19 @@ static void ati_remote_input_report(struct urb *urb)
> ati_remote->old_data[1] = data[2];
> ati_remote->old_jiffies = now;
>
> + /*
> + * There apparently are two types of X10 remotes -- some (newer?) models
> + * change the data sent for a repeated button press, others send the same
> + * bytes again. The following conditional makes the latter kind work;
> + * w/o this it's impossible to quickly enter eg. "11" because the driver
> + * assumes the button is held down (is autorepeating) and generates
> + * "111111" -- the second button press results in five events.
> + * This also lowers the autorepeat rate, but as the alternative seems to
> + * be spurious key presses...
> + */
> + if (ati_remote->repeat_count > 4)
> + ati_remote->repeat_count = 0;
> +
> /* Ensure we skip at least the 4 first duplicate events (generated
> * by a single keypress), and continue skipping until repeat_delay
> * msecs have passed
>
More information about the vdr
mailing list