我正面临readyRead() 的奇怪行为。我使用 QextSerialPort 进行串行通信,并将 readyRead() 连接到我的阅读槽。例如,我正在向端口写入 45 个字节并希望读取 45 个字节,但发生了什么,我的 readyRead() 信号不止一次发出,这意味着它将先读取 38 个字节,然后读取 7 个字节。我怎样才能让它读取整个数据块?
//Port setup
m_pSerialPort = new QextSerialPort(pduPortName, m_PortSettings, QextSerialPort::EventDriven);
m_pSerialPort->setBaudRate(m_PortSettings.BaudRate);
m_pSerialPort->setDataBits(m_PortSettings.DataBits);
m_pSerialPort->setFlowControl(m_PortSettings.FlowControl);
m_pSerialPort->setParity(m_PortSettings.Parity);
m_pSerialPort->setStopBits(m_PortSettings.StopBits);
m_pSerialPort->setTimeout(500);
m_pSerialPort->flush();
m_pSerialPort->open(QIODevice::ReadWrite | QIODevice::Unbuffered );
connect(m_pSerialPort, SIGNAL(readyRead()), this, SLOT(readSerialData()));
//write
qint64 bytesWritten = pSerialPort->write(data, bytes_to_write);
//Read
qint64 availableBytes = pSerialPort->bytesAvailable();
if (availableBytes >= SIZE)
bytesRead = pSerialPort->read(data , availableBytes);
我希望我能很好地解释我的问题。请帮忙!
注意:我的消息使用 STANAG 协议。