aboutsummaryrefslogtreecommitdiffstats
path: root/comms
diff options
context:
space:
mode:
Diffstat (limited to 'comms')
-rw-r--r--comms/lirc/Makefile2
-rw-r--r--comms/lirc/files/patch-daemons::hw_devinput.c25
2 files changed, 21 insertions, 6 deletions
diff --git a/comms/lirc/Makefile b/comms/lirc/Makefile
index ed3b1c323106..353e5908ddb6 100644
--- a/comms/lirc/Makefile
+++ b/comms/lirc/Makefile
@@ -7,7 +7,7 @@
PORTNAME= lirc
PORTVERSION= 0.9.0
-PORTREVISION= 1
+PORTREVISION= 2
PORTEPOCH= 1
CATEGORIES= comms
MASTER_SITES= SF/${PORTNAME}/LIRC/${PORTVERSION}
diff --git a/comms/lirc/files/patch-daemons::hw_devinput.c b/comms/lirc/files/patch-daemons::hw_devinput.c
index f87dcd3891e1..a026d30dfa68 100644
--- a/comms/lirc/files/patch-daemons::hw_devinput.c
+++ b/comms/lirc/files/patch-daemons::hw_devinput.c
@@ -16,7 +16,7 @@
int rd;
ir_code value;
-@@ -399,6 +405,23 @@ char *devinput_rec(struct ir_remote *rem
+@@ -399,6 +405,38 @@ char *devinput_rec(struct ir_remote *rem
LOGPRINTF(1, "time %ld.%06ld type %d code %d value %d", event.time.tv_sec, event.time.tv_usec, event.type,
event.code, event.value);
@@ -28,11 +28,26 @@
+ if (scancodeevent.type == EV_MSC &&
+ event.value == scancodeevent.value) {
+ if (rptevent.type == EV_KEY && rptevent.value != 0) {
++ struct timeval difft;
++
++ difft = event.time;
++ difft.tv_sec -= scancodeevent.time.tv_sec;
++ difft.tv_usec -= scancodeevent.time.tv_usec;
++ if (difft.tv_usec < 0) {
++ difft.tv_sec--;
++ difft.tv_usec += 1000000;
++ }
++ scancodeevent = event;
+ event = rptevent;
-+ event.value = 2;
-+ repeat_state = RPT_YES;
++ if (difft.tv_sec == 0) {
++ event.value = 2;
++ repeat_state = RPT_YES;
++ } else {
++ event.value = 1;
++ repeat_state = RPT_NO;
++ }
+ }
-+ } else if (rptevent.type == EV_KEY && rptevent.value == 0) {
++ } else if (rptevent.type == EV_KEY && rptevent.value <= 1) {
+ scancodeevent = event;
+ }
+ }
@@ -40,7 +55,7 @@
value = (unsigned)event.value;
#ifdef EV_SW
if (value == 2 && (event.type == EV_KEY || event.type == EV_SW)) {
-@@ -418,6 +441,9 @@ char *devinput_rec(struct ir_remote *rem
+@@ -418,6 +456,9 @@ char *devinput_rec(struct ir_remote *rem
if (event.value == 2) {
repeat_state = RPT_YES;
} else {