DeviceControlFSM.h 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. #ifndef _DEVICE_CONTROL_FSM_H
  2. #define _DEVICE_CONTROL_FSM_H
  3. #pragma once
  4. #include "stdafx.h"
  5. #include "SpFSM.h"
  6. #include "DeviceControl_def_g.h"
  7. #include "DeviceControl_server_g.h"
  8. #include "DeviceControlClass.h"
  9. #include "DevFSMCommBase.hpp"
  10. #include "Interface.h"
  11. #include "Gpio_client_g.h"
  12. using namespace DeviceControl;
  13. using namespace Gpio;
  14. typedef int (__stdcall *lpInitToken)(char* pszCertType,int& nTokenType,char* pszOldSuperPwd,char* pszUserName,char* pszUserIDType,\
  15. char* pszUserIDNo,char* pszTokenSn, int& nTokenSn,char* pszPKCS10, int& nPKCS10,char* pszMsg, int& nMsg);
  16. typedef int (__stdcall *lpGetUKeyID)(char *pUKeyID, int &nUKeyID);
  17. enum EvtType
  18. {
  19. USER_EVT_TEST = EVT_USER+1,
  20. USER_EVT_QUIT,
  21. USER_EVT_USB,
  22. USER_EVT_USB_FINISHED,
  23. USER_EVT_GET_UKEYID,
  24. USER_EVT_GET_UKEYID_FINISHED,
  25. USER_EVT_INIT_TOKEN,
  26. USER_EVT_INIT_TOKEN_FINISHED,
  27. USER_EVT_QUERY_USB,
  28. USER_EVT_QUERY_USB_FINISHED,
  29. USER_EVT_WORKING_OP,
  30. };
  31. class USBEvent : public FSMEvent
  32. {
  33. public:
  34. USBEvent() : FSMEvent(USER_EVT_USB){}
  35. virtual ~USBEvent(){}
  36. SpReqAnsContext<DeviceControlService_USB_Req,DeviceControlService_USB_Ans>::Pointer ctx;
  37. virtual void OnUnhandled()
  38. {
  39. if (ctx != NULL)
  40. ctx->Answer(Error_InvalidState);
  41. }
  42. };
  43. class QueryUSBEvent : public FSMEvent
  44. {
  45. public:
  46. QueryUSBEvent() : FSMEvent(USER_EVT_QUERY_USB){}
  47. virtual ~QueryUSBEvent(){}
  48. SpReqAnsContext<DeviceControlService_QueryUSBStatus_Req,DeviceControlService_QueryUSBStatus_Ans>::Pointer ctx;
  49. virtual void OnUnhandled()
  50. {
  51. if (ctx != NULL)
  52. ctx->Answer(Error_InvalidState);
  53. }
  54. };
  55. class GetUkeyIDEvent : public FSMEvent
  56. {
  57. public:
  58. GetUkeyIDEvent() : FSMEvent(USER_EVT_GET_UKEYID){}
  59. virtual ~GetUkeyIDEvent(){}
  60. SpReqAnsContext<DeviceControlService_GetUkeyID_Req,DeviceControlService_GetUkeyID_Ans>::Pointer ctx;
  61. virtual void OnUnhandled()
  62. {
  63. if (ctx != NULL)
  64. ctx->Answer(Error_InvalidState);
  65. }
  66. };
  67. class InitTokenEvent : public FSMEvent
  68. {
  69. public:
  70. InitTokenEvent() : FSMEvent(USER_EVT_INIT_TOKEN){}
  71. virtual ~InitTokenEvent(){}
  72. SpReqAnsContext<DeviceControlService_InitToken_Req,DeviceControlService_InitToken_Ans>::Pointer ctx;
  73. virtual void OnUnhandled()
  74. {
  75. if (ctx != NULL)
  76. ctx->Answer(Error_InvalidState);
  77. }
  78. };
  79. class CDeviceControlFSM : public CCommDevFSM<CDeviceControlFSM, DeviceControlClass>
  80. {
  81. public:
  82. enum {s0,s1,s2,s3,s4};
  83. BEGIN_FSM_STATE(CDeviceControlFSM)
  84. FSM_STATE_ENTRY(s0,"Idle",s0_on_entry,s0_on_exit,s0_on_event)
  85. FSM_STATE_ENTRY(s1,"USB",s1_on_entry,s1_on_exit,s1_on_event)
  86. FSM_STATE_ENTRY(s2,"Failed",s2_on_entry,s2_on_exit,s2_on_event)
  87. FSM_STATE_ENTRY(s3,"GetUkeyID",s3_on_entry,s3_on_exit,s3_on_event)
  88. FSM_STATE_ENTRY(s4,"InitToken",s4_on_entry,s4_on_exit,s4_on_event)
  89. END_FSM_STATE()
  90. BEGIN_FSM_RULE(CDeviceControlFSM, s0)
  91. FSM_RULE_ENTRY(s0, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
  92. FSM_RULE_ENTRY(s0, s1, USER_EVT_USB, 0)
  93. FSM_RULE_ENTRY(s0, s1, USER_EVT_QUERY_USB, 0)
  94. FSM_RULE_ENTRY(s0, s3, USER_EVT_GET_UKEYID, 0)
  95. FSM_RULE_ENTRY(s0, s4, USER_EVT_INIT_TOKEN, 0)
  96. FSM_RULE_ENTRY(s1, s0, USER_EVT_USB_FINISHED, 0)
  97. FSM_RULE_ENTRY(s1, s2, USER_EVT_USB_FINISHED, 1)
  98. FSM_RULE_ENTRY(s1, s0, USER_EVT_QUERY_USB_FINISHED, 0)
  99. FSM_RULE_ENTRY(s1, s2, USER_EVT_QUERY_USB_FINISHED, 1)
  100. FSM_RULE_ENTRY(s3, s0, USER_EVT_GET_UKEYID_FINISHED, 0)
  101. FSM_RULE_ENTRY(s3, s0, USER_EVT_GET_UKEYID_FINISHED, 1)
  102. FSM_RULE_ENTRY(s4, s0, USER_EVT_INIT_TOKEN_FINISHED, 0)
  103. FSM_RULE_ENTRY(s4, s0, USER_EVT_INIT_TOKEN_FINISHED, 1)
  104. END_FSM_RULE()
  105. CDeviceControlFSM():m_testResult(Error_Succeed), m_hTokenDll(NULL),AQGetUKeyID(NULL),AQInitToken(NULL)
  106. ,m_bWorkingOp(false), m_bFWB(false){};
  107. virtual ~CDeviceControlFSM() {};
  108. virtual ErrorCodeEnum OnInit();
  109. virtual ErrorCodeEnum OnExit();
  110. virtual void s0_on_entry() {}
  111. virtual void s0_on_exit() {}
  112. virtual unsigned int s0_on_event(FSMEvent* e);
  113. virtual void s1_on_entry() {}
  114. virtual void s1_on_exit() {}
  115. virtual unsigned int s1_on_event(FSMEvent* e);
  116. virtual void s2_on_entry() {}
  117. virtual void s2_on_exit() {}
  118. virtual unsigned int s2_on_event(FSMEvent* e) { return 0; }
  119. virtual void s3_on_entry() {}
  120. virtual void s3_on_exit() {}
  121. virtual unsigned int s3_on_event(FSMEvent* e);
  122. virtual void s4_on_entry() {}
  123. virtual void s4_on_exit() {}
  124. virtual unsigned int s4_on_event(FSMEvent* e);
  125. int UsbControl(SpReqAnsContext<DeviceControlService_USB_Req,DeviceControlService_USB_Ans>::Pointer ctx);
  126. int GetUkeyIDx(SpReqAnsContext<DeviceControlService_GetUkeyID_Req, DeviceControlService_GetUkeyID_Ans>::Pointer ctx);
  127. int InitTokenx(SpReqAnsContext<DeviceControlService_InitToken_Req, DeviceControlService_InitToken_Ans>::Pointer ctx);
  128. int QueryUSB(SpReqAnsContext<DeviceControlService_QueryUSBStatus_Req,DeviceControlService_QueryUSBStatus_Ans>::Pointer ctx);
  129. void WorkingOp();
  130. void SelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionContext> pTransactionContext)
  131. {
  132. pTransactionContext->SendAnswer(Error_Succeed);
  133. }
  134. ErrorCodeEnum InitializeTokenLib();
  135. ErrorCodeEnum RestartSogouServices();
  136. private:
  137. void DoRestartSogouServicesJob();
  138. private:
  139. ErrorCodeEnum m_testResult;
  140. HMODULE m_hTokenDll;
  141. lpInitToken AQInitToken;
  142. lpGetUKeyID AQGetUKeyID;
  143. CSimpleStringA m_csMachineType;
  144. bool m_bWorkingOp, m_bFWB;
  145. };
  146. struct OpenTask : public ITaskSp
  147. {
  148. CDeviceControlFSM* fsm;
  149. OpenTask(CDeviceControlFSM* f) : fsm(f) {}
  150. SpReqAnsContext<DeviceControlService_USB_Req,DeviceControlService_USB_Ans>::Pointer ctx;
  151. void Process()
  152. {
  153. FSMEvent *e = new FSMEvent(USER_EVT_USB_FINISHED);
  154. e->param1 = fsm->UsbControl(ctx);
  155. fsm->PostEventFIFO(e);
  156. }
  157. };
  158. struct QueryUSBTask : public ITaskSp
  159. {
  160. CDeviceControlFSM* fsm;
  161. QueryUSBTask(CDeviceControlFSM* f) : fsm(f) {}
  162. SpReqAnsContext<DeviceControlService_QueryUSBStatus_Req,DeviceControlService_QueryUSBStatus_Ans>::Pointer ctx;
  163. void Process()
  164. {
  165. FSMEvent *e = new FSMEvent(USER_EVT_QUERY_USB_FINISHED);
  166. e->param1 = fsm->QueryUSB(ctx);
  167. fsm->PostEventFIFO(e);
  168. }
  169. };
  170. struct GetUkeyIDTask : public ITaskSp
  171. {
  172. CDeviceControlFSM* fsm;
  173. GetUkeyIDTask(CDeviceControlFSM* f) : fsm(f) {}
  174. SpReqAnsContext<DeviceControlService_GetUkeyID_Req,DeviceControlService_GetUkeyID_Ans>::Pointer ctx;
  175. void Process()
  176. {
  177. FSMEvent *e = new FSMEvent(USER_EVT_GET_UKEYID_FINISHED);
  178. e->param1 = fsm->GetUkeyIDx(ctx);
  179. fsm->PostEventFIFO(e);
  180. }
  181. };
  182. struct InitTokenTask : public ITaskSp
  183. {
  184. CDeviceControlFSM* fsm;
  185. InitTokenTask(CDeviceControlFSM* f) : fsm(f) {}
  186. SpReqAnsContext<DeviceControlService_InitToken_Req,DeviceControlService_InitToken_Ans>::Pointer ctx;
  187. void Process()
  188. {
  189. FSMEvent *e = new FSMEvent(USER_EVT_INIT_TOKEN_FINISHED);
  190. e->param1 = fsm->InitTokenx(ctx);
  191. fsm->PostEventFIFO(e);
  192. }
  193. };
  194. struct WorkingOpTask : public ITaskSp
  195. {
  196. CDeviceControlFSM* fsm;
  197. WorkingOpTask(CDeviceControlFSM* f) : fsm(f) {}
  198. void Process()
  199. {
  200. fsm->WorkingOp();
  201. }
  202. };
  203. #endif //_DEVICE_CONTROL_FSM_H