2024-11-25 17:15:44 +08:00

134 lines
3.3 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef SERIAL_EQUIPMENT_H
#define SERIAL_EQUIPMENT_H
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
#include <QList>
#include <QTime>
#include <QCoreApplication>
#include <QEventLoop>
#include <QDebug>
#include <QMutex>
#include <QThread>
#include <QFile>
#include "XYComFunc_global.h"
//#include "CommomFunc/tool.h"
//#include "CommomFunc/datacheck.h"
#include "commonStruct.h"
//串口设备类
//实现串口通讯,目前支持固定包头固定长度的帧的解析。若非固定包头固定长度,请重写接收事件
/**
* @brief 串口设备类
* 实现串口通讯默认支持固定包头包围checksum下标01为数据包长度的变长协议包若不适用清重写dataReceive事件
*
*/
class XYCOMFUNC_EXPORT SerialEquipment:public QObject
{
Q_OBJECT
Q_SIGNALS:
//帧接收事件
void onFrameReceived(QByteArray *receiveBuffer);
void onFrameSended(QByteArray *sendBuffer);
void onDataReceived(QByteArray *revBuffer);
public:
//默认构造
SerialEquipment();
//构造
SerialEquipment(QString portName,QSerialPort::BaudRate baunRate,QSerialPort::DataBits dataBits,QSerialPort::Parity parity,QSerialPort::StopBits stopBits,int readBufferSize);
SerialEquipment(QString portName);
SerialEquipment(QString portName,QSerialPort::BaudRate baunRate);
~SerialEquipment();
//设置串口参数
void setSerialInfo(QString portName,QSerialPort::BaudRate baunRate,QSerialPort::DataBits dataBits,QSerialPort::Parity parity,QSerialPort::StopBits stopBits,int readBufferSize);
void setSerialInfo(QString portName, QSerialPort::BaudRate baunRate);
//打开串口
bool openPort();
//关闭串口
bool closePort();
//获取串口状态
bool getPortState();
//设置帧头
void setFrameHead(QByteArray frameHead);
void setFrameTail(QByteArray frameTail);
//设置帧长
void setFrameSize(int iFramSize);
//发送指令
bool sendMsg(QString sendBuffer);
bool sendMsg(QByteArray buffer);
void setLogInfo(bool isLog);
SerialLogInfo *GetLogInfo();
void delayMsec(int mesc);
static QList<QString> getAllPorts();
Q_INVOKABLE void setNeedWait(bool value);
protected:
//串口类
QSerialPort *_serialPort;
//串口号
QString _strPortName;
//用于暂存帧信息的List
QByteArray _tempArray;
//QList<char> tempList;
//波特率
QSerialPort::BaudRate _iBaudRate;
//数据位
QSerialPort::DataBits _iDataBits;
//校验位
QSerialPort::Parity _iParity;
//停止位
QSerialPort::StopBits _iStopBits;
//缓冲区读取大小
int _iReadBufferSize;
//帧长度
int _iFrameSize;
//暂存上byte
char _lastByte;
//帧头
QByteArray _frameHead;
QByteArray _frameTail;
SerialLogInfo *_logInfo;
bool _isLog;
QMutex* _mutex;
int testJDCount;
int testTotalCount;
bool bTestDebug;
bool needWait;
protected:
//出现异常帧时,用于调整帧内容
QList<char> adjustList(QList<char> srcList);
QByteArray adjustList(QByteArray srcList);
void dataReceive1();
virtual void dealDate(QByteArray);
protected slots:
//串口接收事件
virtual void dataReceive();
virtual bool checkData(QByteArray buffer,int iTailIndex);
};
#endif // SERIAL_EQUIPMENT_H