From b99c700f1de7a6950807a1d32e9cb824e897f947 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Fri, 16 Jun 2006 09:30:11 +0200 Subject: [PATCH] Modified rcu.c to better handle RC5 codes --- HISTORY | 1 + rcu.c | 17 +++++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/HISTORY b/HISTORY index 550d9f7d..5b8430de 100644 --- a/HISTORY +++ b/HISTORY @@ -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. diff --git a/rcu.c b/rcu.c index bc95e5c0..39211bb2 100644 --- a/rcu.c +++ b/rcu.c @@ -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 #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') {