Forum Programmation.c libusb et recuperation de donnees.

Posté par  .
Étiquettes : aucune
0
10
mai
2007
bonjour,
Voila je souhaite recuperer des infos qu'un onduleur USB me passe.
J'ai pense utiliser la libusb pour cela, mais je suis bloque au niveau de la lecture.
J'arrive bien a recuperer toutes ces informations comme son endpoint adresses, sont idvendor ...

Mais je n'arrive pas a lire ce qu'il m'envoie.
J'utilise pour cela la fonction usb_bulk_read mais elle me renvoie -1 comme erreur (je ne sais pas si c'est le timeout ou alors un probleme de read).

Ou alors faut il faire un open sur un device mais comment connaitre le path de ce device et son type (type block ou char).

Ou alors si je me suis trompe depuis le debut dites le moi aussi : ).

Merci
  • # hmmm

    Posté par  . Évalué à 1.

    d'apres
    http://libusb.sourceforge.net/doc/function.usbbulkread.html

    usb_bulk_read
    Name
    usb_bulk_read -- Read data from a bulk endpoint

    Description
    int usb_bulk_read(usb_dev_handle *dev, int ep, char *bytes, int size, int timeout);

    usb_bulk_read performs a bulk read request to the endpoint specified by ep. Returns number of bytes read on success or < 0 on error.


    un resultat de -1 signale juste une erreur.

    par contre si tu crains le timeout, essaie d'augmenter ce dernier dans l'appel de la fonction

    pour le device, la fonction demande un handle sur ce device, il semblerait logique de l'ouvrir avant pour optenir ce handle

    enfin, il doit y avoir plein d'exemple sur internet...
    • [^] # Re: hmmm

      Posté par  . Évalué à 1.

      Oui bien sur je peux augmenter le timeout mais ce que je veux dire c'est que l'erreur -1 peux soit dire qu'il na pas reussit a lire ou alors qu'il n'y a rien a lire.

      Sinon bien sur j'ai ouvert le handle pour ce device (usb_open_dev) mais ca ne me donne pas sont path pour essayer de read ou write dessus directement.
      • [^] # Re: hmmm

        Posté par  . Évalué à 1.

        il y en a qui ont essayé...

        http://linuxfr.org/forums/20/21372.html

        tu trouveras peut-etre des infos pour t'aider.
        • [^] # Re: hmmm

          Posté par  . Évalué à 1.

          J'avais lus ce post et j'arrive a me connecter et tout comme lui, aprs lui veux ecrire et moi je veux lire :).

          Mais en lisant un peu mieu la reponse de "TheBreton" je me demande si mon onduleur m'envoie des packet de type bulk ou autre chose.
          • [^] # Re: hmmm

            Posté par  . Évalué à 1.

            lsusb -v te donneras les infos sur le profiles de communication déclarer de ton onduleurs (endpoint disponible type et direction).
            Si tu peut disposer d'un poste sous win32 pour espionner la communication avec snoopy tu pourras avancer plus vite dans ton identification des données et des endpoints.
            http://sourceforge.net/projects/usbsnoop/
            • [^] # Re: hmmm

              Posté par  . Évalué à 1.

              lsusb -v me dis que le transfere type est interupt.
              Tu dis dans otn poste que les paquet interupt n'est pas gerer par la libusb mais sur leur sit on trouve ca:

              usb_interrupt_write
              usb_interrupt_read

              Mais c'est la meme chose j'arrive a lire des donner mais ce n'est pas de l'ascii (je ne peux pas l'afficher directement quoi).

              Mon device est de type HDI aussi donc je ne sais pas si ca bloque les choses.
  • # Au cas ou

    Posté par  (site web personnel) . Évalué à 2.

    Désolé pas de réponse pour libusb, mais as-tu bien vérifié que ton onduleur n'était pas supporté par NUT ? La liste de compatibilité est quand même impressionante.
    http://www.networkupstools.org/compat/

    Tu aurais d'ailleurs peut-être tout interet à te baser dessus plutôt que de repartir from scratch.
    • [^] # Re: Au cas ou

      Posté par  . Évalué à 1.

      Oui mon onduleur est supporter par NUT mais pour que ca marche il nous faut creer le device en mode caractere (dev/usb/...) et donc la est le probleme.

      Mais la avec usb_bulk_read j'arrive maintenant a lire quelque chose mais ce n'est pas de l'ascii.
      • [^] # Re: Au cas ou

        Posté par  . Évalué à 1.

        parce que tu t'attendais à recevoir directement les Etats/Voltage/% de batterie ?

        je penses plutot que tu recois une trame dans laquelle sont codées ces valeurs...
      • [^] # Re: Au cas ou

        Posté par  . Évalué à 1.

        J'avais eu le soucis il y a quelque temps, une histoire de droits manquants sur /proc/bus/usb/xxx (debian testing). Je les avais rajouté en modifiant /etc/init.d/nut.
        Puis, magie de l'upgrade, plus besoin !
        En tout cas, je n'ai jamais eu à créer le device à la main, c'est udev qui doit s'en charger (quelle est ta distrib ?).
        • [^] # Re: Au cas ou

          Posté par  . Évalué à 1.

          En fait, j'ai encore UN souci (donc pas de S ! )
          J'ai de temps en temps ce message mais rien de bien grave vu que tout fonctionne:
          usb 2-4: usbfs: USBDEVFS_CONTROL failed cmd newhidups rqt 128 rq 6 len 255 ret -110

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.