[vdr] plugin writing - need help with C

Jose Alberto Reguero jareguero at telefonica.net
Fri Apr 13 01:33:56 CEST 2007


El Viernes, 13 de Abril de 2007, Simon Baxter escribió:
> Hi.
>
> I'm modifying a non-published pvrinput variation which sends IR commands
> to a set box box - specifically, the channel number stored in
> channels.conf.
>
> 12345J2:6:C12:C:0:301:300:305:A1:62006:0:1009:0
> FOODJ2:63:C12:C:0:301:300:305:A1:62008:0:1019:0
>        ^^  - channel number to send to external digi-box
>
> It works fine, sending single-digit channel numbers but fails to send
> double digit.  i.e. channels 1-9 are ok, but 10+ fail.
>
> This fails because there are only codes in the lircd.conf for 0-9.
>
> Here's an excerpt from the plugin which sends the commands:
>
> redremote.h
> <snip>
> class cRedRemote : public cThread {
> public:
>         cRedRemote();
>         ~cRedRemote();
>
>         int  Open();
>         void Tune(int channel);
>         void Send(char *text);
> <snip>
>
>
> redremote.c
> <snip>
> void cRedRemote::Send(char *text)
> {
>
>     char buf[100];
>     snprintf(buf,sizeof(buf), "SEND_ONCE ADB_ICAN3000 %s\n",text);
>
>     write(fd,buf,strlen(buf));
> close(fd);
> fd = -1;
> }
> <snip>
>
>
> My question is this.  I need to modify the channel sent, so that double
> (or triple) channel numbers are sent as '6 3' or '1 1 7'  rather than '63'
> or '117'.  i.e. put spaces between the letters.
>
> I'm really out of my depth - can anyone point me in the right direction?
>
> Thanks
>
> Simon
>
>

You can try something like that:

        char txt2[strlen(txt) * 2];
        int i = 0;
        int j = 0;
        while (i < strlen(txt) - 1) {
                txt2[j] = txt[i];
                i++;
                j++;
                txt2[j] = ' ';
                j++;
        }
        txt2[j] = txt[i];
        j++;
        txt2[j] = '\0';

Jose Alberto








More information about the vdr mailing list