…about Linux, electronics, digital photography, whatever…
Icône RSS Icône Accueil
  • cats : un ‘cat’ pour le port série

    Posté le 30th novembre 2009 leucos 9 commentaires

    (an english version of this post is available here)

    Pour un futur projet, j’avais besoin de faire quelquechose du genre ‘cat /dev/leportserie’.

    Bien sur, avec cat, ça ne marche pas terrible. Alors voici ‘cats’, un ‘cat’ spécial port série.

    Ca a été écrit en 30 minutes, pas vraiment testé, mais à priori ça marche plutôt pas mal pour des opérations de lecture et d’écriture pas trop tordues.

    Par défaut, cats fonctionne en 9600 bauds.

    Compilation :

    gcc cats.c -o cats

    Exécution :

    ./cats /dev/ttyUSB0

    Example d’utilisation : attraper votre altitude depuis le GPS qui envoie des trames NMEA sur le port série :

    ./cats /dev/ttyUSB0 | grep GGA | cut -f 10 -d','

    cats habite chez  GitHub : http://github.com/leucos/cats

    Les retours, remarques et les engueulades sont les bienvenues.

    EDIT : nouvelle option pour cats (timestamping).

     

    9 réponses à “cats : un ‘cat’ pour le port série” Icône RSS

    • si tu souhaites juste visualiser, un screen /dev/ ca marche pas mal

    • Oui exact. Même pour envoyer des caractères sur le port ca marche bien.

    • Bonjour,

      Déja merci et un grand bravo pour ce petit programme qui me change carrément la vie puisque je me creusais la tête depuis qq jours pour savoir comment interroger ma carte de 8 relais en USB que j’utilise en domotique.
      (http://www.gce-electronics.com/17-carte-8-relais-pour-port-usb.html)
      Par contre, j’aurai juste une petite question:
      lorsque j’utilise par exemple la commande ./cats -b9600 /dev/ttyUSB0
      J’arrive sur un prompt, est ce possible de passer directement les commandes au programme et récupérer le retour en sortie ?

      Merci d’avance
      Chnapsy

    • Re :) ,

      Encore une petite remarque, j’utilise Udev sous linux pour mapper mes /dev/ttyUSBX vers des noms plus user friendly de device.
      Le pb c’est que udev fait des liens symboliques genre /dev/toto => /dev/ttyUSB0 ettttt apparement le programme ne marche pas lorsque le port est un lien symbolique …
      Une idée du pourquoi ? Est ce possible de corriger cela en bidouillant un peu le code source ?

      Cordialement
      Chnapsy

    • Salut Chnapsy,

      Pour demander à cats d’envoyer directement une chaine ASCII sur le port, c’est aussi simple qu’un pipe :

      echo « ma chaine » | ./cats -b9600 /dev/ttyUSB0

      Tu peux même vérifier que la sortie renvoie bien ce que tu attends (YMMV) :

      echo « ma chaine » | ./cats -b9600 /dev/ttyUSB0 | grep « ca marche » || echo « ERREUR : ça a fouaré »

      N’hésite pas à aller sur le Wiki, il y a quelques exemples : http://wiki.github.com/leucos/cats

      Sur les symlinks effectivement, c’est bizarre, y’a peut être un ioctl qui lui reste en travers de la gorge. Est-ce que tu as un message d’erreur ? Et avec ‘-g 0′ ? Je ne peux pas tester pour l’instant mais dès que je peux peux je regarde.

      Cool que cats te rende service !

      A+

    • Linusque Trouvald

      Pourquoi ne pas utiliser un programme tel que minicom par exemple ?

    • Bonjour Linusque,

      En gros, ta question revient à peu près à demander « pourquoi utiliser cat plutot que vi ? ». Et la réponse et la même : cats (à l’instar de cat) permet de rapidement visualiser ce qu’il se passe sur le port série. Par ailleurs, dans le cas particulier de minicom (qui est excellent par ailleurs), si tu connais un peu la bête, tu sais combien c’est « pratique » de configurer le port série avant de pouvoir commencer à communiquer…

      En résumé, les usages sont différents. minicom c’est très bien pour une longue session de travail (console cisco par exemple), et cats pratique pour les trucs rapides à la volée. Les quelques
      exemples du wiki te donneront peut être une idée plus précise.

      A+

    • Linusque Trouvald

      « tu sais combien c’est “pratique” de configurer le port série avant de pouvoir commencer à communiquer »

      T’es bien obliger de le configurer le port série avant de l’utiliser. Et la ou minicom rox, c’est que tout est configurable avec un menu! 3 ou 4 touches pressées et le port est configuré. De plus tu peut sauvegarder la config, si bien qu’un simple « minicom » dans le terminal et hop le port série est pret. Pas besoin de fouiller dans de la doc pour trouver d’obscures paramètres en ligne.
      Je l’utilise chaque fois pour débuger mes programmes arduino et c’est top.

      Mais chacun son truc!
      Bon courage pour tes projets…

    • Evidemment qu’il faut configurer le port…

      Et le seul fichier de conf pertinent avec minicom, c’est la conf par defaut si tu fais toujours la même chose (même port, même baud rate), parce que dès que tu commences à travailler sur plusieurs ports avec plusieurs baud rates, ca sert plus à rien d’avori des fichiers de conf.
      Perso, je prèfère filer deux params en ligne de commande, que faire des Ctrl-A P C et des Ctrl-A O etc…

      Mais bon, chacun son truc ;) ou plutôt, chacun son besoin.

      J’ai mangé du minicom pendant un bail, et si j’ai fini par prendre du temps pour pondre cats, c’est bien que minicom était trop lourd pour 95% de ce que je faisais sur le port série (en particulier avec des µ).

      Après, il faut bien comprendre un truc (je pensais que mon analogie “pourquoi utiliser cat plutot que vi(/emacs/gedit/whatever) ?” était claire, désolé) : cats n’est pas un émulateur de terminal (loin de moi l’idée de me lancer là dedans) mais un ‘cat’ pour ligne de commande, avec la possibilité de le piper (avant/après) ou le rediriger. si tu développes sur Arduino, je pense que tu vois de suite l’intérêt de piper une sortie série sur hexdump (cf exemples).

      A+ et merci pour tes encouragements.


    Laisser une réponse

    Security Code: