2011-03-27 3 views
1

Je suis en train de communiquer avec un arduino en utilisant le code de,Posix connexion série avec Callbacks

http://todbot.com/blog/2006/12/06/arduino-serial-c-code-to-talk-to-arduino/

qui utilise termios pour ouvrir et parler à un arduino d'une manière non bloquante qui fonctionne très bien. Ce que je me demandais, c'est quand Java en utilisant rxtx je peux enregistrer une fonction de rappel qui est appelée quand il y a des données sur la ligne de sorte que je n'ai pas à vérifier manuellement. J'ai googlé mais je n'ai trouvé aucune information sur la façon d'enregistrer une fonction de rappel? Je suis sur Linux/OS X et j'essaie d'éviter de lancer un nouveau thread juste pour regarder/lire les données sur la ligne.

Répondre

1

Posix lui-même ne définit pas un moyen d'affecter une fonction de rappel à appeler lorsque des données série arrivent. La méthode standard pour effectuer ce type de traitement si vous ne souhaitez pas utiliser un thread séparé consiste à utiliser la fonction de bibliothèque select. Cela vous permet de définir un ensemble de descripteurs de fichiers qui intéressent votre programme, puis de vous endormir. Select réveillera automatiquement votre processus si quelque chose d'intéressant se produit dans l'un des descripteurs de fichiers dans lesquels vous vous êtes déclaré intéressé (par exemple, de nouvelles données devenant disponibles pour la lecture). Cela évite d'avoir à attendre et à interroger plusieurs descripteurs pour l'activité.

Une autre option serait d'utiliser une bibliothèque comme libevent qui se trouve au-dessus de la couche Posix et fournit l'infrastructure de rappel. http://monkey.org/~provos/libevent/

1

Boost.Asio peut fournir une fonctionnalité de rappel lors de l'utilisation des ports série. Il fonctionne sous Linux et Mac OS X.