Télécommande IR avec kernel > 3.0

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.

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