Вопрос такой. Есть порт с перемычкой между TxD и RxD. Пишу в порт данные и читаю их же. Использую QtSerialPort в полной аналогии с примером (terminal example). Проблема заключается в чтении данных. Есть слот, приконнекченный к сигналу readyRead() объекта. Когда в порте появляются данные, этот слот вызывается всякий раз, когда размер этих данных равен 8 Байтам. Например, если размер считываемых данных составляет 14 Байт, слот вызывается 2 раза, если 27 Байт - 4 раза, 248 Байт - 31 раз. Т.е. порт ведет себя так, как будто бы размер буфера равен 8. Суть проблемы в том, что из-за вышеперечисленного невозможно отследить момент, когда все доступные данные считаны из порта:
Раскрывающийся текст
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
...
serial = new QSerialPort(this);
serial->setReadBufferSize(0);
connect(serial, SIGNAL(readyRead()), SLOT(readData()));
...
}
void MainWindow::readData()
{
port_data.append(serial->readAll());
if(serial->bytesAvailable()==0){
// здесь должна быть обработка всех полученных данных
}
}
UPD
Если добавить небольшой лок перед чтением, т.е.
Раскрывающийся текст
void MainWindow::readData()
{
QThread::msleep(400);
port_data.append(serial->readAll());
...
}
Я ничего не понимаю.