# HELP: LIRC + Hauppauge WinTV Nexus-S -> Tasten prellen

## Master One

Ich bin nun schon seit zwei Tagen am rumspielen, und weiß nicht mehr weiter.

Ich habe hier eine neue Hauppauge WinTV Nexus-S eingebaut, und bekomme die Sache mit der Fernbedienung nicht richtig zum Laufen:

- Kernel 2.6.8.1 (mit aktiviertem Event-Interface)

- lirc-0.7.0_pre7-r1 (mit LIRC_OPTS=--with-driver=devinput)

- Die silbergraue Hauppauge Fernbedienung mit den Farbtasten

- Fernbedienungsempfänger an Nexus-S angeschlossen

- Auslesen über AV7110 & Event-Interface

Damit das Event-Interface die Signale der Fernbedienung nicht auch über den Tastaturtreiber auf die Konsole ausgibt, habe ich die keyboard.c des Kernels gepatched:

```
+   if (dev->name[0]=='D' && dev->name[1]=='V' && dev->name[2] == 'B')

+      return NULL;

+

    if (!(handle = kmalloc(sizeof(struct input_handle), GFP_KERNEL)))

       return NULL;

    memset(handle, 0, sizeof(struct input_handle));
```

Dies ergibt, daß kbd beim Input-Device nicht mehr als Event-Handler aufscheint:

```
root # cat /proc/bus/input/devices

I: Bus=0000 Vendor=0000 Product=0000 Version=0000

N: Name="DVB on-card IR receiver"

P: Phys=

H: Handlers=event2

B: EV=100003

B: KEY=3883c000 2045 0 0 0 0 0 4180 801 921680 0 0 ffc
```

/proc/av7100_ir habe ich mit der auppauge_grey.rc5 geladen und lircd mit LIRCD_OPTS="-d /dev/input/event2" gestartet.

Prinzipiell funktioniert es ja, wenn da nicht dieses lästige Tastenprellen wäre. Wenn man eine Taste ganz vorsichtig und wirklich nur ganz kurz drückt, zeigt irw das Event auch nur als einen Tastendruck an, aber sobald ich eine Taste einigermaßen normal drücke (wie man es eben gewohnt ist), wird das Tastenevent zweimal registriert, also das typische Prellen.

Folgende Ausgabe verdeutlicht das Problem bei Verwendung von irw:

```
root # irw

000000008001006c 00 Ch- hauppauge_pvr

000000008001006c 00 Ch- hauppauge_pvr
```

Taste Ch- wurde ganz normal nur einmal gedrückt, scheint aber zweimal auf. Die "00" sollte eigentlich eine Wiederholung anzeigen, tut es aber nicht, d.h. das Event wird offenbar nicht korrekt ausgewertet, denn folgende Ausgabe dieses Versuchs erscheint im System-Log:

```
0.7.0pre7[26004]: accepted new client on /dev/lircd

0.7.0pre7[26004]: initializing '/dev/input/event2'

0.7.0pre7[26004]: devinput_rec

0.7.0pre7[26004]: time 1095776329.495043  type 1  code 108  value 1

0.7.0pre7[26004]: code 8001006c

0.7.0pre7[26004]: devinput_decode

0.7.0pre7[26004]: devinput_rec

0.7.0pre7[26004]: time 1095776329.607626  type 1  code 108  value 2

0.7.0pre7[26004]: code 8001006c

0.7.0pre7[26004]: devinput_decode

0.7.0pre7[26004]: devinput_rec

0.7.0pre7[26004]: time 1095776329.857182  type 1  code 108  value 0

0.7.0pre7[26004]: code 0001006c

0.7.0pre7[26004]: devinput_decode

0.7.0pre7[26004]: removed client

0.7.0pre7[26004]: closing '/dev/input/event2'
```

Meiner Ansicht nach ist die Empfindlichkeit zu hoch, denn obwohl die Taste nur kurz gedrückt wurde, ist gleich mit "value 2" das "Taste-gedrückt-halten" registriert worden, was dann das doppelte Event ausgelöst hat.

Seltsamerweise ist die Anzeige von lirc im System-Log zumindest korrekt, was den Status der Taste anbelangt (also value 0 für release, value 1 für press, value 2 für hold), nicht jedoch die Ausgabe von irw, da hierbei immer nur "00" aufscheint, auch wenn man eine Taste gedrückt hält. Ob das ein Bug ist, kann ich nicht sagen, ich kann mich aber erinnern, daß dies schon mal jemandem in der lirc-Mailingsliste aufgefallen ist.

Ich weiß nun jedenfalls nicht mehr weiter, in diesem Zustand kann man die Fernbedienung nicht sinnvoll nutzen, da die meisten einfachen Tastendrücke doppelt registriert werden.

Kann man das Problem irgendwie mit der Konfiguration in /etc/lircd.conf in den Griff bekommen???

Meine lircd.conf sieht folgdermaßen aus (ist das bekannte Standardfile zur hauppauge_grey):

```
begin remote

  name          hauppauge_pvr

  bits          13

  flags         RC5|CONST_LENGTH

  eps           30

  aeps          100

  one           969   811

  zero          969   811

  plead         1097

  gap           114605

  toggle_bit    2

      begin codes

          Power                    0x80010074

          Go                       0x80010162

          1                        0x80010002

          2                        0x80010003

          3                        0x80010004

          4                        0x80010005

          5                        0x80010006

          6                        0x80010007

          7                        0x80010008

          8                        0x80010009

          9                        0x8001000a

          Back/Exit                0x800100ae

          0                        0x8001000b

          Menu                     0x8001008b

          Red                      0x8001018e

          Green                    0x8001018f

          Yellow                   0x80010190

          Blue                     0x80010191

          Ch+                      0x80010067

          Ch-                      0x8001006c

          Vol-                     0x80010069

          Vol+                     0x8001006a

          Ok                       0x80010160

          Mute                     0x80010071

          Blank                    0x80010166

          Full                     0x8001016d

          Rewind                   0x800100a8

          Play                     0x80010197

          Forward                  0x8001019b

          Record                   0x800100a7

          Stop                     0x80010080

          Pause                    0x80010077

          Replay                   0x8001019c

          Skip                     0x8001019d

      end codes

end remote
```

Leider habe ich keine Ahnung, welche Optionen man hier mit welchen Werten testen könnte. Ich habe zwar von Versuchen mit "repeat" und "delay" gelesen, aber diese waren wohl auch nicht von Erfolg.

Oder gibt es eine Möglichkeit, lirc zu patchen, um die Empfindlichkeit zu beeinflussen???

----------

## Master One

Inzwischen habe ich meine lircd.conf geändert, sodaß das Event auf das Loslassen der Taste getriggert wird (also einfach 0x0001... statt 0x8001...), aber dies verhindert natürlich die Tastenwiederholung vollständig, und das ist nicht wirklich die gewünschte Lösung (zumal es sich auch seltsam anfühlt, wenn die Aktion erst nach Loslassen einer Taste ausgeführt wird).

Hat denn niemand eine Idee, wie man dieses Problem lösen kann???

Hat denn niemand sonst das selbe Problem???

Vielleicht hat es ja gar nichts mit lirc selbst zu tun, sondern mit evdev (dem Event-Interface-Kernelmodul).

Hat jemand eine Ahnung, ob man dieses Kernel-Modul irgendwie patchen kann, um die Empfindlichkeit des Eingabegeräts zu beeinflussen???

P.S. Ich habe es auch mit dem lirc-Treiber "hauppauge_dvb" versucht, aber ich vermute mal, daß dieses nur mit einem 2.4er Kernel funktioniert, da ich es mit dem /dev/lirc/lirc0 Interface erst gar nicht zum Laufen gebracht habe (zwar hat lirc-dev im System-Log bestätigt, daß ein Device an Device-Node 61 erzeugt wurde, aber es wurde nicht wirklich in /dev auf meinem UDEV System erzeugt, und manuell mit mknod nachzuhelfen hat nichts gebracht, denn lircd hat nach dem Start dann trotzdem "no such device" gemeldet). Oder hat es jemand geschafft, diesen Treiber auf einem 2.6er Kernel zum Laufen zu bringen???

----------

