123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552 |
- #ifndef _CONTACTLESS_FSM_H
- #define _CONTACTLESS_FSM_H
- #pragma once
- #include "SpFSM.h"
- #include "CommEntityUtil.hpp"
- #include "DevFSMCommBase.hpp"
- #include "RFICClass.h"
- #include "CardAssist.h"
- #include "ICDataElement.h"
- #include "ContactlessCard_server_g.h"
- #include "ContactlessCard_msg_g.h"
- #include "ContactlessCard_UserErrorCode.h"
- #include "json/json.h"
- enum EvtType
- {
- USER_EVT_TEST = EVT_USER+1,
- USER_EVT_QUIT,
- USER_EVT_INIT,
- USER_EVT_INITFINISHED,
- USER_EVT_ACCEPT,
- USER_EVT_ACCEPT_CANCEL,
- USER_EVT_ACCEPTFINISHED,
- USER_EVT_EJECT,
- USER_EVT_EJECTFINISHED,
- USER_EVT_WAITFINISHED,
- USER_EVT_CAPTUREFINISHED,
- USER_EVT_WAITFETCHINGTIMEOUT,
- USER_EVT_PREONLINE,
- USER_EVT_POSTONLINE,
- USER_EVT_PREONLINEFINISHED,
- USER_EVT_POSTONLINEFINISHED,
- USER_EVT_RESET,
- USER_EVT_RESETFINISHED,
- USER_EVT_EXIT,
- USER_EVT_READ,
- USER_EVT_READ_FINISHED,
- USER_EVT_QUERY_CARD_INFO,
- USER_EVT_QUERY_CARD_INFO_FINISHED,
- //new
- USER_EVT_JS_READ,
- USER_EVT_JS_READ_FINISHED,
- USER_EVT_JS_EJECT,
- USER_EVT_JS_EJECTFINISHED,
- USER_EVT_JS_POSTONLINE,
- USER_EVT_JS_POSTONLINEFINISHED,
- USER_EVT_JS_READ_CANCEL
- };
- using namespace ContactlessCard;
- using lpCMBdecodeMag2 = int(*)(char* mag2Data, char* data);
- using lpCMBdecodeEx = int(*)(char* magData, char* type, char* data);
- class CContactlessCardEntity;
- class CContactlessCardFSM;
- struct Track2Data
- {
- int status;
- CSimpleStringA t2Account;
- CSimpleStringA t2Region;
- CSimpleStringA t2CardSerial;
- CSimpleStringA t2CVC;
- CSimpleStringA t2ExpireDate;
- };
- struct CMBBin
- {
- CSimpleStringA bin;//6 byte long
- bool bIC;//IC:true or mag:false
- bool bDC;//debit:true,credit:false
- };
- class CardAcceptEvent : public FSMEvent
- {
- public:
- CardAcceptEvent() : FSMEvent(USER_EVT_ACCEPT){}
- ~CardAcceptEvent(){}
- SpReqAnsContext<ContactlessCardService_Insert_Req, ContactlessCardService_Insert_Ans>::Pointer ctx;
- virtual void OnUnhandled()
- {
- if (ctx != NULL)
- {
-
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setResultCode("RTA2J1C")("card accept unhandled");
- ctx->Answer(Error_InvalidState);
- }
- }
- };
- class PreOnlineEvent : public FSMEvent
- {
- public:
- PreOnlineEvent() : FSMEvent(USER_EVT_PREONLINE){}
- ~PreOnlineEvent(){}
- SpReqAnsContext<ContactlessCardService_PreOnline_Req,ContactlessCardService_PreOnline_Ans>::Pointer ctx;
- virtual void OnUnhandled()
- {
- if (ctx != NULL)
- ctx->Answer(Error_InvalidState);
- }
- protected:
- private:
- };
- class PostOnlineEvent : public FSMEvent
- {
- public:
- PostOnlineEvent() : FSMEvent(USER_EVT_POSTONLINE){}
- ~PostOnlineEvent(){}
- SpReqAnsContext<ContactlessCardService_PostOnline_Req,ContactlessCardService_PostOnline_Ans>::Pointer ctx;
- virtual void OnUnhandled()
- {
- if (ctx != NULL)
- ctx->Answer(Error_InvalidState);
- }
- protected:
- private:
- };
- class CardEjectEvent : public FSMEvent
- {
- public:
- CardEjectEvent() : FSMEvent(USER_EVT_EJECT){}
- ~CardEjectEvent(){}
- SpReqAnsContext<ContactlessCardService_Eject_Req,ContactlessCardService_Eject_Ans>::Pointer ctx;
- virtual void OnUnhandled()
- {
- if (ctx != NULL)
- ctx->Answer(Error_InvalidState);
- }
- protected:
- private:
- };
- class ResetDeviceEvent : public FSMEvent
- {
- public:
- ResetDeviceEvent() : FSMEvent(USER_EVT_RESET){}
- ~ResetDeviceEvent(){}
- protected:
- private:
- };
- class ResetFinishedEvent : public FSMEvent
- {
- public:
- ResetFinishedEvent() : FSMEvent(USER_EVT_RESETFINISHED){}
- ~ResetFinishedEvent(){}
- protected:
- private:
- };
- class QueryCardInfoEvent : public FSMEvent
- {
- public:
- QueryCardInfoEvent() : FSMEvent(USER_EVT_QUERY_CARD_INFO){}
- ~QueryCardInfoEvent(){}
- SpReqAnsContext<ContactlessCardService_QueryCardInfo_Req,ContactlessCardService_QueryCardInfo_Ans>::Pointer ctx;
- virtual void OnUnhandled()
- {
- if (ctx != NULL)
- ctx->Answer(Error_InvalidState);
- }
- protected:
- private:
- };
- //new
- class EjectJSEvent : public FSMEvent
- {
- public:
- EjectJSEvent() : FSMEvent(USER_EVT_JS_EJECT) {}
- ~EjectJSEvent() {}
- SpReqAnsContext<ContactlessCardService_EjectJS_Req, ContactlessCardService_EjectJS_Ans>::Pointer ctx;
- virtual void OnUnhandled()
- {
- if (ctx != NULL) {
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA2J1C")("EjectJS unhandled");
- //ctx->Answer(Error_InvalidState);
- }
- }
- protected:
- private:
- };
- class PostOnlineJSEvent : public FSMEvent
- {
- public:
- PostOnlineJSEvent() : FSMEvent(USER_EVT_JS_POSTONLINE) {}
- ~PostOnlineJSEvent() {}
- SpReqAnsContext<ContactlessCardService_PostOnlineJS_Req, ContactlessCardService_PostOnlineJS_Ans>::Pointer ctx;
- virtual void OnUnhandled()
- {
- if (ctx != NULL) {
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA2J1C")("PostOnlineJS unhandled");
- //ctx->Answer(Error_InvalidState);
- }
- }
- protected:
- private:
- };
- class ReadJSEvent : public FSMEvent
- {
- public:
- ReadJSEvent() : FSMEvent(USER_EVT_JS_READ) {}
- ~ReadJSEvent() {}
- SpReqAnsContext<ContactlessCardService_ReadJS_Req, ContactlessCardService_ReadJS_Ans>::Pointer ctx;
- virtual void OnUnhandled()
- {
- if (ctx != NULL) {
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA2J1C")("ReadJS unhandled");
- //ctx->Answer(Error_InvalidState);
- }
- }
- protected:
- private:
- };
- class CContactlessCardFSM : public CCommDevFSM<CContactlessCardFSM, RFICClass>, public IFSMStateHooker
- {
- public:
- enum {s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11};
- BEGIN_FSM_STATE(CContactlessCardFSM)
- FSM_STATE_ENTRY(s0, "Init", s0_on_entry, s0_on_exit, s0_on_event)
- FSM_STATE_ENTRY(s1, "Initializing", s1_on_entry, s1_on_exit, s1_on_event)
- FSM_STATE_ENTRY(s2, "Idle", s2_on_entry, s2_on_exit, s2_on_event)
- FSM_STATE_ENTRY(s3, "Accepting", s3_on_entry, s3_on_exit, s3_on_event)
- FSM_STATE_ENTRY(s4, "Hold", s4_on_entry, s4_on_exit, s4_on_event)
- FSM_STATE_ENTRY(s5, "Reading", s5_on_entry, s5_on_exit, s5_on_event)
- FSM_STATE_ENTRY(s6, "Ejecting", s6_on_entry, s6_on_exit, s6_on_event)
- FSM_STATE_ENTRY(s7, "WaitFetching", s7_on_entry, s7_on_exit, s7_on_event)
- FSM_STATE_ENTRY(s8, "Capturing", s8_on_entry, s8_on_exit, s8_on_event)
- FSM_STATE_ENTRY(s9, "Failed", s9_on_entry, s9_on_exit, s9_on_event)
- FSM_STATE_ENTRY(s10, "ReadJs", s10_on_entry, s10_on_exit, s10_on_event)
- FSM_STATE_ENTRY(s11, "EjectJs", s11_on_entry, s11_on_exit, s11_on_event)
- END_FSM_STATE()
- BEGIN_FSM_RULE(CContactlessCardFSM,s0)
- FSM_RULE_ENTRY(s0,s1,USER_EVT_INIT,0)
- FSM_RULE_ENTRY(s0, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
- FSM_RULE_ENTRY(s1,s2,USER_EVT_INITFINISHED,0)
- FSM_RULE_ENTRY(s1,s9,USER_EVT_INITFINISHED,1)
- FSM_RULE_ENTRY(s1, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
- FSM_RULE_ENTRY(s2,s3,USER_EVT_ACCEPT,0)
- FSM_RULE_ENTRY(s2, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
- FSM_RULE_ENTRY(s2, s6, USER_EVT_EJECT, 0)
- FSM_RULE_ENTRY(s2, s10, USER_EVT_JS_READ, 0)//JS ¶Á¿¨
- FSM_RULE_ENTRY(s2, s10, USER_EVT_JS_POSTONLINE, 0)//JS Áª»úºó
- FSM_RULE_ENTRY(s2, s11, USER_EVT_JS_EJECT, 0)//JS Í¿¨
-
- FSM_RULE_ENTRY(s3,s4,USER_EVT_ACCEPTFINISHED,0)
- FSM_RULE_ENTRY(s3,s9,USER_EVT_ACCEPTFINISHED,1)
- FSM_RULE_ENTRY(s3,s2,USER_EVT_ACCEPTFINISHED,2)
- FSM_RULE_ENTRY(s3,s2,USER_EVT_ACCEPTFINISHED,3)
- FSM_RULE_ENTRY(s3,s7,USER_EVT_ACCEPTFINISHED,4)
- FSM_RULE_ENTRY(s3, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
- FSM_RULE_ENTRY(s4,s6,USER_EVT_EJECT,0)
- FSM_RULE_ENTRY(s4,s6,USER_EVT_EXIT,0)
- FSM_RULE_ENTRY(s4,s2,USER_EVT_QUERY_CARD_INFO_FINISHED,0)
- FSM_RULE_ENTRY(s4, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
- FSM_RULE_ENTRY(s5,s4,USER_EVT_READ_FINISHED,0)
- FSM_RULE_ENTRY(s5,s9,USER_EVT_READ_FINISHED,1)
- FSM_RULE_ENTRY(s5,s2,USER_EVT_READ_FINISHED,2)
- FSM_RULE_ENTRY(s5, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
- FSM_RULE_ENTRY(s5, s6, USER_EVT_EXIT, 0)
- FSM_RULE_ENTRY(s6,s7,USER_EVT_EJECTFINISHED,1)
- FSM_RULE_ENTRY(s6,s7,USER_EVT_EJECTFINISHED,0)
- FSM_RULE_ENTRY(s6,s7,USER_EVT_EJECTFINISHED,2)
- FSM_RULE_ENTRY(s6,s2,USER_EVT_EXIT,0)
- FSM_RULE_ENTRY(s6, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
- FSM_RULE_ENTRY(s7,s2,USER_EVT_WAITFINISHED,0)
- FSM_RULE_ENTRY(s7,s2,USER_EVT_WAITFINISHED,2)
- FSM_RULE_ENTRY(s7, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
- FSM_RULE_ENTRY(s8, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
- FSM_RULE_ENTRY(s9, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
- FSM_RULE_ENTRY(s9, s2, USER_EVT_RESETFINISHED, 0)
- FSM_RULE_ENTRY(s9, s2, USER_EVT_RESETFINISHED, 1)
- FSM_RULE_ENTRY(s10, s2, USER_EVT_JS_READ_FINISHED, 0)
- FSM_RULE_ENTRY(s10, s2, USER_EVT_JS_POSTONLINEFINISHED, 0)
- FSM_RULE_ENTRY(s11, s2, USER_EVT_JS_EJECTFINISHED, 0)
- FSM_RULE_ENTRY(s11, s2, USER_EVT_JS_EJECTFINISHED, 1)
- FSM_RULE_ENTRY(s11, s2, USER_EVT_JS_EJECTFINISHED, 2)
- END_FSM_RULE()
- CContactlessCardFSM() : m_bCancelAccept(false), m_bWaitingAccept(false),
- m_bWaitAccepteMore(false), m_bExit(false), m_resetTimes(0), m_testResult(Error_Succeed)
- , m_bCDA(false), m_pDataToARQC(NULL), m_repeatErrTimes(0),
- m_bCancelRead(false),m_bPageExit(false), m_bNeedReset(true)
- {
- HARDWARE_ENTITY_RESET_ENTITYID(m_entCode, 0x213);
- cmdDecodeMag2 = NULL;
- cmdDecodeEx = NULL;
- m_aidList.Init(3);
- m_aidList[0] = "A000000333";
- m_aidList[1] = "A0000000108888";
- m_aidList[2] = "A000000790";
- }
- ~CContactlessCardFSM(){}
- virtual ErrorCodeEnum OnInit();
- virtual ErrorCodeEnum OnExit();
- void s0_on_entry();
- void s0_on_exit();
- unsigned int s0_on_event(FSMEvent* event);
- void s1_on_entry();
- void s1_on_exit();
- unsigned int s1_on_event(FSMEvent* event);
- void s2_on_entry();
- void s2_on_exit();
- unsigned int s2_on_event(FSMEvent* event);
- void s3_on_entry();
- void s3_on_exit();
- unsigned int s3_on_event(FSMEvent* event);
- void s4_on_entry();
- void s4_on_exit();
- unsigned int s4_on_event(FSMEvent* event);
- void s5_on_entry();
- void s5_on_exit();
- unsigned int s5_on_event(FSMEvent* event);
- void s6_on_entry();
- void s6_on_exit();
- unsigned int s6_on_event(FSMEvent* event);
- void s7_on_entry();
- void s7_on_exit();
- unsigned int s7_on_event(FSMEvent* event);
- void s8_on_entry();
- void s8_on_exit();
- unsigned int s8_on_event(FSMEvent* event);
- void s9_on_entry();
- void s9_on_exit();
- unsigned int s9_on_event(FSMEvent* event);
- void s10_on_entry();
- void s10_on_exit();
- unsigned int s10_on_event(FSMEvent* event);
- void s11_on_entry();
- void s11_on_exit();
- unsigned int s11_on_event(FSMEvent* event);
- int Initial();
- ErrorCodeEnum Load();
- bool GetDevStatus(bool bPrint=true);
- int InternalAcceptCard();
- int AcceptCard(SpReqAnsContext<ContactlessCardService_Insert_Req, ContactlessCardService_Insert_Ans>::Pointer ctx);
- //int ReadCard(SpReqAnsContext<ContactlessCardService_Read_Req,ContactlessCardService_Read_Ans>::Pointer ctx);
- int PreOnline(SpReqAnsContext<ContactlessCardService_PreOnline_Req,ContactlessCardService_PreOnline_Ans>::Pointer ctx);
- int PostOnline(SpReqAnsContext<ContactlessCardService_PostOnline_Req,ContactlessCardService_PostOnline_Ans>::Pointer ctx);
- int EjectCard(SpReqAnsContext<ContactlessCardService_Eject_Req,ContactlessCardService_Eject_Ans>::Pointer ctx);
- int Reset();
- int WaitFetchingCard();
- int QueryCardInfo(SpReqAnsContext<ContactlessCardService_QueryCardInfo_Req, ContactlessCardService_QueryCardInfo_Ans>::Pointer ctx);
- bool GetWaitFlag(){return m_bWaitingAccept;}
- void SetWaitMore(){m_bWaitAccepteMore = true;}
- void SetExitFlag(bool bFlag=true){m_bExit = bFlag;}
- bool LoadCMBPrint(CSimpleStringA csBinPath);
-
- void SelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionContext> pTransactionContext)
- {
- pTransactionContext->SendAnswer(m_testResult);
- }
- //new interface
- int GetFSMState()
- {
- //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_currentFSMState:%d", m_currentFSMState);
- return m_currentFSMState;
- }
- DWORD GetFsmStateErrCode();
- void QueryHasCardJS(SpReqAnsContext<ContactlessCardService_QueryHasCardJS_Req, ContactlessCardService_QueryHasCardJS_Ans>::Pointer ctx);
- int EjectJS(SpReqAnsContext<ContactlessCardService_EjectJS_Req, ContactlessCardService_EjectJS_Ans>::Pointer ctx);
- int ReadJS(SpReqAnsContext<ContactlessCardService_ReadJS_Req, ContactlessCardService_ReadJS_Ans>::Pointer ctx);
- int PostOnlineJS(SpReqAnsContext<ContactlessCardService_PostOnlineJS_Req, ContactlessCardService_PostOnlineJS_Ans>::Pointer ctx);
- int InternalAcceptCardJS();
- int PreOnlineJS(SpReqAnsContext<ContactlessCardService_ReadJS_Req, ContactlessCardService_ReadJS_Ans>::Pointer ctx);
- CSimpleStringA getRTACode(DWORD dwUserCode) {
- CSimpleStringA rtaMsg = this->GetEntityBase()->GetFunction()->UserCodeToRTACode(dwUserCode);
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("rtaMsg=%s",rtaMsg.GetData());
- return rtaMsg;
- }
- void GetDevApiCodeAndName(int retValue, DWORD& dwDevApiCode, CSimpleStringA& csDevApiName);
- protected:
- int m_iInsertTries;
- int m_resetTries;
- int m_ejectTries;
- private:
- virtual void OnStateTrans(int iSrcState, int iDstState);
- ///
- int m_resetTimes;
- lpCMBdecodeMag2 cmdDecodeMag2;
- lpCMBdecodeEx cmdDecodeEx;
- bool m_bCancelAccept, m_bWaitingAccept, m_bWaitAccepteMore, m_bExit;
- ErrorCodeEnum m_testResult;
- DevCategoryInfo m_devCatInfo;
-
- RFICReaderStatus devStatus;
- CCardProcess *m_pCardProcess;
- char *m_pDataToARQC;
- long xxTest;
- CAutoArray<CSimpleStringA> m_aidList;
- char m_AuthCode[2];
- bool m_bCDA;
- int SplitTrack2(CSimpleStringA pTrack2,Track2Data &decodeData);
- int m_repeatErrTimes;
- int m_currentFSMState;
- //new
- bool m_bCancelRead;
- bool m_bPageExit;
- bool m_bNeedReset;
- };
- struct InitTask : public ITaskSp
- {
- CContactlessCardFSM* fsm;
- InitTask(CContactlessCardFSM* f) : fsm(f) {}
- void Process()
- {
- FSMEvent *e = new FSMEvent(USER_EVT_INITFINISHED);
- e->param1 = fsm->Initial();
- fsm->PostEventFIFO(e);
- }
- };
- struct AcceptTask : public ITaskSp
- {
- CContactlessCardFSM* fsm;
- SpReqAnsContext<ContactlessCardService_Insert_Req, ContactlessCardService_Insert_Ans>::Pointer ctx;
- AcceptTask(CContactlessCardFSM* f) : fsm(f) {}
- void Process()
- {
- LOG_FUNCTION();
- FSMEvent *e = new FSMEvent(USER_EVT_ACCEPTFINISHED);
- e->param1 = fsm->AcceptCard(ctx);
- fsm->PostEventFIFO(e);
- }
- };
- struct PreOnlineTask : public ITaskSp
- {
- SpReqAnsContext<ContactlessCardService_PreOnline_Req,ContactlessCardService_PreOnline_Ans>::Pointer ctx;
- CContactlessCardFSM* fsm;
- PreOnlineTask(CContactlessCardFSM* f) : fsm(f) {}
- void Process()
- {
- FSMEvent *e = new FSMEvent(USER_EVT_PREONLINEFINISHED);
- e->param1 = fsm->PreOnline(ctx);
- fsm->PostEventFIFO(e);
- }
- };
- struct PostOnlineTask : public ITaskSp
- {
- SpReqAnsContext<ContactlessCardService_PostOnline_Req,ContactlessCardService_PostOnline_Ans>::Pointer ctx;
- CContactlessCardFSM* fsm;
- PostOnlineTask(CContactlessCardFSM* f) : fsm(f) {}
- void Process()
- {
- FSMEvent *e = new FSMEvent(USER_EVT_POSTONLINEFINISHED);
- e->param1 = fsm->PostOnline(ctx);
- fsm->PostEventFIFO(e);
- }
- };
- struct EjectTask : public ITaskSp
- {
- SpReqAnsContext<ContactlessCardService_Eject_Req,ContactlessCardService_Eject_Ans>::Pointer ctx;
- CContactlessCardFSM* fsm;
- EjectTask(CContactlessCardFSM* f) : fsm(f) {}
- void Process()
- {
- FSMEvent *e = new FSMEvent(USER_EVT_EJECTFINISHED);
- e->param1 = fsm->EjectCard(ctx);
- fsm->PostEventFIFO(e);
- }
- };
- struct WaitFetchingTask : public ITaskSp
- {
- CContactlessCardFSM* fsm;
- WaitFetchingTask(CContactlessCardFSM* f) : fsm(f) {}
- void Process()
- {
- FSMEvent *e = new FSMEvent(USER_EVT_WAITFINISHED);
- e->param1 = fsm->WaitFetchingCard();
- fsm->PostEventFIFO(e);
- }
- };
- struct ResetTask : public ITaskSp
- {
- CContactlessCardFSM* fsm;
- ResetTask(CContactlessCardFSM* f) : fsm(f) {}
- void Process()
- {
- ResetFinishedEvent *e = new ResetFinishedEvent();
- e->param1 = fsm->Reset();
- fsm->PostEventFIFO(e);
- }
- };
- struct QueryCardInfoTask : public ITaskSp
- {
- SpReqAnsContext<ContactlessCardService_QueryCardInfo_Req,ContactlessCardService_QueryCardInfo_Ans>::Pointer ctx;
- CContactlessCardFSM* fsm;
- QueryCardInfoTask(CContactlessCardFSM* f) : fsm(f) {}
- void Process()
- {
- FSMEvent *e = new FSMEvent(USER_EVT_QUERY_CARD_INFO_FINISHED);
- e->param1 = fsm->QueryCardInfo(ctx);
- fsm->PostEventFIFO(e);
- }
- };
- struct EjectJSTask : public ITaskSp
- {
- SpReqAnsContext<ContactlessCardService_EjectJS_Req, ContactlessCardService_EjectJS_Ans>::Pointer ctx;
- CContactlessCardFSM* fsm;
- EjectJSTask(CContactlessCardFSM* f) : fsm(f) {}
- void Process()
- {
- FSMEvent* e = new FSMEvent(USER_EVT_JS_EJECTFINISHED);
- e->param1 = fsm->EjectJS(ctx);
- fsm->PostEventFIFO(e);
- }
- };
- struct ReadJSTask : public ITaskSp
- {
- SpReqAnsContext<ContactlessCardService_ReadJS_Req, ContactlessCardService_ReadJS_Ans>::Pointer ctx;
- CContactlessCardFSM* fsm;
- ReadJSTask(CContactlessCardFSM* f) : fsm(f) {}
- void Process()
- {
- FSMEvent* e = new FSMEvent(USER_EVT_JS_READ_FINISHED);
- e->param1 = fsm->ReadJS(ctx);
- fsm->PostEventFIFO(e);
- }
- };
- struct PostOnlineJSTask : public ITaskSp
- {
- SpReqAnsContext<ContactlessCardService_PostOnlineJS_Req, ContactlessCardService_PostOnlineJS_Ans>::Pointer ctx;
- CContactlessCardFSM* fsm;
- PostOnlineJSTask(CContactlessCardFSM* f) : fsm(f) {}
- void Process()
- {
- FSMEvent* e = new FSMEvent(USER_EVT_JS_POSTONLINEFINISHED);
- e->param1 = fsm->PostOnlineJS(ctx);
- fsm->PostEventFIFO(e);
- }
- };
- #endif //_CONTACTLESS_FSM_H
|