Comment écrire sur le port série à l'aide Qextserialport

Je suis en utilisant Ubunt 10.10.

Je veux communiquer avec un microcontrôleur (ATmega328p) à l'aide de série par QT, donc pour le test, j'ai créé une application fictive sur le microcontrôleur qui lit les caractères de l'UART et répond sur le port série (réponses) avec le même personnage, mais entre crochets.

Si PC envoyer: à un , puis le PC reçoit la réponse [a]

L'application fonctionne très bien, quand je suis à l'aide d'hyper terminal (GtkTerm) pour envoyer les personnages de PC, mais quand j'utilise QT, il ne fonctionne pas. Je suis de l'envoi à partir de QT un caractère sur le port série, et je suis en attente de recevoir une réponse sur l'hyper terminal, mais je ne reçois pas de réponse.

De Communication série propriétés: Baud9600, Parity_none, Stop_bits_1, Data_8bits, Flow_control_Off

#include <QtCore/QCoreApplication>
#include <qextserialport.h>

int main(int argc, char *argv[])
{
   QCoreApplication a(argc, argv);

   const char data[]= "e";
   QextSerialPort * port = new QextSerialPort("/dev/ttyUSB0");

   port->setBaudRate(BAUD9600);
   port->setFlowControl(FLOW_OFF);
   port->setParity(PAR_NONE);
   port->setDataBits(DATA_8);
   port->setStopBits(STOP_1);
   port->setTimeout(0);
   bool res = false;
   res = port->open(QIODevice::ReadWrite | QIODevice::Unbuffered);

   if(res)
   {
       qDebug("Opened");
       qDebug(data);
       int i = port->write(data, sizeof(data));
   }
   else
   {
       qDebug("Failed to connect");
   }

   return a.exec();
}

Aucune idée de ce qui est mal?

Qu'est-ce que port->write retour?
je suis de l'envoi à partir de QT un caractère sur le port série, et je suis en attente de recevoir une réponse sur l'hyper terminal, mais je ne reçois pas de réponse. je ne suis pas entièrement sûr de savoir comment les ports série sous Linux, mais ne sont-ils pas exclusivement ouvert par une application à la fois? Pourquoi n'avez-vous pas lu la réponse de l'intervalle Qt programme ainsi?
deux idées: 1) définir un délai d'expiration pour 100; 2) faire frire à appeler flush après l'écriture
J'ai essayé les deux, le délai d'attente et la chasse d'idée et toujours rien ne se passe. @Manjabes int i = port->write(data, sizeof(data)); Le débogueur ai i = 2 après l'exécution de cette ligne
eh bien... cela signifie que les données d'au moins écrit de port. Peut-être que vous essayer d'attraper les données que vous avez envoyé dans le mauvais sens? si vous lisez dans le terminal le même port wou écrit - vous se rien, essayez une sorte d'espion à la place

OriginalL'auteur Karim | 2011-06-08