L’Internet des Objets
29.1 IR-Keytable
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.
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).
