HSPScannerFSM.h 18 KB

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