Télécommande IR avec kernel > 3.0
14 Nov 2011
L’intérêt d’utiliser les nouveaux modules du noyau Linux est de supprimer LIRC. LIRC consomme pas mal d’interruptions (donc potentiellement ralentit MythTV), et aussi il y a des problèmes de répétitions et de blocages des touches de la télécommande.
Sommaire
Matériel
- HP / Philips (or NXP) eHome récepteur infrarouge USB
- Télécommande infrarouge de DVD Sony RMT D115P
- PC sous Linux 3.1
Note du 03/05/2015: Attention nécessite des adaptations pour Debian Jessie (sous système). Non fonctionnel tel quel.
Logiciel
Configuration du noyau
Device drivers -> Multimedia support -> Remote Controler adapters:
– Enable IR raw decoder for the Sony protocol (ou un autre driver adapté au protocol de votre télécommande),
– Windows Media Center Ed. eHome Infrared Transceiver (ou un autre pilote adapté à votre récepteur)/
Ne rien mettre d’autre.
Modules chargés:
mceusb 10637 0
ir_sony_decoder 1743 0
rc_core 12573 3 mceusb,ir_sony_decoder
Logs de démarrage:
... IR Sony protocol handler initialized ... Registered IR keymap rc-empty input: Media Center Ed. eHome Infrared Remote Transceiver (0471:0815) as /devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.0/rc/rc0/input2 rc0: Media Center Ed. eHome Infrared Remote Transceiver (0471:0815) as /devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.0/rc/rc0 mceusb 3-2:1.0: Registered Philips eHome Infrared Transceiver on usb3:2 usbcore: registered new interface driver mceusb ...
Table d’association télécommande/clavier
Comme LIRC, le module a besoin d’une table de transcodage pour convertir les codes infrarouges en code de touche clavier.
Par exemple pour la télécommande Sony:
0x1a4907 KEY_8 0x1a4908 KEY_9 0x1a4909 KEY_0 0x1a490f KEY_CLEAR 0x1a490b KEY_ENTER 0x1a4964 KEY_AUDIO ...
On peut charger une table d’association avec le programme ir-keytable (dans le paquet v4l-utils sous Debian).
Il suffit de remplir un fichier avec les associations (code symbole_clavier).
Puis de le charger:
/usr/local/bin/ir-keytable -c -p SONY -w /etc/rc_keymaps/sony_rmt_d115p_mythtv -D 1000 -P 250
-c : efface la precedente table
-p SONY : protocole Sony (permet d’avoir plusieurs modules de décodage)
-w : table a charger
-D : delai avant répétition
-P : delai entre répétition
Le mieux est de créer une règle udev pour executer le fichier:
Dans /etc/udev/rules.d/70-infrared.rules:
ACTION="add", SUBSYSTEM=="input", RUN+="/usr/local/bin/ir-keytable -c -p SONY -w /etc/rc_keymaps/sony_rmt_d115p -D 1000 -P 500"
16/11/2011: Attention: actuellement cette regle udev ne fonctionne pas et il faut appeler ir-keytable a la main (pour l’instant c’est appelé dans /etc/rc.local).Particularités MythTV
MythTV ne reconnait pas toutes les touches possibles (par exemple KEY_AUDIO, KEY_NEXT … ). Ca serait une évolution bienvenue pourtant.
La solution est de remplacer les codes des touches par des touches de clavier.
Ainsi:
0x1a4916 KEY_EJECTCD
0x1a4915 KEY_POWER
0x1a4900 KEY_1
0x1a4901 KEY_2
0x1a4902 KEY_3
0x1a4903 KEY_4
0x1a4903 KEY_4
0x1a4904 KEY_5
0x1a4905 KEY_6
0x1a4906 KEY_7
0x1a4907 KEY_8
0x1a4908 KEY_9
0x1a4909 KEY_0
0x1a490f KEY_CLEAR
0x1a490b KEY_ENTER
0x1a4964 KEY_AUDIO
0x1a4965 KEY_ANGLE
0x1a4963 KEY_SUBTITLE
0x1a4930 KEY_PREVIOUS
0x1a4931 KEY_NEXT
0x1a4951 KEY_DVD
0x1a4923 KEY_FRAMEFORWARD
0x1a4922 KEY_FRAMEBACK
0x1a4928 KEY_TIME
0x1a4932 KEY_PLAY
0x1a4939 KEY_PAUSE
0x1a4938 KEY_STOP
0x1a491a KEY_TITLE
0x1a491b KEY_MENU
0x1a4979 KEY_UP
0x1a497b KEY_LEFT
0x1a497c KEY_RIGHT
0x1a497a KEY_DOWN
0x1a4954 KEY_DISPLAYTOGGLE
0x1a490e KEY_EXIT
Devient:
0x1a4916 KEY_EJECTCD 0x1a4915 KEY_POWER 0x1a4900 KEY_1 0x1a4901 KEY_KP2 0x1a4902 KEY_KP3 0x1a4903 KEY_KP4 0x1a4903 KEY_KP4 0x1a4904 KEY_KP5 0x1a4905 KEY_KP6 0x1a4906 KEY_KP7 0x1a4907 KEY_KP8 0x1a4908 KEY_KP9 0x1a4909 KEY_KP0 0x1a490f KEY_BACKSPACE 0x1a490b KEY_SPACE 0x1a4964 KEY_KPPLUS 0x1a4965 KEY_Z 0x1a4963 KEY_T 0x1a4930 KEY_PAGEUP 0x1a4931 KEY_PAGEDOWN 0x1a4951 KEY_R 0x1a4923 KEY_HOME 0x1a4922 KEY_END 0x1a4928 KEY_G 0x1a4932 KEY_PLAY 0x1a4939 KEY_PAUSE 0x1a4938 KEY_ESC 0x1a491a KEY_O 0x1a491b KEY_SEMICOLON 0x1a4979 KEY_UP 0x1a497b KEY_LEFT 0x1a497c KEY_RIGHT 0x1a497a KEY_DOWN 0x1a4954 KEY_I 0x1a490e KEY_ESC
La liste des touches est dans le fichier parse.h de v4l-utils/utils/keymap.
Azerty / Qwerty
Attention aux noms correspondants à des touches qui sont différentes entre un AZERTY et un QWERTY.
Par exemple pour avoir le M, il faut mettre SEMICOLON (le « ; »).
Car le « M » en AZERTY est positionné sur le « ; » en QWERTY.
On a donc:
SEMICOLON (M)
Z (W)
Aussi lors du démarrage, le clavier est en minuscules, donc les touches correspondantes seront celles qui sont en bas des touches (par exemple les chiffres 0-9 ne sont pas utilisables et c’est pour cela que l’on utilise celle du pavé numérique).
Pavé numérique
Dans le même genre, les KEY_KP* sont les touches du clavier numérique.
Lors du démarrage, le pavé est désactivé (et les caractères en minuscules).
On peut utiliser numlockx pour démarrer avec le pavé numérique activé (sinon l’appui sur les touche 0-9 ferra des appuis sur les flèches ou autres).
15/11/2011: On peut aussi mettre dans le fichier /etc/console-tools/config :
LEDS=+num
Bouton Power-off
15/11/2011: En cours de test !!!
Dans le fichier /etc/console-tools/remap:
s/keycode 116 = nul/keycode 116 = KeyboardSignal/;
Cela assigne la touche KEY_POWER (dans ir-keytable) à un signal clavier. Ce signal clavier sera récupéré par init. Attention: Le code ir-keymap (164) ne correspond pas aux code event clavier (116) du fichier /usr/include/linux/input.h.
Donc on rajoute dans /etc/inittab:
kb::kbrequest:/sbin/shutdown -h now