User Tools

Site Tools


mld:tutorials:fernbedienungen54serial

Step by Step ir-serial mit ir-keytable

Liste der devices anzeigen

BVDR> ir-keytable
Found /sys/class/rc/rc0/ (/dev/input/event14) with:
        Driver cx88xx, table rc-tevii-nec
        Supported protocols: lirc
        Enabled protocols: lirc
        Name: cx88 IR (TeVii S464 DVB-S/S2)
        bus: 1, vendor/product: d464:9022, version: 0x0001
        Repeat delay = 500 ms, repeat period = 125 ms

hier sieht man nur das device der DVB Karte - dieses soll allerdings nicht genutzt werden.

device anlegen

Da serial nicht automatisch erkannt werden kann muss es manuel getriggert werden:

festlegen an welchem COM Port es angeschloßen ist(hier com1)

setserial /dev/ttyS0 uart none

nun die Treiber laden:

modprobe serial-ir

dmesg sagt nun:

[ 3689.460620] serial_ir serial_ir.0: auto-detected active low receiver
[ 3689.483767] Registered IR keymap rc-rc6-mce
[ 3689.484744] IR RC6 protocol handler initialized
[ 3689.506815] rc rc1: Serial IR type home-brew as /devices/platform/serial_ir.0/rc/rc1
[ 3689.506875] input: Serial IR type home-brew as /devices/platform/serial_ir.0/rc/rc1/input18
[ 3689.507978] ir-keytable[3573]
[ 3689.516070] rc rc1: lirc_dev: driver serial_ir registered at minor = 1

Device Liste überprüfen

nun überprüfen wir die Device List

BVDR> ir-keytable
Found /sys/class/rc/rc1/ (/dev/input/event15) with:
        Driver serial_ir, table rc-rc6-mce
        Supported protocols: lirc rc-5 rc-5-sz jvc sony nec sanyo mce_kbd rc-6 sharp xmp
        Enabled protocols: lirc rc-6
        Name: Serial IR type home-brew
        bus: 25, vendor/product: 0001:0001, version: 0x0100
        Repeat delay = 500 ms, repeat period = 125 ms
Found /sys/class/rc/rc0/ (/dev/input/event14) with:
        Driver cx88xx, table rc-tevii-nec
        Supported protocols: lirc rc-6
        Enabled protocols: lirc
        Name: cx88 IR (TeVii S464 DVB-S/S2)
        bus: 1, vendor/product: d464:9022, version: 0x0001
        Repeat delay = 500 ms, repeat period = 125 ms
BVDR>

das Device rc1 ist nun vorhanden aber es empfängt noch keine Daten, da das Protokol falsch ist.

device test mit evtest

BVDR> evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
...
/dev/input/event14:     cx88 IR (TeVii S464 DVB-S/S2)
/dev/input/event15:     Serial IR type home-brew
Select the device event number [0-15]:

event15 ist unser Empfänger er hat aber noch kein passendes Protokoll

evtest /dev/input/event15

liefert noch keine TASTEN beim drücken.

Protokoll ermitteln

zwei möglichkeiten.

Protokolle einzeln laden
BVDR> ir-keytable -s rc1 -p NEC
Protocols changed to nec

NEC ersetzen durch den Namen des zu testenden Protokolls in unserem Fall sagt ir-keytable:

Supported protocols: lirc rc-5 rc-5-sz jvc sony nec sanyo mce_kbd rc-6 sharp xmp

nun mit evtest Testen:

BVDR> evtest /dev/input/event15
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100
Input device name: "Serial IR type home-brew"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 28 (KEY_ENTER)
    Event code 103 (KEY_UP)
    Event code 105 (KEY_LEFT)
    Event code 106 (KEY_RIGHT)
    Event code 108 (KEY_DOWN)
    Event code 111 (KEY_DELETE)
    Event code 113 (KEY_MUTE)
    Event code 114 (KEY_VOLUMEDOWN)
    Event code 115 (KEY_VOLUMEUP)
    Event code 119 (KEY_PAUSE)
    Event code 128 (KEY_STOP)
    Event code 142 (KEY_SLEEP)
    Event code 161 (KEY_EJECTCD)
    Event code 164 (KEY_PLAYPAUSE)
    Event code 167 (KEY_RECORD)
    Event code 168 (KEY_REWIND)
    Event code 174 (KEY_EXIT)
    Event code 207 (KEY_PLAY)
    Event code 208 (KEY_FASTFORWARD)
    Event code 210 (KEY_PRINT)
    Event code 212 (KEY_CAMERA)
    Event code 224 (KEY_BRIGHTNESSDOWN)
    Event code 225 (KEY_BRIGHTNESSUP)
    Event code 226 (KEY_MEDIA)
    Event code 352 (KEY_OK)
    Event code 356 (KEY_POWER2)
    Event code 358 (KEY_INFO)
    Event code 365 (KEY_EPG)
    Event code 366 (KEY_PVR)
    Event code 368 (KEY_LANGUAGE)
    Event code 369 (KEY_TITLE)
    Event code 370 (KEY_SUBTITLE)
    Event code 372 (KEY_ZOOM)
    Event code 373 (KEY_MODE)
    Event code 377 (KEY_TV)
    Event code 385 (KEY_RADIO)
    Event code 386 (KEY_TUNER)
    Event code 387 (KEY_PLAYER)
    Event code 389 (KEY_DVD)
    Event code 392 (KEY_AUDIO)
    Event code 393 (KEY_VIDEO)
    Event code 398 (KEY_RED)
    Event code 399 (KEY_GREEN)
    Event code 400 (KEY_YELLOW)
    Event code 401 (KEY_BLUE)
    Event code 402 (KEY_CHANNELUP)
    Event code 403 (KEY_CHANNELDOWN)
    Event code 407 (KEY_NEXT)
    Event code 412 (KEY_PREVIOUS)
    Event code 425 (KEY_PRESENTATION)
    Event code 430 (KEY_MESSENGER)
    Event code 512 (KEY_NUMERIC_0)
    Event code 513 (KEY_NUMERIC_1)
    Event code 514 (KEY_NUMERIC_2)
    Event code 515 (KEY_NUMERIC_3)
    Event code 516 (KEY_NUMERIC_4)
    Event code 517 (KEY_NUMERIC_5)
    Event code 518 (KEY_NUMERIC_6)
    Event code 519 (KEY_NUMERIC_7)
    Event code 520 (KEY_NUMERIC_8)
    Event code 521 (KEY_NUMERIC_9)
    Event code 522 (KEY_NUMERIC_STAR)
    Event code 523 (KEY_NUMERIC_POUND)
  Event type 4 (EV_MSC)
    Event code 4 (MSC_SCAN)
Key repeat handling:
  Repeat type 20 (EV_REP)
    Repeat code 0 (REP_DELAY)
      Value    500
    Repeat code 1 (REP_PERIOD)
      Value    125
Properties:
Testing ... (interrupt to exit)
Event: time 1523714087.984388, type 4 (EV_MSC), code 4 (MSC_SCAN), value 1f
Event: time 1523714087.984388, -------------- SYN_REPORT ------------
Event: time 1523714088.117117, type 4 (EV_MSC), code 4 (MSC_SCAN), value 1f
Event: time 1523714088.117117, -------------- SYN_REPORT ------------
Event: time 1523714088.746571, type 4 (EV_MSC), code 4 (MSC_SCAN), value 00
Event: time 1523714088.746571, -------------- SYN_REPORT ------------
Event: time 1523714088.877285, type 4 (EV_MSC), code 4 (MSC_SCAN), value 00
Event: time 1523714088.877285, -------------- SYN_REPORT ------------

Es sieht gut aus - wir haben scan codes ABER noch keine Zuweißung.

EINFACH ALLE Protokolle laden

Man lädt einfach mit -p alle Protokolle die laut ir-keytable unterstützt werden aufeinmal rein:

BVDR> ir-keytable -s rc1 -p lirc -p rc-5 -p rc-5-sz -p jvc -p sony -p nec -p sanyo -p mce_kbd -p rc-6 -p sharp -p x
mp
Protocols changed to lirc rc-5 rc-5-sz jvc sony nec sanyo mce_kbd rc-6 sharp xmp

Damit sollten aufjedenfall wieder keycodes funktionieren!

BVDR> evtest /dev/input/event15
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100
Input device name: "Serial IR type home-brew"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 28 (KEY_ENTER)
    Event code 103 (KEY_UP)
    Event code 105 (KEY_LEFT)
    Event code 106 (KEY_RIGHT)
    Event code 108 (KEY_DOWN)
    Event code 111 (KEY_DELETE)
    Event code 113 (KEY_MUTE)
    Event code 114 (KEY_VOLUMEDOWN)
    Event code 115 (KEY_VOLUMEUP)
    Event code 119 (KEY_PAUSE)
    Event code 128 (KEY_STOP)
    Event code 142 (KEY_SLEEP)
    Event code 161 (KEY_EJECTCD)
    Event code 164 (KEY_PLAYPAUSE)
    Event code 167 (KEY_RECORD)
    Event code 168 (KEY_REWIND)
    Event code 174 (KEY_EXIT)
    Event code 207 (KEY_PLAY)
    Event code 208 (KEY_FASTFORWARD)
    Event code 210 (KEY_PRINT)
    Event code 212 (KEY_CAMERA)
    Event code 224 (KEY_BRIGHTNESSDOWN)
    Event code 225 (KEY_BRIGHTNESSUP)
    Event code 226 (KEY_MEDIA)
    Event code 352 (KEY_OK)
    Event code 356 (KEY_POWER2)
    Event code 358 (KEY_INFO)
    Event code 365 (KEY_EPG)
    Event code 366 (KEY_PVR)
    Event code 368 (KEY_LANGUAGE)
    Event code 369 (KEY_TITLE)
    Event code 370 (KEY_SUBTITLE)
    Event code 372 (KEY_ZOOM)
    Event code 373 (KEY_MODE)
    Event code 377 (KEY_TV)
    Event code 385 (KEY_RADIO)
    Event code 386 (KEY_TUNER)
    Event code 387 (KEY_PLAYER)
    Event code 389 (KEY_DVD)
    Event code 392 (KEY_AUDIO)
    Event code 393 (KEY_VIDEO)
    Event code 398 (KEY_RED)
    Event code 399 (KEY_GREEN)
    Event code 400 (KEY_YELLOW)
    Event code 401 (KEY_BLUE)
    Event code 402 (KEY_CHANNELUP)
    Event code 403 (KEY_CHANNELDOWN)
    Event code 407 (KEY_NEXT)
    Event code 412 (KEY_PREVIOUS)
    Event code 425 (KEY_PRESENTATION)
    Event code 430 (KEY_MESSENGER)
    Event code 512 (KEY_NUMERIC_0)
    Event code 513 (KEY_NUMERIC_1)
    Event code 514 (KEY_NUMERIC_2)
    Event code 515 (KEY_NUMERIC_3)
    Event code 516 (KEY_NUMERIC_4)
    Event code 517 (KEY_NUMERIC_5)
    Event code 518 (KEY_NUMERIC_6)
    Event code 519 (KEY_NUMERIC_7)
    Event code 520 (KEY_NUMERIC_8)
    Event code 521 (KEY_NUMERIC_9)
    Event code 522 (KEY_NUMERIC_STAR)
    Event code 523 (KEY_NUMERIC_POUND)
  Event type 4 (EV_MSC)
    Event code 4 (MSC_SCAN)
Key repeat handling:
  Repeat type 20 (EV_REP)
    Repeat code 0 (REP_DELAY)
      Value    500
    Repeat code 1 (REP_PERIOD)
      Value    125
Properties:
Testing ... (interrupt to exit)
Event: time 1523714338.384568, type 4 (EV_MSC), code 4 (MSC_SCAN), value 11
Event: time 1523714338.384568, -------------- SYN_REPORT ------------
Event: time 1523714339.225618, type 4 (EV_MSC), code 4 (MSC_SCAN), value 12
Event: time 1523714339.225618, -------------- SYN_REPORT ------------
Event: time 1523714339.360765, type 4 (EV_MSC), code 4 (MSC_SCAN), value 12
Event: time 1523714339.360765, -------------- SYN_REPORT ------------
Event: time 1523714339.918255, type 4 (EV_MSC), code 4 (MSC_SCAN), value 15
Event: time 1523714339.918255, -------------- SYN_REPORT ------------
Event: time 1523714340.048912, type 4 (EV_MSC), code 4 (MSC_SCAN), value 15
Event: time 1523714340.048912, -------------- SYN_REPORT ------------

Wie auf bei Möglichkeit eins muss man diese nun einem Key zuweißen oder man hat bereits eine map datei und lädt diese.

scan codes einem Key zuweisen

nun haben wir scan codes also weisen wir diese nun den Tasten zu: Beispiel mit Taste 1. Bei Taste 1 kommt folgende evtest Ausgabe:

Event: time 1523714338.384568, type 4 (EV_MSC), code 4 (MSC_SCAN), value 11
Event: time 1523714338.384568, -------------- SYN_REPORT 

der scan code ist somit 11 und dieser muss nun Key_1 zugewiesen werden.

dazuerstellt man eine Datei in /etc/rc_keymaps/name_der_remote und füllt diese mit folgender Syntax:

0x[SCANCODE] LEERZEICHEN [KEY]

also für uns Beispiel:

0x11 KEY_1

Speichern fertig!

scan codes Key zuweisung testen

Nun testen wir diese zuweißung indem wir die map auch mit laden -w.

ir-keytable -s rc1 -c -p NEC -w /etc/rc_keymaps/rc-test-nec
Old keytable cleared
Wrote 1 keycode(s) to driver
Protocols changed to nec

es wurde ein keycode geladen (klar wir haben nur einen hinzugefügt). Dabei habe ich bewusst das richtige Protokoll eingefügt.

ir-keytable sieht nun so aus:

 ir-keytable
Found /sys/class/rc/rc1/ (/dev/input/event15) with:
        Driver serial_ir, table rc-rc6-mce
        Supported protocols: lirc rc-5 rc-5-sz jvc sony nec sanyo mce_kbd rc-6 sharp xmp
        Enabled protocols: lirc nec
        Name: Serial IR type home-brew
        bus: 25, vendor/product: 0001:0001, version: 0x0100
        Repeat delay = 500 ms, repeat period = 125 ms

evtest sagt nun:

evtest /dev/input/event15
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100
Input device name: "Serial IR type home-brew"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 2 (KEY_1)
  Event type 4 (EV_MSC)
    Event code 4 (MSC_SCAN)
Key repeat handling:
  Repeat type 20 (EV_REP)
    Repeat code 0 (REP_DELAY)
      Value    500
    Repeat code 1 (REP_PERIOD)
      Value    125
Properties:
Testing ... (interrupt to exit)

es kann schon KEY_1

Event code 2 (KEY_1)

das testen wir natürlich sofort in dem wir auf der Fernbedienung Taste 1 drücken:

Testing ... (interrupt to exit)
Event: time 1523715061.010631, type 4 (EV_MSC), code 4 (MSC_SCAN), value 11
Event: time 1523715061.010631, type 1 (EV_KEY), code 2 (KEY_1), value 1
Event: time 1523715061.010631, -------------- SYN_REPORT ------------
Event: time 1523715061.145434, type 4 (EV_MSC), code 4 (MSC_SCAN), value 11
Event: time 1523715061.145434, -------------- SYN_REPORT ------------
Event: time 1523715061.402358, type 1 (EV_KEY), code 2 (KEY_1), value 0
Event: time 1523715061.402358, -------------- SYN_REPORT ------------

alles wie gewollt. So geht man nun weiter vor, bis man alle Tasten angelernt hat, oder man lädt eine bereits enthaltene datei aus /etc/rc_keymaps oder /lib/udev/rc_keymaps

Das MUSS CLAUS NUN NOCH konfigurierbar und bei jedem Start ausführbar machen

mld/tutorials/fernbedienungen54serial.txt · Last modified: 2018/04/14 16:35 by MarMic