Forum Programmation.autre Ca marche comment, l'USB ?

Posté par  (site web personnel) .
Étiquettes : aucune
0
9
déc.
2005
Bonjour,

une question qui me taraude depuis un moment déjà...

J'aurai envie de développer une application dans un langage que j'affectionne (à savoir Python,C, ou java, par ordre de préférence du moment) et qui aurait besoin d'accéder au port USB.

Plus concrètement, mon 1er objectif est de pouvoir dialoguer avec un périphérique tel que mon téléphone portable, afin de récuperer par exemple les messages stockés dans la carte sim. (il est reconnu comme périphérique de masse, mais les messages ne sont pas stockés sur le memorystick...)

Bref, toute information sur le sujet est donc la bienvenue, et si il y a des outils existant de diagnostique permettant par exemple d'afficher le traffic sur le port (cf. ethereal), je veux bien aussi !

Sinon, ca me laisse perplexe ces logiciels non-officiels qui voient le jour et dont le but est de synchroniser les tel portables. Sans spécification ni rien de la part du constructeur, ils font comment pour developper leurs softs hein ??

Merci beaucoup beaucoup !
  • # specs

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

    Je viens déjà de télécharger la doc des specs USB sur http://www.usb.org/developers/docs/

    Je ne pense pas que ca va m'aider (au contraire, j'vais être dégouté vu la taille de la doc!), mais bon...
    • [^] # Re: specs

      Posté par  . Évalué à 4.

      Ne poursuit pas dans cette direction , cette norme défini tout y compris la capacitances des cables, les dimensions mécaniques des connecteurs etc etc.
      Elle n'ait utilise que si tu design un composants usb de base (niveau silicium on un hots ou un hub)..bref rien a voir avec la vie du programmeurs qui ne ferait pas de la gestion de couche basse.
      Ces couches basse sont deja codé dans le kernel tu n'as pas réellement besoin de mettre les mains la dedans.
      Sauf si ca te plait :-)
      • [^] # Re: specs

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

        Effectivement, 650 pages de ce genre c'est pas très pertinent à lire :)
  • # un coup de pouce

    Posté par  . Évalué à 6.

    J'aurai envie de développer une application dans un langage que j'affectionne (à savoir Python,C, ou java, par ordre de préférence du moment) et qui aurait besoin d'accéder au port USB.
    Bin non, le seul langage qui peut accéder au composant usb c'est du C et qui tourne dans le kernel.Par contre tu peut trouver des drivers simple permettant de faire deja deux ou trois truc pour emettre et recevoir de données par l'usb (voir libusb[1]) qui peuvent etre apellé par divers langage..

    Bref, toute information sur le sujet est donc la bienvenue, et si il y a des outils existant de diagnostique permettant par exemple d'afficher le traffic sur le port (cf. ethereal), je veux bien aussi !
    Sinon, ca me laisse perplexe ces logiciels non-officiels qui voient le jour et dont le but est de synchroniser les tel portables.

    Je joins les deux topics pour une réponse unie, les portages de soft sont souvent fait en espionnant les traffics usb sous windows avec (snoopy [2] (soft gpl), ou usbagent (soft+hard proprio) ou autre analyseur d'échange usb) et ensuite il faut se casser la tete pour interpreter les données.

    Sans spécification ni rien de la part du constructeur, ils font comment pour developper leurs softs hein ??
    Les gens qui bossent pour les contructeur on quelque fois un linux chez eux ou un copains qui utilisent linux et moyennant quelques bieres et cacahouette il est possible d'obtenir deux ou trois infos de manieres non-officielles....


    [1] http://libusb.sourceforge.net/
    [2] http://sourceforge.net/projects/usbsnoop/
    • [^] # Re: un coup de pouce

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

      Je viens de tester snoopy sur le win2000 du boulot, et ca n'a pas l'air évident à manier :-/

      Déjà, je dois reperer le bon periphérique dans la liste, et ca, à moins de me les taper 1 par 1, je vois pas comment optimiser la manip :) (j'ai déjà tué ma souris usb 2 fois en faisant un install & restart depuis snoopy!)

      Bref, j'en ai pris 1 au pif dans la liste, et g intercepté mes 1ères trames usb. Mon dieu quelle horreur... C'est plus compliqué qu'un paquet IP :-D

      J'vais ensuite jetter un oeil à la libusb, enfin, p'tetre ce soir, sinon le patron va raler :)

      J'sens que j'vais vite être dégouté par l'affaire, mais pour l'instant j'tiens bon.

      Merci beaucoup pour ton aide en tout cas
      • [^] # Re: un coup de pouce

        Posté par  . Évalué à 1.

        la manip en plus simple
        sous linux tu fait un lsusb -vv
        tu repere la valeur de vendor-id et product-id
        ces valeur la sont les XXX et YYY de
        USB\Vid_XXXX&Pid_YYYY
        des clefs snoopy.
        Non les trames USB sont beaucoup plus simple que les trames IP.
        Snoopy n'intercepte que les données échangé entre le pc et le device, les infos de trame et de routage sont otées.
        • [^] # Re: un coup de pouce

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

          Hum interessant, je testerai ce soir lsusb depuis la maison (cygwin ne connait pas ici...)

          Sinon pour les trames USB, c'est quoi le plus pertinent ? la colonne data je suppose ?

          J'peux pas encore zieuter la libusb (ce soir...), mais en gros si je veux "cloner" une communication que j'aurai écouté, j'ai juste besoin de relever le champs "data" de la trame que le pc envoit au téléphone, et l'envoyer au périphérique via la libusb, et ce dernier va aussi me retourner un bloc data, comme une simple session telnet ? ou bien y a t il des données supplémentaires à envoyer lors de l'envoi de data vers le périphérique ? (en plus des data elles-mêmes)
          • [^] # Re: un coup de pouce

            Posté par  . Évalué à 2.

            .. mais en gros si je veux "cloner" une communication que j'aurai écouté, j'ai juste besoin de relever le champs "data" de la trame que le pc envoit au téléphone, et l'envoyer au périphérique via la libusb, et ce dernier va aussi me retourner un bloc data, comme une simple session telnet
            Pile poile ce qu'il faut faire, apres il faut essayer de deviner quoi faire de ce qu'il te repond et les variations des questions à poser.

            Il y as trois type de transaction Host-Device, des interrupts (une trame de donnée emisé toues les N milli-seconde par le device (enfin non mais fait comme si,taille max 64 octet)), des transactions bulk sur requete de l'host (quand il as envie de lire ou ecrire dans le device taille max 512 en usb1.1 ou 1024 en usb2.0) et des transaction isochrone.

            libusb ne gerait pas les transaction interrupt la derniere fois que je l'ai regarder (d'ailleur je ne vois pas comment il pourrait le faire mais bon).
            par contre je pense que tout faire en bulk est possible.
            En general on mets des infos de status du device dans les trames interrupt et l'echange de donnée dans les trames bulk.
            • [^] # Re: un coup de pouce

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

              Ok donc ma mission est de trouver le keyword magique à passer dans ma trame bulk pour qu'en retour il me génère une trame bulk dans laquelle il me viderait son sac (à savoir la totalité des sms contenus dans la sim), j'ai bon ?

              Sinon j'espere que les trames interrupts sont gérées de manières transparente, car si j'attend une réponse bulk et qu'elle est noyée dans les interrupts, pas glop
              • [^] # Re: un coup de pouce

                Posté par  . Évalué à 2.

                Ok donc ma mission est de trouver le keyword magique à passer dans ma trame bulk pour qu'en retour il me génère une trame bulk dans laquelle il me viderait son sac (à savoir la totalité des sms contenus dans la sim), j'ai bon ?
                OUI c'est ca !

                Sinon j'espere que les trames interrupts sont gérées de manières transparente, car si j'attend une réponse bulk et qu'elle est noyée dans les interrupts, pas glop
                C'est géré plus bas dans linux, avec libusb tu ne pourra faire que j'envoie une trame bulk, j'attend une trame bulk de réponse.
                Donc dans ton cas cela t'arrange.
                • [^] # Re: un coup de pouce

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

                  Bon, j'ai testé la libusb. J'arrive à compiler un programme test.

                  Parcontre pour la suite ca s'annonce mal. Ca me parait super compliqué cette histoire. J'ai regardé le source de FMA (une appli windows ecrite en delphi, et special sony ericsson), et le fichier de source gsm_sms.pas me donne la nausée :$

                  Bref, je crois que j'ai visé un chouilla trop haut par rapport à ma motivation du moment (et mes compétences)...

                  Quoiqu'il en soit c'est gentil de m'avoir répondu, j'aurai appris quelques trucs :)
  • # En Python, C, Java

    Posté par  . Évalué à 1.

    En Python, il y a PyUSB : http://sourceforge.net/projects/pyusb/ (qui implemente libusb). En Java, il y a jUSB : http://jusb.sourceforge.net/ Sinon, il y a aussi http://usb.cs.tum.edu/usbdoc
  • # Tiens j'ai eu la même idée....

    Posté par  . Évalué à 1.

    Et oui je fais partie aussi des ces personnes qui possèdent un téléphonne portable. Et moi aussi, j'ai eu dans l'idée de faire une petite appli pour communiquer avec. Je vais te donner les indications (maigre) que j'ai pu rassembler pour faire cette appli (la tache à juste été ajouté dans ma liste de chose à faire ;-))

    Ce que je vais te dire fonctionne pour un sagem Myx5 mais je pense que c'est comme ça pour la plupart des téléphonnes.

    En fait, sur mon téléphonne la sortie est un port série auquel se branche cable (vendu hors de prix par Sagem). Le cable utilisé pour communiquer avec mon téléphonne contient un chip qui émule un port série, et moi je suis très chanceux, car il exite un driver pour Linux pour piloter ce chip (je ne me souviens plus de référence du chip). Ce qui fait que je peux communiquer avec mon téléphone portable à l'aide du périphérique piloter à l'aide du driver (sous ubunutu /dev/ttyUSBX).

    "Il ne reste plus" qu'à espionner le protocole série utilisé sous Windows par les appli fournies par le constructeur à l'aide d'un sniffeur de port série (je ne me souviens plus du nom du soft aussi désolé) et refaire la séquence dans le langage de programmation que tu veux (tu as juste à pouvoir avoir le périphérique /dev/ttyUSBX en lecture et écriture).

    Il faut donc d'abord que tu regardes le cable que tu as :
    - branche ton cable
    - fait un lsusb
    et normalement tu devrais voir le chip utiliser par ton cable, il ne reste plus qu'a vérifier si il est supporté par linux (si c'est non, il va falloir développé un driver avant)

    Pour finir, je ne pense pas qu'il existe d'application complète de ce genre (je peux me tromper), je pense donc qu'il serait pas mal que tu penses ton application de manière générique de manière à ce d'autre propriétaire de téléphonne portable et de cable data linuxien et motivé puis ajouter facilement la gestion de leur portable à ton application (non non je ne pense pas à moi :-p).
    • [^] # Re: Tiens j'ai eu la même idée....

      Posté par  . Évalué à 0.

      Bon j'arrive pas à m'exprimer (mettons ça sur le dos du vendredi aprem).

      Mais ton problème m'intéresse, ce que je voulais dire c'est pourquoi tu t'embète à chercher des trames USB, alors qu'il y a de très grosses chance pour qu'il existe, un driver pour le chip contenu dans le cable qui relie ton tél portable à ton PC.

      Ce qui fait que t'aurais plus qu'à analyser des trames série classique et non des trames USB...
      • [^] # Re: Tiens j'ai eu la même idée....

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

        pitetre tout betement que son telephone a lui ne fonctionne pas comme ton telephone a toi.

        Et fondamentalement espionne une comm usb ou une comm serie
        c'est pareil faut devinr qui fait quoi.
      • [^] # Re: Tiens j'ai eu la même idée....

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

        Comme l'a précisé benoit, je pense que le problème final une fois la communication établie revient de toute facon sensiblement au même, à savoir trouver le protocole de communication. Donc d'un point de vue pédagogique, je privilègerai plutot l'approche usb (plus moderne)

        Maintenant je ne suis pas sous linux au taf, donc je ne saurai te dire dans l'immédiat si mon chip de mon cable a un driver ou non.
        • [^] # Re: Tiens j'ai eu la même idée....

          Posté par  . Évalué à 1.

          Bin en tout cas, c'est comme ça que fonctionne :
          - mon palm m500,
          - mon téléphone sagem myX5
          - le tél de mon père motorola m925

          J'ai pas dit que c'était comme ça pour tous.

          Maintenant si c'est à but pédagogique, rien ne t'empèche de t'amuser avec les trames USB. Mais si c'est juste pour faire dans le protocolaire, je te rassure, il y a de fortes chances que ton téléphonne utilise un protocole ppp (rfc 1661) au dessus de l'usb.

Suivre le flux des commentaires

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