136 lines
3.3 KiB
C++
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
|