CardIssuerFSM.h 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422
  1. #ifndef __CARD_ISSUER_FSM_H
  2. #define __CARD_ISSUER_FSM_H
  3. #pragma once
  4. #include "SpFSM.h"
  5. #include "DevErrorCode.h"
  6. #include "DevEntityCommBase.hpp"
  7. #include "DevFSMCommBase.hpp"
  8. #include "DeviceBaseHelper.h"
  9. enum EvtType
  10. {
  11. USER_EVT_TEST = EVT_USER+1,
  12. USER_EVT_QUIT,
  13. USER_EVT_INIT,
  14. USER_EVT_INITFINISHED,
  15. USER_EVT_ACCEPT,
  16. USER_EVT_ACCEPT_CANCEL,
  17. USER_EVT_ACCEPTFINISHED,
  18. USER_EVT_ISSUE,
  19. USER_EVT_ISSUE_FINISHED,
  20. //USER_EVT_READ,
  21. USER_EVT_EJECT,
  22. USER_EVT_CAPTURE,
  23. //USER_EVT_READFINISHED,
  24. USER_EVT_EJECTFINISHED,
  25. USER_EVT_WAITFINISHED,
  26. USER_EVT_CAPTUREFINISHED,
  27. USER_EVT_WAITFETCHINGTIMEOUT,
  28. USER_EVT_PREONLINE,
  29. USER_EVT_POSTONLINE,
  30. USER_EVT_PREONLINEFINISHED,
  31. USER_EVT_POSTONLINEFINISHED,
  32. USER_EVT_RESET,
  33. USER_EVT_RESETFINISHED,
  34. USER_EVT_EXIT,
  35. USER_EVT_GET_MATERIAL,
  36. USER_EVT_SET_MATERIAL,
  37. USER_EVT_READEX,
  38. USER_EVT_READEX_FINISHED,
  39. USER_EVT_READ_NEW,
  40. USER_EVT_READ_NEW_FINISHED,
  41. USER_EVT_WRITE,
  42. USER_EVT_WRITE_FINISHED,
  43. USER_EVT_CONNECT,
  44. USER_EVT_CONNECT_FINISHED,
  45. USER_EVT_TRANSFER_TO_NOCFGDEV,
  46. USER_EVT_GET_MATERIAL_EX,
  47. USER_EVT_SET_MATERIAL_EX,
  48. USER_EVT_ISSUE_EX,
  49. USER_EVT_ISSUE_EX_FINISHED,
  50. USER_EVT_OPEN_SAFELOCK,
  51. USER_EVT_OPEN_SAFELOCK_FINISHED,
  52. USER_EVT_BLUETOOTH_CHECK_FINISHED,
  53. USER_EVT_BLUETOOTH_DISCONNECT,
  54. USER_EVT_SAM_IC,
  55. USER_EVT_SAM_IC_FINISHED,
  56. USER_EVT_QUERY_PRINT_STATUS,
  57. USER_EVT_QUERY_PRINT_STATUS_FINISHED,
  58. USER_EVT_PRINT,
  59. USER_EVT_PRINT_FINISHED,
  60. USER_EVT_QUERY_SCI_LIST,
  61. USER_EVT_QUERY_SCI_LIST_FINISHED,
  62. USER_EVT_BIND_SCI,
  63. USER_EVT_BIND_SCI_FINISHED,
  64. USER_EVT_BACK_TO_INIT,
  65. USER_EVT_PREONLINE_ON_STORE,
  66. USER_EVT_PREONLINE_ON_STORE_FINISHED,
  67. USER_EVT_QUERYCARDINFO_ON_STORE,
  68. USER_EVT_QUERYCARDINFO_ON_STORE_FINISHED,
  69. USER_EVT_PRINT_CARD_IM,
  70. USER_EVT_PRINT_CARD_IM_FINISHED,
  71. };
  72. enum SAMICCommandType
  73. {
  74. //SAM
  75. SAMICCommand_SAM_Select = 0,
  76. SAMICCommand_SAM_Active,
  77. SAMICCommand_SAM_Deactivate,
  78. SAMICCommand_SAM_WarmReset,
  79. SAMICCommand_SAM_QueryStatus,
  80. SAMICCommand_SAM_Command,
  81. //IC
  82. SAMICCommand_IC_Active = 100,
  83. SAMICCommand_IC_Deactivate,
  84. SAMICCommand_IC_WarmReset,
  85. SAMICCommand_IC_Command,
  86. SAMICCommand_RFIC_Active,
  87. SAMICCommand_RFIC_Deactivate,
  88. SAMICCommand_RFIC_Command,
  89. };
  90. #include "CardIssuer_server_g.h"
  91. #include "CardIssuerClass.h"
  92. #include "CardAssist.h"
  93. #include "ICDataElement.h"
  94. using namespace CardIssuer;
  95. #include "GUIConsole_client_g.h"
  96. using namespace GUIConsole;
  97. #include "HeartBeat_client_g.h"
  98. using namespace HeartBeat;
  99. #include "AccessAuthorization_client_g.h"
  100. using namespace AccessAuthorization;
  101. typedef int(*lpCMBdecodeMag2)(char* Mag2Data, char * data);
  102. typedef int(*lpCMBdecodeEx)( char* MagData, char * type, char * data);
  103. typedef ErrorCodeEnum (*lpCreateDevCom)(DeviceBaseClass *&baseObj);
  104. typedef ErrorCodeEnum (*lpReleaseDevCom)(DeviceBaseClass *&pBaseObj);
  105. typedef int(__stdcall *pfEncryptDukptHSM)(unsigned char* EncryptedData, unsigned char* bdk, unsigned char* curksn, unsigned char* DecryptedData);
  106. typedef int(__stdcall *pfGetEncrypedData)(unsigned char* BDK, unsigned char* KSN, unsigned char*random, unsigned char* result);
  107. class CCardIssuerEntity;
  108. class CCardIssuerFSM;
  109. const int ONE_K = 1024;
  110. const int HOPPER_NUM = 12;
  111. struct Track2Data
  112. {
  113. int status;
  114. CSimpleStringA t2Account;
  115. CSimpleStringA t2Region;
  116. CSimpleStringA t2CardSerial;
  117. CSimpleStringA t2CVC;
  118. CSimpleStringA t2ExpireDate;
  119. };
  120. struct CMBBin
  121. {
  122. CSimpleStringA bin;//6 byte long
  123. bool bIC;//IC:true or mag:false
  124. bool bDC;//debit:true,credit:false
  125. };
  126. struct SCIRecord
  127. {
  128. CSimpleStringA name;
  129. CSimpleStringA remoteMac;
  130. };
  131. class CardInitFinishedEvent : public FSMEvent
  132. {
  133. public:
  134. CardInitFinishedEvent() : FSMEvent(USER_EVT_INITFINISHED){}
  135. ~CardInitFinishedEvent(){}
  136. SpReqAnsContext<CardIssuerService_Insert_Req,CardIssuerService_Insert_Ans>::Pointer ctx;
  137. protected:
  138. private:
  139. };
  140. class CardAcceptEvent : public FSMEvent
  141. {
  142. public:
  143. CardAcceptEvent() : FSMEvent(USER_EVT_ACCEPT){}
  144. ~CardAcceptEvent(){}
  145. SpReqAnsContext<CardIssuerService_Insert_Req, CardIssuerService_Insert_Ans>::Pointer ctx;
  146. virtual void OnUnhandled()
  147. {
  148. if (ctx != NULL)
  149. {
  150. Dbg("card accept unhandled");
  151. ctx->Answer(Error_InvalidState);
  152. }
  153. }
  154. };
  155. class CardIssueEvent : public FSMEvent
  156. {
  157. public:
  158. CardIssueEvent() : FSMEvent(USER_EVT_ISSUE){}
  159. ~CardIssueEvent(){}
  160. SpReqAnsContext<CardIssuerService_Issue_Req, CardIssuerService_Issue_Ans>::Pointer ctx;
  161. virtual void OnUnhandled()
  162. {
  163. if (ctx != NULL)
  164. {
  165. Dbg("card issue unhandled");
  166. ctx->Answer(Error_InvalidState);
  167. }
  168. }
  169. };
  170. class QueryCardInfoOnStoreEvent : public FSMEvent
  171. {
  172. public:
  173. QueryCardInfoOnStoreEvent() : FSMEvent(USER_EVT_QUERYCARDINFO_ON_STORE){}
  174. ~QueryCardInfoOnStoreEvent(){}
  175. SpReqAnsContext<CardIssuerService_QueryCardInfoOnStore_Req, CardIssuerService_QueryCardInfoOnStore_Ans>::Pointer ctx;
  176. virtual void OnUnhandled()
  177. {
  178. if(ctx != NULL)
  179. {
  180. Dbg("Operate CardStore unhandled");
  181. ctx->Answer(Error_InvalidState);
  182. }
  183. }
  184. };
  185. class CancelAcceptEvent : public FSMEvent
  186. {
  187. public:
  188. CancelAcceptEvent() : FSMEvent(USER_EVT_ACCEPT_CANCEL){}
  189. ~CancelAcceptEvent(){}
  190. //SpReqAnsContext<CardReaderService_CancelInsert_Req, CardReaderService_CancelInsert_Ans>::Pointer ctx;
  191. virtual void OnUnhandled()
  192. {
  193. Dbg("card cancel accept unhandled");
  194. //if (ctx)
  195. //{
  196. //
  197. // ctx->Answer(Error_InvalidState);
  198. //}
  199. }
  200. };
  201. //class CardReadEvent : public FSMEvent
  202. //{
  203. //public:
  204. // CardReadEvent() : FSMEvent(USER_EVT_READ){}
  205. // ~CardReadEvent(){}
  206. // SpReqAnsContext<CardIssuerService_Read_Req,CardIssuerService_Read_Ans>::Pointer ctx;
  207. // virtual void OnUnhandled()
  208. // {
  209. // if (ctx != NULL)
  210. // {
  211. // Dbg("card read unhandled");
  212. // ctx->Answer(Error_InvalidState);
  213. // }
  214. // }
  215. //protected:
  216. //private:
  217. //};
  218. //class CardReadFinishedEvent : public FSMEvent
  219. //{
  220. //public:
  221. // CardReadFinishedEvent() : FSMEvent(USER_EVT_READFINISHED){}
  222. // ~CardReadFinishedEvent(){}
  223. // SpReqAnsContext<CardIssuerService_Read_Req,CardIssuerService_Read_Ans>::Pointer ctx;
  224. // virtual void OnUnhandled()
  225. // {
  226. // if (ctx != NULL)
  227. // {
  228. // Dbg("card read unhandled");
  229. // ctx->Answer(Error_InvalidState);
  230. // }
  231. // }
  232. //protected:
  233. //private:
  234. //};
  235. class CardReadExEvent : public FSMEvent
  236. {
  237. public:
  238. CardReadExEvent() : FSMEvent(USER_EVT_READEX){}
  239. ~CardReadExEvent(){}
  240. SpReqAnsContext<CardIssuerService_ReadEx_Req,CardIssuerService_ReadEx_Ans>::Pointer ctx;
  241. virtual void OnUnhandled()
  242. {
  243. if (ctx != NULL)
  244. {
  245. Dbg("card read unhandled");
  246. ctx->Answer(Error_InvalidState);
  247. }
  248. }
  249. protected:
  250. private:
  251. };
  252. class CardReadExFinishedEvent : public FSMEvent
  253. {
  254. public:
  255. CardReadExFinishedEvent() : FSMEvent(USER_EVT_READEX_FINISHED){}
  256. ~CardReadExFinishedEvent(){}
  257. SpReqAnsContext<CardIssuerService_ReadEx_Req,CardIssuerService_ReadEx_Ans>::Pointer ctx;
  258. virtual void OnUnhandled()
  259. {
  260. if (ctx != NULL)
  261. {
  262. Dbg("card read unhandled");
  263. ctx->Answer(Error_InvalidState);
  264. }
  265. }
  266. protected:
  267. private:
  268. };
  269. class CardReadEvent : public FSMEvent
  270. {
  271. public:
  272. CardReadEvent() : FSMEvent(USER_EVT_READ_NEW){}
  273. ~CardReadEvent(){}
  274. SpReqAnsContext<CardIssuerService_Read_Req,CardIssuerService_Read_Ans>::Pointer ctx;
  275. virtual void OnUnhandled()
  276. {
  277. if (ctx != NULL)
  278. {
  279. Dbg("card read unhandled");
  280. ctx->Answer(Error_InvalidState);
  281. }
  282. }
  283. protected:
  284. private:
  285. };
  286. class CardReadFinishedEvent : public FSMEvent
  287. {
  288. public:
  289. CardReadFinishedEvent() : FSMEvent(USER_EVT_READ_NEW_FINISHED){}
  290. ~CardReadFinishedEvent(){}
  291. SpReqAnsContext<CardIssuerService_Read_Req,CardIssuerService_Read_Ans>::Pointer ctx;
  292. virtual void OnUnhandled()
  293. {
  294. if (ctx != NULL)
  295. {
  296. Dbg("card read unhandled(new)");
  297. //ctx->Answer(Error_InvalidState);
  298. }
  299. }
  300. protected:
  301. private:
  302. };
  303. class ResetDeviceEvent : public FSMEvent
  304. {
  305. public:
  306. ResetDeviceEvent() : FSMEvent(USER_EVT_RESET){}
  307. ~ResetDeviceEvent(){}
  308. protected:
  309. private:
  310. };
  311. class ResetFinishedEvent : public FSMEvent
  312. {
  313. public:
  314. ResetFinishedEvent() : FSMEvent(USER_EVT_RESETFINISHED){}
  315. ~ResetFinishedEvent(){}
  316. protected:
  317. private:
  318. };
  319. class PreOnlineEvent : public FSMEvent
  320. {
  321. public:
  322. PreOnlineEvent() : FSMEvent(USER_EVT_PREONLINE){}
  323. ~PreOnlineEvent(){}
  324. SpReqAnsContext<CardIssuerService_PreOnline_Req,CardIssuerService_PreOnline_Ans>::Pointer ctx;
  325. virtual void OnUnhandled()
  326. {
  327. if (ctx != NULL)
  328. ctx->Answer(Error_InvalidState);
  329. }
  330. protected:
  331. private:
  332. };
  333. class PostOnlineEvent : public FSMEvent
  334. {
  335. public:
  336. PostOnlineEvent() : FSMEvent(USER_EVT_POSTONLINE){}
  337. ~PostOnlineEvent(){}
  338. SpReqAnsContext<CardIssuerService_PostOnline_Req,CardIssuerService_PostOnline_Ans>::Pointer ctx;
  339. virtual void OnUnhandled()
  340. {
  341. if (ctx != NULL)
  342. ctx->Answer(Error_InvalidState);
  343. }
  344. protected:
  345. private:
  346. };
  347. class CardCaptureEvent : public FSMEvent
  348. {
  349. public:
  350. CardCaptureEvent() : FSMEvent(USER_EVT_CAPTURE){}
  351. ~CardCaptureEvent(){}
  352. SpReqAnsContext<CardIssuerService_Capture_Req,CardIssuerService_Capture_Ans>::Pointer ctx;
  353. virtual void OnUnhandled()
  354. {
  355. if (ctx != NULL)
  356. ctx->Answer(Error_InvalidState);
  357. }
  358. protected:
  359. private:
  360. };
  361. class CardEjectEvent : public FSMEvent
  362. {
  363. public:
  364. CardEjectEvent() : FSMEvent(USER_EVT_EJECT){}
  365. ~CardEjectEvent(){}
  366. SpReqAnsContext<CardIssuerService_Eject_Req,CardIssuerService_Eject_Ans>::Pointer ctx;
  367. virtual void OnUnhandled()
  368. {
  369. if (ctx != NULL)
  370. ctx->Answer(Error_InvalidState);
  371. }
  372. protected:
  373. private:
  374. };
  375. class GetMaterialEvent : public FSMEvent
  376. {
  377. public:
  378. GetMaterialEvent() : FSMEvent(USER_EVT_GET_MATERIAL){}
  379. ~GetMaterialEvent(){}
  380. SpReqAnsContext<CardIssuerService_GetMaterialCount_Req,CardIssuerService_GetMaterialCount_Ans>::Pointer ctx;
  381. virtual void OnUnhandled()
  382. {
  383. if (ctx != NULL)
  384. ctx->Answer(Error_InvalidState);
  385. }
  386. protected:
  387. private:
  388. };
  389. class SetMaterialEvent : public FSMEvent
  390. {
  391. public:
  392. SetMaterialEvent() : FSMEvent(USER_EVT_SET_MATERIAL){}
  393. ~SetMaterialEvent(){}
  394. SpReqAnsContext<CardIssuerService_SetMaterialCount_Req,CardIssuerService_SetMaterialCount_Ans>::Pointer ctx;
  395. virtual void OnUnhandled()
  396. {
  397. if (ctx != NULL)
  398. ctx->Answer(Error_InvalidState);
  399. }
  400. protected:
  401. private:
  402. };
  403. class CardWriteEvent : public FSMEvent
  404. {
  405. public:
  406. CardWriteEvent() : FSMEvent(USER_EVT_WRITE){}
  407. ~CardWriteEvent(){}
  408. SpReqAnsContext<CardIssuerService_WriteTrack_Req,CardIssuerService_WriteTrack_Ans>::Pointer ctx;
  409. virtual void OnUnhandled()
  410. {
  411. if (ctx != NULL)
  412. {
  413. Dbg("card read unhandled");
  414. ctx->Answer(Error_InvalidState);
  415. }
  416. }
  417. protected:
  418. private:
  419. };
  420. class CardWriteFinishedEvent : public FSMEvent
  421. {
  422. public:
  423. CardWriteFinishedEvent() : FSMEvent(USER_EVT_WRITE_FINISHED){}
  424. ~CardWriteFinishedEvent(){}
  425. SpReqAnsContext<CardIssuerService_WriteTrack_Req,CardIssuerService_WriteTrack_Ans>::Pointer ctx;
  426. virtual void OnUnhandled()
  427. {
  428. if (ctx != NULL)
  429. {
  430. Dbg("card read unhandled(new)");
  431. //ctx->Answer(Error_InvalidState);
  432. }
  433. }
  434. protected:
  435. private:
  436. };
  437. class GetMaterialExEvent : public FSMEvent
  438. {
  439. public:
  440. GetMaterialExEvent() : FSMEvent(USER_EVT_GET_MATERIAL_EX){}
  441. ~GetMaterialExEvent(){}
  442. SpReqAnsContext<CardIssuerService_GetMaterialCountEx_Req, CardIssuerService_GetMaterialCountEx_Ans>::Pointer ctx;
  443. virtual void OnUnhandled()
  444. {
  445. if (ctx != NULL)
  446. ctx->Answer(Error_InvalidState);
  447. }
  448. protected:
  449. private:
  450. };
  451. class SetMaterialExEvent : public FSMEvent
  452. {
  453. public:
  454. SetMaterialExEvent() : FSMEvent(USER_EVT_SET_MATERIAL_EX){}
  455. ~SetMaterialExEvent(){}
  456. SpReqAnsContext<CardIssuerService_SetMaterialCountEx_Req, CardIssuerService_SetMaterialCountEx_Ans>::Pointer ctx;
  457. virtual void OnUnhandled()
  458. {
  459. if (ctx != NULL)
  460. ctx->Answer(Error_InvalidState);
  461. }
  462. protected:
  463. private:
  464. };
  465. class CardIssueExEvent : public FSMEvent
  466. {
  467. public:
  468. CardIssueExEvent() : FSMEvent(USER_EVT_ISSUE_EX){}
  469. ~CardIssueExEvent(){}
  470. SpReqAnsContext<CardIssuerService_IssueEx_Req, CardIssuerService_IssueEx_Ans>::Pointer ctx;
  471. virtual void OnUnhandled()
  472. {
  473. if (ctx != NULL)
  474. {
  475. Dbg("card issue ex unhandled");
  476. ctx->Answer(Error_InvalidState);
  477. }
  478. }
  479. };
  480. class OpenSafeLockEvent : public FSMEvent
  481. {
  482. public:
  483. OpenSafeLockEvent() : FSMEvent(USER_EVT_OPEN_SAFELOCK){}
  484. ~OpenSafeLockEvent(){}
  485. SpReqAnsContext<CardIssuerService_OpenSafeLock_Req, CardIssuerService_OpenSafeLock_Ans>::Pointer ctx;
  486. virtual void OnUnhandled()
  487. {
  488. if (ctx != NULL)
  489. {
  490. Dbg("open safelock unhandled");
  491. ctx->Answer(Error_InvalidState);
  492. }
  493. }
  494. };
  495. class SAMICCommandEvent : public FSMEvent
  496. {
  497. public:
  498. SAMICCommandEvent() : FSMEvent(USER_EVT_SAM_IC){}
  499. ~SAMICCommandEvent(){}
  500. SpReqAnsContext<CardIssuerService_SAMICCommand_Req, CardIssuerService_SAMICCommand_Ans>::Pointer ctx;
  501. virtual void OnUnhandled()
  502. {
  503. if (ctx != NULL)
  504. {
  505. Dbg("sam/ic unhandled");
  506. ctx->Answer(Error_InvalidState);
  507. }
  508. }
  509. };
  510. class QueryPrinterStatusEvent : public FSMEvent
  511. {
  512. public:
  513. QueryPrinterStatusEvent() : FSMEvent(USER_EVT_QUERY_PRINT_STATUS){}
  514. ~QueryPrinterStatusEvent(){}
  515. SpReqAnsContext<CardIssuerService_QueryPrinterStatus_Req, CardIssuerService_QueryPrinterStatus_Ans>::Pointer ctx;
  516. virtual void OnUnhandled()
  517. {
  518. if (ctx != NULL)
  519. {
  520. Dbg("query printer status unhandled");
  521. ctx->Answer(Error_InvalidState);
  522. }
  523. }
  524. };
  525. class PrintEvent : public FSMEvent
  526. {
  527. public:
  528. PrintEvent() : FSMEvent(USER_EVT_PRINT){}
  529. ~PrintEvent(){}
  530. SpReqAnsContext<CardIssuerService_Print_Req, CardIssuerService_Print_Ans>::Pointer ctx;
  531. virtual void OnUnhandled()
  532. {
  533. if (ctx != NULL)
  534. {
  535. Dbg("print unhandled");
  536. ctx->Answer(Error_InvalidState);
  537. }
  538. }
  539. };
  540. class QuerySCIListEvent : public FSMEvent
  541. {
  542. public:
  543. QuerySCIListEvent() : FSMEvent(USER_EVT_QUERY_SCI_LIST){}
  544. ~QuerySCIListEvent(){}
  545. SpReqAnsContext<CardIssuerService_QuerySCIList_Req, CardIssuerService_QuerySCIList_Ans>::Pointer ctx;
  546. virtual void OnUnhandled()
  547. {
  548. if (ctx != NULL)
  549. {
  550. Dbg("query sci list unhandled");
  551. ctx->Answer(Error_InvalidState);
  552. }
  553. }
  554. };
  555. class BindSCIEvent : public FSMEvent
  556. {
  557. public:
  558. BindSCIEvent() : FSMEvent(USER_EVT_BIND_SCI){}
  559. ~BindSCIEvent(){}
  560. SpReqAnsContext<CardIssuerService_BindSCI_Req, CardIssuerService_BindSCI_Ans>::Pointer ctx;
  561. virtual void OnUnhandled()
  562. {
  563. if (ctx != NULL)
  564. {
  565. Dbg("bind sci unhandled");
  566. ctx->Answer(Error_InvalidState);
  567. }
  568. }
  569. };
  570. class PreOnlineOnStoreEvent : public FSMEvent
  571. {
  572. public:
  573. PreOnlineOnStoreEvent() : FSMEvent(USER_EVT_PREONLINE_ON_STORE){}
  574. virtual ~PreOnlineOnStoreEvent(){}
  575. SpReqAnsContext<CardIssuerService_PreOnlineOnStore_Req, CardIssuerService_PreOnlineOnStore_Ans>::Pointer ctx;
  576. virtual void OnUnhandled()
  577. {
  578. if (ctx != NULL)
  579. {
  580. Dbg("preonline on store unhandled");
  581. ctx->Answer(Error_InvalidState);
  582. }
  583. }
  584. };
  585. class PrintCardImEvent : public FSMEvent
  586. {
  587. public:
  588. PrintCardImEvent() : FSMEvent(USER_EVT_PRINT_CARD_IM) {}
  589. ~PrintCardImEvent() {}
  590. SpReqAnsContext<CardIssuerService_PrintCardImmediately_Req, CardIssuerService_PrintCardImmediately_Ans>::Pointer ctx;
  591. virtual void OnUnhandled()
  592. {
  593. if (ctx != NULL)
  594. ctx->Answer(Error_InvalidState);
  595. }
  596. };
  597. class PrintCardImFinishedEvent : public FSMEvent
  598. {
  599. public:
  600. PrintCardImFinishedEvent() : FSMEvent(USER_EVT_PRINT_CARD_IM_FINISHED) {}
  601. ~PrintCardImFinishedEvent() {}
  602. SpReqAnsContext<CardIssuerService_PrintCardImmediately_Req, CardIssuerService_PrintCardImmediately_Ans>::Pointer ctx;
  603. virtual void OnUnhandled()
  604. {
  605. if (ctx != NULL)
  606. ctx->Answer(Error_InvalidState);
  607. }
  608. };
  609. class CCardIssuerFSM : public FSMImpl<CCardIssuerFSM>
  610. {
  611. public:
  612. enum {s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16,s17,s18};
  613. BEGIN_FSM_STATE(CCardIssuerFSM)
  614. FSM_STATE_ENTRY(s0,"Init",s0_on_entry,s0_on_exit,s0_on_event)
  615. FSM_STATE_ENTRY(s1,"Initializing",s1_on_entry,s1_on_exit,s1_on_event)
  616. FSM_STATE_ENTRY(s2,"Idle",s2_on_entry,s2_on_exit,s2_on_event)
  617. FSM_STATE_ENTRY(s3,"Accepting",s3_on_entry,s3_on_exit,s3_on_event)
  618. FSM_STATE_ENTRY(s4,"Hold",s4_on_entry,s4_on_exit,s4_on_event)
  619. FSM_STATE_ENTRY(s5,"Reading",s5_on_entry,s5_on_exit,s5_on_event)
  620. FSM_STATE_ENTRY(s6,"Ejecting",s6_on_entry,s6_on_exit,s6_on_event)
  621. FSM_STATE_ENTRY(s7,"WaitFetching",s7_on_entry,s7_on_exit,s7_on_event)
  622. FSM_STATE_ENTRY(s8,"Capturing",s8_on_entry,s8_on_exit,s8_on_event)
  623. FSM_STATE_ENTRY(s9,"Failed",s9_on_entry,s9_on_exit,s9_on_event)
  624. FSM_STATE_ENTRY(s10,"Issuing",s10_on_entry,s10_on_exit,s10_on_event)
  625. FSM_STATE_ENTRY(s11,"Writing",s11_on_entry,s11_on_exit,s11_on_event)
  626. FSM_STATE_ENTRY(s12,"Connecting", s12_on_entry, s12_on_exit, s12_on_event)
  627. FSM_STATE_ENTRY(s13,"NoCfgDev", s13_on_entry, s13_on_exit, s13_on_event)
  628. FSM_STATE_ENTRY(s14, "SAMIC", s14_on_entry, s14_on_exit, s14_on_event)
  629. FSM_STATE_ENTRY(s15, "Other", s15_on_entry, s15_on_exit, s15_on_event)
  630. FSM_STATE_ENTRY(s16, "PreOnlineOnStore", s16_on_entry, s16_on_exit, s16_on_event)
  631. FSM_STATE_ENTRY(s17, "OperateCardStore", s17_on_entry, s17_on_exit, s17_on_event)
  632. FSM_STATE_ENTRY(s18, "PrintCardIm", s18_on_entry, s18_on_exit, s18_on_event)
  633. END_FSM_STATE()
  634. BEGIN_FSM_RULE(CCardIssuerFSM,s0)
  635. FSM_RULE_ENTRY(s0, s2, USER_EVT_TEST, 0)
  636. FSM_RULE_ENTRY(s0,s1,USER_EVT_INIT,0)
  637. FSM_RULE_ENTRY(s0, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
  638. FSM_RULE_ENTRY(s0, s12, USER_EVT_CONNECT, 0)
  639. FSM_RULE_ENTRY(s0, s13, USER_EVT_TRANSFER_TO_NOCFGDEV, 0)
  640. FSM_RULE_ENTRY(s1,s2,USER_EVT_INITFINISHED,0)
  641. FSM_RULE_ENTRY(s1,s9,USER_EVT_INITFINISHED,1)
  642. FSM_RULE_ENTRY(s1, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
  643. FSM_RULE_ENTRY(s2,s3,USER_EVT_ACCEPT,0)
  644. // FSM_RULE_ENTRY(s2,s9,USER_EVT_ACCEPT,1)
  645. FSM_RULE_ENTRY(s2, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
  646. FSM_RULE_ENTRY(s2,s10,USER_EVT_ISSUE,0)
  647. FSM_RULE_ENTRY(s2, s10, USER_EVT_ISSUE_EX, 0)
  648. FSM_RULE_ENTRY(s2, s0, USER_EVT_BLUETOOTH_DISCONNECT, 0)
  649. FSM_RULE_ENTRY(s2, s15, USER_EVT_QUERY_SCI_LIST, 0)
  650. FSM_RULE_ENTRY(s2, s15, USER_EVT_BIND_SCI, 0)
  651. FSM_RULE_ENTRY(s2, s16, USER_EVT_PREONLINE, 16)
  652. FSM_RULE_ENTRY(s2, s17, USER_EVT_QUERYCARDINFO_ON_STORE, 0)
  653. FSM_RULE_ENTRY(s3,s4,USER_EVT_ACCEPTFINISHED,0)
  654. FSM_RULE_ENTRY(s3,s9,USER_EVT_ACCEPTFINISHED,1)
  655. FSM_RULE_ENTRY(s3,s2,USER_EVT_ACCEPTFINISHED,2)
  656. FSM_RULE_ENTRY(s3,s2,USER_EVT_ACCEPTFINISHED,3)
  657. FSM_RULE_ENTRY(s3,s7,USER_EVT_ACCEPTFINISHED,4)
  658. FSM_RULE_ENTRY(s3, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
  659. FSM_RULE_ENTRY(s4, s0, USER_EVT_BLUETOOTH_DISCONNECT, 0)
  660. FSM_RULE_ENTRY(s4,s5,USER_EVT_READEX,0)
  661. FSM_RULE_ENTRY(s4,s5,USER_EVT_READ_NEW,0)
  662. FSM_RULE_ENTRY(s4,s6,USER_EVT_EJECT,0)
  663. FSM_RULE_ENTRY(s4,s6,USER_EVT_EXIT,0)
  664. FSM_RULE_ENTRY(s4,s8,USER_EVT_ACCEPT,0)
  665. FSM_RULE_ENTRY(s4,s8,USER_EVT_EXIT,1)
  666. FSM_RULE_ENTRY(s4,s8,USER_EVT_CAPTURE,0)
  667. FSM_RULE_ENTRY(s4,s11,USER_EVT_WRITE,0)
  668. FSM_RULE_ENTRY(s4, s14, USER_EVT_SAM_IC, 0)
  669. FSM_RULE_ENTRY(s4, s18, USER_EVT_PRINT_CARD_IM, 0)
  670. FSM_RULE_ENTRY(s4, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
  671. FSM_RULE_ENTRY(s4, s2, USER_EVT_ISSUE_EX_FINISHED, 2)
  672. FSM_RULE_ENTRY(s4, s6, USER_EVT_ISSUE_EX_FINISHED, 6)
  673. // FSM_RULE_ENTRY(s5,s4,USER_EVT_READFINISHED,0)
  674. // FSM_RULE_ENTRY(s5,s9,USER_EVT_READFINISHED,1)
  675. // FSM_RULE_ENTRY(s5,s2,USER_EVT_READFINISHED,2)
  676. FSM_RULE_ENTRY(s5,s4,USER_EVT_READEX_FINISHED,0)
  677. FSM_RULE_ENTRY(s5,s9,USER_EVT_READEX_FINISHED,1)
  678. FSM_RULE_ENTRY(s5,s2,USER_EVT_READEX_FINISHED,2)
  679. FSM_RULE_ENTRY(s5,s4,USER_EVT_READ_NEW_FINISHED,0)
  680. FSM_RULE_ENTRY(s5,s9,USER_EVT_READ_NEW_FINISHED,1)
  681. FSM_RULE_ENTRY(s5,s2,USER_EVT_READ_NEW_FINISHED,2)
  682. FSM_RULE_ENTRY(s5, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
  683. FSM_RULE_ENTRY(s5, s4, USER_EVT_EXIT, 0)
  684. FSM_RULE_ENTRY(s6,s7,USER_EVT_EJECTFINISHED,0)
  685. FSM_RULE_ENTRY(s6,s9,USER_EVT_EJECTFINISHED,1)
  686. FSM_RULE_ENTRY(s6, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
  687. FSM_RULE_ENTRY(s7,s2,USER_EVT_WAITFINISHED,0)
  688. FSM_RULE_ENTRY(s7,s9,USER_EVT_WAITFINISHED,1)
  689. FSM_RULE_ENTRY(s7,s8,USER_EVT_WAITFINISHED,2)
  690. FSM_RULE_ENTRY(s7, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
  691. FSM_RULE_ENTRY(s8,s2,USER_EVT_CAPTUREFINISHED,0)
  692. FSM_RULE_ENTRY(s8,s9,USER_EVT_CAPTUREFINISHED,1)
  693. FSM_RULE_ENTRY(s8, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
  694. FSM_RULE_ENTRY(s9, s2, USER_EVT_RESETFINISHED, 0)
  695. FSM_RULE_ENTRY(s9, s0, USER_EVT_RESETFINISHED, 2)
  696. FSM_RULE_ENTRY(s9, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
  697. FSM_RULE_ENTRY(s9, s0, USER_EVT_BLUETOOTH_DISCONNECT, 0)
  698. FSM_RULE_ENTRY(s10,s4,USER_EVT_ISSUE_FINISHED,0)
  699. FSM_RULE_ENTRY(s10,s9,USER_EVT_ISSUE_FINISHED,1)
  700. FSM_RULE_ENTRY(s10,s2,USER_EVT_ISSUE_FINISHED,2)
  701. FSM_RULE_ENTRY(s10, s6, USER_EVT_ISSUE_EX_FINISHED, 6)
  702. FSM_RULE_ENTRY(s10, s4, USER_EVT_ISSUE_EX_FINISHED, 0)
  703. FSM_RULE_ENTRY(s10, s9, USER_EVT_ISSUE_EX_FINISHED, 1)
  704. FSM_RULE_ENTRY(s10, s2, USER_EVT_ISSUE_EX_FINISHED, 2)
  705. FSM_RULE_ENTRY(s10, s6, USER_EVT_ISSUE_EX_FINISHED, 6)
  706. FSM_RULE_ENTRY(s10, s2, USER_EVT_ISSUE_EX_FINISHED, 8)
  707. FSM_RULE_ENTRY(s10, s2, USER_EVT_EXIT, 0)
  708. FSM_RULE_ENTRY(s11,s4,USER_EVT_WRITE_FINISHED,0)
  709. FSM_RULE_ENTRY(s11,s4,USER_EVT_WRITE_FINISHED,1)
  710. FSM_RULE_ENTRY(s12, s2, USER_EVT_CONNECT_FINISHED, 0)
  711. FSM_RULE_ENTRY(s12, s15, USER_EVT_QUERY_SCI_LIST, 0)
  712. FSM_RULE_ENTRY(s12, s15, USER_EVT_BIND_SCI, 0)
  713. FSM_RULE_ENTRY(s12, s0, USER_EVT_BACK_TO_INIT, 0)
  714. FSM_RULE_ENTRY(s13, s12, USER_EVT_CONNECT, 0)
  715. FSM_RULE_ENTRY(s13, s15, USER_EVT_QUERY_SCI_LIST, 0)
  716. FSM_RULE_ENTRY(s13, s15, USER_EVT_BIND_SCI, 0)
  717. FSM_RULE_ENTRY(s14, s4, USER_EVT_SAM_IC_FINISHED, 0)
  718. FSM_RULE_ENTRY(s15, s2, USER_EVT_QUERY_SCI_LIST_FINISHED, 2)
  719. FSM_RULE_ENTRY(s15, s12, USER_EVT_QUERY_SCI_LIST_FINISHED, 12)
  720. FSM_RULE_ENTRY(s15, s13, USER_EVT_QUERY_SCI_LIST_FINISHED, 13)
  721. FSM_RULE_ENTRY(s15, s13, USER_EVT_BIND_SCI_FINISHED, 0) //解绑成功
  722. FSM_RULE_ENTRY(s15, s0, USER_EVT_BIND_SCI_FINISHED, 1) //绑定成功告知终端
  723. FSM_RULE_ENTRY(s15, s2, USER_EVT_BIND_SCI_FINISHED, 2)
  724. FSM_RULE_ENTRY(s15, s12, USER_EVT_BIND_SCI_FINISHED, 12)
  725. FSM_RULE_ENTRY(s15, s13, USER_EVT_BIND_SCI_FINISHED, 13)
  726. FSM_RULE_ENTRY(s16, s2, USER_EVT_PREONLINE_ON_STORE, 0)
  727. FSM_RULE_ENTRY(s16, s2, USER_EVT_PREONLINEFINISHED, 0)
  728. FSM_RULE_ENTRY(s17, s2, USER_EVT_QUERYCARDINFO_ON_STORE_FINISHED, 0)
  729. FSM_RULE_ENTRY(s17, s2, USER_EVT_QUERYCARDINFO_ON_STORE_FINISHED, 2)
  730. FSM_RULE_ENTRY(s18, s4, USER_EVT_PRINT_CARD_IM_FINISHED, 0)
  731. END_FSM_RULE()
  732. CCardIssuerFSM() : m_pCardIssuer(NULL),m_bCancelAccept(false),m_bWaitingAccept(false),
  733. m_bWaitAccepteMore(false),m_bExit(false),m_resetTimes(0),m_testResult(Error_Succeed)
  734. //,m_pTACReject(NULL),m_pIACOnline(NULL),m_pTACOnline(NULL),m_pIACDefault(NULL),m_pTACDefault(NULL)
  735. ,m_bCDA(false),m_pDataToARQC(NULL),m_bSM(false),m_bOnlineOnly(false),m_bIssuingExit(false)
  736. ,m_bCardIssued(false),m_issueStatusFromFile(1),m_issueStatus(1),m_currCardNo("")
  737. , m_captureReason(""), m_bCaptureCfgFlag(false), m_machineType(1)
  738. , m_currentHopper(1), m_hopperNum(1), EncypteDukptHSM(NULL), m_scanSlot(5), m_bBTConnected(false),m_bOpened(false)
  739. , m_bBTConncting(false), m_bBTChecking(0), m_bSettingMaterial(false), m_scanCount(0)
  740. , m_bDoingQueryListOrBindSCI(false), m_maxSlot(0), m_addCardNo(""), m_addCardSerial(""), m_hasCardWhileDevOpen(false)
  741. , m_bChannelOK(false), m_bForHangzhouSongruiMenjinka(false), m_bCancelByRFIC(false), m_bUnbindType3(false), m_devOpenFailedCount(0)
  742. , m_bInMainPage(false)
  743. {
  744. HARDWARE_ENTITY_RESET_ENTITYID(m_entCode, 0x203);
  745. cmdDecodeMag2 = NULL;
  746. cmdDecodeEx = NULL;
  747. m_aidList.Init(3);
  748. m_aidList[0] = "A000000333";
  749. m_aidList[1] = "A0000000108888";
  750. m_aidList[2] = "A000000790";
  751. }
  752. ~CCardIssuerFSM(){}
  753. virtual ErrorCodeEnum OnInit();
  754. virtual ErrorCodeEnum OnExit();
  755. //unsigned int sReady_on_event(FSMEvent* event)
  756. //{
  757. // if (event->iEvt == USER_EVT_READ) {
  758. // // new read task
  759. //
  760. // event->SetHandled();
  761. // return 0;
  762. // }
  763. //}
  764. void s0_on_entry();
  765. void s0_on_exit();
  766. unsigned int s0_on_event(FSMEvent* event);
  767. void s1_on_entry();
  768. void s1_on_exit();
  769. unsigned int s1_on_event(FSMEvent* event);
  770. void s2_on_entry();
  771. void s2_on_exit();
  772. unsigned int s2_on_event(FSMEvent* event);
  773. void s3_on_entry();
  774. void s3_on_exit();
  775. unsigned int s3_on_event(FSMEvent* event);
  776. void s4_on_entry();
  777. void s4_on_exit();
  778. unsigned int s4_on_event(FSMEvent* event);
  779. void s5_on_entry();
  780. void s5_on_exit();
  781. unsigned int s5_on_event(FSMEvent* event);
  782. void s6_on_entry();
  783. void s6_on_exit();
  784. unsigned int s6_on_event(FSMEvent* event);
  785. void s7_on_entry();
  786. void s7_on_exit();
  787. unsigned int s7_on_event(FSMEvent* event);
  788. void s8_on_entry();
  789. void s8_on_exit();
  790. unsigned int s8_on_event(FSMEvent* event);
  791. void s9_on_entry();
  792. void s9_on_exit();
  793. unsigned int s9_on_event(FSMEvent* event);
  794. void s10_on_entry();
  795. void s10_on_exit();
  796. unsigned int s10_on_event(FSMEvent* event);
  797. void s11_on_entry();
  798. void s11_on_exit();
  799. unsigned int s11_on_event(FSMEvent* event);
  800. void s12_on_entry();
  801. void s12_on_exit();
  802. unsigned int s12_on_event(FSMEvent* event);
  803. void s13_on_entry();
  804. void s13_on_exit();
  805. unsigned int s13_on_event(FSMEvent* event);
  806. void s14_on_entry();
  807. void s14_on_exit();
  808. unsigned int s14_on_event(FSMEvent* event);
  809. void s15_on_entry();
  810. void s15_on_exit();
  811. unsigned int s15_on_event(FSMEvent* event);
  812. void s16_on_entry();
  813. void s16_on_exit();
  814. unsigned int s16_on_event(FSMEvent* event);
  815. void s17_on_entry();
  816. void s17_on_exit();
  817. unsigned int s17_on_event(FSMEvent* event);
  818. void s18_on_entry();
  819. void s18_on_exit();
  820. unsigned int s18_on_event(FSMEvent* event);
  821. // 麓脫脭脣脨脨脢卤脤谩脠隆脡猫卤赂脨貌脕脨潞脜虏垄脟氓驴脮ROOT脜盲脰脙碌脛脨貌脕脨潞脜
  822. void Load();
  823. ErrorCodeEnum OpenDevice(BYTE btOpenType, const char *pDevSN);
  824. int Initial();
  825. bool GetDevStatus();
  826. int UnAcceptCard();
  827. int CaptureCard(SpReqAnsContext<CardIssuerService_Capture_Req,CardIssuerService_Capture_Ans>::Pointer ctx);
  828. int EjectCard(SpReqAnsContext<CardIssuerService_Eject_Req,CardIssuerService_Eject_Ans>::Pointer ctx);
  829. int WaitFetchingCard();
  830. //int ReadCard(SpReqAnsContext<CardIssuerService_Read_Req,CardIssuerService_Read_Ans>::Pointer ctx);
  831. int ReadCardEx(SpReqAnsContext<CardIssuerService_ReadEx_Req,CardIssuerService_ReadEx_Ans>::Pointer ctx);
  832. int ReadCard(SpReqAnsContext<CardIssuerService_Read_Req,CardIssuerService_Read_Ans>::Pointer ctx);
  833. int PreOnline(SpReqAnsContext<CardIssuerService_PreOnline_Req,CardIssuerService_PreOnline_Ans>::Pointer ctx);
  834. int PostOnline(SpReqAnsContext<CardIssuerService_PostOnline_Req,CardIssuerService_PostOnline_Ans>::Pointer ctx);
  835. int Reset();
  836. int InternalAcceptCard();
  837. int AcceptCard(SpReqAnsContext<CardIssuerService_Insert_Req, CardIssuerService_Insert_Ans>::Pointer ctx);
  838. int IssueCard(SpReqAnsContext<CardIssuerService_Issue_Req, CardIssuerService_Issue_Ans>::Pointer ctx, SpReqAnsContext<CardIssuerService_IssueEx_Req, CardIssuerService_IssueEx_Ans>::Pointer ctxEx);
  839. int WriteCard(SpReqAnsContext<CardIssuerService_WriteTrack_Req,CardIssuerService_WriteTrack_Ans>::Pointer ctx);
  840. //deprecate
  841. //void LogDevErrorInfo();
  842. bool GetWaitFlag(){return m_bWaitingAccept;}
  843. void SetWaitMore(){m_bWaitAccepteMore = true;}
  844. void SetExitFlag(bool bFlag=true){m_bExit = bFlag;}
  845. bool FSMSetIssueFlag(int value=1);
  846. void FrontSetIssueFlag(bool bValue = true){ FSMSetIssueFlag(bValue); }
  847. int QueryIssueFlag(){ return m_issueStatus; }
  848. bool SetCardCaptured(const int num,bool bNewClear=false);
  849. bool SetCardIssued(const int num,const int hopper);
  850. bool SetCardRemains(const int num, const int hopper,bool bInit = false);
  851. bool SetCardMixed(const int num, const int hopper);
  852. ErrorCodeEnum MachineMoveCardBackNotHold();
  853. ErrorCodeEnum MachineMoveCardFrontGate();
  854. int QueryPrinterStatus(SpReqAnsContext<CardIssuerService_QueryPrinterStatus_Req, CardIssuerService_QueryPrinterStatus_Ans>::Pointer ctx);
  855. int Print(SpReqAnsContext<CardIssuerService_Print_Req, CardIssuerService_Print_Ans>::Pointer ctx);
  856. //bool DetectIfICCard();
  857. int DetectCardTypeInfoByAccount(char *pAccount, int len, char *pT3 = NULL, int t3Len = 0);
  858. void LoadCMBBin();
  859. //LPIDCCARDDATA* GetIDCData(){return lppCardData;}
  860. void SelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionContext> pTransactionContext);
  861. DevStateEnum GetDevState()
  862. {
  863. if ((m_eDevState == DEVICE_STATUS_NORMAL)
  864. && ((m_bHasHopper[0] && m_mixedEx[0] >= 3) || !m_bHasHopper[0])
  865. && ((m_bHasHopper[1] && m_mixedEx[1] >= 3) || !m_bHasHopper[1])
  866. && ((m_bHasHopper[2] && m_mixedEx[2] >= 3) || !m_bHasHopper[2]))
  867. return DEVICE_STATUS_MAINTAINCE;
  868. else
  869. return m_eDevState;
  870. }
  871. int QueryCardInfo();
  872. int ConnectSCI();
  873. int QueryIfCfgSCI();
  874. int SetDevStateAndSendMsg(const DevStateEnum eState, bool bForceSend = true);
  875. int DataTransferInitEx();
  876. int LoadSafeLockDll();
  877. int EncryptData(SCITempData ramData, SCITempData bdk, SCITempData curksn, SCITempData &encryptedData);
  878. int OpenSafeLock(SpReqAnsContext<CardIssuerService_OpenSafeLock_Req, CardIssuerService_OpenSafeLock_Ans>::Pointer ctx);
  879. int GetSCIInfo(char *&);
  880. int UpdateLocalRunCfg(CAutoArray<int> hopperArr);
  881. int SyncDataToDB(bool bMaintain[12],bool bSetCaptured=true);
  882. void SetHopperNum(int hopperNum);
  883. int BluetoothCheck();
  884. void DoExitWhenIdle();
  885. int SAMICCommand(SpReqAnsContext<CardIssuerService_SAMICCommand_Req, CardIssuerService_SAMICCommand_Ans>::Pointer ctx);
  886. void PeriodConnect(BOOL anotherThread = TRUE);
  887. int DetectBluetoothSCI();
  888. int DetectBluetoothSCIOnLinux();
  889. int QuerySCIList(SpReqAnsContext<CardIssuerService_QuerySCIList_Req, CardIssuerService_QuerySCIList_Ans>::Pointer ctx,const int);
  890. int BindSCI(SpReqAnsContext<CardIssuerService_BindSCI_Req, CardIssuerService_BindSCI_Ans>::Pointer ctx,const int);
  891. void GetSCINo(CSimpleStringA&);
  892. void oiltest();
  893. void oiltestSCI(bool bSCI = true);
  894. bool WriteSlotInfo(CSmartPointer<IConfigInfo> &cfgRun, const char *acc, const char *cardSerial,int slot,bool bClear=false);
  895. bool ReadSlotInfo(CSmartPointer<IConfigInfo> &cfgRun, CSimpleStringA &acc, CSimpleStringA &cardSerial, int slot, int &hasCard);
  896. bool WriteCardInfo(CSmartPointer<IConfigInfo> &cfgRun, const char *acc, const char* serial, int slot, bool bClear = false, bool bHasCard = false);
  897. bool ReadCardInfo(CSmartPointer<IConfigInfo> &cfgRun, CSimpleStringA &acc, CSimpleStringA &serial, int slot);
  898. int PreOnlineOnStore(SpReqAnsContext<CardIssuerService_PreOnlineOnStore_Req, CardIssuerService_PreOnlineOnStore_Ans>::Pointer ctx);
  899. void NotifyPreOnline(unsigned long errCode,unsigned long findCard, unsigned long cardPos, CSimpleStringA data);
  900. int IssueCardFromStore(SpReqAnsContext<CardIssuerService_IssueEx_Req, CardIssuerService_IssueEx_Ans>::Pointer ctx,bool isSpec=false);
  901. int AddCardToStoreStepFirst(SpReqAnsContext<CardIssuerService_IssueEx_Req, CardIssuerService_IssueEx_Ans>::Pointer ctx);
  902. int AddCardToStoreStepLast(SpReqAnsContext<CardIssuerService_IssueEx_Req, CardIssuerService_IssueEx_Ans>::Pointer ctx);
  903. int FindFirstEmptySlot();
  904. bool IsValidSlotNum(const int slot);
  905. bool IsSlotHasCard(const int slot);
  906. bool OperateCardStore(CSmartPointer<IConfigInfo>&spConfigRun, int slot, int& status);
  907. void ReturnCardInfo(int slotNum, int status, CSmartPointer<IConfigInfo>&spConfigRun, SpReqAnsContext<CardIssuerService_QueryCardInfoOnStore_Req, CardIssuerService_QueryCardInfoOnStore_Ans>::Pointer ctx);
  908. void ClearLocalRecord(CSmartPointer<IConfigInfo>&spConfigRun);
  909. bool CheckHasPanKuRecord(CSmartPointer<IConfigInfo>&spConfigRun);
  910. void AfterPreOnlineOnStore(ErrorCodeEnum eErr,const int slot);
  911. int QueryCardInfoOnStore(SpReqAnsContext<CardIssuerService_QueryCardInfoOnStore_Req, CardIssuerService_QueryCardInfoOnStore_Ans>::Pointer ctx);
  912. void GetAddCardInfo(SpReqAnsContext<CardIssuerService_GetAddCardInfo_Req, CardIssuerService_GetAddCardInfo_Ans>::Pointer ctx);
  913. int PrintCardIm(SpReqAnsContext<CardIssuerService_PrintCardImmediately_Req, CardIssuerService_PrintCardImmediately_Ans>::Pointer ctx);
  914. void DecodeTracksData(const char *track2, DWORD dwT2size, const char *track3, DWORD dwT3size,char *&magData,bool bT2OK=true,bool bT3OK=true);
  915. int GetFSMState(){ return m_currentFSMState; }
  916. void GetCardInfo(int &findCard, int &cardPos){findCard = m_findCard; cardPos = m_cardPos;}
  917. int SplitDevModelInfo();
  918. void SetCancelByRFICFlag(bool bCancel = true) { m_bCancelByRFIC = bCancel; }
  919. CSimpleStringA GetPreOnlineICCardNo() { return m_currCardNo; }
  920. void CloseAndClearDevObj(bool bCheckConnecting = true, bool bCloseOnly = false);
  921. void SetMainPageFlag(bool bValue) { m_bInMainPage = bValue; }
  922. DWORD UpdateDEC(DWORD dwVal = 0)
  923. {
  924. int reserved = 0;
  925. reserved = (dwVal & 0xFC000) >> 14;
  926. HARDWARE_ENTITY_SET_DEVCODE(m_entCode, dwVal, reserved);
  927. return GetDEC();
  928. }
  929. DWORD GetDEC() const
  930. {
  931. return HARDWARE_ENTITY_MAKE_ERRORCODE(m_entCode);
  932. }
  933. DWORD GetAlarmDEC(DWORD dwValue = 0)
  934. {
  935. if (dwValue > 0)
  936. UpdateDEC(dwValue);
  937. //oilyang@20200525 if have been set ErrorCode of entity defined (not device),use it directly
  938. DWORD dwCode = 0;
  939. if ((m_entCode.dwVendorErroCode >> 20) == m_entCode.dwEntityId)
  940. dwCode = m_entCode.dwVendorErroCode;
  941. else
  942. dwCode = HARDWARE_ENTITY_MAKE_ERRORCODE_TO_BUSINESS(m_entCode);
  943. return dwCode;
  944. }
  945. DWORD AlarmDEC(const char* pMsgHead, ErrorCodeEnum eErrCode, DWORD defaultDevCode = 0) {
  946. WORD wdErrCode = 0;
  947. CSimpleStringA csErrMsg(true);
  948. ErrorCodeEnum ec = DeviceBaseHelper::GetAndSplitDevErrInfo(m_pCardIssuer, csErrMsg, wdErrCode,pMsgHead);
  949. if (ec == Error_Succeed && wdErrCode != 0) {
  950. //oilyang@20200525 if have been set ErrorCode of entity defined (not device),use it directly
  951. if ((defaultDevCode >> 20) == m_entCode.dwEntityId)
  952. UpdateDEC(defaultDevCode);
  953. else
  954. UpdateDEC(wdErrCode);
  955. }
  956. else if (defaultDevCode != 0) {
  957. UpdateDEC(defaultDevCode);
  958. }
  959. //oilyang@20200525 if have been set ErrorCode of entity defined (not device),use it directly
  960. DWORD dwCode = GetAlarmDEC();
  961. LogErrMsg(pMsgHead, eErrCode, csErrMsg,dwCode, true);
  962. return dwCode;
  963. }
  964. DWORD AlarmDECToBusiness(const char* pMsgHead, ErrorCodeEnum eErrCode, DWORD defaultDevCode = 0){
  965. WORD wdErrCode = 0;
  966. CSimpleStringA csErrMsg(true);
  967. ErrorCodeEnum ec = DeviceBaseHelper::GetAndSplitDevErrInfo(m_pCardIssuer, csErrMsg, wdErrCode, pMsgHead);
  968. if (ec == Error_Succeed && wdErrCode != 0) {
  969. //oilyang@20200525 if have been set ErrorCode of entity defined (not device),use it directly
  970. if ((defaultDevCode >> 20) == m_entCode.dwEntityId)
  971. UpdateDEC(defaultDevCode);
  972. else
  973. UpdateDEC(wdErrCode);
  974. }
  975. else if (defaultDevCode != 0) {
  976. UpdateDEC(defaultDevCode);
  977. }
  978. //oilyang@20200528 according the meeting result,throw a LogError while answering ctx
  979. //oilyang@20200525 if have been set ErrorCode of entity defined (not device),use it directly
  980. DWORD dwCode = GetAlarmDEC();
  981. LogErrMsg(pMsgHead, eErrCode, csErrMsg, dwCode, false,true);
  982. return dwCode;
  983. }
  984. void ClearRelatedDEC()
  985. {
  986. UpdateDEC();
  987. m_csAlarmMsg = "NO more information";
  988. }
  989. void LogErrMsg(const char *pMsgHead, ErrorCodeEnum eErrCode, const char*pMsgBody, DWORD defaultDevCode = 0, BOOL bAlarm = FALSE, BOOL bError = FALSE);
  990. protected:
  991. //LPIDCCARDDATA* lppCardData;
  992. int m_iInsertTries;
  993. int m_resetTries;
  994. int m_ejectTries;
  995. private:
  996. ///
  997. int m_resetTimes;
  998. #ifdef RVC_OS_WIN
  999. HMODULE m_hVerdorDll;
  1000. #else
  1001. void* m_hVerdorDll;
  1002. #endif
  1003. //GUIConsoleService_ClientBase *m_pGUIConsoleClient;
  1004. lpCreateDevCom CreateDevComponent;
  1005. lpReleaseDevCom ReleaseDevComponent;
  1006. lpCMBdecodeMag2 cmdDecodeMag2;
  1007. lpCMBdecodeEx cmdDecodeEx;
  1008. bool m_devInit,m_bCancelAccept,m_bWaitingAccept,m_bWaitAccepteMore,m_bExit,m_bSM
  1009. ,m_bOnlineOnly,m_bCDA,m_bIssuingExit,m_bCardIssued,m_bCaptureCfgFlag,m_bHasHopper[HOPPER_NUM]
  1010. ,m_bSettingMaterial,m_hasCardWhileDevOpen,m_bChannelOK,m_bCancelByRFIC, m_bInMainPage;
  1011. ErrorCodeEnum m_testResult;
  1012. bool m_bBTConncting, m_bBTConnected, m_bOpened,m_bUnbindType3;
  1013. //m_CardInit,m_CardRemains,m_CardIssued,m_CardMixed,m_CardPercent
  1014. int m_CardCaptured,m_issueStatusFromFile,m_issueStatus;
  1015. //1:默认,2:便携式发卡器,3:未配置
  1016. int m_machineType;
  1017. WORD m_majorVerion, m_minorVerion;
  1018. int m_port,m_baudRate,m_currentHopper,m_scanSlot,m_scanCount,m_devOpenFailedCount/*DevOpenEx连续失败次数*/;
  1019. int m_maxSlot,m_findCard,m_cardPos,m_currentFSMState,m_maxRetainCount/*回收箱容量*/;
  1020. CSimpleStringA m_CardBoxNoEx[HOPPER_NUM], m_PsbCodeEx[HOPPER_NUM], m_PsbNameEx[HOPPER_NUM], m_MaintainerEx[HOPPER_NUM],m_csMaintainTimeEx[HOPPER_NUM];
  1021. int m_CardInitEx[HOPPER_NUM], m_CardPercentEx[HOPPER_NUM], m_remainsEx[HOPPER_NUM], m_issuedEx[HOPPER_NUM], m_mixedEx[HOPPER_NUM],m_hopperNum;
  1022. DWORD m_MaintainTimeEx[HOPPER_NUM];
  1023. BYTE m_connectType, m_r1[128], m_r2[128], m_r3[128], m_priKey[ONE_K / 2], m_devPubKey[ONE_K / 2], m_bdk[64], m_ksn[64];
  1024. CardIssuerStatus m_devStatus;
  1025. CardIssuerClass* m_pCardIssuer;
  1026. DevStateEnum m_eDevState;
  1027. CCardProcess *m_pCardProcess;
  1028. CAutoArray<CSimpleStringA> m_aidList;
  1029. pfEncryptDukptHSM EncypteDukptHSM;
  1030. pfGetEncrypedData GetEncrypedData;
  1031. char *m_pDataToARQC;
  1032. long xxTest;
  1033. CSimpleStringA m_currCardNo, m_captureReason, m_csMachineType, m_csSite, m_csDevSN, m_terminalNo,m_addCardNo,m_addCardSerial
  1034. ,m_csCM;
  1035. char m_AuthCode[2];
  1036. vector<CMBBin> m_vBin;
  1037. vector<SCIRecord> m_vSCIRecords;
  1038. bool m_bDoingQueryListOrBindSCI,m_bForHangzhouSongruiMenjinka;
  1039. SpReqAnsContext<CardIssuerService_PreOnlineOnStore_Req, CardIssuerService_PreOnlineOnStore_Ans>::Pointer m_crossCtx;
  1040. UINT64 m_crossStart;
  1041. int m_bBTChecking;
  1042. int SplitTrack2(CSimpleStringA pTrack2,Track2Data &decodeData);
  1043. int SplitUnionPayTrack2(CSimpleStringA pTrack2,Track2Data &decodeData);
  1044. //void LogErrInfo(const char*);
  1045. bool JustReadCardNo();
  1046. bool RegistCardWhileCaptureCard();
  1047. bool IsValidCardNo(const char*,int);
  1048. int IsValidSCIName(const char*, int);
  1049. void AddToSCIRecords(const char *name, const char * remoteMac, bool bFirst);
  1050. void ClearSCIRecords();
  1051. ErrorCodeEnum AfterBindSyncData(const char*, bool bBind);
  1052. ErrorCodeEnum AfterBindUpdateSCINameToRunCfg(const char *name, bool bBind);
  1053. void GetVendorDllName(CSimpleStringA &dllName);
  1054. bool AccountExchange(const char *origAcc, CSimpleStringA &acc,int dir=1);
  1055. bool SetSlotFlag(int slot,bool bReset=false,bool bClear=false);
  1056. void ClearAllLocalSlotInfo();
  1057. bool LoadCMBPrint(CSimpleStringA csBinPath);
  1058. DevCategoryInfo m_devCat;
  1059. void ToLogWarnInfoAboutTerm();
  1060. HardwareEntityCode m_entCode;
  1061. CSimpleStringA m_csAlarmMsg,m_csVendorDllName;
  1062. };
  1063. struct InitTask : public ITaskSp
  1064. {
  1065. CCardIssuerFSM* fsm;
  1066. InitTask(CCardIssuerFSM* f) : fsm(f) {}
  1067. void Process()
  1068. {
  1069. FSMEvent *e = new FSMEvent(USER_EVT_INITFINISHED);
  1070. e->param1 = fsm->Initial();
  1071. fsm->PostEventFIFO(e);
  1072. }
  1073. };
  1074. struct AcceptTask : public ITaskSp
  1075. {
  1076. CCardIssuerFSM* fsm;
  1077. SpReqAnsContext<CardIssuerService_Insert_Req, CardIssuerService_Insert_Ans>::Pointer ctx;
  1078. AcceptTask(CCardIssuerFSM* f) : fsm(f) {}
  1079. void Process()
  1080. {
  1081. LOG_FUNCTION();
  1082. FSMEvent *e = new FSMEvent(USER_EVT_ACCEPTFINISHED);
  1083. e->param1 = fsm->AcceptCard(ctx);
  1084. fsm->PostEventFIFO(e);
  1085. }
  1086. };
  1087. struct IssueTask : public ITaskSp
  1088. {
  1089. CCardIssuerFSM* fsm;
  1090. SpReqAnsContext<CardIssuerService_Issue_Req, CardIssuerService_Issue_Ans>::Pointer ctx;
  1091. SpReqAnsContext<CardIssuerService_IssueEx_Req, CardIssuerService_IssueEx_Ans>::Pointer ctxEx;
  1092. IssueTask(CCardIssuerFSM* f) : fsm(f) {}
  1093. void Process()
  1094. {
  1095. LOG_FUNCTION();
  1096. FSMEvent *e;
  1097. if (ctx != NULL)
  1098. e = new FSMEvent(USER_EVT_ISSUE_FINISHED);
  1099. else if (ctxEx != NULL)
  1100. e = new FSMEvent(USER_EVT_ISSUE_EX_FINISHED);
  1101. else
  1102. {
  1103. Dbg("IssueTask:ctx is null");
  1104. return;
  1105. }
  1106. e->param1 = fsm->IssueCard(ctx,ctxEx);
  1107. fsm->PostEventFIFO(e);
  1108. }
  1109. };
  1110. struct QueryCardInfoOnStoreTask : public ITaskSp
  1111. {
  1112. CCardIssuerFSM* fsm;
  1113. SpReqAnsContext<CardIssuerService_QueryCardInfoOnStore_Req, CardIssuerService_QueryCardInfoOnStore_Ans>::Pointer ctx;
  1114. QueryCardInfoOnStoreTask(CCardIssuerFSM* f) : fsm(f){}
  1115. void Process()
  1116. {
  1117. LOG_FUNCTION();
  1118. FSMEvent* e;
  1119. if(ctx != NULL)
  1120. e = new FSMEvent(USER_EVT_QUERYCARDINFO_ON_STORE_FINISHED);
  1121. else
  1122. {
  1123. Dbg("QueryCardInfoOnStoreTask: ctx is null");
  1124. return;
  1125. }
  1126. e->param1 = fsm->QueryCardInfoOnStore(ctx);
  1127. fsm->PostEventFIFO(e);
  1128. }
  1129. };
  1130. //struct ReadTask : public ITaskSp
  1131. //{
  1132. // SpReqAnsContext<CardIssuerService_Read_Req,CardIssuerService_Read_Ans>::Pointer ctx;
  1133. // CCardIssuerFSM* fsm;
  1134. // ReadTask(CCardIssuerFSM* f) : fsm(f) {}
  1135. // void Process()
  1136. // {
  1137. // CardReadFinishedEvent *e = new CardReadFinishedEvent();
  1138. // e->ctx = ctx;
  1139. // e->param1 = fsm->ReadCard(ctx);
  1140. // fsm->PostEventFIFO(e);
  1141. // }
  1142. //};
  1143. struct ReadExTask : public ITaskSp
  1144. {
  1145. SpReqAnsContext<CardIssuerService_ReadEx_Req,CardIssuerService_ReadEx_Ans>::Pointer ctx;
  1146. CCardIssuerFSM* fsm;
  1147. ReadExTask(CCardIssuerFSM* f) : fsm(f) {}
  1148. void Process()
  1149. {
  1150. CardReadExFinishedEvent *e = new CardReadExFinishedEvent();
  1151. e->ctx = ctx;
  1152. e->param1 = fsm->ReadCardEx(ctx);
  1153. fsm->PostEventFIFO(e);
  1154. }
  1155. };
  1156. struct ReadTask : public ITaskSp
  1157. {
  1158. SpReqAnsContext<CardIssuerService_Read_Req,CardIssuerService_Read_Ans>::Pointer ctx;
  1159. CCardIssuerFSM* fsm;
  1160. ReadTask(CCardIssuerFSM* f) : fsm(f) {}
  1161. void Process()
  1162. {
  1163. CardReadFinishedEvent *e = new CardReadFinishedEvent();
  1164. e->ctx = ctx;
  1165. e->param1 = fsm->ReadCard(ctx);
  1166. fsm->PostEventFIFO(e);
  1167. }
  1168. };
  1169. struct PreOnlineTask : public ITaskSp
  1170. {
  1171. SpReqAnsContext<CardIssuerService_PreOnline_Req,CardIssuerService_PreOnline_Ans>::Pointer ctx;
  1172. CCardIssuerFSM* fsm;
  1173. PreOnlineTask(CCardIssuerFSM* f) : fsm(f) {}
  1174. void Process()
  1175. {
  1176. FSMEvent *e = new FSMEvent(USER_EVT_PREONLINEFINISHED);
  1177. e->param1 = fsm->PreOnline(ctx);
  1178. fsm->PostEventFIFO(e);
  1179. }
  1180. };
  1181. struct PostOnlineTask : public ITaskSp
  1182. {
  1183. SpReqAnsContext<CardIssuerService_PostOnline_Req,CardIssuerService_PostOnline_Ans>::Pointer ctx;
  1184. CCardIssuerFSM* fsm;
  1185. PostOnlineTask(CCardIssuerFSM* f) : fsm(f) {}
  1186. void Process()
  1187. {
  1188. FSMEvent *e = new FSMEvent(USER_EVT_POSTONLINEFINISHED);
  1189. e->param1 = fsm->PostOnline(ctx);
  1190. fsm->PostEventFIFO(e);
  1191. }
  1192. };
  1193. struct CaptureTask : public ITaskSp
  1194. {
  1195. CCardIssuerFSM* fsm;
  1196. SpReqAnsContext<CardIssuerService_Capture_Req,CardIssuerService_Capture_Ans>::Pointer ctx;
  1197. CaptureTask(CCardIssuerFSM* f) : fsm(f) {}
  1198. void Process()
  1199. {
  1200. FSMEvent *e = new FSMEvent(USER_EVT_CAPTUREFINISHED);
  1201. e->param1 = fsm->CaptureCard(ctx);
  1202. fsm->PostEventFIFO(e);
  1203. }
  1204. };
  1205. struct EjectTask : public ITaskSp
  1206. {
  1207. SpReqAnsContext<CardIssuerService_Eject_Req,CardIssuerService_Eject_Ans>::Pointer ctx;
  1208. CCardIssuerFSM* fsm;
  1209. EjectTask(CCardIssuerFSM* f) : fsm(f) {}
  1210. void Process()
  1211. {
  1212. FSMEvent *e = new FSMEvent(USER_EVT_EJECTFINISHED);
  1213. e->param1 = fsm->EjectCard(ctx);
  1214. fsm->PostEventFIFO(e);
  1215. }
  1216. };
  1217. struct WaitFetchingTask : public ITaskSp
  1218. {
  1219. CCardIssuerFSM* fsm;
  1220. WaitFetchingTask(CCardIssuerFSM* f) : fsm(f) {}
  1221. void Process()
  1222. {
  1223. FSMEvent *e = new FSMEvent(USER_EVT_WAITFINISHED);
  1224. e->param1 = fsm->WaitFetchingCard();
  1225. fsm->PostEventFIFO(e);
  1226. }
  1227. };
  1228. struct ResetTask : public ITaskSp
  1229. {
  1230. CCardIssuerFSM* fsm;
  1231. ResetTask(CCardIssuerFSM* f) : fsm(f) {}
  1232. void Process()
  1233. {
  1234. ResetFinishedEvent *e = new ResetFinishedEvent();
  1235. e->param1 = fsm->Reset();
  1236. fsm->PostEventFIFO(e);
  1237. }
  1238. };
  1239. struct WriteTask : public ITaskSp
  1240. {
  1241. SpReqAnsContext<CardIssuerService_WriteTrack_Req,CardIssuerService_WriteTrack_Ans>::Pointer ctx;
  1242. CCardIssuerFSM* fsm;
  1243. WriteTask(CCardIssuerFSM* f) : fsm(f) {}
  1244. void Process()
  1245. {
  1246. CardWriteFinishedEvent *e = new CardWriteFinishedEvent();
  1247. e->ctx = ctx;
  1248. e->param1 = fsm->WriteCard(ctx);
  1249. fsm->PostEventFIFO(e);
  1250. }
  1251. };
  1252. struct ConnectTask : public ITaskSp
  1253. {
  1254. CCardIssuerFSM* fsm;
  1255. ConnectTask(CCardIssuerFSM* f) : fsm(f) {}
  1256. void Process()
  1257. {
  1258. FSMEvent *e = new FSMEvent(USER_EVT_CONNECT_FINISHED);
  1259. e->param1 = fsm->ConnectSCI();
  1260. fsm->PostEventFIFO(e);
  1261. }
  1262. };
  1263. struct PeirodConnectTask : public ITaskSp
  1264. {
  1265. CCardIssuerFSM* fsm;
  1266. PeirodConnectTask(CCardIssuerFSM* f) : fsm(f) {}
  1267. void Process()
  1268. {
  1269. fsm->PeriodConnect(FALSE);
  1270. }
  1271. };
  1272. struct OpenSafeLockTask : public ITaskSp
  1273. {
  1274. CCardIssuerFSM* fsm;
  1275. OpenSafeLockTask(CCardIssuerFSM* f) : fsm(f) {}
  1276. SpReqAnsContext<CardIssuerService_OpenSafeLock_Req, CardIssuerService_OpenSafeLock_Ans>::Pointer ctx;
  1277. void Process()
  1278. {
  1279. FSMEvent *e = new FSMEvent(USER_EVT_OPEN_SAFELOCK_FINISHED);
  1280. e->param1 = fsm->OpenSafeLock(ctx);
  1281. fsm->PostEventFIFO(e);
  1282. }
  1283. };
  1284. struct BluetoothCheckTask : public ITaskSp
  1285. {
  1286. CCardIssuerFSM* fsm;
  1287. BluetoothCheckTask(CCardIssuerFSM* f) : fsm(f) {}
  1288. void Process()
  1289. {
  1290. FSMEvent *e = new FSMEvent(USER_EVT_BLUETOOTH_CHECK_FINISHED);
  1291. e->param1 = fsm->BluetoothCheck();
  1292. fsm->PostEventFIFO(e);
  1293. }
  1294. };
  1295. struct DoExitWhenIdleTask : public ITaskSp
  1296. {
  1297. CCardIssuerFSM* fsm;
  1298. DoExitWhenIdleTask(CCardIssuerFSM* f) : fsm(f) {}
  1299. void Process()
  1300. {
  1301. fsm->DoExitWhenIdle();
  1302. }
  1303. };
  1304. struct SAMICCommandTask : public ITaskSp
  1305. {
  1306. CCardIssuerFSM* fsm;
  1307. SpReqAnsContext<CardIssuerService_SAMICCommand_Req, CardIssuerService_SAMICCommand_Ans>::Pointer ctx;
  1308. SAMICCommandTask(CCardIssuerFSM* f) : fsm(f) {}
  1309. void Process()
  1310. {
  1311. FSMEvent* e = new FSMEvent(USER_EVT_SAM_IC_FINISHED);
  1312. e->param1 = fsm->SAMICCommand(ctx);
  1313. fsm->PostEventFIFO(e);
  1314. }
  1315. };
  1316. struct QueryPrinterStatusTask : public ITaskSp
  1317. {
  1318. CCardIssuerFSM* fsm;
  1319. SpReqAnsContext<CardIssuerService_QueryPrinterStatus_Req, CardIssuerService_QueryPrinterStatus_Ans>::Pointer ctx;
  1320. QueryPrinterStatusTask(CCardIssuerFSM* f) : fsm(f) {}
  1321. void Process()
  1322. {
  1323. fsm->QueryPrinterStatus(ctx);
  1324. }
  1325. };
  1326. struct PrintTask : public ITaskSp
  1327. {
  1328. CCardIssuerFSM* fsm;
  1329. SpReqAnsContext<CardIssuerService_Print_Req, CardIssuerService_Print_Ans>::Pointer ctx;
  1330. PrintTask(CCardIssuerFSM* f) : fsm(f) {}
  1331. void Process()
  1332. {
  1333. FSMEvent *e = new FSMEvent(USER_EVT_PRINT_FINISHED);
  1334. e->param1 = fsm->Print(ctx);
  1335. fsm->PostEventFIFO(e);
  1336. }
  1337. };
  1338. struct QuerySCIListTask : public ITaskSp
  1339. {
  1340. CCardIssuerFSM* fsm;
  1341. SpReqAnsContext<CardIssuerService_QuerySCIList_Req, CardIssuerService_QuerySCIList_Ans>::Pointer ctx;
  1342. int fsmState;
  1343. QuerySCIListTask(CCardIssuerFSM* f) : fsm(f) {}
  1344. void Process()
  1345. {
  1346. FSMEvent *e = new FSMEvent(USER_EVT_QUERY_SCI_LIST_FINISHED);
  1347. e->param1 = fsm->QuerySCIList(ctx, fsmState);
  1348. fsm->PostEventFIFO(e);
  1349. }
  1350. };
  1351. struct BindSCITask : public ITaskSp
  1352. {
  1353. CCardIssuerFSM* fsm;
  1354. SpReqAnsContext<CardIssuerService_BindSCI_Req, CardIssuerService_BindSCI_Ans>::Pointer ctx;
  1355. int fsmState;
  1356. BindSCITask(CCardIssuerFSM* f) : fsm(f) {}
  1357. void Process()
  1358. {
  1359. FSMEvent *e = new FSMEvent(USER_EVT_BIND_SCI_FINISHED);
  1360. e->param1 = fsm->BindSCI(ctx,fsmState);
  1361. fsm->PostEventFIFO(e);
  1362. }
  1363. };
  1364. struct PreOnlineOnStoreTask : public ITaskSp
  1365. {
  1366. CCardIssuerFSM* fsm;
  1367. SpReqAnsContext<CardIssuerService_PreOnlineOnStore_Req, CardIssuerService_PreOnlineOnStore_Ans>::Pointer ctx;
  1368. PreOnlineOnStoreTask(CCardIssuerFSM* f) : fsm(f) {}
  1369. void Process()
  1370. {
  1371. FSMEvent *e = new FSMEvent(USER_EVT_PREONLINE_ON_STORE_FINISHED);
  1372. e->param1 = fsm->PreOnlineOnStore(ctx);
  1373. fsm->PostEventFIFO(e);
  1374. }
  1375. };
  1376. struct PrintCardImTask : public ITaskSp
  1377. {
  1378. CCardIssuerFSM* fsm;
  1379. SpReqAnsContext<CardIssuerService_PrintCardImmediately_Req, CardIssuerService_PrintCardImmediately_Ans>::Pointer ctx;
  1380. PrintCardImTask(CCardIssuerFSM* f) : fsm(f) {}
  1381. void Process()
  1382. {
  1383. FSMEvent* e = new FSMEvent(USER_EVT_PRINT_CARD_IM_FINISHED);
  1384. e->param1 = fsm->PrintCardIm(ctx);
  1385. fsm->PostEventFIFO(e);
  1386. }
  1387. };
  1388. #endif //__CARD_ISSUER_FSM_H