endpoint 1 IN de ma clé usb (broken pipe) [usb bulk] - C - Programmation
Marsh Posté le 19-01-2005 à 09:30:20
Bon j'ai un peu avancé. je n'arrive toujours pas à lire mon endpoint IN mais par contre, en faisant d'abord une écriture sur le endpoint OUT, le comportement change lors de la lecture (pipe broken ou unknown device or adress). C'est pas encore ca mais ca avance.
Il est en fait logique de d'abord effectuer une requete sur le endpoint OUT avant de pouvoir lire un acquitement sur le endpoint IN !!!
Marsh Posté le 19-01-2005 à 14:45:44
ReplyMarsh Posté le 20-01-2005 à 10:15:52
Meuuuuuh ... j'y arrive pas.
J'essaye cette fois d'écrire d'abord des 0 dans le endpoint 1 out, ca passe systématiquement, puis ensuite je fais une lecture du enpoint 1 in. Ca ne passe qu'à la première lecture après branchement de la clé ... ou j'obtient 5 octets à 0 puis différentes autre valeurs (différentes à chaque test).
Par contre, si j'utilise usb_bulk_msg, j'ai directement le broken pipe si je refais une écriture de 0 puis une lecture, sans débrancher la clé, j'arrive systématiquement sur un Broken pipe ... zavez pas une idée pourquoi ???
A noter, que je suis sous le kernel 2.4.20-8 ... savez-vous s'il y a des soucis particuliers avec l'usb sous ce kernel ?
Merci d'avance et merci chaica pour l'encouragement !
Marsh Posté le 17-01-2005 à 18:15:52
Bonjour à tous. J'ai créé un module linux permettant de gérer une caméra usb. Pour l'instant, je teste sur ma clé usb et je bloque sur la lecture du endpoint 1 IN.
En effet, j'ai repris usb-skeleton.c, et dans la fonction read, la lecture du EP 1 IN se fait avec usb_bulk_msg(...) (tous les params ont l'air OK). Le souci, c'est que mon buffer de destination n'est pas rempli par cet appel ... qui termine systématiquement par un timed out (même pour 15 minutes d'attente).
J'ai donc essayé de remplacer usb_bulk_msg par le remplissage d'un urb (FILL_BULK_URB) puis l'appel de usb_submit_urb() ... mon buffer n'est toujours pas rempli et mon urb.status vaut -EINPROGRESS (alias : Operation now in progress).
J'ai essayé de faire un :
juste après ... afin d'attendre la fin du transfert ... mais la, plantage, il ne sort jamais de mon while.
Je ne sais pas si il y a un bug connu avec certaines clé usb (le module initial usb-storage la gère pourtant sans problème) ou si c'est moi qui fait le trop laid.
Toute aide serait fortement appréciée. Merci d'avance !
Message édité par allawos le 20-01-2005 à 10:17:05