[Topic unique] Leadtek WinFast DTV 1000 T

Messagepar AnAlach » 29 Sep 2006 14:13

@ Raynor, Sirroco >

Je possède une DTV1000-T et je suis parvenu à faire fonctionner sa télécommande sous Linux (Kubuntu "Dapper Drake" AMD64, noyau 2.6.15).

Le problème principal vient du fait que le pilote cx88 inclus dans le noyau n'active pas le récepteur infrarouge de la carte DTV1000-T. Il est donc nécessaire de modifier quelques fichiers et de recompiler les modules concernés. Une fois le module modifié chargé, on obtient :

[ 35.901496] cx2388x dvb driver version 0.0.5 loaded
[ 35.901565] CORE cx88[0]: subsystem: 107d:665f, board: WinFast DTV1000-T [card=35,autodetected]
[ 35.935053] cx2388x v4l2 driver version 0.0.5 loaded
[ 36.108605] input: cx88 IR (WinFast DTV1000-T) as /class/input/input2
[ 36.108659] cx88[0]/2: found at 0000:05:07.2, rev: 5, irq: 66, latency: 32, mmio: 0xd4000000
[ 36.108671] cx88[0]/2: cx2388x based dvb card
[ 36.110508] DVB: registering new adapter (cx88[0]).
[ 36.116391] cx88[0]/0: found at 0000:05:07.0, rev: 5, irq: 66, latency: 32, mmio: 0xd3000000
[ 36.116456] cx88[0]/0: registered device video0 [v4l2]
[ 36.116481] cx88[0]/0: registered device vbi0
[ 36.222589] cx2388x blackbird driver version 0.0.5 loaded


Il faut ensuite configurer lirc avec le driver "dev/input".

Si cela intéresse quelqu'un, je peut mettre le pilote modifié et les fichiers de configuration de lirc en ligne.
AnAlach
Petit ver
Petit ver
 
Messages: 14
Inscription: 10 Juin 2006 10:42

Messagepar Raynor » 29 Sep 2006 17:56

AnAlach a écrit:@ Raynor, Sirroco >

Je possède une DTV1000-T et je suis parvenu à faire fonctionner sa télécommande sous Linux (Kubuntu "Dapper Drake" AMD64, noyau 2.6.15).

Le problème principal vient du fait que le pilote cx88 inclus dans le noyau n'active pas le récepteur infrarouge de la carte DTV1000-T. Il est donc nécessaire de modifier quelques fichiers et de recompiler les modules concernés. Une fois le module modifié chargé, on obtient :

[ 35.901496] cx2388x dvb driver version 0.0.5 loaded
[ 35.901565] CORE cx88[0]: subsystem: 107d:665f, board: WinFast DTV1000-T [card=35,autodetected]
[ 35.935053] cx2388x v4l2 driver version 0.0.5 loaded
[ 36.108605] input: cx88 IR (WinFast DTV1000-T) as /class/input/input2
[ 36.108659] cx88[0]/2: found at 0000:05:07.2, rev: 5, irq: 66, latency: 32, mmio: 0xd4000000
[ 36.108671] cx88[0]/2: cx2388x based dvb card
[ 36.110508] DVB: registering new adapter (cx88[0]).
[ 36.116391] cx88[0]/0: found at 0000:05:07.0, rev: 5, irq: 66, latency: 32, mmio: 0xd3000000
[ 36.116456] cx88[0]/0: registered device video0 [v4l2]
[ 36.116481] cx88[0]/0: registered device vbi0
[ 36.222589] cx2388x blackbird driver version 0.0.5 loaded


Il faut ensuite configurer lirc avec le driver "dev/input".

Si cela intéresse quelqu'un, je peut mettre le pilote modifié et les fichiers de configuration de lirc en ligne.


Ca serait genial si tu fesait ca et que ca puisse passer en premiere page apres car il est difficile de trouver de bonnes information sur cette carte sous linux.
Raynor
Petit ver
Petit ver
 
Messages: 10
Inscription: 06 Sep 2006 12:39

Messagepar AnAlach » 29 Sep 2006 19:01

J'ai mis en ligne les sources du pilote cx88 modifié avec quelques infos pour le compiler et l'installer, ainsi que les fichiers de configuration pour lirc :

http://alainperrot.perso.cegetel.net/Li ... .15.tar.gz

Ce pilote est prévu pour fonctionner avec Linux 2.6.15 uniquement (c'est la version du noyau utilisée par ma Kubuntu "Dapper Drake"). Il doit toutefois pouvoir servir de base pour ceux qui veulent modifier le pilote cx88 d'un noyau plus récent.
AnAlach
Petit ver
Petit ver
 
Messages: 14
Inscription: 10 Juin 2006 10:42

Messagepar Raynor » 29 Sep 2006 20:24

Apparement au moment de copier les fichier de conf de lirc tu a mis /dev/lirc au lieu de /etc/lirc
Raynor
Petit ver
Petit ver
 
Messages: 10
Inscription: 06 Sep 2006 12:39

Messagepar AnAlach » 29 Sep 2006 20:49

Apparement au moment de copier les fichier de conf de lirc tu a mis /dev/lirc au lieu de /etc/lirc


Exact :?

C'est corrigé, merci pour la remarque.
AnAlach
Petit ver
Petit ver
 
Messages: 14
Inscription: 10 Juin 2006 10:42

Messagepar Raynor » 29 Sep 2006 21:08

Maintenant j'ai bien le bon message dans dmesg et dans /proc/bus/input/devices mais quand je lance irw ou lircmd ca me met connection refusée (sans doute parceque je daemon ne tourne pas) donc je lance /etc/init.d/lirc restart

je relance irw ou lircmd, ca ne fait rien retour au prompt sauf que apparement ca fait planter le daemon
Raynor
Petit ver
Petit ver
 
Messages: 10
Inscription: 06 Sep 2006 12:39

Messagepar AnAlach » 29 Sep 2006 22:57

Effectivement, le démon lircd doit être lancé pour faire fonctionner irw et lircmd (j'ai mis à jour le fichier README).

Je n'ai pas essayé lircmd, mais irw donne normalement quelque chose comme ça :

Code: Tout sélectionner
$ irw
0000000080010185 00 DVD CoolCommand
0000000080010192 00 CHANNEL_UP CoolCommand
0000000080010193 00 CHANNEL_DOWN CoolCommand
00000000800100df 00 CANCEL CoolCommand
0000000080010163 00 BOSSKEY CoolCommand
000000008001018e 00 RED CoolCommand
000000008001018f 00 GREEN CoolCommand
0000000080010190 00 YELLOW CoolCommand
0000000080010191 00 BLUE CoolCommand


Si lircd fonctionne correctement, tu devrais voir apparaître des messages ressemblant à ce qui suit dans le fichier /var/log/syslog à chaque fois que tu presse une touche de la télécommande :

Code: Tout sélectionner
Sep 29 21:54:55 bernie lircd 0.7.1pre2[4344]: devinput_rec
Sep 29 21:54:55 bernie lircd 0.7.1pre2[4344]: time 1159559695.665703  type 1  code 402  value 1
Sep 29 21:54:55 bernie lircd 0.7.1pre2[4344]: code 80010192
Sep 29 21:54:55 bernie lircd 0.7.1pre2[4344]: devinput_decode
Sep 29 21:54:55 bernie lircd 0.7.1pre2[4344]: devinput_rec
Sep 29 21:54:55 bernie lircd 0.7.1pre2[4344]: time 1159559695.665705  type 0  code 0  value 0
Sep 29 21:54:55 bernie lircd 0.7.1pre2[4344]: code 00000000
Sep 29 21:54:55 bernie lircd 0.7.1pre2[4344]: devinput_decode
Sep 29 21:54:55 bernie lircd 0.7.1pre2[4344]: devinput_rec
Sep 29 21:54:55 bernie lircd 0.7.1pre2[4344]: time 1159559695.669707  type 1  code 402  value 0
Sep 29 21:54:55 bernie lircd 0.7.1pre2[4344]: code 00010192
Sep 29 21:54:55 bernie lircd 0.7.1pre2[4344]: devinput_decode
Sep 29 21:54:55 bernie lircd 0.7.1pre2[4344]: devinput_rec
Sep 29 21:54:55 bernie lircd 0.7.1pre2[4344]: time 1159559695.669709  type 0  code 0  value 0
Sep 29 21:54:55 bernie lircd 0.7.1pre2[4344]: code 00000000
Sep 29 21:54:55 bernie lircd 0.7.1pre2[4344]: devinput_decode


Es-tu certain que le démon lircd utilise le bon périphérique d'entrée ? Si tu utilises mon fichier hardware.conf tel quel, il est possible que le problème vienne de là. Je viens de m'apercevoir qu'il n'est pas tout à fait au point. Une version corrigée se trouve maintenant en ligne. Tu peux aussi lancer le démon "à la main" :

Code: Tout sélectionner
$ sudo lircd --driver=dev/input --device=/dev/input/eventX


en remplaçant X par le numéro correspondant au récepteur infrarouge de la carte (voir /proc/bus/input/devices).

Si tu ne parvient toujours pas à faire fonctionner lircd, tu peux essayer d'activer le mode débogage du contrôleur infrarouge :

Code: Tout sélectionner
$ sudo modprobe -r cx88-blackbird
$ sudo modprobe -r cx88-dvb
$ sudo modprobe -k cx88xx ir_debug=1
$ sudo modprobe -k cx88-dvb
$ sudo modprobe -k cx88-blackbird


Après avoir appuyé sur une touche de la télécommande, dmesg devrais alors te permettre de voir des lignes comme celles-ci :

Code: Tout sélectionner
[31610.571992] cx88[0] IR: irq gpio=0x1b261 code=12 | poll
[31610.576020] cx88[0] IR: irq gpio=0x1b361 code=12 | poll up
AnAlach
Petit ver
Petit ver
 
Messages: 14
Inscription: 10 Juin 2006 10:42

Messagepar Sirocco » 30 Sep 2006 14:31

AnAlach, j'ai adapé le patch pour le 2.6.18 sans modifier la table ir_codes_winfast car les codes y sont déjà.
J'obtient une interface event1:
Code: Tout sélectionner
input: cx88 IR (WinFast DTV1000-T) as /class/input/input1


Cependant avec irrecord je n'obtient rien :
Code: Tout sélectionner
# irrecord -H dev/input -d /dev/input/event1 /etc/lircd.conf
...
Press RETURN to continue.
Hold down an arbitrary button.
irrecord: gap not found, can't continue
irrecord: closing '/dev/input/event1'


et avec lircd non plus :
Code: Tout sélectionner
# lircd -n -D2 -H dev/input -d /dev/input/event1
lircd: started server socket
lircd: parsing remote
lircd: creating first remote
lircd: parsing CoolCommand remote
lircd:     begin codes
lircd:     end codes
lircd: end remote
lircd: config file read
lircd: lircd(devinput) ready


Et pourtant dmesg recoit tout :
Code: Tout sélectionner
cx88[0] IR: irq gpio=0x1bb6d code=45 | poll up
cx88[0] IR: irq gpio=0x1bb61 code=44 | poll up
cx88[0] IR: irq gpio=0x1bb5f code=43 | poll up
cx88[0] IR: irq gpio=0x1bbb3 code=54 | poll up


Note, irw a fonctionné une ou deux fois :
Code: Tout sélectionner
$ irw
0000000080010192 00 CHANNEL_UP CoolCommand


J'ai l'impression qu'il faut que j'appui 200 fois sur les touches pour obtenir 1 code valide
Une idée du problème ?
Leadtek Winfast DTV 1000 T
Avatar de l’utilisateur
Sirocco
Coccinelle
Coccinelle
 
Messages: 51
Inscription: 20 Nov 2005 22:45

Messagepar AnAlach » 30 Sep 2006 14:54

Je n'ai jamais réussi à faire fonctionner irrecord, j'ai systématiquement l'erreur "irrecord: gap not found, can't continue". J'ai donc créé le fichier lircd.conf à la main en utilisant les valeurs des constantes KEY_XXX assignées aux différentes touches de la télécommande (voir le fichier /usr/src/linux/include/linux/input.h).

Attention sinon, la ligne :

Code: Tout sélectionner
input: cx88 IR (WinFast DTV1000-T) as /class/input/input1


ne signifie pas forcément que le récepteur infrarouge utilise le périphérique /dev/input/event1. Pour obtenir le bon périphérique d'entrée, il faut regarder le fichier /proc/bus/input/devices, par exemple :

I: Bus=0001 Vendor=107d Product=665f Version=0001
N: Name="cx88 IR (WinFast DTV1000-T)"
P: Phys=pci-0000:05:07.2/ir0
S: Sysfs=/class/input/input5
H: Handlers=kbd event3
B: EV=100003
B: KEY=10afc336 2150a4800000000 0 40480010000 19000004801 1e0001000fff80 0


C'est la ligne commençant par "H:" qui est importante : ici, le récepteur infrarouge utilise le port /dev/input/event3.

Par contre, il est vrai que la télécommande n'est pas très réactive, il faut parfois appuyer plusieurs fois (mais pas 200 quand même :wink: ) sur une touche pour que le signal soit reçu. Ceci est probablement dû aux valeurs à placer dans les registres GPIO0 à GPIO2 de la carte (fichier cx88-cards.c). J'ai essayé différentes valeurs trouvées à droite ou à gauche, mais sans jamais obtenir de résultat probant. À défaut de connaître les valeurs idéales, je les initialise donc tout simplement à zéro. Malgrès cette réactivité médiocre, la télécommande est tout de même utilisable chez moi.
AnAlach
Petit ver
Petit ver
 
Messages: 14
Inscription: 10 Juin 2006 10:42

Messagepar Sirocco » 30 Sep 2006 18:20

Oui j'ai pas tout posté mais c'est bien event1 qui est utilisé pour moi.

Merci pour tes explications en tout cas ca a vraiment permis d'avancer :D
Code: Tout sélectionner
$ dmesg | grep "IR: irq gpio=" | wc -l
227

Voila 227 appuis sur les touches pour obtenir 2 codes. J'exagérais un peu mais ca reste élevé 115 touches pour 1 valide :(

J'ai même tenté en mettant (a priori) les bonnes valeurs pour tous les gpio mais ca n'a rien changé.
mes patchs pour kernel 2.6.18 :

cx88-cards.diff
Code: Tout sélectionner
*** drivers/media/video/cx88/cx88-cards.c.old   2006-09-20 05:42:06.000000000 +0200
--- drivers/media/video/cx88/cx88-cards.c       2006-09-29 20:40:08.000000000 +0200
***************
*** 865,870 ****
--- 865,874 ----
                .input          = {{
                        .type   = CX88_VMUX_DVB,
                        .vmux   = 0,
+                       .gpio0  = 0x0001b361,
+                       .gpio1  = 0x00000000,
+                       .gpio2  = 0x0001b361,
+                       .gpio3  = 0x02000000,
                }},
                .dvb            = 1,
        },


cx88-input.diff
Code: Tout sélectionner
*** drivers/media/video/cx88/cx88-input.c.old   2006-09-20 05:42:06.000000000 +0200
--- drivers/media/video/cx88/cx88-input.c       2006-09-29 20:57:29.000000000 +0200
***************
*** 193,198 ****
--- 193,199 ----
                break;
        case CX88_BOARD_WINFAST_DTV2000H:
        case CX88_BOARD_WINFAST2000XP_EXPERT:
+       case CX88_BOARD_WINFAST_DTV1000:
                ir_codes = ir_codes_winfast;
                ir->gpio_addr = MO_GP0_IO;
                ir->mask_keycode = 0x8f8;


J'ai obtenu les valeurs a partir de regspy de dscaler mais c'est sous windows. AnAlach comment avais tu fait pour obtenir la valeur du gpio3 ?
Leadtek Winfast DTV 1000 T
Avatar de l’utilisateur
Sirocco
Coccinelle
Coccinelle
 
Messages: 51
Inscription: 20 Nov 2005 22:45