diff options
| author | Klaus Schmidinger <vdr@tvdr.de> | 2006-06-16 09:30:11 +0200 | 
|---|---|---|
| committer | Klaus Schmidinger <vdr@tvdr.de> | 2006-06-16 09:30:11 +0200 | 
| commit | b99c700f1de7a6950807a1d32e9cb824e897f947 (patch) | |
| tree | cd8cbefc40c1a92a7ead767023e51029126382de | |
| parent | 1d4512cbea1cf983890205d4e2af32f0e96350ee (diff) | |
| download | vdr-b99c700f1de7a6950807a1d32e9cb824e897f947.tar.gz vdr-b99c700f1de7a6950807a1d32e9cb824e897f947.tar.bz2 | |
Modified rcu.c to better handle RC5 codes
| -rw-r--r-- | HISTORY | 1 | ||||
| -rw-r--r-- | rcu.c | 17 | 
2 files changed, 10 insertions, 8 deletions
| @@ -4794,3 +4794,4 @@ Video Disk Recorder Revision History  - Now making sure VPS timers don't get stuck with outdated events, and that the    actual device isn't used for updating a VPS timer's event as long as other    free devices are available. +- Modified rcu.c to better handle RC5 codes. @@ -4,7 +4,7 @@   * See the main source file 'vdr.c' for copyright information and   * how to reach the author.   * - * $Id: rcu.c 1.13 2006/01/08 11:40:09 kls Exp $ + * $Id: rcu.c 1.14 2006/06/16 09:29:24 kls Exp $   */  #include "rcu.h" @@ -13,8 +13,9 @@  #include <unistd.h>  #include "tools.h" -#define REPEATLIMIT  20 // ms -#define REPEATDELAY 350 // ms +#define REPEATLIMIT      150 // ms +#define REPEATDELAY      350 // ms +#define HANDSHAKETIMEOUT  20 // ms  cRcuRemote::cRcuRemote(const char *DeviceName)  :cRemote("RCU") @@ -96,7 +97,7 @@ void cRcuRemote::Action(void)    time_t LastCodeRefresh = 0;    cTimeMs FirstTime;    unsigned char LastCode = 0, LastMode = 0; -  uint64 LastCommand = 0; +  uint64 LastCommand = ~0; // 0x00 might be a valid command    unsigned int LastData = 0;    bool repeat = false; @@ -136,7 +137,7 @@ void cRcuRemote::Action(void)          else if (repeat) { // the last one was a repeat, so let's generate a release             Put(LastCommand, false, true);             repeat = false; -           LastCommand = 0; +           LastCommand = ~0;             }          else {             unsigned int d = data; @@ -154,9 +155,9 @@ void cRcuRemote::Action(void)                SendCommand(m);                LastMode = m;                } -           LastCommand = 0; +           LastCommand = ~0;             } -        if (code && time(NULL) - LastCodeRefresh > 60) { +        if (!repeat && code && time(NULL) - LastCodeRefresh > 60) {             SendCommand(code); // in case the PIC listens to the wrong code             LastCodeRefresh = time(NULL);             } @@ -181,7 +182,7 @@ bool cRcuRemote::SendByteHandshake(unsigned char c)    if (f >= 0) {       int w = write(f, &c, 1);       if (w == 1) { -        for (int reply = ReceiveByte(REPEATLIMIT); reply >= 0;) { +        for (int reply = ReceiveByte(HANDSHAKETIMEOUT); reply >= 0;) {              if (reply == c)                 return true;              else if (reply == 'X') { | 
