Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 06/02/2010, à 11:42

Nii

Télécommande generique (hid device)

Bonjour.

Récemment j'ai commandé une télécommande de type "Generic HID", espérant n'avoir aucun soucis de compatibilité du fait qu'elle est reconnu comme une clavier/souris.

Mauvaise surprise, ce n'est pas aussi simple smile.

Bon pour commencer, voici comment est reconnu le module usb/ir :

[ 4310.005925] input: ATWF@83-W001 ESKY.CC USB_V3B as /devices/pci0000:00/0000:00:1d.7/usb1/1-5/1-5.3/1-5.3:1.0/input/input12
[ 4310.006102] generic-usb 0003:0755:2626.0004: input,hidraw0: USB HID v1.10 Keyboard [ATWF@83-W001 ESKY.CC USB_V3B] on usb-0000:00:1d.7-5.3/input0
[ 4310.011025] input: ATWF@83-W001 ESKY.CC USB_V3B as /devices/pci0000:00/0000:00:1d.7/usb1/1-5/1-5.3/1-5.3:1.1/input/input13
[ 4310.011237] generic-usb 0003:0755:2626.0005: input,hidraw1: USB HID v1.10 Mouse [ATWF@83-W001 ESKY.CC USB_V3B] on usb-0000:00:1d.7-5.3/input1

Pour allez au plus simple, je test avec evrouter, mais certaine touches ne sont pas mappées, d'autres sont doublées (même keycode).

Je test avec xbindkeys, même chose.

Si l'on regarde bien le dmesg, l'on voit deux device hidrawX.
Ni une ni deux, on sort l'outil "od", et on test :

#sudo od -s /dev/hidraw0
0000000      1      8      0      0      0      0      0      0
0000020      3     23      0      0      0      0      0      0
0000040      1      4      0      0      0      0      0      0
0000060      3      5      0      0      0      0      0      0

Woot, mes touches non reconnu fournissent bien un event sur les interface /dev/hidrawX.

Si je résume :
- Sur les devices présent dans "/dev/input/by-id", j'ai la moitié de mes events (kbd/mouse), certains sont mappées sur le meme keycode.
- Mes touches manquantes me sortent un event sur le device /dev/hidraw0 (keyboard).

A première vue je dirais que c'est similaire aux souris multi fonctions, donc voir du cote de hal (j'ai commencer a lire, mais c'est pas si clair que ca hmm ).
Pour les touches manquantes, mais qui appartiennent au device kbd, pas d'idée.
Changer l'agencement ?

Donc les questions de ce post sont :
- Comment utiliser ces interfaces (evrouteur n'en veux pas).
- Si une méthode simple n'existe pas, quelqu'un à un exemple d'interaction avec ce genre de device ? (je pense à un code C).

Merci

Dernière modification par Nii (Le 06/02/2010, à 12:26)

Hors ligne

#2 Le 06/02/2010, à 19:04

Nii

Re : Télécommande generique (hid device)

Bon j'avance un petit peu avec lirc

Pour info :
/dev/input/event6 = Keyboard
/dev/input/event7 = Mouse

Donc j'ai tester le touches qui répondait sur le device mouse (/dev/hidraw1)
Toutes répondent avec un event system associé, de ce coté pas de problème.

nicolas@x60s:~$ sudo lircd -H devinput -d /dev/input/event7
nicolas@x60s:~$ irw
00000000800100a6 00 KEY_STOPCD devinput
00000000800100d0 00 KEY_FASTFORWARD devinput
00000000800100a3 00 KEY_NEXTSONG devinput
00000000800100a4 00 KEY_PLAYPAUSE devinput
...

Maintenant passons au device Keyboard (6 touches testées):

nicolas@x60s:~$ sudo lircd -H devinput -d /dev/input/event6
nicolas@x60s:~$ irw
000000008001001d 00 KEY_LEFTCTRL devinput

000000008001001d 00 KEY_LEFTCTRL devinput
000000008001002a 00 KEY_LEFTSHIFT devinput

000000008001001d 00 KEY_LEFTCTRL devinput

000000008001001d 00 KEY_LEFTCTRL devinput

000000008001001d 00 KEY_LEFTCTRL devinput

000000008001001d 00 KEY_LEFTCTRL devinput
000000008001002a 00 KEY_LEFTSHIFT devinput
...

Donc mon soucis ici est que normalement je dois avoir une combinaison du type :
CTRL + "lettre"
CTRL + SHIFT + "lettre"

Hors la lettre n'apparait nul part hmm. Et je n'est aucune idée pourquoi.

Hors ligne

#3 Le 09/02/2010, à 00:01

Nii

Re : Télécommande generique (hid device)

Bon je me répond a moi même.

Donc pour les touches mapper sur le device mouse, aucun soucis.
Du cote du device kbd, je n'est de retour que de shift et ctrl.

Si je lance "od" sur "/dev/input/event6", qui correspond au kbd, je n'est aucune sortie sur certaine touches.
Par contre sur je lance "od" sur /dev/hidraw0, qui correspond au kbd aussi, sur ces même touches j'ai un retour.

Donc le device hid est bien reconnu.
En raw, j'ai un retour.
Par contre l'on dirait que les évent sont mal "mapper" ? Comme si la couche qui gère les évents ne prends pas en compte certaine choses.

Si quelqu'un as un avis sur la question.

Dernière modification par Nii (Le 09/02/2010, à 00:01)

Hors ligne

#4 Le 08/04/2010, à 18:13

henriet

Re : Télécommande generique (hid device)

Salut,
je viens de recevoir une télécommande équivalente.
Nii, as-tu réussi à avancer au niveau de la configuration ?


OpenSuse 11.3 x64, KDE 4.5.1
Intel Q8400, ATI HD4850

Hors ligne

#5 Le 08/04/2010, à 19:15

Nii

Re : Télécommande generique (hid device)

J'ai abandonné l'idée de trouver une application qui reconnaisse ma télécommande et ai commencé un code en C. (Qui est resté en standby car j'ai finalement utilisé une wiimote pour piloter xbmc).

Je lis mon device, je retrouve tous mes évents, il me manque juste la partie pour retranscrire les touches.

Par contre tu peux m'intéresser si tu utilise un clavier avec pavé numérique (je suis sur laptop) pour effectuer quelques tests.
Tout dépend de tes besoins, qui était pour ma part de simuler l'appuie sur une ou plusieurs touches.

Dernière modification par Nii (Le 08/04/2010, à 20:20)

Hors ligne

#6 Le 08/04/2010, à 21:41

henriet

Re : Télécommande generique (hid device)

Oui j'ai un clavier classique, donc avec pavé numérique ;-)


OpenSuse 11.3 x64, KDE 4.5.1
Intel Q8400, ATI HD4850

Hors ligne

#7 Le 08/04/2010, à 23:34

Nii

Re : Télécommande generique (hid device)

Pour l'instant, vu que ma télécommande me renvoie des combinaisons comprenant ctrl/alt/shift, elle me fausse ma sortie.

Je vais essayer de continuer ce bout de code pour qu'il fonctionne correctement.
Je te recontacte sur le forum si j'arrive à quelque chose d'exploitable.

Si toi ou quelqu'un connait le C, et la famille Xlib.h/keysym.h/Xtest.h, je peux vous le poster.

Hors ligne

#8 Le 10/04/2010, à 11:00

henriet

Re : Télécommande generique (hid device)

Je connais le C, mais pas les bibliothèques.
C'est rageant, je viens d'essayer la télécommande sous Windows et ça marche beaucoup mieux que sous Linux sad


OpenSuse 11.3 x64, KDE 4.5.1
Intel Q8400, ATI HD4850

Hors ligne

#9 Le 10/04/2010, à 11:27

Nii

Re : Télécommande generique (hid device)

Pour Ctrl_L, qui me salit ma sortie, je le supprime via xmodmap, puis le rajoute quand je n'utilise plus le script. Bref c'est pas propre.

Par contre j'ai un autre event qui je n'est pas encore réussit a désactiver et qui vient me salir la sortie :

FocusOut event, serial 42, synthetic NO, window 0x4a00001,
    mode NotifyGrab, detail NotifyAncestor

FocusIn event, serial 42, synthetic NO, window 0x4a00001,
    mode NotifyUngrab, detail NotifyAncestor

Concernant ta télécommande, quand tu test les events avec "xev" par exemple, ce sont des combinaisons ou non ?

Hors ligne

#10 Le 10/04/2010, à 11:49

henriet

Re : Télécommande generique (hid device)

Oui j'ai des combinaisons de Control_L, Shift_L, Alt_L et Super_L.
Pour MyTV par exemple :

MappingNotify event, serial 33, synthetic NO, window 0x0,
    request MappingKeyboard, first_keycode 8, count 248

MappingNotify event, serial 33, synthetic NO, window 0x0,
    request MappingKeyboard, first_keycode 8, count 247

KeyPress event, serial 33, synthetic NO, window 0x7000001,
    root 0xc2, subw 0x0, time 7775606, (476,844), root:(480,867),
    state 0x0, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 33, synthetic NO, window 0x7000001,
    root 0xc2, subw 0x0, time 7775606, (476,844), root:(480,867),
    state 0x14, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 35, synthetic NO, window 0x7000001,
    root 0xc2, subw 0x0, time 7775758, (476,844), root:(480,867),
    state 0x15, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 35, synthetic NO, window 0x7000001,
    root 0xc2, subw 0x0, time 7775758, (476,844), root:(480,867),
    state 0x11, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

Et les touches numériques ne renvoient rien du tout. Je m'attendais plutôt à ce qu'elles marchent le mieux.
Il n'y a que les touches multimédia qui fonctionnent directement (X86AudioPlay & co)


OpenSuse 11.3 x64, KDE 4.5.1
Intel Q8400, ATI HD4850

Hors ligne

#11 Le 10/04/2010, à 12:14

Nii

Re : Télécommande generique (hid device)

Oui de même, certaines sont directement reconnu comme touches médias par X.

Mais pourquoi les devs ne mappent pas vers un caractère simple au lieu de se prendre la tete avec des combinaison -__-.

Pour le code, je te le post si tu veux jouer avec.
http://paste.ubuntu.com/412037/

Pour résumer, quand je branche mon adaptateur usb>ir, j'obtiens deux /dev/hidrawX.
Un pour le clavier et l'autre pour la souris.

De base ces devices ne peuvent être lu que par root.
Pour que ton user puisse le lire, il faut éditer le fichier /lib/udev/rules.d/50-udev-default.rules et modifier le MODE par 0644 sur la ligne suivante :

KERNEL=="ts[0-9]*|uinput",  MODE="0644"

A partir de la tu peux compiler le hid.c via la commande

gcc -Wall -lX11 -lXtst -o hid hid.c

Puis pour lire ton device tu lance la commande

./hid < /dev/hidrawX

Il te faudra le lancer deux fois, car tu aura surement deux devices différents.

Concernant le code :
Je me suis aperçu a force de jouer avec la commande "od" que mes sorties etaient sur 3 octets sur chaque /dev/hidrawX.

Donc à chaque sortie sur le device, je lit 3 octets (variable BYTE).
Puis je vérifie dans mon tableau hidraw_dump si quelquechose correspond.
Si c'est le cas, via la fonction press_key(), je simule l'appuie sur un touche, qui correspond à l'emplacement hidraw_dump[x][3]).

Mon soucis à l'heure actuelle, c'est les combinaisons avec alt/shift/ctrl qui fausse ma sortie.
Je n'ai pas trouver de solution à part faire un sleep(1), pour simuler l'appuie de ma touche après la sortie de ma télécommande, mais bof.

Hors ligne

#12 Le 10/04/2010, à 12:31

henriet

Re : Télécommande generique (hid device)

Je vais jeter un œil, merci.


OpenSuse 11.3 x64, KDE 4.5.1
Intel Q8400, ATI HD4850

Hors ligne

#13 Le 10/04/2010, à 15:54

henriet

Re : Télécommande generique (hid device)

Je suis en train d'essayer de trafiquer le driver macmini dans lirc, et j'obtiens des codes à 6 chiffres sur les touches qui nous posent problèmes smile . Par contre les touchent qui marchent avec xev ne retournent rien (si c'était trop simple ça ne serait pas marrant). Peut-être que X passe juste avant, ou quelque chose dans le genre :s.
La suite au prochain épisode...


OpenSuse 11.3 x64, KDE 4.5.1
Intel Q8400, ATI HD4850

Hors ligne

#14 Le 10/04/2010, à 16:16

Nii

Re : Télécommande generique (hid device)

Par contre les touchent qui marchent avec xev ne retournent rien

Elles ne retournent rien sur les deux devices ?

Hors ligne

#15 Le 10/04/2010, à 16:34

henriet

Re : Télécommande generique (hid device)

Bien vu ! J'avais oublié hiddev1
Bon j'ai récupéré un code pour chaque touche, reste à comprendre comment les exploiter avec lirc.


OpenSuse 11.3 x64, KDE 4.5.1
Intel Q8400, ATI HD4850

Hors ligne

#16 Le 10/04/2010, à 18:28

Nii

Re : Télécommande generique (hid device)

Poste ton avancée, qui sait, si qqun passe par la, il pourra peux être répondre a tes questions.

Hors ligne

#17 Le 11/04/2010, à 12:42

henriet

Re : Télécommande generique (hid device)

Bon j'ai un truc qui marche dans XBMC, même si tout n'est pas encore carré.
Voici le patch pour lirc (lirc.patch) :

diff -Nur lirc-0.8.6/configure lirc-0.8.6_new/configure
--- lirc-0.8.6/configure	2009-09-13 10:52:22.000000000 +0200
+++ lirc-0.8.6_new/configure	2010-04-10 20:47:49.000000000 +0200
@@ -1538,7 +1538,7 @@
   --with-driver=X         specify the driver to use, where X is one of:
                           all, none, userspace, accent, act200l,
                           act220l, adaptec, alsa_usb, animax, asusdh,
-                          atilibusb, atiusb, audio, audio_alsa
+                          atilibusb, atiusb, atwf83, audio, audio_alsa
                           avermedia, avermedia_vdomate, avermedia98,
                           awlibusb, bestbuy, bestbuy2, breakoutbox,
                           bte, bw6130, caraca, chronos, commandir,
@@ -24542,7 +24542,7 @@
 #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
-  possible_drivers="${possible_drivers} (dvico) (asusdh) (bw6130) (macmini)"
+  possible_drivers="${possible_drivers} (dvico) (asusdh) (bw6130) (macmini) (atwf83)"
   { echo "$as_me:$LINENO: checking for HIDDEV_FLAG_UREF support" >&5
 echo $ECHO_N "checking for HIDDEV_FLAG_UREF support... $ECHO_C" >&6; }
   cat >conftest.$ac_ext <<_ACEOF
@@ -25085,6 +25085,9 @@
 	macmini)
 		hw_module="${hw_module} hw_hiddev.o"
 		;;
+	atwf83)
+		hw_module="${hw_module} hw_hiddev.o"
+		;;
 	mediafocusI)
 		;;
 	mouseremote)
@@ -25628,6 +25631,14 @@
   lircd_conf="apple/lircd.conf.macmini"
 fi
 
+if test "$driver" = "atwf83"; then
+  lirc_driver="$driver"
+  hw_module="hw_hiddev.o"
+  HW_DEFAULT="hw_atwf83"
+  lircd_conf="aureal/lircd.conf.atwf83"
+fi
+
+
 if test "$driver" = "mceusb"; then
   lirc_driver="lirc_dev lirc_mceusb"
   lircd_conf="mceusb/lircd.conf.mceusb"
@@ -26001,6 +26012,7 @@
 	test "$lirc_driver" = "alsa_usb" || \
 	test "$lirc_driver" = "asusdh" || \
 	test "$lirc_driver" = "atilibusb" || \
+	test "$lirc_driver" = "atwf83" || \
 	test "$lirc_driver" = "audio" || \
 	test "$lirc_driver" = "audio_alsa" || \
 	test "$lirc_driver" = "awlibusb" || \
diff -Nur lirc-0.8.6/daemons/hw_hiddev.c lirc-0.8.6_new/daemons/hw_hiddev.c
--- lirc-0.8.6/daemons/hw_hiddev.c	2009-05-07 20:19:37.000000000 +0200
+++ lirc-0.8.6_new/daemons/hw_hiddev.c	2010-04-10 22:07:24.000000000 +0200
@@ -3,7 +3,7 @@
  ****************************************************************************
  *
  * receive keycodes input via /dev/usb/hiddev...
- * 
+ *
  * Copyright (C) 2002 Oliver Endriss <o.endriss@gmx.de>
  * Copyright (C) 2004 Chris Pascoe <c.pascoe@itee.uq.edu.au>
  * Copyright (C) 2005 William Uther <william.uther@nicta.com.au>
@@ -44,6 +44,7 @@
 static int sb0540_init();
 static char *sb0540_rec(struct ir_remote *remotes);
 static char *macmini_rec(struct ir_remote *remotes);
+static char *atwf83_rec(struct ir_remote *remotes);
 static int samsung_init();
 static char *samsung_rec(struct ir_remote *remotes);
 
@@ -157,6 +158,27 @@
 	"macmini"		/* name */
 };
 
+/* Aureal USB iR Receiver */
+struct hardware hw_atwf83=
+{
+    "/dev/hidraw0",     /* "device" */
+    -1,         /* fd (device) */
+    LIRC_CAN_REC_LIRCCODE,  /* features */
+    0,          /* send_mode */
+    LIRC_MODE_LIRCCODE,     /* rec_mode */
+    32,         /* code_length */
+    hiddev_init,        /* init_func */
+    NULL,           /* config_func */
+    hiddev_deinit,          /* deinit_func */
+    NULL,           /* send_func */
+    atwf83_rec,        /* rec_func */
+    hiddev_decode,          /* decode_func */
+    NULL,                   /* ioctl_func */
+    NULL,           /* readdata */
+    "atwf83"       /* name */
+};
+
+
 #ifdef HAVE_LINUX_HIDDEV_FLAG_UREF
 /* Samsung USB IR Receiver */
 struct hardware hw_samsung=
@@ -196,12 +218,12 @@
 int hiddev_init()
 {
 	logprintf(LOG_INFO, "initializing '%s'", hw.device);
-	
+
 	if ((hw.fd = open(hw.device, O_RDONLY)) < 0) {
 		logprintf(LOG_ERR, "unable to open '%s'", hw.device);
 		return 0;
 	}
-	
+
 	return 1;
 }
 
@@ -233,13 +255,13 @@
 	{
 		return(0);
 	}
-	
+
 	LOGPRINTF(1, "lirc code: 0x%X", *codep);
 
 	*repeat_flagp = repeat_flag;
 	*min_remaining_gapp = 0;
 	*max_remaining_gapp = 0;
-	
+
 	return 1;
 }
 
@@ -257,9 +279,9 @@
 	int x_direction=0;
 	int y_direction=0;
 	int i;
-	
+
 	LOGPRINTF(1, "hiddev_rec");
-	
+
 	rd = read(hw.fd, &event, sizeof event);
 	if (rd != sizeof event) {
 		logprintf(LOG_ERR, "error reading '%s'", hw.device);
@@ -283,11 +305,11 @@
 
 	if (event.hid == 0x90001)
 	{
-		/* This is the DVICO Remote. It actually sends two hid 
-		 * events, the first of which has 0 as the hid.value and 
-		 * is of no use in decoding the remote code. If we 
-		 * receive this type of event, read the next event 
-		 * (which should be immediately available) and 
+		/* This is the DVICO Remote. It actually sends two hid
+		 * events, the first of which has 0 as the hid.value and
+		 * is of no use in decoding the remote code. If we
+		 * receive this type of event, read the next event
+		 * (which should be immediately available) and
 		 * use it to obtain the remote code.
 		 */
 
@@ -311,10 +333,10 @@
 		struct timeval now;
 		repeat_flag = (main_code & dvico_repeat_mask);
 		main_code = (main_code & ~dvico_repeat_mask);
-		
+
 		gettimeofday (&now, NULL);
 
-		/* The hardware dongle for the dvico remote sends spurious */  
+		/* The hardware dongle for the dvico remote sends spurious */
 		/* repeats of the last code received it it gets a false    */
 		/* trigger from some other IR source, or if it misses      */
 		/* receiving the first code of a new button press. To      */
@@ -331,7 +353,7 @@
 			}
 		}
 		time_of_last_code = now;
-		
+
 		LOGPRINTF(1, "main 0x%X  repeat flag 0x%X", main_code, repeat_flag);
 		return decode_all(remotes);
 #if 0
@@ -339,21 +361,21 @@
 		   real codes of the remote control (currently
 		   verified for the MCE remote only) */
 		ir_code pre, main;
-		
+
 		pre_code_length = 16;
 		main_code_length = 16;
-		
+
 		pre = event.value&0xff;
 		pre_code = reverse(~pre, 8)<<8 | reverse(pre, 8);
-		
+
 		repeat_flag = (event.value & dvico_repeat_mask);
-		
+
 		main = (event.value&0x7f00) >> 8;
 		main_code = reverse(main, 8)<<8 | reverse(~main, 8);
 		return decode_all(remotes);
 #endif
 	}
-	
+
 	/* Asus DH remote specific code */
 	else if (event.hid == 0xFF000000)
 	{
@@ -396,14 +418,14 @@
 		y_direction = (event.value & 0x000000F0) >> 2;
 		x_direction = (x_movement & 0x000000F0) >> 1;
 		x_movement &= 0x0000000F;
-		
+
 		if(x_movement > 8 || y_movement > 8)
 		{
 			logprintf(LOG_ERR, "unexpected coordinates: %u,%u",
 				  x_movement, y_movement);
 			return NULL;
 		}
-		
+
 		main_code=mousegrid[x_movement][y_movement];
 		main_code |= x_direction;
 		main_code |= y_direction;
@@ -417,8 +439,8 @@
 	   first event field after button code (wheel_count==1) */
 	else if (wheel_count==1) {
 		x_movement=event.value;
-		
-		wheel_count=2;	
+
+		wheel_count=2;
 		return NULL;
 	}
 
@@ -594,6 +616,44 @@
 }
 
 /*
+*  Aureal Technology ATWF@83 cheap remote
+*  specific code.
+*/
+
+char *atwf83_rec(struct ir_remote *remotes)
+{
+    static struct timeval time_of_last_code;
+    struct timeval now;
+    struct hiddev_event ev[7];
+    int rd;
+    int i;
+
+    LOGPRINTF(1, "atwf83");
+
+    rd = read(hw.fd, ev, sizeof(ev[0]));
+	
+    gettimeofday (&now, NULL);
+    /* Record the code */
+    pre_code_length = 0;
+    pre_code = 0;
+    main_code = ev[0].hid;
+    repeat_flag = 0;
+    if (main_code == 0 || main_code == 0x200)
+    {
+        return NULL;
+    }
+    if (old_main_code == main_code)
+    {
+        repeat_flag = 1;
+    }
+    old_main_code = main_code;
+    time_of_last_code = now;
+
+    return decode_all(remotes);
+}
+
+
+/*
  * Samsung/Cypress USB IR Receiver specific code
  * (e.g. used in Satelco EasyWatch remotes)
  *
diff -Nur lirc-0.8.6/daemons/hw-types.c lirc-0.8.6_new/daemons/hw-types.c
--- lirc-0.8.6/daemons/hw-types.c	2008-12-30 22:25:09.000000000 +0100
+++ lirc-0.8.6_new/daemons/hw-types.c	2010-04-10 20:23:12.000000000 +0200
@@ -32,6 +32,7 @@
 extern struct hardware hw_livedrive_seq;
 extern struct hardware hw_logitech;
 extern struct hardware hw_macmini;
+extern struct hardware hw_atwf83;
 extern struct hardware hw_mouseremote;
 extern struct hardware hw_mouseremote_ps2;
 extern struct hardware hw_mp3anywhere;
@@ -137,6 +138,7 @@
 	&hw_logitech,
 #ifdef HAVE_LINUX_HIDDEV_H
 	&hw_macmini,
+	&hw_atwf83,
 #endif
 	&hw_mp3anywhere,
 	&hw_mplay,
diff -Nur lirc-0.8.6/remotes/aureal/lircd.conf.atwf83 lirc-0.8.6_new/remotes/aureal/lircd.conf.atwf83
--- lirc-0.8.6/remotes/aureal/lircd.conf.atwf83	1970-01-01 01:00:00.000000000 +0100
+++ lirc-0.8.6_new/remotes/aureal/lircd.conf.atwf83	2010-04-10 21:53:50.000000000 +0200
@@ -0,0 +1,62 @@
+#
+# brand:                       Aureal
+# model no. of remote control: ATWF@83
+#
+
+begin remote
+
+  name  Aureal_ATWF@83
+  bits            32
+  gap          132799
+
+      begin codes
+          KEY_KP0                  0x270000
+          KEY_KP1                  0x1E0000
+          KEY_KP2                  0x1f0000
+          KEY_KP3                  0x200000
+          KEY_KP4                  0x210000
+          KEY_KP5                  0x220000
+          KEY_KP6                  0x230000
+          KEY_KP7                  0x240000
+          KEY_KP8                  0x250000
+          KEY_KP9                  0x260000
+          KEY_BACK                 0x2A0000
+          KEY_CLEAR                0x290000
+          KEY_CLOSE                0x3D0004
+          KEY_DOWN                 0x510000
+          KEY_DVD                  0x100003
+          KEY_ENTER                0x280000
+          KEY_INFO                 0x650000
+          KEY_LEFT                 0x500000
+          KEY_MAIL                 0x18A0200
+          KEY_MUTE                 0xe20200
+          KEY_PLAYPAUSE            0xCD0200
+          KEY_POWER                0x8303FF
+          KEY_RADIO                0x40001
+          KEY_RECORD               0x150001
+          KEY_RIGHT                0x4F0000
+          KEY_AUDIO		      0x100001
+          KEY_TV                   0x170003
+          KEY_STOP                 0xB70200
+          KEY_UP                   0x520000
+          KEY_VIDEO                0x80001
+          KEY_VOLUMEDOWN           0xEA0200
+          KEY_VOLUMEUP             0xE90200
+          KEY_WWW                  0x2230200
+          KEY_CALENDAR             0xC0001
+          KEY_PREVIOUS             0x2240200
+          KEY_NEXT                 0x2250200
+          KEY_SCREEN               0x280004
+          KEY_CHANNELDOWN          0x4E0000
+          KEY_CHANNELUP            0x4B0000
+          KEY_KPASTERISK           0x250002
+          KEY_KPPLUSMINUS          0x200002
+          KEY_REWIND               0x50003
+          KEY_FORWARD              0xB30200
+          KEY_NEXTSONG             0xB50200
+          KEY_MEDIA                0x28000C
+          KEY_PREVIOUSSONG         0xB60200
+          KEY_HOME                 0x70008
+      end codes
+
+end remote
diff -Nur lirc-0.8.6/remotes/.directory lirc-0.8.6_new/remotes/.directory
--- lirc-0.8.6/remotes/.directory	1970-01-01 01:00:00.000000000 +0100
+++ lirc-0.8.6_new/remotes/.directory	2010-04-11 00:13:45.933358030 +0200
@@ -0,0 +1,4 @@
+[Dolphin]
+AdditionalInfo=3
+Timestamp=2010,4,11,0,13,45
+ViewMode=1

Ensuite, dans le dossier des sources de lirc:

patch -p1 -i lirc.patch
./configure --with-driver=atwf83
make
sudo make install
sudo cp remotes/aureal/lircd.conf/atwf83 /etc/lirc/lircd.conf
sudo /usr/local/sbin/lircd --device=/dev/hidraw0 --output=/var/run/lirc/lircd1 --pidfile=/var/run/lirc/lircd1.pid --listen
sudo /usr/local/sbin/lircd --device=/dev/hidraw1 --output=/var/run/lirc/lircd --pidfile=/var/run/lirc/lircd.pid --connect=localhost:8765

Normalement il n'y a plus qu'à lancer irw pour voir les touches de la télécommande big_smile

Dernière modification par henriet (Le 13/04/2010, à 20:16)


OpenSuse 11.3 x64, KDE 4.5.1
Intel Q8400, ATI HD4850

Hors ligne

#18 Le 11/04/2010, à 12:52

henriet

Re : Télécommande generique (hid device)

Voici le fichier de config pour xbmc (Lircmap.xml), à mettre dans ~/.xbmc/userdata

<!-- This file contains the mapping of LIRC keys to XBMC keys used in Keymap.xml  -->
<!--                                                                              -->
<!-- How to add remotes                                                           -->
<!-- <remote device="name_Lirc_calls_the_remote">                                 -->
<!--                                                                              -->
<!-- For the commands the layout following layout is used                         -->
<!-- <XBMC_COMMAND>LircButtonName</XBMC_COMMAND>                                  -->
<!--                                                                              -->
<!-- For a list of XBMC_COMMAND's check out the <remote> sections of keymap.xml   -->

<lircmap>
	<remote device="Aureal_ATWF@83">
        <left>KEY_LEFT</left>
        <right>KEY_RIGHT</right>
        <up>KEY_UP</up>
        <down>KEY_DOWN</down>
        <play>KEY_PLAYPAUSE</play>
        <stop>KEY_STOP</stop>
        <forward>KEY_FORWARD</forward>
        <reverse>KEY_REWIND</reverse>
        <select>KEY_ENTER</select>
        <pageplus>KEY_CHANNELUP</pageplus>
        <pageminus>KEY_CHANNELDOWN</pageminus>
        <back>KEY_BACK</back>
        <menu>KEY_DVD</menu>
        <title>KEY_WWW</title>
        <info>KEY_INFO</info>
        <subtitle>KEY_MAIL</subtitle>
        <skipplus>KEY_NEXTSONG</skipplus>
        <skipminus>KEY_PREVIOUSSONG</skipminus>
        <display>KEY_SCREEN</display>
        <start>KEY_HOME</start>
        <record>KEY_RECORD</record>
        <volumeplus>KEY_VOLUMEUP</volumeplus>
        <volumeminus>KEY_VOLUMEDOWN</volumeminus>
        <mute>KEY_MUTE</mute>
        <power>KEY_POWER</power>
        <myvideo>KEY_VIDEO</myvideo>
        <mymusic>KEY_AUDIO</mymusic>
        <mypictures>KEY_CALENDAR</mypictures>
        <mytv>KEY_TV</mytv>
        <one>KEY_KP1</one>
        <two>KEY_KP2</two>
        <three>KEY_KP3</three>
        <four>KEY_KP4</four>
        <five>KEY_KP5</five>
        <six>KEY_KP6</six>
        <seven>KEY_KP7</seven>
        <eight>KEY_KP8</eight>
        <nine>KEY_KP9</nine>
        <zero>KEY_KP0</zero>
        <star>KEY_KPASTERISK</star>
        <hash>KEY_KPPLUSMINUS</hash>
        <clear>KEY_CLEAR</clear>
        <enter>KEY_ENTER</enter>-->
	</remote>
</lircmap>

Pour que xbmc fonctionne avec lirc, j'ai dû créer un lien dans /dev

sudo ln -s /var/run/lirc/lircd /dev/lircd

J'aimerais créer une règle dans hal pour que les touches multimédia de la télécommande ne soient plus reconnues dans KDE, tout en gardant la fonction "souris", mais je n'ai réussi qu'à tout désactiver pour le moment.

<?xml version="1.0" encoding="ISO-8859-1" ?>
<deviceinfo version="0.2">
<device>
    <match key="info.product" contains="ATWF@83-W001 ESKY.CC USB_V3B">
          <remove key="input.x11_driver" />
    </match>
</device>
</deviceinfo>

Donc si quelqu'un a des idées...


OpenSuse 11.3 x64, KDE 4.5.1
Intel Q8400, ATI HD4850

Hors ligne

#19 Le 25/04/2010, à 11:03

henriet

Re : Télécommande generique (hid device)

Le nouveau driver est désormais dans le dépôt CVS de lirc wink .
Il suffit de suivre les instructions sur le site de lirc, en utilisant le driver atwf83.

Voici les règles udev que j'utilise (/etc/udev/rules.d/10-local.rules):

KERNEL=="hidraw[0-9]*", ATTRS{idProduct}=="2626", ATTRS{idVendor}=="0755", RUN+="/usr/local/bin/lirc_script"
KERNEL=="hidraw[0-9]*", ATTRS{idProduct}=="2626", ATTRS{idVendor}=="0755", SYMLINK+="remote/%k"
KERNEL=="event[0-9]*", ATTRS{idProduct}=="2626", ATTRS{idVendor}=="0755", OPTIONS+="ignore_device"

et le script qui est utilisé ci-dessus (/usr/local/bin/lirc_script):

#!/bin/bash

nb_dev=($(ls /dev/remote))

if [ "$ACTION" == 'add' ]
then
  if [ ${#nb_dev[*]} == "2" ]
  then
  # Start lircd when the IR receiver is plugged
    # Both keyboard and mouse parts have been added
    /usr/local/sbin/lircd --device=/dev/remote/"${nb_dev[1]}" --output=/var/run/lirc/lircd1 --pidfile=/var/run/lirc/lircd1.pid --listen
    /usr/local/sbin/lircd --device=/dev/remote/"${nb_dev[0]}" --output=/var/run/lirc/lircd --pidfile=/var/run/lirc/lircd.pid --connect=localhost:8765
    ln -s /var/run/lirc/lircd /dev/lircd
  fi
else
  if [ ${#nb_dev[*]} == "1" ]
  then
  # Stop lircd when the receiver is unplugged
    killall -9 lircd
    rm /dev/lircd
  fi
fi

Le seul ennui c'est que je n'ai plus la fonction "souris", mais de toute façon elle n'est pas très pratique.


OpenSuse 11.3 x64, KDE 4.5.1
Intel Q8400, ATI HD4850

Hors ligne

#20 Le 25/04/2010, à 11:16

Nii

Re : Télécommande generique (hid device)

Beau boulot wink

Hors ligne