diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 78fcc984..a1c27e08 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -541,6 +541,7 @@ Christian Rienecker Joerg Riechardt for filling in some missing teletext PIDs + for improving the repeat function for LIRC remote controls Holger Wächtler for some valuable advice during adapting to the NEWSTRUCT driver diff --git a/HISTORY b/HISTORY index cd386423..831a5edc 100644 --- a/HISTORY +++ b/HISTORY @@ -4716,7 +4716,7 @@ Video Disk Recorder Revision History - Fixed automatically updating the CAM menu in case the whole operation (for instance a firmware update) takes longer than the menu timeout. -2006-05-27: Version 1.4.0-2 +2006-05-28: Version 1.4.0-2 - Removed leftover LSMOD=... line from 'runvdr'. - Modified the Makefile to copy additional libraries a plugin might provide (suggested @@ -4740,3 +4740,4 @@ Video Disk Recorder Revision History Christian Wieninger). - Avoiding a compiler warning in libsi's TypeLoop::operator[]. - Now processing the "frequency list descriptor" (based on a patch from Anssi Hannula). +- Improved the repeat function for LIRC remote controls (thanks to Joerg Riechardt). diff --git a/lirc.c b/lirc.c index 9bb83287..c4838b16 100644 --- a/lirc.c +++ b/lirc.c @@ -6,16 +6,16 @@ * * LIRC support added by Carsten Koch 2000-06-16. * - * $Id: lirc.c 1.14 2006/01/27 15:59:47 kls Exp $ + * $Id: lirc.c 1.15 2006/05/28 08:48:13 kls Exp $ */ #include "lirc.h" #include #include -#define REPEATLIMIT 20 // ms #define REPEATDELAY 350 // ms -#define KEYPRESSDELAY 150 // ms +#define REPEATFREQ 100 // ms +#define REPEATTIMEOUT 500 // ms #define RECONNECTDELAY 3000 // ms cLircRemote::cLircRemote(const char *DeviceName) @@ -94,7 +94,7 @@ void cLircRemote::Action(void) continue; } if (count == 0) { - if (strcmp(KeyName, LastKeyName) == 0 && FirstTime.Elapsed() < KEYPRESSDELAY) + if (strcmp(KeyName, LastKeyName) == 0 && FirstTime.Elapsed() < REPEATDELAY) continue; // skip keys coming in too fast if (repeat) Put(LastKeyName, false, true); @@ -104,8 +104,10 @@ void cLircRemote::Action(void) timeout = -1; } else { + if (LastTime.Elapsed() < REPEATFREQ) + continue; // repeat function kicks in after a short delay (after last key instead of first key) if (FirstTime.Elapsed() < REPEATDELAY) - continue; // repeat function kicks in after a short delay + continue; // skip keys coming in too fast (for count != 0 as well) repeat = true; timeout = REPEATDELAY; } @@ -113,7 +115,7 @@ void cLircRemote::Action(void) Put(KeyName, repeat); } else if (repeat) { // the last one was a repeat, so let's generate a release - if (LastTime.Elapsed() >= REPEATDELAY) { + if (LastTime.Elapsed() >= REPEATTIMEOUT) { Put(LastKeyName, false, true); repeat = false; *LastKeyName = 0;