#ifndef RFIDMANAGER_H #define RFIDMANAGER_H #include "myinclude.h" #include #include #include #include #include class SysPara; class QMessageBox; 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); void cardTouchConfirmAsync(QString msgTxt, QString variableMsgTxt, std::function callback); void markInkCard(const QString &strRevdata = QString()); void markSolventCard(const QString &strRevdata = QString()); void markMaintenanceCard(const QString &strRevdata = QString()); //刷卡新需求,刷卡和倒溶剂/墨水不分先后,都可以去除报警提示。 StatuStruct status; void updateStatus(); QTimer* warningTimer = nullptr; QMessageBox* m_confirmBox = nullptr; QTimer* m_confirmTimer = nullptr; QString m_confirmBoxTxt; std::function m_confirmCallback; 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