[vdr] Messages from Lirc have to be longer than 21 chars, why?

Klaus Schmidinger Klaus.Schmidinger at tvdr.de
Tue Mar 8 16:40:26 CET 2011


On 06.03.2011 16:56, Steffen Barszus wrote:
> On Sun, 06 Mar 2011 17:33:39 +0200
> Ville Skyttä <ville.skytta at iki.fi> wrote:
> 
>> On 03/06/2011 04:49 PM, Klaus Schmidinger wrote:
>>
>>> I guess what we need first is a specification of the strings
>>> LIRC provides. Then we can adapt the VDR code accordingly.
>>> I quickly searched the web, but couldn't find that information.
>>>
>>> Anybody?
>>
>> Maybe it has been discussed before, but I wonder why VDR has a LIRC 
>> implementation of its own instead of using liblirc_client?
>>
>> http://www.lirc.org/html/technical.html#library
> 
> You need a lircrc file for that to use, i think that is just adding
> another layer. Instead of learning the keys, you would need
> to create what is in remote.conf in the .lircrc and have fixed keywords
> in VDR. At least this is my understanding, correct me if i'm wrong. 
> 
> The format is described there as well. 
> 
> XBMC seems for instance just to read a line 
> 
> while (fgets(m_buf, sizeof(m_buf), m_file) != NULL)
> ...
>     char scanCode[128];
>     char buttonName[128];
>     char repeatStr[4];
>     char deviceName[128];
>     sscanf(m_buf, "%s %s %s %s", &scanCode[0], &repeatStr[0],
> &buttonName[0], &deviceName[0]);
> 
> https://github.com/xbmc/xbmc/blob/master/xbmc/input/linux/LIRC.cpp
> 
> which seems to work well ...

I've changed the code in VDR's lirc.c this way now:

--- lirc.c      2006/05/28 08:48:13     2.0
+++ lirc.c      2011/03/08 15:35:13
@@ -86,7 +86,8 @@
                  }
            }

-        if (ready && ret > 21) {
+        if (ready && ret > 0) {
+           buf[ret - 1] = 0;
            int count;
            char KeyName[LIRC_KEY_BUF];
            if (sscanf(buf, "%*x %x %29s", &count, KeyName) != 2) { // '29' in '%29s' is LIRC_KEY_BUF-1!


Klaus



More information about the vdr mailing list