HSPScannerFSM.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692
  1. #ifndef _HSPSCANNER_FSM_H_
  2. #define _HSPSCANNER_FSM_H_
  3. #pragma once
  4. #include "SpFSM.h"
  5. #include "HSPScannerClass.h"
  6. #include "HSPScanner_server_g.h"
  7. #include "DevFSMCommBase.hpp"
  8. #include "HSPSCanner_UserErrorCode.h"
  9. #if defined(_MSC_VER)
  10. #include "json.h"
  11. #include <xstring>
  12. using namespace std;
  13. #else
  14. #include "DevErrorCode.h"
  15. #endif //_MSC_VER
  16. using namespace HSPScanner;
  17. #define ISSUCCEEDED(hr) ((hr) == Error_Succeed)
  18. #define FAILURED(hr) (!(ISSUCCEEDED(hr)))
  19. #define SAFE_FREE_LIBRARY(hModule) \
  20. do { \
  21. if(hModule){ \
  22. FreeLibrary(hModule); \
  23. hModule = NULL; \
  24. } \
  25. }while(0)
  26. enum EvtType
  27. {
  28. USER_EVT_STARTPREVIEW = (EVT_USER + 1),
  29. USER_EVT_STARTPREVIEW_FINISHED,
  30. USER_EVT_SETPROPERTYINVIEW_FINISHED,
  31. USER_EVT_STOPPREVIEW,
  32. USER_EVT_HIDEPREVIEW,
  33. USER_EVT_STOPPREVIEW_FINISHED,
  34. USER_EVT_SETWINPOS,
  35. USER_EVT_SETWINPOSFINISHED,
  36. USER_EVT_SCANIMAGE,
  37. USER_EVT_SCANIMAGE_EX,
  38. USER_EVT_SCANIMAGEFINISHED,
  39. USER_EVT_SHOWPROPERTY,
  40. USER_EVT_SHOWPROPERTY_FINISHED,
  41. USER_EVT_SETPROPERTY,
  42. USER_EVT_SETPROPERTY_FINISHED,
  43. USER_EVT_GETSTATUS,
  44. USER_EVT_GETINFO,
  45. USER_EVT_DISCONNECT,
  46. USER_EVT_RESET,
  47. USER_EVT_EXIT,
  48. USER_EVT_EXIT_FINISHED,
  49. USER_EVT_NOCFG,
  50. USER_EVT_GOTOHELL,
  51. USER_EVT_OPENSUCC,
  52. USER_EVT_QUIT
  53. };
  54. class StartPreviewEvent : public FSMEvent
  55. {
  56. public:
  57. StartPreviewEvent() : FSMEvent(USER_EVT_STARTPREVIEW){}
  58. ~StartPreviewEvent(){}
  59. SpReqAnsContext<HSPScannerService_StartPreview_Req, HSPScannerService_StartPreview_Ans>::Pointer m_ctx;
  60. virtual void OnUnhandled()
  61. {
  62. if(m_ctx != NULL)
  63. {
  64. m_ctx->Answer(Error_InvalidState, HSPScanner_UserErrorCode_FSM_INVALID);
  65. }
  66. }
  67. };
  68. class StopPreviewEvent : public FSMEvent
  69. {
  70. public:
  71. StopPreviewEvent() : FSMEvent(USER_EVT_STOPPREVIEW){}
  72. ~StopPreviewEvent(){}
  73. SpReqAnsContext<HSPScannerService_CancelPreview_Req,
  74. HSPScannerService_CancelPreview_Ans>::Pointer m_ctx;
  75. virtual void OnUnhandled()
  76. {
  77. if(m_ctx != NULL)
  78. {
  79. m_ctx->Answer(Error_InvalidState, HSPScanner_UserErrorCode_FSM_INVALID);
  80. }
  81. }
  82. };
  83. class ScanImageEvent : public FSMEvent
  84. {
  85. public:
  86. ScanImageEvent() : FSMEvent(USER_EVT_SCANIMAGE){}
  87. ~ScanImageEvent(){}
  88. SpReqAnsContext<HSPScannerService_ScanImage_Req,
  89. HSPScannerService_ScanImage_Ans>::Pointer m_ctx;
  90. virtual void OnUnhandled()
  91. {
  92. if(m_ctx != NULL)
  93. {
  94. m_ctx->Answer(Error_InvalidState, HSPScanner_UserErrorCode_FSM_INVALID);
  95. }
  96. }
  97. };
  98. class ScanImageExEvent : public FSMEvent
  99. {
  100. public:
  101. ScanImageExEvent() : FSMEvent(USER_EVT_SCANIMAGE_EX){}
  102. ~ScanImageExEvent(){}
  103. SpReqAnsContext<HSPScannerService_ScanImageEx_Req,
  104. HSPScannerService_ScanImageEx_Ans>::Pointer m_ctx;
  105. virtual void OnUnhandled()
  106. {
  107. if(m_ctx != NULL)
  108. {
  109. m_ctx->Answer(Error_InvalidState, HSPScanner_UserErrorCode_FSM_INVALID);
  110. }
  111. }
  112. };
  113. class ShowPropertyEvent : public FSMEvent
  114. {
  115. public:
  116. ShowPropertyEvent() : FSMEvent(USER_EVT_SHOWPROPERTY){}
  117. ~ShowPropertyEvent(){}
  118. SpReqAnsContext<HSPScannerService_ShowProperty_Req,
  119. HSPScannerService_ShowProperty_Ans>::Pointer m_ctx;
  120. virtual void OnUnhandled()
  121. {
  122. if(m_ctx != NULL)
  123. {
  124. m_ctx->Answer(Error_InvalidState, HSPScanner_UserErrorCode_FSM_INVALID);
  125. }
  126. }
  127. };
  128. class SetPropertyEvent : public FSMEvent
  129. {
  130. public:
  131. SetPropertyEvent() : FSMEvent(USER_EVT_SETPROPERTY){}
  132. ~SetPropertyEvent(){}
  133. SpReqAnsContext<HSPScannerService_SetProperty_Req,
  134. HSPScannerService_SetProperty_Ans>::Pointer m_ctx;
  135. virtual void OnUnhandled()
  136. {
  137. if(m_ctx != NULL)
  138. {
  139. m_ctx->Answer(Error_InvalidState, HSPScanner_UserErrorCode_FSM_INVALID);
  140. }
  141. }
  142. };
  143. class SetWinPosEvent : public FSMEvent
  144. {
  145. public:
  146. SetWinPosEvent() : FSMEvent(USER_EVT_SETWINPOS){}
  147. ~SetWinPosEvent(){}
  148. SpReqAnsContext<HSPScannerService_SetWinPos_Req,
  149. HSPScannerService_SetWinPos_Ans>::Pointer m_ctx;
  150. virtual void OnUnhandled()
  151. {
  152. if(m_ctx != NULL)
  153. {
  154. m_ctx->Answer(Error_InvalidState, HSPScanner_UserErrorCode_FSM_INVALID);
  155. }
  156. }
  157. };
  158. class GetDevStatusEvent : public FSMEvent
  159. {
  160. public:
  161. GetDevStatusEvent() : FSMEvent(USER_EVT_GETSTATUS){}
  162. ~GetDevStatusEvent(){}
  163. SpReqAnsContext<HSPScannerService_GetDevStatus_Req,
  164. HSPScannerService_GetDevStatus_Ans>::Pointer m_ctx;
  165. virtual void OnUnhandled()
  166. {
  167. if(m_ctx != NULL)
  168. {
  169. m_ctx->Answer(Error_InvalidState, HSPScanner_UserErrorCode_FSM_INVALID);
  170. }
  171. }
  172. };
  173. class GetDevInfoEvent : public FSMEvent
  174. {
  175. public:
  176. GetDevInfoEvent() : FSMEvent(USER_EVT_GETINFO){}
  177. ~GetDevInfoEvent(){}
  178. SpReqAnsContext<HSPScannerService_GetDevInfo_Req,
  179. HSPScannerService_GetDevInfo_Ans>::Pointer m_ctx;
  180. virtual void OnUnhandled()
  181. {
  182. if(m_ctx != NULL)
  183. {
  184. m_ctx->Answer(Error_InvalidState, HSPScanner_UserErrorCode_FSM_INVALID);
  185. }
  186. }
  187. };
  188. class CHSPScannerFSM : public CCommDevFSM<CHSPScannerFSM, CHSPSClass>, public IFSMStateHooker
  189. {
  190. public:
  191. CHSPScannerFSM(void);
  192. ~CHSPScannerFSM(void);
  193. virtual ErrorCodeEnum OnInit();
  194. virtual ErrorCodeEnum OnExit();
  195. void SelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionContext> pTransactionContext);
  196. enum {s0, s1, s2, s3, s4, s5, s6, s7, s8};
  197. BEGIN_FSM_STATE(CHSPScannerFSM)
  198. FSM_STATE_ENTRY(s0, "Idle", s0_on_entry, s0_on_exit, s0_on_event)
  199. FSM_STATE_ENTRY(s1, "Previewing", s1_on_entry, s1_on_exit, s1_on_event)
  200. FSM_STATE_ENTRY(s2, "Property", s2_on_entry, s2_on_exit, s2_on_event)
  201. FSM_STATE_ENTRY(s3, "Failed", s3_on_entry, s3_on_exit, s3_on_event)
  202. FSM_STATE_ENTRY(s4, "Picturing", s4_on_entry, s4_on_exit, s4_on_event)
  203. FSM_STATE_ENTRY(s5, "DeviceOff", s5_on_entry, s5_on_exit, s5_on_event)
  204. FSM_STATE_ENTRY(s6, "HidPreviewing", s6_on_entry, s6_on_exit, s6_on_event)
  205. FSM_STATE_ENTRY(s7, "Exit", s7_on_entry, s7_on_exit, s7_on_event)
  206. FSM_STATE_ENTRY(s8, "Idiot", s8_on_entry, s8_on_exit, s8_on_event)
  207. END_FSM_STATE()
  208. BEGIN_FSM_RULE(CHSPScannerFSM, s0)
  209. //2 reserved in s0 state.
  210. FSM_RULE_ENTRY(s0, s1, USER_EVT_STARTPREVIEW_FINISHED, 0)
  211. FSM_RULE_ENTRY(s0, s3, USER_EVT_STARTPREVIEW_FINISHED, 1)
  212. FSM_RULE_ENTRY(s0, s0, USER_EVT_STARTPREVIEW_FINISHED, 2)
  213. FSM_RULE_ENTRY(s3, s1, USER_EVT_STARTPREVIEW_FINISHED, 0)
  214. FSM_RULE_ENTRY(s3, s0, USER_EVT_RESET, 0)
  215. FSM_RULE_ENTRY(s3, s3, USER_EVT_RESET, 1)
  216. FSM_RULE_ENTRY(s3, s1, USER_EVT_RESET, 2)
  217. FSM_RULE_ENTRY_ANY(s3, s0, USER_EVT_OPENSUCC)
  218. FSM_RULE_ENTRY(s1, s2, USER_EVT_SHOWPROPERTY, 0)
  219. FSM_RULE_ENTRY_ANY(s2, s1, USER_EVT_SHOWPROPERTY_FINISHED)
  220. //3 reserved in s1 state.
  221. FSM_RULE_ENTRY(s1, s3, USER_EVT_STOPPREVIEW_FINISHED, 0)
  222. FSM_RULE_ENTRY(s1, s3, USER_EVT_STOPPREVIEW_FINISHED, 4)
  223. // Try s6 state --Josephus at 10:10:05 2016/11/22
  224. //FSM_RULE_ENTRY(s1, s0, USER_EVT_STOPPREVIEW_FINISHED, 1) //隐藏
  225. FSM_RULE_ENTRY(s1, s6, USER_EVT_STOPPREVIEW_FINISHED, 1)
  226. FSM_RULE_ENTRY(s1, s0, USER_EVT_STOPPREVIEW_FINISHED, 2) //关闭预览
  227. FSM_RULE_ENTRY(s1, s1, USER_EVT_STOPPREVIEW_FINISHED, 3) //错误还不足够严重
  228. FSM_RULE_ENTRY(s1, s4, USER_EVT_SCANIMAGE, 0)
  229. FSM_RULE_ENTRY(s1, s4, USER_EVT_SCANIMAGE_EX, 0)
  230. //5 reserved in s4 state.
  231. FSM_RULE_ENTRY(s4, s1, USER_EVT_SCANIMAGEFINISHED, 1) //删除旧照片获取照片名称失败
  232. FSM_RULE_ENTRY(s4, s3, USER_EVT_SCANIMAGEFINISHED, 2) //拍摄返回失败
  233. FSM_RULE_ENTRY(s4, s1, USER_EVT_SCANIMAGEFINISHED, 3) //EX 分配资源失败
  234. FSM_RULE_ENTRY(s4, s3, USER_EVT_SCANIMAGEFINISHED, 4) //打开照片文件失败
  235. FSM_RULE_ENTRY(s4, s1, USER_EVT_SCANIMAGEFINISHED, 0) //成功拍摄
  236. // Try s6 state. --Josephus at 11:13:02 2016/11/22
  237. FSM_RULE_ENTRY(s4, s6, USER_EVT_SCANIMAGEFINISHED, 6) //成功拍摄且做了隐藏操作
  238. FSM_RULE_ENTRY(s4, s1, USER_EVT_SCANIMAGEFINISHED, 5)
  239. FSM_RULE_ENTRY_ANY(s3, s5, USER_EVT_DISCONNECT)
  240. FSM_RULE_ENTRY(s5, s0, EVT_TIMER, 1)
  241. FSM_RULE_ENTRY(s5, s1, EVT_TIMER, 2)
  242. FSM_RULE_ENTRY(s0, s5, USER_EVT_DISCONNECT, 0)
  243. FSM_RULE_ENTRY(s1, s5, USER_EVT_DISCONNECT, 0)
  244. FSM_RULE_ENTRY(s4, s5, USER_EVT_DISCONNECT, 0)
  245. FSM_RULE_ENTRY(s6, s5, USER_EVT_DISCONNECT, 0)
  246. FSM_RULE_ENTRY(s6, s1, USER_EVT_STARTPREVIEW_FINISHED, 0) //成功预览
  247. FSM_RULE_ENTRY(s6, s3, USER_EVT_STARTPREVIEW_FINISHED, 1) //预览失败
  248. FSM_RULE_ENTRY(s6, s6, USER_EVT_STARTPREVIEW_FINISHED, 2) // 错误还不足够严重
  249. FSM_RULE_ENTRY(s6, s0, USER_EVT_STOPPREVIEW_FINISHED, 2) //关闭预览
  250. FSM_RULE_ENTRY(s6, s3, USER_EVT_STOPPREVIEW_FINISHED, 0) //关闭预览失败
  251. FSM_RULE_ENTRY(s6, s6, USER_EVT_STOPPREVIEW_FINISHED, 3) //错误还不足够严重
  252. FSM_RULE_ENTRY_ANY(s1, s7, USER_EVT_EXIT)
  253. FSM_RULE_ENTRY_ANY(s2, s7, USER_EVT_EXIT)
  254. FSM_RULE_ENTRY_ANY(s6, s7, USER_EVT_EXIT)
  255. FSM_RULE_ENTRY(s7, s0, USER_EVT_EXIT_FINISHED, 0)
  256. FSM_RULE_ENTRY(s7, s3, USER_EVT_EXIT_FINISHED, 1)
  257. FSM_RULE_ENTRY_ANY(s0, s8, USER_EVT_NOCFG)
  258. FSM_RULE_ENTRY_ANY(s0, s3, USER_EVT_GOTOHELL)
  259. END_FSM_RULE()
  260. virtual void s0_on_entry();
  261. virtual void s0_on_exit();
  262. virtual unsigned int s0_on_event(FSMEvent* e);
  263. virtual void s1_on_entry();
  264. virtual void s1_on_exit();
  265. virtual unsigned int s1_on_event(FSMEvent* e);
  266. virtual void s2_on_entry();
  267. virtual void s2_on_exit();
  268. virtual unsigned int s2_on_event(FSMEvent* e);
  269. virtual void s3_on_entry();
  270. virtual void s3_on_exit();
  271. virtual unsigned int s3_on_event(FSMEvent* e);
  272. virtual void s4_on_entry();
  273. virtual void s4_on_exit();
  274. virtual unsigned int s4_on_event(FSMEvent* e);
  275. virtual void s5_on_entry();
  276. virtual void s5_on_exit();
  277. virtual unsigned int s5_on_event(FSMEvent* e);
  278. virtual void s6_on_entry();
  279. virtual void s6_on_exit();
  280. virtual unsigned int s6_on_event(FSMEvent* e);
  281. virtual void s7_on_entry();
  282. virtual void s7_on_exit();
  283. virtual unsigned int s7_on_event(FSMEvent* e);
  284. virtual void s8_on_entry() {
  285. m_eDevStatus = DEVICE_STATUS_NOCFG;
  286. SetLastUserCode(HSPScanner_UserErrorCode_DLLNAME_NOCFG);
  287. }
  288. virtual void s8_on_exit() {
  289. m_eDevStatus = DEVICE_STATUS_NORMAL;
  290. }
  291. virtual unsigned int s8_on_event(FSMEvent* e);
  292. virtual void OnStateTrans(int iSrcState, int iDstState);
  293. int StartPreview(SpReqAnsContext<HSPScannerService_StartPreview_Req,
  294. HSPScannerService_StartPreview_Ans>::Pointer ctx);
  295. ErrorCodeEnum SetPreview(SpReqAnsContext<HSPScannerService_StartPreview_Req,
  296. HSPScannerService_StartPreview_Ans>::Pointer ctx);
  297. int StopPreview(SpReqAnsContext<HSPScannerService_CancelPreview_Req,
  298. HSPScannerService_CancelPreview_Ans>::Pointer ctx);
  299. bool ResizeImage(CSimpleStringA fileName);
  300. int ScanImage(SpReqAnsContext<HSPScannerService_ScanImage_Req,
  301. HSPScannerService_ScanImage_Ans>::Pointer ctx);
  302. int ScanImageEx(SpReqAnsContext<HSPScannerService_ScanImageEx_Req,
  303. HSPScannerService_ScanImageEx_Ans>::Pointer ctx);
  304. int ShowProperty(SpReqAnsContext<HSPScannerService_ShowProperty_Req,
  305. HSPScannerService_ShowProperty_Ans>::Pointer ctx);
  306. int SetProperty(SpReqAnsContext<HSPScannerService_SetProperty_Req,
  307. HSPScannerService_SetProperty_Ans>::Pointer ctx);
  308. int SetWinPos(SpReqAnsContext<HSPScannerService_SetWinPos_Req,
  309. HSPScannerService_SetWinPos_Ans>::Pointer ctx);
  310. int GetDevStatus(SpReqAnsContext<HSPScannerService_GetDevStatus_Req,
  311. HSPScannerService_GetDevStatus_Ans>::Pointer ctx);
  312. int GetDevInfo(SpReqAnsContext<HSPScannerService_GetDevInfo_Req,
  313. HSPScannerService_GetDevInfo_Ans>::Pointer ctx);
  314. ErrorCodeEnum OnDevExit();
  315. void SetLastUserCode(DWORD dwCode = 0)
  316. {
  317. dwLastUserCode = dwCode;
  318. }
  319. DWORD GetLastUserCode() const
  320. {
  321. return dwLastUserCode;
  322. }
  323. LPCTSTR MapCode2RTAString(DWORD dwValue = 0);
  324. private:
  325. int m_version, m_batch;
  326. ErrorCodeEnum m_ecSelfTest;
  327. DWORD m_dwErroCode;
  328. BOOL m_bOperating;
  329. int m_nTickTimes;
  330. int m_nFatalTimes;
  331. int m_nSrcState;
  332. int m_nRecX, m_nRecY, m_nRecW;
  333. CSimpleStringA m_csDllName;
  334. CSimpleStringA m_csDllFullPath;
  335. CSimpleStringA m_csDevNo;
  336. CSimpleStringA m_csPort, m_csBuadrate;
  337. DevStateEnum m_eDevStatus;
  338. EvtType m_desiredAction;
  339. CSimpleStringA m_csMachineType;
  340. DevCategoryInfo m_devCat;
  341. DWORD dwLastUserCode;
  342. DWORD m_dwMaxImageSize;
  343. public:
  344. DWORD GetCustLastErrorCode() { return m_dwErroCode; }
  345. void SetCustLastErrorCode(DWORD dwVal = 0) { m_dwErroCode = dwVal; }
  346. ErrorCodeEnum TryToOpenDevice();
  347. private:
  348. BOOL GetCurImageName(CSimpleStringA& csImagName, bool bExt = false);
  349. BOOL DelAndGetNewFileName(CSimpleStringA& csfileName);
  350. ErrorCodeEnum DeleteFileIfExisted(LPCTSTR fileName);
  351. // --Josephus at 16:33:57 20161214
  352. // 0: disconnected;
  353. // 1: connected;
  354. // -1: invalid;
  355. int IsDevConnected()
  356. {
  357. if(!m_hDevHelper || !m_bOpened) return -1;
  358. HspsDevStatus status = {0};
  359. if(m_hDevHelper->GetDevStatus(status) == Error_Succeed)
  360. {
  361. if(status.isConnected == 0)
  362. return 0;
  363. else
  364. return 1;
  365. }
  366. return -1;
  367. }
  368. void InitialMaxResizeValue();
  369. };
  370. struct StartPreviewTask : public ITaskSp
  371. {
  372. CHSPScannerFSM* m_fsm;
  373. SpReqAnsContext<HSPScannerService_StartPreview_Req, HSPScannerService_StartPreview_Ans>::Pointer m_ctx;
  374. StartPreviewTask(CHSPScannerFSM* fsm): m_fsm(fsm){}
  375. void Process()
  376. {
  377. FSMEvent* pEvt = new FSMEvent(USER_EVT_STARTPREVIEW_FINISHED);
  378. pEvt->param1 = m_fsm->StartPreview(m_ctx);
  379. m_fsm->PostEventFIFO(pEvt);
  380. return;
  381. }
  382. void SetContext(
  383. SpReqAnsContext<HSPScannerService_StartPreview_Req,
  384. HSPScannerService_StartPreview_Ans>::Pointer ctx)
  385. {
  386. m_ctx = ctx;
  387. return;
  388. }
  389. };
  390. struct SetPropertyInPreviewTask : public ITaskSp
  391. {
  392. CHSPScannerFSM* m_fsm;
  393. SpReqAnsContext<HSPScannerService_StartPreview_Req, HSPScannerService_StartPreview_Ans>::Pointer m_ctx;
  394. SetPropertyInPreviewTask(CHSPScannerFSM* fsm): m_fsm(fsm){}
  395. void Process()
  396. {
  397. FSMEvent* pEvt = new FSMEvent(USER_EVT_SETPROPERTYINVIEW_FINISHED);
  398. ErrorCodeEnum eRet = m_fsm->SetPreview(m_ctx);
  399. m_ctx->Answer(eRet);
  400. if(ISSUCCEEDED(eRet))
  401. pEvt->param1 = 0;
  402. else
  403. pEvt->param1 = 1;
  404. m_fsm->PostEventFIFO(pEvt);
  405. return;
  406. }
  407. void SetContext(
  408. SpReqAnsContext<HSPScannerService_StartPreview_Req,
  409. HSPScannerService_StartPreview_Ans>::Pointer ctx)
  410. {
  411. m_ctx = ctx;
  412. return;
  413. }
  414. };
  415. struct StopPreviewTask : public ITaskSp
  416. {
  417. CHSPScannerFSM* m_fsm;
  418. SpReqAnsContext<HSPScannerService_CancelPreview_Req,
  419. HSPScannerService_CancelPreview_Ans>::Pointer m_ctx;
  420. StopPreviewTask(CHSPScannerFSM* fsm): m_fsm(fsm){}
  421. void Process()
  422. {
  423. FSMEvent* pEvt = new FSMEvent(USER_EVT_STOPPREVIEW_FINISHED);
  424. pEvt->param1 = m_fsm->StopPreview(m_ctx);
  425. m_fsm->PostEventFIFO(pEvt);
  426. return;
  427. }
  428. void SetContext(
  429. SpReqAnsContext<HSPScannerService_CancelPreview_Req,
  430. HSPScannerService_CancelPreview_Ans>::Pointer ctx)
  431. {
  432. m_ctx = ctx;
  433. return;
  434. }
  435. };
  436. struct ScanImageTask : public ITaskSp
  437. {
  438. CHSPScannerFSM* m_fsm;
  439. SpReqAnsContext<HSPScannerService_ScanImage_Req,
  440. HSPScannerService_ScanImage_Ans>::Pointer m_ctx;
  441. ScanImageTask(CHSPScannerFSM* fsm): m_fsm(fsm){}
  442. void Process()
  443. {
  444. FSMEvent* pEvt = new FSMEvent(USER_EVT_SCANIMAGEFINISHED);
  445. pEvt->param1 = m_fsm->ScanImage(m_ctx);
  446. m_fsm->PostEventFIFO(pEvt);
  447. return;
  448. }
  449. void SetContext(
  450. SpReqAnsContext<HSPScannerService_ScanImage_Req,
  451. HSPScannerService_ScanImage_Ans>::Pointer ctx)
  452. {
  453. m_ctx = ctx;
  454. return;
  455. }
  456. };
  457. struct ScanImageExTask : public ITaskSp
  458. {
  459. CHSPScannerFSM* m_fsm;
  460. SpReqAnsContext<HSPScannerService_ScanImageEx_Req,
  461. HSPScannerService_ScanImageEx_Ans>::Pointer m_ctx;
  462. ScanImageExTask(CHSPScannerFSM* fsm): m_fsm(fsm){}
  463. void Process()
  464. {
  465. FSMEvent* pEvt = new FSMEvent(USER_EVT_SCANIMAGEFINISHED);
  466. pEvt->param1 = m_fsm->ScanImageEx(m_ctx);
  467. m_fsm->PostEventFIFO(pEvt);
  468. return;
  469. }
  470. void SetContext(
  471. SpReqAnsContext<HSPScannerService_ScanImageEx_Req,
  472. HSPScannerService_ScanImageEx_Ans>::Pointer ctx)
  473. {
  474. m_ctx = ctx;
  475. return;
  476. }
  477. };
  478. struct ShowPropertyTask : public ITaskSp
  479. {
  480. CHSPScannerFSM* m_fsm;
  481. SpReqAnsContext<HSPScannerService_ShowProperty_Req,
  482. HSPScannerService_ShowProperty_Ans>::Pointer m_ctx;
  483. ShowPropertyTask(CHSPScannerFSM* fsm): m_fsm(fsm){}
  484. void Process()
  485. {
  486. FSMEvent* pEvt = new FSMEvent(USER_EVT_SHOWPROPERTY_FINISHED);
  487. pEvt->param1 = m_fsm->ShowProperty(m_ctx);
  488. m_fsm->PostEventFIFO(pEvt);
  489. return;
  490. }
  491. void SetContext(
  492. SpReqAnsContext<HSPScannerService_ShowProperty_Req,
  493. HSPScannerService_ShowProperty_Ans>::Pointer ctx)
  494. {
  495. m_ctx = ctx;
  496. return;
  497. }
  498. };
  499. struct SetPropertyTask : public ITaskSp
  500. {
  501. CHSPScannerFSM* m_fsm;
  502. SpReqAnsContext<HSPScannerService_SetProperty_Req,
  503. HSPScannerService_SetProperty_Ans>::Pointer m_ctx;
  504. SetPropertyTask(CHSPScannerFSM* fsm): m_fsm(fsm){}
  505. void Process()
  506. {
  507. m_fsm->SetProperty(m_ctx);
  508. return;
  509. }
  510. void SetContext(
  511. SpReqAnsContext<HSPScannerService_SetProperty_Req,
  512. HSPScannerService_SetProperty_Ans>::Pointer ctx)
  513. {
  514. m_ctx = ctx;
  515. return;
  516. }
  517. };
  518. struct SetWinPosTask : public ITaskSp
  519. {
  520. CHSPScannerFSM* m_fsm;
  521. SpReqAnsContext<HSPScannerService_SetWinPos_Req,
  522. HSPScannerService_SetWinPos_Ans>::Pointer m_ctx;
  523. SetWinPosTask(CHSPScannerFSM* fsm): m_fsm(fsm){}
  524. void Process()
  525. {
  526. m_fsm->SetWinPos(m_ctx);
  527. return;
  528. }
  529. void SetContext(
  530. SpReqAnsContext<HSPScannerService_SetWinPos_Req,
  531. HSPScannerService_SetWinPos_Ans>::Pointer ctx)
  532. {
  533. m_ctx = ctx;
  534. return;
  535. }
  536. };
  537. struct GetDevStatusTask : public ITaskSp
  538. {
  539. CHSPScannerFSM* m_fsm;
  540. SpReqAnsContext<HSPScannerService_GetDevStatus_Req,
  541. HSPScannerService_GetDevStatus_Ans>::Pointer m_ctx;
  542. GetDevStatusTask(CHSPScannerFSM* fsm): m_fsm(fsm){}
  543. void Process()
  544. {
  545. m_fsm->GetDevStatus(m_ctx);
  546. return;
  547. }
  548. void SetContext(
  549. SpReqAnsContext<HSPScannerService_GetDevStatus_Req,
  550. HSPScannerService_GetDevStatus_Ans>::Pointer ctx)
  551. {
  552. m_ctx = ctx;
  553. return;
  554. }
  555. };
  556. struct GetDevInfoTask : public ITaskSp
  557. {
  558. CHSPScannerFSM* m_fsm;
  559. SpReqAnsContext<HSPScannerService_GetDevInfo_Req,
  560. HSPScannerService_GetDevInfo_Ans>::Pointer m_ctx;
  561. GetDevInfoTask(CHSPScannerFSM* fsm): m_fsm(fsm){}
  562. void Process()
  563. {
  564. m_fsm->GetDevInfo(m_ctx);
  565. return;
  566. }
  567. void SetContext(
  568. SpReqAnsContext<HSPScannerService_GetDevInfo_Req,
  569. HSPScannerService_GetDevInfo_Ans>::Pointer ctx)
  570. {
  571. m_ctx = ctx;
  572. return;
  573. }
  574. };
  575. struct OpenDeviceTask : public ITaskSp
  576. {
  577. CHSPScannerFSM* m_fsm;
  578. OpenDeviceTask(CHSPScannerFSM* fsm) : m_fsm(fsm) {}
  579. void Process()
  580. {
  581. if (!m_fsm->m_bOpened) {
  582. if (Error_Succeed == m_fsm->TryToOpenDevice()) {
  583. m_fsm->PostEventFIFO(new FSMEvent(USER_EVT_OPENSUCC));
  584. }
  585. }
  586. }
  587. };
  588. #endif //_HSPSCANNER_FSM_H_