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 : * Disposer des droits d'administration (sudo). * Disposer d'une connexion à Internet configurée et activée. ===== 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 : * La base USB branchée sur un port USB, la Led verte doit s'allumer à chaque appui sur une touche de la télécommande. * le récepteur doit être identifié par Linux. 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 du logiciel * installation du logiciel * apprentissage des événements HID * vérification du bon fonctionnement ==== 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 : * branchez votre récepteur USB * lancez juste le script avec le terminal sur son emplacement 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//