J'écris une application Qt pour communiquer avec un autre ordinateur via un port série. J'ai 2 vrais problèmes. Je peux envoyer et recevoir des données correctement, mais parfois le port série «mange» une partie de mon entrée. Par exemple, si je vous envoie:Communication Qt Port série
cd /application/bin
parfois (pas toujours), il ne recevra:.
cd /applica
(Comme il est un terminal, il fait écho à l'entrée arrière Aussi mon message me dit que je suis clairement au mauvais endroit.)
2. en outre, parfois la fente Qt qui se déclenche quand il y a des données disponibles ne se déclenche pas, même si je sais qu'il ya des données que je peux recevoir. Si j'envoie un autre \r\n
sur le port, la fente se déclenchera. Par exemple parfois je vais ls
quelque chose, et le nom de la commande sera relu du port, mais le contenu du dossier reste là dans les limbes jusqu'à ce que je frappe à nouveau. Ensuite, je reçois la liste du répertoire et deux invites.
Voici mon code:
void Logic::onReadyRead(){
QByteArray incomingData;
incomingData = port->readAll();
QString s(incomingData);
emit dataAvailable(s);// this is a Qt slot if you don't know what it is.
qDebug() << "in:"<< s.toLatin1();
}
void Logic::writeToTerminal(QString string)
{
string.append("\r\n");
port->write((char*)string.data(), string.length());
if (port->bytesToWrite() > 0){
port->flush();
}
qDebug() << "out:" << string.toLatin1();
}
Je viens de réaliser qu'il ne soit pas clair, ce sont des questions non liées. Shell me dira qu'il ne peut pas aller à '/ applica' car aucun répertoire n'existe. – Muricula
Vous devrez mettre en mémoire tampon les données lues sur le port jusqu'à ce que vous rencontriez le, ce qui peut nécessiter plusieurs lectures depuis le port . –
Pete