Files
VX5_KRO_GearPump/rfid/rfidmanager.h
T
2026-07-08 16:56:05 +08:00

112 lines
2.6 KiB
C++

#ifndef RFIDMANAGER_H
#define RFIDMANAGER_H
#include "myinclude.h"
#include <QSerialPort>
#include <QObject>
#include <QTimer>
#include <QMutex>
class SysPara;
enum CARD_TYPE{
INK = 1,
SOLVENT = 2,
MAINTENANCE = 3,
};
struct StatuStruct
{
bool addedInk;
bool addedSolvent;
bool cardInk;
bool cardSolvent;
StatuStruct() {
addedInk = false;
addedSolvent = false;
cardInk = false;
cardSolvent = false;
}
};
typedef unsigned char UCHAR;
class RFIDManager : public QObject
{
Q_OBJECT
public:
static RFIDManager* instance();
public:
/**
* @brief 向卡片写入当前日期时间,标识该卡片已被使用
*/
int RFIDmarkCardUsedAsync(int type);
// InkJetPrinter定时器timerHandler触发,检查刷卡状态
// 初始化刷卡模块
void initRFIDMoudle(unsigned int addr, SysPara *sysPara);
// 300ms检查处理
void handleCheck(unsigned int addr);
private:
RFIDManager();
// 工具类函数
void CheckSumOut(UCHAR *buf, UCHAR len);
bool CheckSumIn(UCHAR *buf, UCHAR len);
void MySleep(unsigned int msec, int expSize = 8);
void Hex2Str(const UCHAR *sSrc, UCHAR *sDest, int nSrcLen);
void HexStrToByte(const UCHAR* source, UCHAR* dest, int sourceLen);
// 串口
QSerialPort *comForRFID = nullptr;
void comForRFID_init();
int comReadRFID_data();
QByteArray buildMarkCardCommand(int block, int cardType);
bool verifyWriteResponse(const QByteArray& response, QString notice);
int setRFIDCarKey(void);
int setRFIDReaderKey(int,int);
int setRFIDReaderOriginalKey(void);
int setRFIDReaderWorkMode(void);
int receiveReadRFID_data(void);
int queryReadRFID_address(void);
QMutex m_rfidMutex;
QByteArray RFIDReadData;
QString strRevdata;
bool setICReaderModeFlag;
uint checkCardIntervalTime;
SysPara* sysPara = nullptr;
QTimer* RFIDTimer = nullptr;
void initTimer();
bool cardTouchConfirm(QString msgTxt, QString variableMsgTxt);
//刷卡新需求,刷卡和倒溶剂/墨水不分先后,都可以去除报警提示。
StatuStruct status;
void updateStatus();
QTimer* warningTimer = nullptr;
bool waitStatus();
bool waitCard();
signals:
void sig_showMsg(QString msg);
void sig_maintenanceShow();
private slots:
//接收刷卡数据槽函数
void slt_readRFIDData();
//超时处理槽函数
void slt_timerHandle();
//处理刷卡与溶剂/墨水报警标志
void slt_intervalTimerHandle();
};
#endif // RFIDMANAGER_H