ハードウェアで FTDI シリアル ポート CHIP を使用しています。現在、Linux で動作するコードがあり、Windows 7 に移行しました。奇妙な問題がいくつか発生します。
問題: これを行う他のコンソール アプリケーションを実行しないと、シリアル ポートにデータを書き込むことができません。
serial.setPortName("COM3");
if (serial.open(QIODevice::ReadWrite)) {
bool success = serial.setBaudRate(QSerialPort::Baud9600) &
serial.setStopBits(QSerialPort::OneStop) &
serial.setDataBits(QSerialPort::Data8) &
serial.setParity(QSerialPort::NoParity) &
serial.setFlowControl(QSerialPort::NoFlowControl);
qDebug() << "Connected to usb device: " << (success ? "OK" : "FAIL");
while(true) {
if(serial.waitForReadyRead(-1)) {
QByteArray out = serial.readAll();
for(int i=0; i< out.length(); i++) {
qDebug() << (int) out[i];
}
}
}
serial.close();
だから、すべてを読んでループするだけです。ハードウェアは何も送信しないため、読み取りは無限ループにすぎません。書き込みプログラムを閉じて実行すると、正しく実行されます。
char* input;
input = new char[size+3];
QByteArray bytearr;
for(int i=0;i<size+2;i++) {
input[i] = (char) package[i];
bytearr.append((unsigned char) package[i]);
}
QString serialPortName = "COM3";
QSerialPort serialPort;
serialPort.setPortName(serialPortName);
serialPort.open(QIODevice::ReadWrite);
serialPort.write(bytearr);
serialPort.flush();
serialPort.close();
read all を実行すると動作しますが、read all を実行しないと動作しません。私たちは何を間違っていますか?ありがとう。