QByteArray WorkThread::getAtCmdResponse() { if (nullptr == serialPort) {return "";} QByteArray resp; while (serialPort->waitForReadyRead(20)) { qApp->processEvents(); resp += readSerialPort(); } qDebug()<<resp; return resp; }
时间: 2024-04-02 10:35:21 浏览: 14
这段代码是用来获取AT指令的响应的,首先判断QSerialPort对象是否为nullptr,如果是就返回一个空的QByteArray。然后定义一个QByteArray类型的resp变量,用来存储AT指令的响应。接着进入一个while循环,首先调用waitForReadyRead()函数等待串口有数据可读,如果等待时间超过20ms就退出循环。在等待期间,调用qApp->processEvents()函数可以处理一些其他的事件,比如界面的刷新等。等待期间如果有数据可读,就调用readSerialPort()函数读取所有可用的数据,并将其追加到resp变量中。最后输出resp变量的内容,并将其返回。需要注意的是,waitForReadyRead()函数也可能会阻塞程序,直到串口有数据可读为止。
相关问题
QByteArray WorkThread::readSerialPort() { if (nullptr == serialPort) {return "";} qint64 byteLen = serialPort->bytesAvailable(); if(byteLen < 0) { return ""; } return serialPort->readAll(); }
这段代码是用来读取串口数据的,先判断QSerialPort对象是否为nullptr,如果是就返回一个空的QByteArray。然后获取可用的字节数,如果小于0也返回一个空的QByteArray。最后调用QSerialPort的readAll()函数读取所有可用的数据,并将其封装到一个QByteArray对象中返回。这里需要注意,readAll()函数可能会阻塞程序,直到读取到数据为止。
void WorkThread::sendSerialData(QByteArray data) { if (serialPort != nullptr) { serialPort->write(data); } }
这段代码是用来发送串口数据的,首先判断QSerialPort对象是否为nullptr,如果不是就调用QSerialPort的write()函数发送数据。write()函数会将指定的数据写入到串口缓冲区中,如果缓冲区已满,则write()函数可能会阻塞程序,直到缓冲区有足够的空间为止。需要注意的是,write()函数只是将数据写入缓冲区,并不保证数据已经成功发送到串口设备。