IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

[C++] gérer la reconnection d'un device serie via USB


Sujet :

Linux

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    ingénieur robotique
    Inscrit en
    Avril 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur robotique

    Informations forums :
    Inscription : Avril 2021
    Messages : 3
    Par défaut [C++] gérer la reconnection d'un device serie via USB
    Bonjour,

    Je travaille sur un robot, donc l'ordinateur embarqué est une Jetson Xavier AGX developper kit, tournant sur une version modifiée d'ubuntu 18.04.
    A cet ordinateur est connecté via USB une carte de développement STM32 (microcontroleur, comme un Arduino en plus puissant), qui sert à lire des capteurs et qui envoie des données à 20Hz.
    Coté ordinateur j'ai un code C++ qui lit les données venant de la STM32 (via /dev/ttyACM0).

    Le problème est qu'au bout d'un certain temps (variable, parfois plusieurs heures), la STM32 "change" de device et devient /dev/ttyACM1, ce qui fait que je ne récupère plus les données. Je soupçonne un micro faux-contact (quand on déconnecte et reconnecte un périphérique USB, il change souvent de nom), mais sans preuve.

    Je cherche donc une solution pour qu'en cas de déconnexion/reconnexion, je reçoive à nouveau mon flux de données.


    Pour l'instant, j'ai trouvé comment avoir un lien symbolique ne changeant pas (/dev/ttySTM32) : j'arrive à m'y connecter (au lieu de /dev/ttyACM0), mais si je débranche et rebranche la STM32, la communication reste rompue (/dev/ttySTM32 pointe maintenant sur /dev/ttyACM1).
    Pour celà, j'ai crée un fichier /etc/udev/rules.d/99-STM32.rules contenant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SUBSYSTEM=="tty", ATTRS{idVendor}=="0483", SYMLINK+="ttySTM32"
    Est-ce que je suis sur la bonne piste? Si oui, est-ce que vous avez une idée comment gérer la reconnexion? (pour détecter la perte de connexion, c'est facile, il suffit de se rendre compte qu'on n'a plus reçu de messages depuis une demi seconde)
    Ou est-ce que vous avez un autre moyen plus efficace d'arriver à rétablir la connexion (ou ne pas la perdre dans un premier temps)

    Merci d'avance
    Félix

    PS : vous trouverez en pièce jointe un code (simplifié) de la classe qui gère la communication série. Le code est basé sur le tuto suivant : https://blog.mbedded.ninja/programmi...s-using-c-cpp/
    PS2 : J'ai posté cette question sous linux, car il y a peut-être des solutions au niveau de linux pour garder le device ouvert malgré les reconnexions. Si vous pensez que la question est plus adaptée dans la section C++, alors n'hésitez pas à la déplacer.
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [WD22] Modbus serie (via USB) en mode RTU
    Par Jon Shannow dans le forum WinDev
    Réponses: 7
    Dernier message: 21/05/2019, 17h22
  2. numero de serie clef USB
    Par nonolerobot dans le forum C++Builder
    Réponses: 3
    Dernier message: 23/08/2006, 20h57
  3. N° Serie Cle Usb
    Par kivoch dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 01/05/2006, 21h39
  4. connection avec port // ou serie ou usb
    Par matterazzo dans le forum Langage
    Réponses: 1
    Dernier message: 09/10/2005, 14h16
  5. Réponses: 1
    Dernier message: 07/10/2005, 23h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo