summaryrefslogtreecommitdiff
path: root/rcu.c
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2006-06-16 09:30:11 +0200
committerKlaus Schmidinger <vdr@tvdr.de>2006-06-16 09:30:11 +0200
commitb99c700f1de7a6950807a1d32e9cb824e897f947 (patch)
treecd8cbefc40c1a92a7ead767023e51029126382de /rcu.c
parent1d4512cbea1cf983890205d4e2af32f0e96350ee (diff)
downloadvdr-b99c700f1de7a6950807a1d32e9cb824e897f947.tar.gz
vdr-b99c700f1de7a6950807a1d32e9cb824e897f947.tar.bz2
Modified rcu.c to better handle RC5 codes
Diffstat (limited to 'rcu.c')
-rw-r--r--rcu.c17
1 files changed, 9 insertions, 8 deletions
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 <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') {