L’Internet des Objets

L’Internet des Objets

29.1 IR-Keytable

Page précédente Page suivante

De nombreuses télécommandes infrarouges sont compatibles sous Linux (mais pas toutes). Les fonctionnalités de l’infrarouge (ir-core) sont désormais intégrées par défaut au noyau. IR-Keytable est l’outil qui permet de faire fonctionner son récepteur IR et ses télécommandes. La page https://doc.ubuntu-fr.org/irkeytable fournit les explications. Il n’est pas forcément facile de distinguer ce qui doit être exécuté en mode administrateur de ce qui devrait être en mode utilisateur normal.

Il faut commencer par l’installer :

apt install ir-keytable

Puis voir si le récepteur est reconnu :

ir-keytable
Found /sys/class/rc/rc0/ with:
        Name: Realtek RTL2832U reference design
        Driver: dvb_usb_rtl28xxu
        Default keymap: rc-empty
        Input device: /dev/input/event18
        LIRC device: /dev/lirc0
        Attached BPF protocols: Opération non permise
        Supported kernel protocols: lirc rc-5 rc-5-sz jvc sony nec sanyo mce_kbd rc-6 sharp xmp imon
        Enabled kernel protocols: lirc
        bus: 3, vendor/product: 0bda:2832, version: 0x0100
        Repeat delay = 500 ms, repeat period = 125 ms


Ensuite, il faut essayer une télécommande. Pour vérifier si celle-ci fonctionne, il est possible d’utiliser la caméra d’un téléphone, comme dans la figure 29.1. La caméra transforme l’infrarouge en rose. Dans notre photo, la télécommande émet un signal infrarouge. En plus, la caméra utilisée dispose d’une led de contrôle en lumière visible.

(image)

Fig. 29.1 : Détection de la vivacité d’une télécommande.

Dans le test du récepteur, un seul protocole est reconnu. Il est possible d’en ajouter d’autres pour détecter la télécommande.

ir-keytable -s rc0 -r -p rc-5,rc-5-sz,jvc,sony,nec,sanyo,mce_kbd,rc-6,sharp,xmp,imon
Protocols changed to rc-5 rc-5-sz jvc sony nec sanyo mce_kbd rc-6 sharp xmp imon
scancode 0x002a = KEY_COFFEE (0x98)
Enabled kernel protocols: rc-5 rc-5-sz jvc sony nec sanyo mce_kbd rc-6 sharp xmp imon

Ensuite, il faut tester si la télécommande communique avec le récepteur :

 ir-keytable -t
4196.327722: lirc protocol(nec): scancode = 0x19 repeat
4196.327742: event type EV_MSC(0x04): scancode = 0x19
4196.327742: event type EV_SYN(0x00).
...
3382.396330: lirc protocol(necx): scancode = 0x83f403
3382.396353: event type EV_MSC(0x04): scancode = 0x83f403
3382.396353: event type EV_SYN(0x00).

Ici, deux télécommandes sont utilisées qui utilisent deux protocoles voisins (nec et necx).

Nous allons continuer avec la télécommande fournie avec la clef tnt.

En appuyant sur une touche de la télécommande, par exemple « 5 », le scancode produit est le 0x19. Il faut alors chercher si un fichier du système définit cette télécommande :

=> grep -i 0x19 /lib/udev/rc_keymaps/*.toml | grep 5
/lib/udev/rc_keymaps/astrometa_t2hybrid.toml:0x19 = "KEY_NUMERIC_5"
/lib/udev/rc_keymaps/dm1105_nec.toml:0x19 = "KEY_NUMERIC_9"
/lib/udev/rc_keymaps/encore_enltv_fm53.toml:0x19 = "KEY_NUMERIC_4"
...

Seul un fichier associe le scancode et la touche numérique 5. Voici ce fichier :

=> cat /lib/udev/rc_keymaps/astrometa_t2hybrid.toml
[[protocols]]
name = "astrometa_t2hybrid"
protocol = "nec"
variant = "nec"
[protocols.scancodes]
0x4d = "KEY_POWER2"
0x54 = "KEY_VIDEO"
0x16 = "KEY_MUTE"
0x4c = "KEY_RECORD"
0x05 = "KEY_CHANNELUP"
0x0c = "KEY_TIME"
0x0a = "KEY_VOLUMEDOWN"
0x40 = "KEY_ZOOM"
0x1e = "KEY_VOLUMEUP"
0x12 = "KEY_NUMERIC_0"
0x02 = "KEY_CHANNELDOWN"
0x1c = "KEY_AGAIN"
0x09 = "KEY_NUMERIC_1"
0x1d = "KEY_NUMERIC_2"
0x1f = "KEY_NUMERIC_3"
0x0d = "KEY_NUMERIC_4"
0x19 = "KEY_NUMERIC_5"
0x1b = "KEY_NUMERIC_6"
0x11 = "KEY_NUMERIC_7"
0x15 = "KEY_NUMERIC_8"
0x17 = "KEY_NUMERIC_9"

En essayant les autres touches, nous voyons que c’est presque correct. Il faut maintenant associer le fichier avec la télécommande. Nous avions lu que celle-ci était rc0.

=> ir-keytable -c -w /lib/udev/rc_keymaps/astrometa_t2hybrid.toml --sysdev rc0
Read astrometa_t2hybrid table
Old keytable cleared
Wrote 21 keycode(s) to driver
Protocols changed to nec

En relançant ir-keytable, nous avons l’association des touches :

=> ir-keytable -t
Testing events. Please, press CTRL-C to abort.
4555.404336: lirc protocol(nec): scancode = 0x1d
4555.404357: event type EV_MSC(0x04): scancode = 0x1d
4555.404357: event type EV_KEY(0x01) key_down: KEY_NUMERIC_2(0x0202)
4555.404357: event type EV_SYN(0x00).

Page précédente Page suivante