summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lirc.c84
-rw-r--r--rcu.c105
2 files changed, 94 insertions, 95 deletions
diff --git a/lirc.c b/lirc.c
index 0714049b..2eee9cc0 100644
--- a/lirc.c
+++ b/lirc.c
@@ -6,7 +6,7 @@
*
* LIRC support added by Carsten Koch <Carsten.Koch@icem.de> 2000-06-16.
*
- * $Id: lirc.c 1.11 2005/07/31 10:18:09 kls Exp $
+ * $Id: lirc.c 1.12 2005/08/15 12:28:10 kls Exp $
*/
#include "lirc.h"
@@ -61,48 +61,48 @@ void cLircRemote::Action(void)
bool repeat = false;
int timeout = -1;
- for (; f >= 0;) {
+ while (Running() && f >= 0) {
- bool ready = cFile::FileReady(f, timeout);
- int ret = ready ? safe_read(f, buf, sizeof(buf)) : -1;
+ bool ready = cFile::FileReady(f, timeout);
+ int ret = ready ? safe_read(f, buf, sizeof(buf)) : -1;
- if (ready && ret <= 0 ) {
- esyslog("ERROR: lircd connection lost");
- close(f);
- f = -1;
- break;
- }
+ if (ready && ret <= 0 ) {
+ esyslog("ERROR: lircd connection lost");
+ close(f);
+ f = -1;
+ break;
+ }
- if (ready && ret > 21) {
- int count;
- char KeyName[LIRC_KEY_BUF];
- sscanf(buf, "%*x %x %29s", &count, KeyName); // '29' in '%29s' is LIRC_KEY_BUF-1!
- if (count == 0) {
- if (strcmp(KeyName, LastKeyName) == 0 && FirstTime.Elapsed() < KEYPRESSDELAY)
- continue; // skip keys coming in too fast
- if (repeat)
- Put(LastKeyName, false, true);
- strcpy(LastKeyName, KeyName);
- repeat = false;
- FirstTime.Set();
- timeout = -1;
- }
- else {
- if (FirstTime.Elapsed() < REPEATDELAY)
- continue; // repeat function kicks in after a short delay
- repeat = true;
- timeout = REPEATDELAY;
- }
- LastTime.Set();
- Put(KeyName, repeat);
- }
- else if (repeat) { // the last one was a repeat, so let's generate a release
- if (LastTime.Elapsed() >= REPEATDELAY) {
- Put(LastKeyName, false, true);
- repeat = false;
- *LastKeyName = 0;
- timeout = -1;
- }
- }
- }
+ if (ready && ret > 21) {
+ int count;
+ char KeyName[LIRC_KEY_BUF];
+ sscanf(buf, "%*x %x %29s", &count, KeyName); // '29' in '%29s' is LIRC_KEY_BUF-1!
+ if (count == 0) {
+ if (strcmp(KeyName, LastKeyName) == 0 && FirstTime.Elapsed() < KEYPRESSDELAY)
+ continue; // skip keys coming in too fast
+ if (repeat)
+ Put(LastKeyName, false, true);
+ strcpy(LastKeyName, KeyName);
+ repeat = false;
+ FirstTime.Set();
+ timeout = -1;
+ }
+ else {
+ if (FirstTime.Elapsed() < REPEATDELAY)
+ continue; // repeat function kicks in after a short delay
+ repeat = true;
+ timeout = REPEATDELAY;
+ }
+ LastTime.Set();
+ Put(KeyName, repeat);
+ }
+ else if (repeat) { // the last one was a repeat, so let's generate a release
+ if (LastTime.Elapsed() >= REPEATDELAY) {
+ Put(LastKeyName, false, true);
+ repeat = false;
+ *LastKeyName = 0;
+ timeout = -1;
+ }
+ }
+ }
}
diff --git a/rcu.c b/rcu.c
index fea31ec3..f1f0de56 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.9 2005/07/31 10:17:45 kls Exp $
+ * $Id: rcu.c 1.10 2005/08/15 12:30:21 kls Exp $
*/
#include "rcu.h"
@@ -98,60 +98,59 @@ void cRcuRemote::Action(void)
uint64 LastCommand = 0;
bool repeat = false;
- //XXX
- for (; f >= 0;) {
+ while (Running() && f >= 0) {
- LOCK_THREAD;
+ LOCK_THREAD;
- if (ReceiveByte(REPEATLIMIT) == 'X') {
- for (int i = 0; i < 6; i++) {
- int b = ReceiveByte();
- if (b >= 0) {
- buffer.raw[i] = b;
- if (i == 5) {
- unsigned short Address = ntohs(buffer.data.address); // the PIC sends bytes in "network order"
- uint64 Command = ntohl(buffer.data.command);
- if (code == 'B' && Address == 0x0000 && Command == 0x00004000)
- // Well, well, if it isn't the "d-box"...
- // This remote control sends the above command before and after
- // each keypress - let's just drop this:
- break;
- Command |= uint64(Address) << 32;
- if (Command != LastCommand) {
- LastCommand = Command;
- repeat = false;
- FirstTime.Set();
- }
- else {
- if (FirstTime.Elapsed() < REPEATDELAY)
- break; // repeat function kicks in after a short delay
- repeat = true;
- }
- Put(Command, repeat);
- receivedCommand = true;
- }
- }
- else
- break;
- }
- }
- else if (repeat) { // the last one was a repeat, so let's generate a release
- Put(LastCommand, false, true);
- repeat = false;
- LastCommand = 0;
- }
- else {
- LastCommand = 0;
- if (numberToSend >= 0) {
- Number(numberToSend);
- numberToSend = -1;
- }
- }
- if (code && time(NULL) - LastCodeRefresh > 60) {
- SendCommand(code); // in case the PIC listens to the wrong code
- LastCodeRefresh = time(NULL);
- }
- }
+ if (ReceiveByte(REPEATLIMIT) == 'X') {
+ for (int i = 0; i < 6; i++) {
+ int b = ReceiveByte();
+ if (b >= 0) {
+ buffer.raw[i] = b;
+ if (i == 5) {
+ unsigned short Address = ntohs(buffer.data.address); // the PIC sends bytes in "network order"
+ uint64 Command = ntohl(buffer.data.command);
+ if (code == 'B' && Address == 0x0000 && Command == 0x00004000)
+ // Well, well, if it isn't the "d-box"...
+ // This remote control sends the above command before and after
+ // each keypress - let's just drop this:
+ break;
+ Command |= uint64(Address) << 32;
+ if (Command != LastCommand) {
+ LastCommand = Command;
+ repeat = false;
+ FirstTime.Set();
+ }
+ else {
+ if (FirstTime.Elapsed() < REPEATDELAY)
+ break; // repeat function kicks in after a short delay
+ repeat = true;
+ }
+ Put(Command, repeat);
+ receivedCommand = true;
+ }
+ }
+ else
+ break;
+ }
+ }
+ else if (repeat) { // the last one was a repeat, so let's generate a release
+ Put(LastCommand, false, true);
+ repeat = false;
+ LastCommand = 0;
+ }
+ else {
+ LastCommand = 0;
+ if (numberToSend >= 0) {
+ Number(numberToSend);
+ numberToSend = -1;
+ }
+ }
+ if (code && time(NULL) - LastCodeRefresh > 60) {
+ SendCommand(code); // in case the PIC listens to the wrong code
+ LastCodeRefresh = time(NULL);
+ }
+ }
}
int cRcuRemote::ReceiveByte(int TimeoutMs)