CardIssuerFSM.h 42 KB

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