Table des matières

, ,

Télécommande ATI SAPPHIRE REMOTE WONDER Version 1

Le module pour utiliser cette télécommande est déjà présent dans le noyaux mais nécessite quelques modifications, mais le plus simple est l'utilisation de lirc. Cette méthode fonctionne aussi pour la ATI remote wonder (ID: B4SUR84A)

Configuration et modification du pilote

gedit  linux-source-2.6.35/drivers/input/misc/ati_remote.c

voici la partie intéressante du code dans le ficher ati_remote.c les keycodes sont placés dans l'avant dernière colonne

/* Directional control pad axes */
 {KIND_ACCEL,   0x35, 0x70, EV_REL, REL_X, -1},     /* left */
{KIND_ACCEL,   0x36, 0x71, EV_REL, REL_X, 1},    /* right */
{KIND_ACCEL,   0x37, 0x72, EV_REL, REL_Y, -1},     /* up */
{KIND_ACCEL,   0x38, 0x73, EV_REL, REL_Y, 1},    /* down */
/* Directional control pad diagonals */
 {KIND_LU,      0x39, 0x74, EV_REL, 0, 0},        /* left up */
{KIND_RU,      0x3a, 0x75, EV_REL, 0, 0},        /* right up */
{KIND_LD,      0x3c, 0x77, EV_REL, 0, 0},        /* left down */
 {KIND_RD,      0x3b, 0x76, EV_REL, 0, 0},        /* right down */

/* "Mouse button" buttons */
{KIND_LITERAL, 0x3d, 0x78, EV_KEY, BTN_LEFT, 1}, /* left btn down */
{KIND_LITERAL, 0x3e, 0x79, EV_KEY, BTN_LEFT, 0}, /* left btn up */
{KIND_LITERAL, 0x41, 0x7c, EV_KEY, BTN_RIGHT, 1},/* right btn down */
{KIND_LITERAL, 0x42, 0x7d, EV_KEY, BTN_RIGHT, 0},/* right btn up */

/* Artificial "doubleclick" events are generated by the hardware.
* They are mapped to the "side" and "extra" mouse buttons here. */
{KIND_FILTERED, 0x3f, 0x7a, EV_KEY, BTN_SIDE, 1}, /* left dblclick */
{KIND_FILTERED, 0x43, 0x7e, EV_KEY, BTN_EXTRA, 1},/* right dblclick */

/* keyboard. */
    {KIND_FILTERED, 0xd2, 0x0d, EV_KEY, KEY_KP1, 1},
    {KIND_FILTERED, 0xd3, 0x0e, EV_KEY, KEY_KP2, 1},
    {KIND_FILTERED, 0xd4, 0x0f, EV_KEY, KEY_KP3, 1},
    {KIND_FILTERED, 0xd5, 0x10, EV_KEY, KEY_KP4, 1},
    {KIND_FILTERED, 0xd6, 0x11, EV_KEY, KEY_KP5, 1},
    {KIND_FILTERED, 0xd7, 0x12, EV_KEY, KEY_KP6, 1},
    {KIND_FILTERED, 0xd8, 0x13, EV_KEY, KEY_KP7, 1},
    {KIND_FILTERED, 0xd9, 0x14, EV_KEY, KEY_KP8, 1},
    {KIND_FILTERED, 0xda, 0x15, EV_KEY, KEY_KP9, 1},
    {KIND_FILTERED, 0xdc, 0x17, EV_KEY, KEY_KP0, 1},
    {KIND_FILTERED, 0xc5, 0x00, EV_KEY, KEY_Q, 1},
    {KIND_FILTERED, 0xc6, 0x01, EV_KEY, KEY_B, 1},
    {KIND_FILTERED, 0xde, 0x19, EV_KEY, KEY_C, 1},
    {KIND_FILTERED, 0xe0, 0x1b, EV_KEY, KEY_D, 1},
    {KIND_FILTERED, 0xe6, 0x21, EV_KEY, KEY_E, 1},
    {KIND_FILTERED, 0xe8, 0x23, EV_KEY, KEY_F, 1},

    /* "special" keys */
    {KIND_FILTERED, 0xdd, 0x18, EV_KEY, KEY_KPENTER, 1},    /* "check" */
    {KIND_FILTERED, 0xdb, 0x16, EV_KEY, KEY_MENU, 1},       /* "menu" */
    {KIND_FILTERED, 0xc7, 0x02, EV_KEY, KEY_POWER, 1},      /* Power */
    {KIND_FILTERED, 0xc8, 0x03, EV_KEY, KEY_TV, 1},         /* TV */
    {KIND_FILTERED, 0xc9, 0x04, EV_KEY, KEY_DVD, 1},        /* DVD */
    {KIND_FILTERED, 0xca, 0x05, EV_KEY, KEY_WWW, 1},        /* WEB */
    {KIND_FILTERED, 0xcb, 0x06, EV_KEY, KEY_BOOKMARKS, 1},  /* "book" */
    {KIND_FILTERED, 0xcc, 0x07, EV_KEY, KEY_EDIT, 1},       /* "hand" */
    {KIND_FILTERED, 0xe1, 0x1c, EV_KEY, KEY_COFFEE, 1},     /* "timer" */
    {KIND_FILTERED, 0xe5, 0x20, EV_KEY, KEY_FRONT, 1},      /* "max" */
    {KIND_FILTERED, 0xe2, 0x1d, EV_KEY, KEY_LEFT, 1},       /* left */
    {KIND_FILTERED, 0xe4, 0x1f, EV_KEY, KEY_RIGHT, 1},      /* right */
    {KIND_FILTERED, 0xe7, 0x22, EV_KEY, KEY_DOWN, 1},       /* down */
    {KIND_FILTERED, 0xdf, 0x1a, EV_KEY, KEY_UP, 1},         /* up */
    {KIND_FILTERED, 0xe3, 0x1e, EV_KEY, KEY_OK, 1},         /* "OK" */
    {KIND_FILTERED, 0xce, 0x09, EV_KEY, KEY_VOLUMEDOWN, 1}, /* VOL + */
    {KIND_FILTERED, 0xcd, 0x08, EV_KEY, KEY_VOLUMEUP, 1},   /* VOL - */
    {KIND_FILTERED, 0xcf, 0x0a, EV_KEY, KEY_MUTE, 1},       /* MUTE  */
    {KIND_FILTERED, 0xd0, 0x0b, EV_KEY, KEY_CHANNELUP, 1},  /* CH + */
    {KIND_FILTERED, 0xd1, 0x0c, EV_KEY, KEY_CHANNELDOWN, 1},/* CH - */
    {KIND_FILTERED, 0xec, 0x27, EV_KEY, KEY_RECORD, 1},     /* ( o) red */
    {KIND_FILTERED, 0xea, 0x25, EV_KEY, KEY_PLAY, 1},       /* ( >) */
    {KIND_FILTERED, 0xe9, 0x24, EV_KEY, KEY_REWIND, 1},     /* (<<) */
    {KIND_FILTERED, 0xeb, 0x26, EV_KEY, KEY_FORWARD, 1},    /* (>>) */
    {KIND_FILTERED, 0xed, 0x28, EV_KEY, KEY_STOP, 1},       /* ([]) */
    {KIND_FILTERED, 0xee, 0x29, EV_KEY, KEY_PAUSE, 1},      /* ('') */
    {KIND_FILTERED, 0xf0, 0x2b, EV_KEY, KEY_PREVIOUS, 1},   /* (<-) */
    {KIND_FILTERED, 0xef, 0x2a, EV_KEY, KEY_NEXT, 1},       /* (>+) */
    {KIND_FILTERED, 0xf2, 0x2D, EV_KEY, KEY_INFO, 1},       /* PLAYING */
    {KIND_FILTERED, 0xf3, 0x2E, EV_KEY, KEY_HOME, 1},       /* TOP */
    {KIND_FILTERED, 0xf4, 0x2F, EV_KEY, KEY_END, 1},        /* END */
    {KIND_FILTERED, 0xf5, 0x30, EV_KEY, KEY_SELECT, 1},     /* SELECT */

    {KIND_END, 0x00, 0x00, EV_MAX + 1, 0, 0}

Pour ma part j'ai changé les touches 0 à 9 parles touches du pavé numérique et la touche A parla touche Q ex KEY_1 parKEY_KP1

pour obtenir les codes attribués à chaque touche

gedit /usr/src/linux-headers-`uname -r`/include/linux/input.h

mais pour aller plus loin et configurer les touches TV; DVD; stop ; enregistrement etc … j'utilise xev et Préférences/raccourcis claviers.

Or les keycodes du input.h du noyau et ceux indiqués parxev, ne sont pas forcément les mêmes:

pour le noyau 2.6.35-22 :

Il y a donc un décalage dans le cas de ce noyau de 8 codes!

Petite astuce si la touche Windows ne fonctionne pas:
 gconftool-2 --set /apps/metacity/global_keybindings/panel_main_menu --type string "Super_L" 

rétablis la touche windows.

Donc pour attribuer les bons codes aux touches:

Exemple:

xev renvoie pour la touche FN + F5:

" state 0x2010, keycode 156 (keysym 0x1008ff41, XF86Launch1), same_screen YES "

donc le keycode associé dans le fichier input.h est 156-8=148 donc KEY_PROG1 pour le noyau 2.6.35-22

Il suffit alors de remplacer dans ati_remote.c :

{KIND_FILTERED, 0xc9, 0x04, EV_KEY, KEY_DVD, 1},        /* DVD */

par

{KIND_FILTERED, 0xc9, 0x04, EV_KEY, KEY_PROG1, 1},        /* DVD */

Enfin , nous voulons utiliser notre lecteur multimédia préféré:( vlc dans mon cas) pour la touche DVD de la télécommande

Il suffit d'aller dans Préférences/raccourcis claviers et ajouter le lancement de vlc avec comme touche de raccourcis le keysym XF86Launch1 et le tour est joué !

Il faut donc chercher donc connaitre le keycode de la touche et keysim associé.

La commande :

$ xmodmap -pke 

vous donne la relation keycode-keysim; sinon xev fait normalement bien le travail On cherche alors la correspondance du keycode dans le fichier input.h (en retirant 8 dans le cas du noyau 2.6.35-22)

Voir l'exemple prédent pour la fin de la modification du ficher ati_remote.c

une fois le fichier modifié, il n'y a plus qu'à compiler le pilote

gedit  linux-source-2.6.17/drivers/usb/input/Makefile

version intrepid et suivante:

gedit  linux-source-2.6.35/drivers/input/misc/Makefile

voici le Makefile :

VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 35
EXTRAVERSION = .13-ubuntu1
NAME=Crazed Snow-Weasel

ifneq ($(KERNELRELEASE),)
#
# Make rules for use from within 2.6 kbuild system
#
obj-m    += ati_remote.o

else  # We were called from command line

KDIR	:= /lib/modules/$(shell uname -r)/build
PWD	:= $(shell pwd)
all:
	$(MAKE) -C $(KDIR) M=$(PWD) modules
install: all
	$(MAKE) -C $(KDIR) M=$(PWD) modules_install
clean:
	rm -f *.mod.c *.ko *.o *~ core *.i
endif
cd linux-source-2.6.17/drivers/usb/input/
make

version intrepid et suivantes:

cd linux-source-2.6.35/drivers/input/misc
make

le pilote compilé est le fichier ati_remote.ko

Pour le tester dans un premier temps: - enlever le pilote actuel déjà chargé

sudo rmmod ati_remote

la télécommande ne répond plus à présent.

Installation du nouveau module

sudo insmod ati_remote.ko

la commande se fait toujours dans le répertoire ou se situe le fichier ati_remote.ko normalement la télécommande réagit avec les nouvelles touches assignées

Maintenant pour l'installer définitivement

sudo cp ati_remote.ko /lib/modules/`uname -r`/kernel/drivers/usb/input/ati_remote.ko

version intrepid et suivantes:

sudo cp ati_remote.ko /lib/modules/`uname -r`/kernel/drivers/input/misc/ati_remote.ko

Cette méthode n'est pas très élégante puisqu'elle écrase le module actuel Mais elle évite tout conflit avec l'ancien pilote puisqu'il n'existe plus de plus le pilote est chargé directement au démarrage Si écraser le fichier vous fait hérisser les poils, il est possible de faire un backup du fichier avant de l'écraser.

Changer le canal de communication

Si votre voisin a eu la bonne idée d'acheter la même télécommande que vous, il se peux qu'il arrive à prendre le contrôle de votre ordinateur (et vous le contrôle du sien). Pour remédier à ce problème assez embêtant, il faut changer le canal de communication de la télécommande pour se distinguer de celle du voisin.

Configuration de la télécommande

Pour cela, on appuie quelques secondes sur le bouton "main" de la télécommande jusqu'à ce que la LED de contrôle se mette à clignoter. Elle clignote autant de fois que le numéro du canal sur lequel est configuré la télécommande. Une fois que la LED cesse de clignoter, on rentre un nouveau canal (différent du voisin bien sûr) à l'aide des touches numériques (les canaux vont de 1 à 16, ne pas oublier de mettre le 0 si on choisi un canal de 1 à 9, ex : 07). On confirme le numéro en ré-appuyant sur le bouton "main". La LED clignote le nombre de fois correspondant au canal sélectionné pour confirmer.

Configuration du module

Il faut ensuite procéder à la configuration du module. A partir de là, 2 choix s'offre a nous : soit on masque le canal du voisin, soit on autorise que le nôtre, tout dépend si on connaît le canal du voisin :p

Masquer un seul canal

Le calcul du masque est assez simple : 2^canal_voisin Retenez ensuite la valeur, on va en avoir besoin pour la configuration

Autoriser un seul canal

Là aussi le calcul n'est pas beaucoup plus compliqué : 65535-(2^canal)

Tests et enregistrement du masque

Une fois le masque trouvé, on va le tester avant de l'enregistrer. Pour cela, commencez pardécharger le module à l'aide de la commande

sudo rmmod ati_remote

Puis rechargez le en passant en paramètre le masque calculé via la commande

sudo modprobe ati_remote channel_mask=masque

Remplacez masque parle masque calculé juste au dessus.

Il vous reste à tester maintenant si l'ordinateur répond toujours aux commandes de la télécommande :)

Si tout est ok, il ne reste plus qu'à enregistrer le masque pour que le module soit chargé avec celui-ci au démarrage. Pour cela, éditer le fichier /etc/modprobe.d/options

Sur ubuntu :

gksudo gedit /etc/modprobe.d/options

Sur kubuntu :

kdesu kate /etc/modprobe.d/options

A la fin du fichier, rajouter ceci

# Set channel for ATI Remote Wonder
options ati_remote channel_mask=masque

En remplaçant toujours masque parle masque calculé

Et si ça ne marche pas ?

Il est possible d'activer un mode debug pour voir les signaux capturés et ceux masqués à l'aide de la commande

sudo modprobe channel_mask=masque debug=1

Tout sera alors loggué dans le fichier /var/log/syslog, pour l'afficher en temps réel, exécutez

tail -f /var/log/syslog

Utiliser sa télécommande avec le programme LIRC

Lirc est un programme permettant de contrôler à l'aide d'une télécommande votre ordinateur.

L'avantage de ce programme est qu'il peut s'adapter à presque toute vos envies. Son principal défaut est une installation complexe, voici la méthode la plus simple pour installer et configurer Lirc sur votre ordinateur.

Vous trouverez sur le wiki d'autres pages traitant de la configuration de lirc et notamment une page présentant les fichiers lircrc permettant de personnaliser l'utilisation de votre télécommande.

Remarque d'un lecteur : Vous trouverez ici une page de blog qui m'a été très utile, testé avec succès sous festy.

Prérequis

On installe LIRC et ce qu'il faut pour compiler le module de notre télécommande :

sudo apt-get install lirc lirc-modules-source module-assistant

Ou parle protocole apt

Configuration à partir des sources

puis on reconfigure à partir des sources :

sudo dpkg-reconfigure lirc-modules-source

Sur l'écran qui apparaît, cliquez sur Ok

Dans l'ecran proposant de choisir le module lirc choisir : atiusb puis Ok

Répondre No sur l'écran suivant puis Install the package maintener version et Ok

gksudo gedit /etc/lirc/hardware.conf

Rajoutez :

MODULES="lirc_atiusb"

Finalisation

Puis copier les lignes suivantes dans un terminal :

sudo m-a update,prepare 
sudo rm /usr/src/lirc*deb
sudo m-a clean lirc
sudo m-a a-i lirc
sudo depmod -a

Suppression du module ati_remote

On empêche le chargement du module (pilote) ati_remote :

gksudo gedit /etc/modprobe.d/blacklist

On rajoute ceci à la fin :

# Télécommande ATI
blacklist ati_remote

Configurer sa télécommande

gksudo gedit /etc/lirc/lircd.conf

LE contenu du fichier doit reprendre le fichier de configuration de votre télécommande. Voir http://lirc.sourceforge.net/remotes/atiusb/lircd.conf.atiusb

Pour lancer lirc au démarrage de Gnome :

Système » Préférences » Sessions » Programmes au démarrage

et ajouter irexec

Ensuite reste le plus "facile" configurer les programmes pour utiliser notre télécommande.

gedit ~/.lircrc

Vous trouverez des exemples de fichiers de configuration pour Lirc sur le wiki : Création de fichiers lircrc.

Pour finaliser l'installation redémarrez votre ordinateur.

Si vous avez des doutes sur la réussite de votre installation, lancez un Terminal et tapez le commande :

irw

Lors de l'appui sur une des touche de votre télécommande le Terminal doit vous signaler un evenement.

Bon courage !!

Voir aussi