это мой код: (я использовал 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 байтов
Это зависит от буфера драйвера последовательного порта. Вы можете получить readyRead()
сигнал на один готовый байт, например.
Вы должны сохранить полученные байты в промежуточный буфер и обработать его в конце концов.
Других решений пока нет …