#include "serialport.h"
#include "Configuration.h"
#include "global.h"
#include <QDebug>
#include <QThread>
SerialPort::SerialPort()
{
isRun = true;
this->setAutoDelete(true);
}
SerialPort::~SerialPort()
{
if (serial){
delete serial;
serial = nullptr;
}
qDebug() << "~SerialPort";
}
void SerialPort::init()
{
serial = new QSerialPort();
//设置串口名
foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
qDebug() <<"COM:"<< info.portName();
#ifdef Q_OS_WIN32
QString portName = QString("COM%1").arg(COM::getPort());
#else
QString portName = QString("ttyUSB%1").arg(COM::getPort());
#endif
if (info.portName() == portName) {
qDebug() <<"COM:find " << portName;
serial->setPortName(info.portName());
} else {
qDebug() <<"COM:not find " << portName;
}
}
//设置波特率
serial->setBaudRate(COM::getBaudRate());
//设置数据位数
serial->setDataBits(QSerialPort::Data8);
//设置奇偶校验
serial->setParity(QSerialPort::NoParity);
//设置停止位
serial->setStopBits(QSerialPort::OneStop);
//设置流控制
serial->setFlowControl(QSerialPort::NoFlowControl);
}
void SerialPort::close()
{
isRun = false;
}
void SerialPort::sendData(QByteArray data)
{
sendMData = data;
qDebug() <<"sendData:"<<sendMData.toHex();
}
void SerialPort::run()
{
init();
//读取数据
while (isRun) {
if (serial->isOpen()) {
if(serial->waitForReadyRead(50)){
QByteArray requestData = serial->readAll();
GlobalData::addData(requestData);
}
if (sendMData != "") {
serial->write(sendMData);
if (serial->waitForBytesWritten(50)) {
sendMData = "";
}
}
} else {
QThread::msleep(3000);
if(!serial->open(QIODevice::ReadWrite))
{
qDebug() <<"COM:open fail";
}
}
}
}
Qt串口多线程收发
于 2021-06-19 18:58:04 首次发布