QByteArray WorkThread::readSerialPort() { if (nullptr == serialPort) {return "";} qint64 byteLen = serialPort->bytesAvailable(); if(byteLen < 0) { return ""; } return serialPort->readAll(); }
时间: 2024-04-02 17:35:28 浏览: 60
这段代码是用来读取串口数据的,先判断QSerialPort对象是否为nullptr,如果是就返回一个空的QByteArray。然后获取可用的字节数,如果小于0也返回一个空的QByteArray。最后调用QSerialPort的readAll()函数读取所有可用的数据,并将其封装到一个QByteArray对象中返回。这里需要注意,readAll()函数可能会阻塞程序,直到读取到数据为止。
相关问题
QByteArray WorkThread::getAtCmdResponse() { if (nullptr == serialPort) {return "";} QByteArray resp; while (serialPort->waitForReadyRead(20)) { qApp->processEvents(); resp += readSerialPort(); } qDebug()<<resp; return resp; }
这段代码是一个工作线程类中的函数,用于从串口接收 AT 指令的响应数据。函数首先判断串口是否打开,如果未打开则返回空的 QByteArray 对象。接着,它使用一个 while 循环来等待串口有数据可读,每次等待的时间为 20 毫秒。在等待期间,使用 qApp->processEvents() 函数来处理事件队列,以确保 GUI 界面不会卡死。一旦串口有数据可读,就调用 readSerialPort() 函数来读取数据并将其添加到 resp 变量中。最后,函数输出读取的数据并返回 resp 变量。
需要注意的是,这个函数可能会阻塞线程,因为它在等待串口数据可读时会一直占用 CPU 时间。如果需要避免阻塞线程,可以考虑使用信号槽机制来异步接收串口数据。
void WorkThread::sendSerialData(QByteArray data) { if (serialPort != nullptr) { serialPort->write(data); } }
这段代码是用来发送串口数据的,首先判断QSerialPort对象是否为nullptr,如果不是就调用QSerialPort的write()函数发送数据。write()函数会将指定的数据写入到串口缓冲区中,如果缓冲区已满,则write()函数可能会阻塞程序,直到缓冲区有足够的空间为止。需要注意的是,write()函数只是将数据写入缓冲区,并不保证数据已经成功发送到串口设备。
阅读全文