Pages : 1
#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 .
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 ).
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 . 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
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 . 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
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 .
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
Hors ligne
Pages : 1