#include <QDebug>
#include "serial.h"
//frandy create 20220913
Serial::Serial(QObject *parent) : QObject(parent)
{
mSerialPort = new QSerialPort();
connect(mSerialPort, SIGNAL(readyRead()), this, SLOT(receiveData()));
}
QStringList Serial::getSerialList()
{
QStringList serialList;
//获得所有可用端口列表
QList<QSerialPortInfo> serialPortInfoList = QSerialPortInfo::availablePorts();
if(serialPortInfoList.isEmpty()){
return serialList;
}
QList<QSerialPortInfo>::iterator iter = serialPortInfoList.begin();
//将所有端口添加到界面的下拉列表中
while(iter!=serialPortInfoList.end()){
serialList.append(iter->portName());
iter++;
}
return serialList;
}
bool Serial::openSerialPort(QString port)
{
//判断串口开启状态
if(mSerialPort->isOpen()){
//若串口已经打开,则关闭它,设置指示灯为红色,设置按钮显示“打开串口”
qDebug()<<"serial port has opened, then close it";
mSerialPort->clear();
mSerialPort->close();
return false;
}else{
//若串口没有打开,则打开选择的串口,设置指示灯为绿色,设置按钮显示“关闭串口”
qDebug()<<"serial port has closed, then open it";
mSerialPort->setPortName(port);
mSerialPort->open(QIODevice::ReadWrite);
mSerialPort->setBaudRate(QSerialPort::Baud19200);
mSerialPort->setDataBits(QSerialPort::Data8);
mSerialPort->setParity(QSerialPort::NoParity);
mSerialPort->setStopBits(QSerialPort::OneStop);
mSerialPort->setFlowControl(QSerialPort::NoFlowControl);
return true;
}
}
//55 AA AA AA AA AA 03 06 80 00 00 00 00 00 30 16
void Serial::sendData(QString message)
{
message = message.toUpper().trimmed();
QStringList hexList = message.split(" ");
qDebug()<<"hexList.count:"<<hexList.count();
QByteArray byteArray;
for (int i=0; i<hexList.count(); i++) {
QByteArray value = QByteArray::fromHex(hexList[i].toLatin1());
qDebug()<<"value:"<<value;
byteArray.append(value);
}
qDebug()<<"byteArray:"<<byteArray;
mSerialPort->write(byteArray);
}
QString Serial::receiveData()
{
QByteArray data = mSerialPort->readAll();
qDebug()<<"recv data:"<<data<<data.length();
QString result = "";
if (hexShow) {
for (int i=0; i<data.length(); i++) {
QString hex_str = QString::asprintf("%02X",data.at(i));
qDebug()<<"hex_str:"<<hex_str<<hex_str.length();
if (hex_str.length() > 2) {
hex_str = hex_str.mid(hex_str.length()-2);
}
result += hex_str + " ";
}
qDebug()<<"result:"<<result;
}
emit signReceiveMsg(result);
return result;
}
评论0