Table des matières

Karmic, matériel, télécommande, BROUILLON

Objet

Grâce à la réalisation proposée, l'utilisateur pourra commander la lecture de musique et de vidéo, avec Totem par exemple, à l'aide d'une télécommande IR de salon (TV, DVD, ….) .

La télécommande utilisée pour ce tutoriel est une Thomson RCT 311 SB1G mais l'utilisation de la plupart des télécommandes de différents protocoles (RC5, RC6, …) sont possibles avec des adaptations.

Pré-requis

Les pré-requis sont nécessaires pour la suite des opérations sont :

Réalisation matérielle

La réalisation matérielle du récepteur USB HID à base d'un microcontrôleur PIC Microchip est décrite sur le site : http://pagesperso-orange.fr/IR.solutions/

Le montage est préprogrammé pour une télécommande avec un protocole RC5.

Vérifiez le bon fonctionnement du récepteur avec sa télécommande :

Pour vérifier la prise compte de ce matériel par Linux, utilisez la commande lsusb .

Terminal :

  alain@alain-desktop:~$ lsusb
  Bus 002 Device 015: ID 1234:2009 

Le matériel est ici reconnu : ID 1234:2009.

Éventuellement, déclarez votre télécommande dans le fichier /var/lib/misc/usb.ids .

Terminal :

  alain@alain-desktop:~$ sudo gedit /var/lib/misc/usb.ids

l'application Gedit s'ouvre, insérez alors en respectant l'ordre des produits :

Gedit :

  1234 Personnal Remote
            USB IR DECODER

Enregistrez ce fichier usb.ids .

Vérifiez de nouveau la présence de votre télécommande :

Terminal :

  alain@alain-desktop:~$ lsusb 
  Bus 002 Device 015: ID 1234:2009 Personal Remote USB IR DECODER 

Parfait, le récepteur est identifié par Linux.

Installation logicielle

Ce récepteur est un récepteur HID qui n'est pas supporté en natif par LIRC.

Un 'mappeur' générique HID a été développé par Coldsource et décrit sur le site de XBMC : http://forum.xbmc.org/showthread.php?t=88560 . Il peut convertir n'importe quel signal HID à un événement clé.

Le mode opératoire détaillé ci-dessous est repris de cet auteur et adapté ici à ce matériel.

Plusieurs étapes sont nécessaires :

Téléchargement

Téléchargez le logiciel hid_mapper_beta.tar.gz sur le répertoire de votre choix à l'adresse suivante :

http://www.coldsource.net/hid_mapper_beta.tar.gz

Attention de bien télécharger la dernière version.

Terminal :

  alain@alain-desktop:~$ cd /home/alain/Documents
  alain@alain-desktop:~/Documents$ wget http://www.coldsource.net/hid_mapper_beta.tar.gz
  --2011-03-24 10:29:11--  http://www.coldsource.net/hid_mapper_beta.tar.gz
  Résolution de www.coldsource.net... 91.121.16.105
  Connexion vers www.coldsource.net|91.121.16.105|:80... connecté.
  requête HTTP transmise, en attente de la réponse... 200 OK
  Longueur: 26735 (26K) [application/x-gzip]
  Enregistrement vers: `hid_mapper_beta.tar.gz'
  
  100%[======================================>] 26 735       123K/s   ds 0,2s 
  
  2011-03-24 10:29:11 (123 KB/s) - « hid_mapper_beta.tar.gz » sauvegardé [26735/26735]   

Installation

Ensuite, installez le hid_mapper. Pour cela, placez l'archive sur répertoire de votre choix et décompressez l'archive sur ce répertoire.

Terminal :

  alain@alain-desktop:~/Documents$ tar -zxvf hid_mapper_beta.tar.gz
  hid_mapper_beta/
  hid_mapper_beta/main.cpp
  hid_mapper_beta/include/
  hid_mapper_beta/include/uinput_device.h
  hid_mapper_beta/include/config.h
  hid_mapper_beta/include/EventMapping.h
  hid_mapper_beta/include/hid.h
  hid_mapper_beta/include/signals.h
  hid_mapper_beta/include/Keys.h
  hid_mapper_beta/include/keys_definition.h
  hid_mapper_beta/include/MapReader.h
  hid_mapper_beta/include/Exception.h
  hid_mapper_beta/include/MapReaderMouse.h
  hid_mapper_beta/include/LinkedList.h
  hid_mapper_beta/EventMapping.cpp
  hid_mapper_beta/uinput_device.c
  hid_mapper_beta/hid.c
  hid_mapper_beta/signals.c
  hid_mapper_beta/Keys.cpp
  hid_mapper_beta/asus-spinel.map
  hid_mapper_beta/MapReader.cpp
  hid_mapper_beta/Exception.cpp
  hid_mapper_beta/LICENSE
  hid_mapper_beta/MapReaderMouse.cpp
  hid_mapper_beta/Makefile
  hid_mapper_beta/keys_definition.cpp

Ensuite allez au répertoire hid_mapper, par exemple : cd /home/…../hid_mapper_beta. Ensuite, tapez 'make' pour compiler le pilote.

Terminal :

  alain@alain-desktop:~/Documents$ cd /home/alain/Documents/hid_mapper_beta
  alain@alain-desktop:~/Documents/hid_mapper_beta$ sudo make
  [sudo] password for alain: 
  g++ -c -Iinclude main.cpp
  gcc -c -Iinclude uinput_device.c
  gcc -c -Iinclude hid.c
  gcc -c -Iinclude signals.c
  g++ -c -Iinclude keys_definition.cpp
  g++ -c -Iinclude EventMapping.cpp
  g++ -c -Iinclude Keys.cpp
  g++ -c -Iinclude Exception.cpp
  g++ -c -Iinclude MapReader.cpp
  g++ -c -Iinclude MapReaderMouse.cpp
  g++  main.o uinput_device.o hid.o signals.o keys_definition.o EventMapping.o Keys.o Exception.o MapReader.o MapReaderMouse.o -o hid_mapper

Enfin, tapez ./hid_mapper –list-devices pour voir si votre appareil est reconnu. Par exemple, j'ai :

Terminal :

  alain@alain-desktop:~/Documents/hid_mapper_beta$ sudo ./hid_mapper --list-devices
  Found HID device at /dev/hidraw0 
  Manufacturer : Padix Co. Ltd. 
  Product name : Manette de jeu 
 
  Found HID device at /dev/hidraw1 
  Manufacturer : MICROCHIP
  Product name : USB IR DECODER

Apprentissage des événements HID

Ensuite, vous devez utiliser hid_mapper en mode apprentissage pour capturer les événements HID : ./hid_mapper –learn –manufacturer 'MICROCHIP' –product 'USB IR DECODER' –map ' '

Si vous appuyez sur la touche "OK" de la télécommande par exemple vous recevrez une suite d'octets comme ci-dessous :

Terminal :

  alain@alain-desktop:~/Documents/hid_mapper_beta$ ./hid_mapper --learn --manufacturer 'MICROCHIP' --product 'USB IR DECODER' --map ''
  Found HID device at /dev/hidraw0 
  02 0c 00 00 00 00 c0 30 

Tapez CTRL C pour terminer.

A ce premier événement « touche OK enfoncée" correspond le code événement. Capturez tous les événements dont vous avez besoin et reliez les à une clé utilisable par Linux (KEY_UP par exemple) afin d'écrire un fichier 'map' de votre télécommande. Pour une meilleure compréhension, le mapping obtenu pour ma télécommande et le fichier rc5_thomson_rct_311.map créé à partir de là sont donnés en annexe.

Pour une autre télécommande ou pour une autre utilisation, la liste des touches possibles (KEY_UP par exemple) peut être trouvée dans /usr/include/linux/input.h.

Vérification du bon fonctionnement

La dernière étape consiste à exécuter le 'mappeur' :

Nota : l'option - -disable-repetition évite la répétition des touches.

Terminal :

  alain@alain-desktop:~/Documents/hid_mapper_beta$ sudo ./hid_mapper --manufacturer 'MICROCHIP' --product 'USB IR DECODER' --disable-repetition --map 'rc5_thomson_rct_311.map' 
  Loaded map file rc5_thomson_rct_311.map 
  Found HID device 
  Opened HID interface on /dev/hidraw1 
  Generic USB mapper driver setup

À ce stade, la télécommande devrait fonctionner : appuyez sur la touche 1 de votre télécommande, le lien avec KEY_1 devrait faire apparaître 1 (ou & si votre clavier est en majuscule) sur terminal.

Si vous avez le message suivant (pour ma part, il apparaît à chaque reboot) :

Terminal :

  alain@alain-desktop:~/Documents/hid_mapper_beta$ sudo ./hid_mapper --manufacturer 'MICROCHIP' --product 'USB IR DECODER' --disable-repetition --map 'rc5_thomson_rct_311.map' 
  Loaded map file rc5_thomson_rct_311.map 
  Found HID device 
  Unable to setup event device

Vérifiez si 'uinput' est installé.

Terminal :

  alain@alain-desktop:~/Documents/hid_mapper_beta$ ls -l /dev/uinput 
  ls: ne peut accéder /dev/uinput: Aucun fichier ou dossier de ce type

Dans ce cas il faut l'installer par la commande modprobe :

Terminal :

  alain@alain-desktop:~/Documents/hid_mapper_beta$ sudo modprobe uinput

Une vérification :

Terminal :

  alain@alain-desktop:~/Documents/hid_mapper_beta$ ls -l /dev/uinput
  crw-r----- 1 root root 10, 223 2011-03-15 10:30 /dev/uinput

Cette fois-ci, vous devriez obtenir un bon fonctionnement :

Terminal :

  alain@alain-desktop:~/Documents/hid_mapper_beta$ sudo ./hid_mapper --manufacturer 'MICROCHIP' --product 'USB IR DECODER' --map 'rc5_thomson_rct_311.map' 
  Loaded map file rc5_thomson_rct_311.map 
  Found HID device 
  Opened HID interface on /dev/hidraw1 
  Generic USB mapper driver setup

C'est OK

Comme le pilote hidraw est générique, ce 'mappeur' devrait fonctionner avec n'importe quel récepteur HID, même si elle n'est pas une télécommande. HID est utilisé pour les claviers, les souris, les manettes de jeu …

Script de lancement

Pour vous éviter d'écrire la longue ligne de commande précédente, vous pouvez utiliser ce petit script à créer avec Gedit : script_remote1.sh et à placer dans le répertoire hid_mapper_beta (à adapter en fonction de votre configuration) :

Gedit :

  #!/bin/bash 
  # script_remote version 1 
  # 18/03/2011 
  sudo modprobe uinput 
  cd /home/alain/Documents/hid_mapper_beta 
  sudo ./hid_mapper --manufacturer 'MICROCHIP' --product 'USB IR DECODER' --disable-repetition --map 'rc5_thomson_rct_311.map' 
  exit 0

Ainsi pour profiter de votre télécommande :

Terminal :

  alain@alain-desktop:~$ cd /home/alain/Documents/hid_mapper_beta 
  alain@alain-desktop:~/Documents/hid_mapper_beta$ bash script_remote1.sh 
  [sudo] password for alain: 
  Loaded map file rc5_thomson_rct_311.map 
  Found HID device 
  Opened HID interface on /dev/hidraw1
  Generic USB mapper driver setup 

Pour arrêter , faites simplement CRTL C dans le terminal.

Annexes

Annexe 1 : Mapping avec la télécommande Thomson RCT 311 SB1G et la clé MICROCHIP USB IR DECODER :

Code trouvée par le 'mappeur' –> Touche de la télécommande

  02 0c 00 00 00 00 50 b8 pwr on 
  02 0c 00 00 00 00 50 fc pwr off 
  02 0c 00 00 00 00 50 20 radio 
  02 0c 00 00 00 00 50 f2 dec  
  02 0c 00 00 00 00 20 f2 dvd 
  02 0c 00 00 00 00 c0 f4 tv 
  02 0c 00 00 00 00 c0 94 vol_up 
  02 0c 00 00 00 00 c0 54 vol_down 
  02 0c 00 00 00 00 c0 a4 ch_up 
  02 0c 00 00 00 00 c0 e4 ch_down 
  02 0c 00 00 00 00 c0 a0 mute  
  02 0c 00 00 00 00 c0 14 back 
  02 0c 00 00 00 00 c0 7c  exit 
  02 0c 00 00 00 00 c0 8c  menu 
  02 0c 00 00 00 00 c0 d0  up 
  02 0c 00 00 00 00 c0 b0  down 
  02 0c 00 00 00 00 c0 6c  left 
  02 0c 00 00 00 00 c0 ec  right 
  02 0c 00 00 00 00 c0 30 ok 
  02 0c 00 00 00 00 c0 9c red/open.close 
  02 0c 00 00 00 00 c0 dc green/zoom/list 
  02 0c 00 00 00 00 c0 1c yellow/info 
  02 0c 00 00 00 00 c0 a8 blue/guide 
  02 0c 00 00 00 00 c0 78 purple/text 
  02 0c 00 00 00 00 c0 00 1 
  02 0c 00 00 00 00 c0 10 2 
  02 0c 00 00 00 00 c0 08 3 
  02 0c 00 00 00 00 c0 80 4
  02 0c 00 00 00 00 c0 90 5
  02 0c 00 00 00 00 c0 88 6
  02 0c 00 00 00 00 c0 40 7
  02 0c 00 00 00 00 c0 50 8
  02 0c 00 00 00 00 c0 48 9
  02 0c 00 00 00 00 c0 70 0
  02 0c 00 00 00 00 c0 18 av
  02 0c 00 00 00 00 c0 04 rev
  02 0c 00 00 00 00 c0 84 play
  02 0c 00 00 00 00 c0 c4 fwd
  02 0c 00 00 00 00 c0 34 rec
  02 0c 00 00 00 00 c0 b4 stop
  02 0c 00 00 00 00 c0 74 pause
  02 0c 00 00 00 00 c0 c0 again
  02 0c 00 00 00 00 c0 68 live
  02 0c 00 00 00 00 c0 60 advance

Ce fichier est à compléter de la même façon avec avec c0 (pour tv) remplacé par 50 (pour dvd) et par 20 (pour dec).


Annexe 2 Fichier rc5_thomson_rct_311.map à éditer avec Gedit

  020c000000002094:KEY_VOLUMEUP 
  020c000000002054:KEY_VOLUMEDOWN 
  020c0000000020a0:KEY_MUTE 
  020c0000000020d0:KEY_UP 
  020c0000000020b0:KEY_DOWN 
  020c00000000206c:KEY_LEFT 
  020c0000000020ec:KEY_RIGHT 
  020c000000002030:KEY_ENTER 
  020c000000002000:KEY_1 
  020c000000002010:KEY_2 
  020c000000002008:KEY_3 
  020c000000002080:KEY_4
  020c000000002090:KEY_5 
  020c000000002088:KEY_6 
  020c000000002040:KEY_7 
  020c000000002050:KEY_8 
  020c000000002048:KEY_9 
  020c000000002070:KEY_0 
  020c000000002004:KEY_REWIND 
  020c000000002084:KEY_PLAY 
  020c0000000020c4:KEY_FORWARD 
  020c000000002034:KEY_RECORD
  020c0000000020b4:KEY_STOP
  020c000000002074:KEY_PLAYPAUSE
  020c000000005094:KEY_VOLUMEUP 
  020c000000005054:KEY_VOLUMEDOWN 
  020c0000000050a0:KEY_MUTE
  020c0000000050d0:KEY_UP
  020c0000000050b0:KEY_DOWN 
  020c00000000506c:KEY_LEFT 
  020c0000000050ec:KEY_RIGHT 
  020c000000005030:KEY_ENTER
  020c000000005000:KEY_1 
  020c000000005010:KEY_2 
  020c000000005008:KEY_3 
  020c000000005080:KEY_4 
  020c000000005090:KEY_5 
  020c000000005088:KEY_6 
  020c000000005040:KEY_7 
  020c000000005050:KEY_8 
  020c000000005048:KEY_9 
  020c000000005070:KEY_0 
  020c000000005004:KEY_REWIND 
  020c000000005084:KEY_PLAY 
  020c0000000050c4:KEY_FORWARD 
  020c000000005034:KEY_RECORD 
  020c0000000050b4:KEY_STOP 
  020c000000005074:KEY_PLAYPAUSE 
  020c00000000c094:KEY_VOLUMEUP 
  020c00000000c054:KEY_VOLUMEDOWN 
  020c00000000c0a0:KEY_MUTE  
  020c00000000c0d0:KEY_UP 
  020c00000000c0b0:KEY_DOWN 
  020c00000000c06c:KEY_LEFT 
  020c00000000c0ec:KEY_RIGHT 
  020c00000000c030:KEY_ENTER 
  020c00000000c000:KEY_1 
  020c00000000c010:KEY_2 
  020c00000000c008:KEY_3 
  020c00000000c080:KEY_4 
  020c00000000c090:KEY_5 
  020c00000000c088:KEY_6 
  020c00000000c040:KEY_7 
  020c00000000c050:KEY_8 
  020c00000000c048:KEY_9 
  020c00000000c070:KEY_0 
  020c00000000c004:KEY_REWIND 
  020c00000000c084:KEY_PLAY
  020c00000000c0c4:KEY_FORWARD 
  020c00000000c034:KEY_RECORD 
  020c00000000c0b4:KEY_STOP 
  020c00000000c074:KEY_PLAYPAUSE

Contributeurs principaux : Alain_the_cat

Ce tutoriel est basée sur l'adaptation de deux réalisations * partie matérielle : * (fr) http://pagesperso-orange.fr/IR.solutions/ * Partie logicielle * (en) http://forum.xbmc.org/showthread.php?t=88560 par Coldsource