シリアル ポート経由で別のコンピューターと通信する Qt アプリケーションを作成しています。私には2つの本当の問題があります。
1. データを正常に送受信できますが、シリアル ポートが入力の一部を「食べる」ことがあります。たとえば、私が送信した場合:
cd /application/bin
場合によっては (常にではありません)、次のもののみを受け取ります。
cd /applica
(これは端末であるため、入力をエコー バックします。また、私のプロンプトは、明らかに間違った場所にいることを示しています。)
2.
また、受信できるデータがあることを知っていても、利用可能なデータがあるときに起動する Qt スロットが起動しないことがあります。別のポートを送信\r\n
すると、スロットが起動します。たとえばls
、コマンド名がポートから読み返されることがありますが、もう一度リターンを押すまで、フォルダーの内容はそこに置かれています。次に、ディレクトリのリストと 2 つのプロンプトを取得します。
これが私のコードです:
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();
}