Почему последовательный порт Qt (4.8) (qextserialport) считывает данные с устройства в 2 части?

это мой код: (я использовал qextserialport)

SerialPort::SerialPort(QString port)
{
sp=new QextSerialPort;
sp->setPortName(port);
/*port->setBaudRate(BAUD9600);
port->setFlowControl(FLOW_OFF);
port->setParity(PAR_NONE);
port->setDataBits(DATA_8);
port->setStopBits(STOP_2);*/
sp->setBaudRate(BAUD115200);
sp->setDataBits(DATA_8);
sp->setFlowControl(FLOW_OFF);
sp->setParity(PAR_NONE);
sp->setStopBits(STOP_1);
sp->open(QIODevice::ReadWrite);
connect(sp,SIGNAL(readyRead()),this,SLOT(ReadData()));

}

void SerialPort::ReadData()
{
QByteArray ba;
ba.resize(512);
ba=sp->readAll();
emit DataRecieve(ba);
}

этот код сначала запускается в Ubuntu и показывает все байты, которые получают с устройства, но когда я тестировал его на встроенном устройстве Linux, этот код считывал данные с последовательного устройства в 2 части. () в моих байтах нет \ n
Я изменяю код на этот код:

void SerialPort::ReadData()
{
QByteArray ba;
ba.resize(512);
if(sp->bytesAvailable()>0 || sp->waitForReadyRead(20000))
{
qDebug()<<sp->bytesAvailable();
ba=sp->readAll();
qDebug()<<ba.toHex();
emit DataRecieve(ba);
}
}

но опять же мой вывод:

4 "aa5524010400000000000000"12 "000000000000000000002801"

но это должно быть:

"aa5524010400000000000000000000000000000000002801"

Мой выходной размер может быть 48 байтов или 512 байтов

1

Решение

Это зависит от буфера драйвера последовательного порта. Вы можете получить readyRead() сигнал на один готовый байт, например.
Вы должны сохранить полученные байты в промежуточный буфер и обработать его в конце концов.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]