Files
VX5_KRO_GearPump/rfid/rfidmanager.h
T
2026-07-22 11:47:13 +08:00

136 lines
3.3 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;
// 首次提示刷墨水卡
bool firstPromptInkCard = false;
// 首次提示刷溶剂卡
bool firstPromptSolventCard = false;
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, const QString& cardData = QString());
// InkJetPrinter定时器timerHandler触发,检查刷卡状态
// 初始化刷卡模块
void initRFIDMoudle(unsigned int addr, SysPara *sysPara);
// 300ms检查处理
void handleCheck(unsigned int addr);
void setInkCardFirstPrompt(bool firstPrompt);
void setSolventCardFirstPrompt(bool firstPrompt);
/**
* @brief 异步查询IC卡钱包余额(钱包存放在块4)。
* @return >=0 查询成功,返回余额;<0 失败。
*/
int RFIDQueryWalletAsync();
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, const QString& originalCardData);
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);
int superCardDeduct();
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;
int waitStatus();
bool waitCard();
signals:
void sig_showMsg(QString msg);
void sig_maintenanceShow();
// 墨水流程已完成,(墨水、刷卡均已完成)
void sig_inkCardProgressFinished();
// 溶剂流程已完成
void sig_solventProgressFinished();
private slots:
//接收刷卡数据槽函数
void slt_readRFIDData();
//超时处理槽函数
void slt_timerHandle();
//处理刷卡与溶剂/墨水报警标志
void slt_intervalTimerHandle();
};
#endif // RFIDMANAGER_H