HSPScannerFSM.h 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983
  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. enum EvtType
  19. {
  20. USER_EVT_STARTPREVIEW = (EVT_USER + 1),
  21. USER_EVT_STARTPREVIEW_FINISHED,
  22. USER_EVT_SETPROPERTYINVIEW_FINISHED,
  23. USER_EVT_STARTPREVIEW_JS,
  24. USER_EVT_STARTPREVIEW_JS_DONE,
  25. USER_EVT_CANCELPREVIEW_JS,
  26. USER_EVT_CANCELPREVIEW_JS_DONE,
  27. USER_EVT_SCANIMAGE_JS,
  28. USER_EVT_SCANIMAGE_JS_DONE,
  29. USER_EVT_SETPARAM_JS,
  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_GOTOHELL,
  49. USER_EVT_QUIT,
  50. USER_EVT_INIT,
  51. USER_EVT_INIT_FINISHED
  52. };
  53. namespace JS
  54. {
  55. struct PreviewSettings
  56. {
  57. short rotate;
  58. short scan;
  59. short color;
  60. short pos;
  61. short pos_x;
  62. short pos_y;
  63. short pos_w;
  64. //0:do nothing,1:show, 2:hide
  65. short view;
  66. PreviewSettings(const HSPScannerService_SetParamJS_Req& rhs) :rotate(rhs.rotate), scan(rhs.scan), color(rhs.color), pos(rhs.pos)
  67. , pos_x(rhs.pos_x), pos_y(rhs.pos_y), pos_w(rhs.pos_w),view(0) {}
  68. PreviewSettings(const HSPScannerService_StartPreviewJS_Req& rhs) :rotate(rhs.rotate), scan(rhs.scan), color(rhs.color), pos(rhs.pos)
  69. , pos_x(rhs.pos_x), pos_y(rhs.pos_y), pos_w(rhs.pos_w),view(0) {}
  70. PreviewSettings(bool show) :rotate(0), scan(0), color(0), pos(0), pos_x(0), pos_y(0), pos_w(0), view(show ? 1 : 2) {}
  71. bool IsAvailable() const {
  72. return (rotate != 0 || scan != 0 || color != 0 || pos != 0);
  73. }
  74. void SetDisplay(bool display) { if (display) view = 1; else view = 2; }
  75. };
  76. }
  77. class CHSPScannerFSM : public CCommDevFSM<CHSPScannerFSM, CHSPSClass>, public IFSMStateHooker
  78. {
  79. public:
  80. CHSPScannerFSM(void);
  81. ~CHSPScannerFSM(void);
  82. virtual ErrorCodeEnum OnInit();
  83. virtual ErrorCodeEnum OnExit();
  84. void SelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionContext> pTransactionContext);
  85. enum {
  86. sIdle, sPreview, sProperty, sFault, sPicture, sFault_Offline, sHidePreview, sExit, sInit
  87. };
  88. BEGIN_FSM_STATE(CHSPScannerFSM)
  89. FSM_STATE_ENTRY(sIdle, "Idle", s0_Idle_on_entry, s0_Idle_on_exit, s0_Idle_on_event)
  90. FSM_STATE_ENTRY(sPreview, "Previewing", s1_Preview_on_entry, s1_Preview_on_exit, s1_Preview_on_event)
  91. FSM_STATE_ENTRY(sProperty, "Property", s2_on_entry, s2_on_exit, s2_on_event)
  92. FSM_STATE_ENTRY(sFault, "Failed", s3_Failed_on_entry, s3_Failed_on_exit, s3_Failed_on_event)
  93. FSM_STATE_ENTRY(sPicture, "Picturing", s4_ScanImage_on_entry, s4_ScanImage_on_exit, s4_ScanImage_on_event)
  94. FSM_STATE_ENTRY(sFault_Offline, "DeviceOff", s5_DeviceOff_on_entry, s5_DeviceOff_on_exit, s5_DeviceOff_on_event)
  95. FSM_STATE_ENTRY(sHidePreview, "HidePreview", s6_HidePreview_on_entry, s6_HidePreview_on_exit, s6_HidePreview_on_event)
  96. FSM_STATE_ENTRY(sExit, "Exit", s7_Exit_on_entry, s7_Exit_on_exit, s7_Exit_on_event)
  97. FSM_STATE_ENTRY(sInit, "Init", s8_Init_on_entry, s8_Init_on_exit, s8_Init_on_event)
  98. END_FSM_STATE()
  99. BEGIN_FSM_RULE(CHSPScannerFSM, sIdle)
  100. //2 reserved in sIdle state.
  101. FSM_RULE_ENTRY(sIdle, sPreview, USER_EVT_STARTPREVIEW_FINISHED, 0) //成功预览
  102. FSM_RULE_ENTRY(sIdle, sFault, USER_EVT_STARTPREVIEW_FINISHED, 1) //预览失败
  103. FSM_RULE_ENTRY(sIdle, sIdle, USER_EVT_STARTPREVIEW_FINISHED, 2) // 错误还不足够严重,停留在当前状态
  104. FSM_RULE_ENTRY(sFault, sPreview, USER_EVT_STARTPREVIEW_FINISHED, 0)
  105. FSM_RULE_ENTRY(sFault, sIdle, USER_EVT_RESET, 0)
  106. //FSM_RULE_ENTRY(sFault, sFault, USER_EVT_RESET, 1)
  107. FSM_RULE_ENTRY(sFault, sPreview, USER_EVT_RESET, 2)
  108. FSM_RULE_ENTRY(sPreview, sProperty, USER_EVT_SHOWPROPERTY, 0)
  109. FSM_RULE_ENTRY_ANY(sProperty, sPreview, USER_EVT_SHOWPROPERTY_FINISHED)
  110. //3 reserved in sPreview state.
  111. FSM_RULE_ENTRY(sPreview, sFault, USER_EVT_STOPPREVIEW_FINISHED, 0)
  112. FSM_RULE_ENTRY(sPreview, sFault, USER_EVT_STOPPREVIEW_FINISHED, 4)
  113. // Try sHidePreview state --Josephus at 10:10:05 2016/11/22
  114. //FSM_RULE_ENTRY(sPreview, sIdle, USER_EVT_STOPPREVIEW_FINISHED, 1) //隐藏
  115. FSM_RULE_ENTRY(sPreview, sHidePreview, USER_EVT_STOPPREVIEW_FINISHED, 1)
  116. FSM_RULE_ENTRY(sPreview, sIdle, USER_EVT_STOPPREVIEW_FINISHED, 2) //关闭预览
  117. FSM_RULE_ENTRY(sPreview, sPreview, USER_EVT_STOPPREVIEW_FINISHED, 3) //错误还不足够严重,停留在当前状态
  118. FSM_RULE_ENTRY(sPreview, sPicture, USER_EVT_SCANIMAGE, 0)
  119. FSM_RULE_ENTRY(sPreview, sPicture, USER_EVT_SCANIMAGE_EX, 0)
  120. //5 reserved in sPicture state.
  121. FSM_RULE_ENTRY(sPicture, sPreview, USER_EVT_SCANIMAGEFINISHED, 1) //删除旧照片获取照片名称失败
  122. FSM_RULE_ENTRY(sPicture, sFault, USER_EVT_SCANIMAGEFINISHED, 2) //拍摄返回失败
  123. FSM_RULE_ENTRY(sPicture, sPreview, USER_EVT_SCANIMAGEFINISHED, 3) //EX 分配资源失败
  124. FSM_RULE_ENTRY(sPicture, sFault, USER_EVT_SCANIMAGEFINISHED, 4) //打开照片文件失败
  125. FSM_RULE_ENTRY(sPicture, sPreview, USER_EVT_SCANIMAGEFINISHED, 0) //成功拍摄
  126. // Try sHidePreview state. --Josephus at 11:13:02 2016/11/22
  127. FSM_RULE_ENTRY(sPicture, sHidePreview, USER_EVT_SCANIMAGEFINISHED, 6) //成功拍摄且做了隐藏操作
  128. FSM_RULE_ENTRY(sPicture, sPreview, USER_EVT_SCANIMAGEFINISHED, 5)
  129. FSM_RULE_ENTRY_ANY(sFault, sFault_Offline, USER_EVT_DISCONNECT)
  130. FSM_RULE_ENTRY(sFault_Offline, sIdle, EVT_TIMER, 1)
  131. FSM_RULE_ENTRY(sFault_Offline, sPreview, EVT_TIMER, 2)
  132. FSM_RULE_ENTRY(sFault_Offline, sHidePreview, EVT_TIMER, 3)
  133. FSM_RULE_ENTRY(sIdle, sFault_Offline, USER_EVT_DISCONNECT, 0)
  134. FSM_RULE_ENTRY(sPreview, sFault_Offline, USER_EVT_DISCONNECT, 0)
  135. FSM_RULE_ENTRY(sPicture, sFault_Offline, USER_EVT_DISCONNECT, 0)
  136. FSM_RULE_ENTRY(sHidePreview, sFault_Offline, USER_EVT_DISCONNECT, 0)
  137. FSM_RULE_ENTRY(sHidePreview, sPreview, USER_EVT_STARTPREVIEW_FINISHED, 0) //成功预览
  138. FSM_RULE_ENTRY(sHidePreview, sFault, USER_EVT_STARTPREVIEW_FINISHED, 1) //预览失败
  139. FSM_RULE_ENTRY(sHidePreview, sHidePreview, USER_EVT_STARTPREVIEW_FINISHED, 2) // 错误还不足够严重,停留在当前状态
  140. FSM_RULE_ENTRY(sHidePreview, sIdle, USER_EVT_STOPPREVIEW_FINISHED, 2) //关闭预览
  141. FSM_RULE_ENTRY(sHidePreview, sFault, USER_EVT_STOPPREVIEW_FINISHED, 0) //关闭预览失败
  142. FSM_RULE_ENTRY(sHidePreview, sHidePreview, USER_EVT_STOPPREVIEW_FINISHED, 3) //错误还不足够严重,停留在当前状态
  143. FSM_RULE_ENTRY_ANY(sPreview, sExit, USER_EVT_EXIT)
  144. FSM_RULE_ENTRY_ANY(sProperty, sExit, USER_EVT_EXIT)
  145. FSM_RULE_ENTRY_ANY(sHidePreview, sExit, USER_EVT_EXIT)
  146. FSM_RULE_ENTRY(sExit, sIdle, USER_EVT_EXIT_FINISHED, 0)
  147. FSM_RULE_ENTRY(sExit, sPreview, USER_EVT_EXIT_FINISHED, 2)
  148. FSM_RULE_ENTRY(sExit, sHidePreview, USER_EVT_EXIT_FINISHED, 3)
  149. FSM_RULE_ENTRY(sExit, sFault_Offline, USER_EVT_EXIT_FINISHED, 4)
  150. FSM_RULE_ENTRY(sExit, sFault, USER_EVT_EXIT_FINISHED, 1)
  151. FSM_RULE_ENTRY_ANY(sIdle, sInit, USER_EVT_INIT)
  152. FSM_RULE_ENTRY_ANY(sIdle, sFault, USER_EVT_GOTOHELL)
  153. /** JS Compoent [Gifur@20241114]*/
  154. FSM_RULE_ENTRY(sIdle, sPreview, USER_EVT_STARTPREVIEW_JS_DONE, 0)
  155. FSM_RULE_ENTRY(sIdle, sFault, USER_EVT_STARTPREVIEW_JS_DONE, 1) //预览失败
  156. FSM_RULE_ENTRY(sIdle, sIdle, USER_EVT_STARTPREVIEW_JS_DONE, 2) // 错误还不足够严重,停留在当前状态
  157. FSM_RULE_ENTRY(sHidePreview, sPreview, USER_EVT_STARTPREVIEW_JS, 1)
  158. FSM_RULE_ENTRY(sPreview, sIdle, USER_EVT_CANCELPREVIEW_JS_DONE, 1) //取消预览成功
  159. FSM_RULE_ENTRY(sPreview, sHidePreview, USER_EVT_CANCELPREVIEW_JS_DONE, 2) //隐藏成功
  160. FSM_RULE_ENTRY(sPreview, sFault, USER_EVT_CANCELPREVIEW_JS_DONE, 4)
  161. FSM_RULE_ENTRY(sHidePreview, sIdle, USER_EVT_CANCELPREVIEW_JS_DONE, 0)
  162. FSM_RULE_ENTRY(sPreview, sHidePreview, USER_EVT_SCANIMAGE_JS_DONE, 2)
  163. FSM_RULE_ENTRY(sPreview, sFault, USER_EVT_SCANIMAGE_JS_DONE, 4)
  164. FSM_RULE_ENTRY_ANY(sPreview, sExit, EVT_MAINPAGE_DISPLAY)
  165. FSM_RULE_ENTRY_ANY(sHidePreview, sExit, EVT_MAINPAGE_DISPLAY)
  166. /** JS Compoent Done [Gifur@20241114]*/
  167. FSM_RULE_ENTRY_ANY(sInit, sIdle, USER_EVT_INIT_FINISHED)
  168. FSM_RULE_ENTRY_ANY(sInit, sFault, USER_EVT_GOTOHELL)
  169. END_FSM_RULE()
  170. virtual void s0_Idle_on_entry();
  171. virtual void s0_Idle_on_exit();
  172. virtual unsigned int s0_Idle_on_event(FSMEvent* e);
  173. virtual void s1_Preview_on_entry();
  174. virtual void s1_Preview_on_exit();
  175. virtual unsigned int s1_Preview_on_event(FSMEvent* e);
  176. virtual void s2_on_entry();
  177. virtual void s2_on_exit();
  178. virtual unsigned int s2_on_event(FSMEvent* e);
  179. virtual void s3_Failed_on_entry();
  180. virtual void s3_Failed_on_exit();
  181. virtual unsigned int s3_Failed_on_event(FSMEvent* e);
  182. virtual void s4_ScanImage_on_entry();
  183. virtual void s4_ScanImage_on_exit();
  184. virtual unsigned int s4_ScanImage_on_event(FSMEvent* e);
  185. virtual void s5_DeviceOff_on_entry();
  186. virtual void s5_DeviceOff_on_exit();
  187. virtual unsigned int s5_DeviceOff_on_event(FSMEvent* e);
  188. virtual void s6_HidePreview_on_entry();
  189. virtual void s6_HidePreview_on_exit();
  190. virtual unsigned int s6_HidePreview_on_event(FSMEvent* e);
  191. virtual void s7_Exit_on_entry();
  192. virtual void s7_Exit_on_exit();
  193. virtual unsigned int s7_Exit_on_event(FSMEvent* e);
  194. virtual void s8_Init_on_entry();
  195. virtual void s8_Init_on_exit();
  196. virtual unsigned int s8_Init_on_event(FSMEvent* e);
  197. virtual void OnStateTrans(int iSrcState, int iDstState);
  198. /** JS Component [Gifur@20241112]*/
  199. //0,succ;1 failed;
  200. int StartPreviewJS(SpReqAnsContext<HSPScannerService_StartPreviewJS_Req,
  201. HSPScannerService_StartPreviewJS_Ans>::Pointer ctx);
  202. //0,succ;1 failed;
  203. int CancelPreview(SpReqAnsContext<HSPScannerService_CancelPreviewJS_Req,
  204. HSPScannerService_CancelPreviewJS_Ans>::Pointer ctx);
  205. //0,succ;1 failed;
  206. int ScanImageJS(SpReqAnsContext<HSPScannerService_ScanImageJS_Req,
  207. HSPScannerService_ScanImageJS_Ans>::Pointer ctx);
  208. //0,succ;1 failed;
  209. int SetParam(SpReqAnsContext<HSPScannerService_SetParamJS_Req,
  210. HSPScannerService_SetParamJS_Ans>::Pointer ctx);
  211. /** JS Component Done [Gifur@20241112]*/
  212. //0,succ;1 failed
  213. int StartPreview(SpReqAnsContext<HSPScannerService_StartPreview_Req,
  214. HSPScannerService_StartPreview_Ans>::Pointer ctx);
  215. //1隐藏成功;4:隐藏失败;2:取消预览成功;0:取消预览失败
  216. int StopPreview(SpReqAnsContext<HSPScannerService_CancelPreview_Req,
  217. HSPScannerService_CancelPreview_Ans>::Pointer ctx);
  218. bool ResizeImage(const CSimpleStringA& fileName, int kbSize);
  219. int ScanImage(SpReqAnsContext<HSPScannerService_ScanImage_Req,
  220. HSPScannerService_ScanImage_Ans>::Pointer ctx);
  221. int ScanImageEx(SpReqAnsContext<HSPScannerService_ScanImageEx_Req,
  222. HSPScannerService_ScanImageEx_Ans>::Pointer ctx);
  223. int ShowProperty(SpReqAnsContext<HSPScannerService_ShowProperty_Req,
  224. HSPScannerService_ShowProperty_Ans>::Pointer ctx);
  225. int SetProperty(SpReqAnsContext<HSPScannerService_SetProperty_Req,
  226. HSPScannerService_SetProperty_Ans>::Pointer ctx);
  227. int SetWinPos(SpReqAnsContext<HSPScannerService_SetWinPos_Req,
  228. HSPScannerService_SetWinPos_Ans>::Pointer ctx);
  229. int GetDevStatus(SpReqAnsContext<HSPScannerService_GetDevStatus_Req,
  230. HSPScannerService_GetDevStatus_Ans>::Pointer ctx);
  231. int GetDevInfo(SpReqAnsContext<HSPScannerService_GetDevInfo_Req,
  232. HSPScannerService_GetDevInfo_Ans>::Pointer ctx);
  233. ErrorCodeEnum OnDevExit();
  234. void SetLastUserCode(DWORD dwCode = 0)
  235. {
  236. dwLastUserCode = dwCode;
  237. }
  238. DWORD GetLastUserCode() const
  239. {
  240. return dwLastUserCode;
  241. }
  242. int SetPreviewParam(int colorType, int rotateType, int scanType, bool abortIfFault = false);
  243. ErrorCodeEnum TryToOpenDevice();
  244. LPCTSTR MapCode2RTAString(DWORD dwValue);
  245. int Initial();
  246. protected:
  247. ErrorCodeEnum SetPreviewProperty(const JS::PreviewSettings& val, const char* logCode = "");
  248. void ToSwithLight(bool turnOn = true);
  249. private:
  250. ErrorCodeEnum m_ecSelfTest;
  251. int m_nFatalTimes;
  252. int m_nSrcState;
  253. int m_nRecX, m_nRecY, m_nRecW;
  254. EvtType m_desiredAction;
  255. DWORD dwLastUserCode;
  256. DWORD m_dwMaxImageSize;
  257. bool m_lightOn;
  258. private:
  259. BOOL GetCurImageName(CSimpleStringA& csImagName, bool bExt = false);
  260. BOOL DelAndGetNewFileName(CSimpleStringA& csfileName, bool bInBusiness = false);
  261. ErrorCodeEnum DeleteFileIfExisted(LPCTSTR fileName);
  262. ErrorCodeEnum GetDevStatusFromAdapter(HspsDevStatus& status, bool fromBusiness = false);
  263. // --Josephus at 16:33:57 20161214
  264. // to replace when JS
  265. // 0: disconnected;
  266. // 1: connected;
  267. // -1: invalid;
  268. int IsDevConnected()
  269. {
  270. if(!m_hDevHelper || !m_bOpened) return -1;
  271. HspsDevStatus status = {0};
  272. if(GetDevStatusFromAdapter(status) == Error_Succeed)
  273. return (status.isConnected == 0) ? 0 : 1;
  274. return -1;
  275. }
  276. void InitialMaxResizeValue();
  277. void ClearPictureFileSure()
  278. {
  279. CSimpleStringA strNoUsed(true);
  280. GetCurImageName(strNoUsed);
  281. DelAndGetNewFileName(strNoUsed);
  282. GetCurImageName(strNoUsed, true);
  283. DelAndGetNewFileName(strNoUsed);
  284. }
  285. };
  286. class StartPreviewEvent : public FSMEvent
  287. {
  288. public:
  289. StartPreviewEvent(CHSPScannerFSM* val): m_fsm(val), FSMEvent(USER_EVT_STARTPREVIEW) {}
  290. ~StartPreviewEvent() {}
  291. SpReqAnsContext<HSPScannerService_StartPreview_Req, HSPScannerService_StartPreview_Ans>::Pointer m_ctx;
  292. CHSPScannerFSM* m_fsm;
  293. virtual void OnUnhandled()
  294. {
  295. if (m_ctx != NULL)
  296. {
  297. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_StartPreview)
  298. .setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("Error_InvalidState in [%s] State", m_fsm->GetCurrStateName());
  299. m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
  300. }
  301. }
  302. };
  303. class StopPreviewEvent : public FSMEvent
  304. {
  305. public:
  306. StopPreviewEvent(CHSPScannerFSM* val): m_fsm(val), FSMEvent(USER_EVT_STOPPREVIEW) {}
  307. ~StopPreviewEvent() {}
  308. SpReqAnsContext<HSPScannerService_CancelPreview_Req,
  309. HSPScannerService_CancelPreview_Ans>::Pointer m_ctx;
  310. CHSPScannerFSM* m_fsm;
  311. virtual void OnUnhandled()
  312. {
  313. if (m_ctx != NULL)
  314. {
  315. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_CancelPreview)
  316. .setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("Error_InvalidState in [%s] State", m_fsm->GetCurrStateName());
  317. m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
  318. }
  319. }
  320. };
  321. class ScanImageEvent : public FSMEvent
  322. {
  323. public:
  324. ScanImageEvent(CHSPScannerFSM* val): m_fsm(val), FSMEvent(USER_EVT_SCANIMAGE) {}
  325. ~ScanImageEvent() {}
  326. SpReqAnsContext<HSPScannerService_ScanImage_Req,
  327. HSPScannerService_ScanImage_Ans>::Pointer m_ctx;
  328. CHSPScannerFSM* m_fsm;
  329. virtual void OnUnhandled()
  330. {
  331. if (m_ctx != NULL)
  332. {
  333. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_ScanImage)
  334. .setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("Error_InvalidState in [%s] State", m_fsm->GetCurrStateName());
  335. m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
  336. }
  337. }
  338. };
  339. class ScanImageExEvent : public FSMEvent
  340. {
  341. public:
  342. ScanImageExEvent(CHSPScannerFSM* val): m_fsm(val), FSMEvent(USER_EVT_SCANIMAGE_EX) {}
  343. ~ScanImageExEvent() {}
  344. SpReqAnsContext<HSPScannerService_ScanImageEx_Req,
  345. HSPScannerService_ScanImageEx_Ans>::Pointer m_ctx;
  346. CHSPScannerFSM* m_fsm;
  347. virtual void OnUnhandled()
  348. {
  349. if (m_ctx != NULL)
  350. {
  351. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_ScanImageEx)
  352. .setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("Error_InvalidState in [%s] State", m_fsm->GetCurrStateName());
  353. m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
  354. }
  355. }
  356. };
  357. class ShowPropertyEvent : public FSMEvent
  358. {
  359. public:
  360. ShowPropertyEvent(CHSPScannerFSM* val): m_fsm(val), FSMEvent(USER_EVT_SHOWPROPERTY) {}
  361. ~ShowPropertyEvent() {}
  362. SpReqAnsContext<HSPScannerService_ShowProperty_Req,
  363. HSPScannerService_ShowProperty_Ans>::Pointer m_ctx;
  364. CHSPScannerFSM* m_fsm;
  365. virtual void OnUnhandled()
  366. {
  367. if (m_ctx != NULL)
  368. {
  369. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_ShowProperty)
  370. .setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("Error_InvalidState in [%s] State", m_fsm->GetCurrStateName());
  371. m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
  372. }
  373. }
  374. };
  375. class SetPropertyEvent : public FSMEvent
  376. {
  377. public:
  378. SetPropertyEvent(CHSPScannerFSM* val): m_fsm(val), FSMEvent(USER_EVT_SETPROPERTY) {}
  379. ~SetPropertyEvent() {}
  380. SpReqAnsContext<HSPScannerService_SetProperty_Req,
  381. HSPScannerService_SetProperty_Ans>::Pointer m_ctx;
  382. CHSPScannerFSM* m_fsm;
  383. virtual void OnUnhandled()
  384. {
  385. if (m_ctx != NULL)
  386. {
  387. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_SetProperty)
  388. .setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("Error_InvalidState in [%s] State", m_fsm->GetCurrStateName());
  389. m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
  390. }
  391. }
  392. };
  393. class SetWinPosEvent : public FSMEvent
  394. {
  395. public:
  396. SetWinPosEvent(CHSPScannerFSM* val): m_fsm(val), FSMEvent(USER_EVT_SETWINPOS) {}
  397. ~SetWinPosEvent() {}
  398. SpReqAnsContext<HSPScannerService_SetWinPos_Req,
  399. HSPScannerService_SetWinPos_Ans>::Pointer m_ctx;
  400. CHSPScannerFSM* m_fsm;
  401. virtual void OnUnhandled()
  402. {
  403. if (m_ctx != NULL)
  404. {
  405. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_SetWinPos)
  406. .setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("Error_InvalidState in [%s] State", m_fsm->GetCurrStateName());
  407. m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
  408. }
  409. }
  410. };
  411. class GetDevStatusEvent : public FSMEvent
  412. {
  413. public:
  414. GetDevStatusEvent(CHSPScannerFSM* val): m_fsm(val), FSMEvent(USER_EVT_GETSTATUS) {}
  415. ~GetDevStatusEvent() {}
  416. SpReqAnsContext<HSPScannerService_GetDevStatus_Req,
  417. HSPScannerService_GetDevStatus_Ans>::Pointer m_ctx;
  418. CHSPScannerFSM* m_fsm;
  419. virtual void OnUnhandled()
  420. {
  421. if (m_ctx != NULL)
  422. {
  423. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_GetDevStatus)
  424. .setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("Error_InvalidState in [%s] State", m_fsm->GetCurrStateName());
  425. m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
  426. }
  427. }
  428. };
  429. /** No use now [Gifur@2025318]*/
  430. class GetDevInfoEvent : public FSMEvent
  431. {
  432. public:
  433. GetDevInfoEvent(CHSPScannerFSM* val): m_fsm(val), FSMEvent(USER_EVT_GETINFO) {}
  434. ~GetDevInfoEvent() {}
  435. SpReqAnsContext<HSPScannerService_GetDevInfo_Req,
  436. HSPScannerService_GetDevInfo_Ans>::Pointer m_ctx;
  437. CHSPScannerFSM* m_fsm;
  438. virtual void OnUnhandled()
  439. {
  440. if (m_ctx != NULL)
  441. {
  442. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_GetDevInfo)
  443. .setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("Error_InvalidState in [%s] State", m_fsm->GetCurrStateName());
  444. m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
  445. }
  446. }
  447. };
  448. /** JS Component [Gifur@20241112]*/
  449. namespace JS {
  450. class StartPreviewEvent : public FSMEvent
  451. {
  452. public:
  453. StartPreviewEvent(CHSPScannerFSM* val): m_fsm(val), FSMEvent(USER_EVT_STARTPREVIEW_JS) {}
  454. ~StartPreviewEvent() {}
  455. SpReqAnsContext<HSPScannerService_StartPreviewJS_Req, HSPScannerService_StartPreviewJS_Ans>::Pointer m_ctx;
  456. CHSPScannerFSM* m_fsm;
  457. virtual void OnUnhandled()
  458. {
  459. if (m_ctx != NULL)
  460. {
  461. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_StartPreviewJS)
  462. .setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("StartPreviewEvent::Error_InvalidState in [%s] State", m_fsm->GetCurrStateName());
  463. m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
  464. }
  465. }
  466. };
  467. class CancelPreviewEvent : public FSMEvent
  468. {
  469. public:
  470. CancelPreviewEvent(CHSPScannerFSM* val): m_fsm(val), FSMEvent(USER_EVT_CANCELPREVIEW_JS) {}
  471. ~CancelPreviewEvent() {}
  472. SpReqAnsContext<HSPScannerService_CancelPreviewJS_Req, HSPScannerService_CancelPreviewJS_Ans>::Pointer m_ctx;
  473. CHSPScannerFSM* m_fsm;
  474. virtual void OnUnhandled()
  475. {
  476. if (m_ctx != NULL)
  477. {
  478. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_CancelPreviewJS)
  479. .setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("CancelPreviewEvent::Error_InvalidState in [%s] State", m_fsm->GetCurrStateName());
  480. m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
  481. }
  482. }
  483. };
  484. class ScanImageEvent : public FSMEvent
  485. {
  486. public:
  487. ScanImageEvent(CHSPScannerFSM* val): m_fsm(val), FSMEvent(USER_EVT_SCANIMAGE_JS) {}
  488. ~ScanImageEvent() {}
  489. SpReqAnsContext<HSPScannerService_ScanImageJS_Req, HSPScannerService_ScanImageJS_Ans>::Pointer m_ctx;
  490. CHSPScannerFSM* m_fsm;
  491. virtual void OnUnhandled()
  492. {
  493. if (m_ctx != NULL)
  494. {
  495. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_ScanImageJS)
  496. .setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("ScanImageEvent::Error_InvalidState in [%s] State", m_fsm->GetCurrStateName());
  497. m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
  498. }
  499. }
  500. };
  501. class SetParamEvent : public FSMEvent
  502. {
  503. public:
  504. SetParamEvent(CHSPScannerFSM* val): m_fsm(val), FSMEvent(USER_EVT_SETPARAM_JS) {}
  505. ~SetParamEvent() {}
  506. SpReqAnsContext<HSPScannerService_SetParamJS_Req, HSPScannerService_SetParamJS_Ans>::Pointer m_ctx;
  507. CHSPScannerFSM* m_fsm;
  508. virtual void OnUnhandled()
  509. {
  510. if (m_ctx != NULL)
  511. {
  512. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(HSPScannerService_LogCode_SetParamJS)
  513. .setResultCode(m_fsm->MapCode2RTAString(LOG_WARN_HSPS_INVALID_OPERATION))("SetParamEvent::Error_InvalidState in [%s] State", m_fsm->GetCurrStateName());
  514. m_ctx->Answer(Error_InvalidState, LOG_WARN_HSPS_INVALID_OPERATION);
  515. }
  516. }
  517. };
  518. }
  519. /** JS Component Done [Gifur@20241112]*/
  520. struct InitTask : public ITaskSp
  521. {
  522. CHSPScannerFSM* fsm;
  523. InitTask(CHSPScannerFSM* f) : fsm(f) {}
  524. void Process()
  525. {
  526. const int ret = fsm->Initial();
  527. if (ret == 0) {
  528. FSMEvent* e = new FSMEvent(USER_EVT_INIT_FINISHED);
  529. fsm->PostEventFIFO(e);
  530. }
  531. else {
  532. FSMEvent* e = new FSMEvent(USER_EVT_GOTOHELL);
  533. fsm->PostEventFIFO(e);
  534. }
  535. }
  536. };
  537. struct StartPreviewTask : public ITaskSp
  538. {
  539. CHSPScannerFSM* m_fsm;
  540. SpReqAnsContext<HSPScannerService_StartPreview_Req, HSPScannerService_StartPreview_Ans>::Pointer m_ctx;
  541. StartPreviewTask(CHSPScannerFSM* fsm): m_fsm(fsm){}
  542. void Process()
  543. {
  544. FSMEvent* pEvt = new FSMEvent(USER_EVT_STARTPREVIEW_FINISHED);
  545. pEvt->param1 = m_fsm->StartPreview(m_ctx);
  546. m_fsm->PostEventFIFO(pEvt);
  547. return;
  548. }
  549. void SetContext(
  550. SpReqAnsContext<HSPScannerService_StartPreview_Req,
  551. HSPScannerService_StartPreview_Ans>::Pointer ctx)
  552. {
  553. m_ctx = ctx;
  554. return;
  555. }
  556. };
  557. struct SetPropertyInPreviewTask : public ITaskSp
  558. {
  559. CHSPScannerFSM* m_fsm;
  560. SpReqAnsContext<HSPScannerService_StartPreview_Req, HSPScannerService_StartPreview_Ans>::Pointer m_ctx;
  561. SetPropertyInPreviewTask(CHSPScannerFSM* fsm): m_fsm(fsm){}
  562. void Process()
  563. {
  564. FSMEvent* pEvt = new FSMEvent(USER_EVT_SETPROPERTYINVIEW_FINISHED);
  565. ErrorCodeEnum eRet;
  566. const int retCode = m_fsm->SetPreviewParam(m_ctx->Req.colorType, m_ctx->Req.rotateType, m_ctx->Req.scanType);
  567. if (retCode == 0)
  568. {
  569. eRet = Error_Succeed;
  570. }
  571. else {
  572. DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("SetPreviewParam return some wrong:0x%X", retCode);
  573. eRet = Error_DevCommFailed;
  574. }
  575. if (ISSUCCEEDED(eRet)) {
  576. pEvt->param1 = 0;
  577. m_ctx->Answer(eRet);
  578. }
  579. else {
  580. m_ctx->Answer(eRet, m_fsm->GetLastUserCode());
  581. pEvt->param1 = 1;
  582. }
  583. m_fsm->PostEventFIFO(pEvt);
  584. return;
  585. }
  586. void SetContext(
  587. SpReqAnsContext<HSPScannerService_StartPreview_Req,
  588. HSPScannerService_StartPreview_Ans>::Pointer ctx)
  589. {
  590. m_ctx = ctx;
  591. return;
  592. }
  593. };
  594. struct StopPreviewTask : public ITaskSp
  595. {
  596. CHSPScannerFSM* m_fsm;
  597. SpReqAnsContext<HSPScannerService_CancelPreview_Req,
  598. HSPScannerService_CancelPreview_Ans>::Pointer m_ctx;
  599. StopPreviewTask(CHSPScannerFSM* fsm): m_fsm(fsm){}
  600. void Process()
  601. {
  602. FSMEvent* pEvt = new FSMEvent(USER_EVT_STOPPREVIEW_FINISHED);
  603. pEvt->param1 = m_fsm->StopPreview(m_ctx);
  604. m_fsm->PostEventFIFO(pEvt);
  605. return;
  606. }
  607. void SetContext(
  608. SpReqAnsContext<HSPScannerService_CancelPreview_Req,
  609. HSPScannerService_CancelPreview_Ans>::Pointer ctx)
  610. {
  611. m_ctx = ctx;
  612. return;
  613. }
  614. };
  615. struct ScanImageTask : public ITaskSp
  616. {
  617. CHSPScannerFSM* m_fsm;
  618. SpReqAnsContext<HSPScannerService_ScanImage_Req,
  619. HSPScannerService_ScanImage_Ans>::Pointer m_ctx;
  620. ScanImageTask(CHSPScannerFSM* fsm): m_fsm(fsm){}
  621. void Process()
  622. {
  623. FSMEvent* pEvt = new FSMEvent(USER_EVT_SCANIMAGEFINISHED);
  624. pEvt->param1 = m_fsm->ScanImage(m_ctx);
  625. m_fsm->PostEventFIFO(pEvt);
  626. return;
  627. }
  628. void SetContext(
  629. SpReqAnsContext<HSPScannerService_ScanImage_Req,
  630. HSPScannerService_ScanImage_Ans>::Pointer ctx)
  631. {
  632. m_ctx = ctx;
  633. return;
  634. }
  635. };
  636. struct ScanImageExTask : public ITaskSp
  637. {
  638. CHSPScannerFSM* m_fsm;
  639. SpReqAnsContext<HSPScannerService_ScanImageEx_Req,
  640. HSPScannerService_ScanImageEx_Ans>::Pointer m_ctx;
  641. ScanImageExTask(CHSPScannerFSM* fsm): m_fsm(fsm){}
  642. void Process()
  643. {
  644. FSMEvent* pEvt = new FSMEvent(USER_EVT_SCANIMAGEFINISHED);
  645. pEvt->param1 = m_fsm->ScanImageEx(m_ctx);
  646. m_fsm->PostEventFIFO(pEvt);
  647. return;
  648. }
  649. void SetContext(
  650. SpReqAnsContext<HSPScannerService_ScanImageEx_Req,
  651. HSPScannerService_ScanImageEx_Ans>::Pointer ctx)
  652. {
  653. m_ctx = ctx;
  654. return;
  655. }
  656. };
  657. struct ShowPropertyTask : public ITaskSp
  658. {
  659. CHSPScannerFSM* m_fsm;
  660. SpReqAnsContext<HSPScannerService_ShowProperty_Req,
  661. HSPScannerService_ShowProperty_Ans>::Pointer m_ctx;
  662. ShowPropertyTask(CHSPScannerFSM* fsm): m_fsm(fsm){}
  663. void Process()
  664. {
  665. FSMEvent* pEvt = new FSMEvent(USER_EVT_SHOWPROPERTY_FINISHED);
  666. pEvt->param1 = m_fsm->ShowProperty(m_ctx);
  667. m_fsm->PostEventFIFO(pEvt);
  668. return;
  669. }
  670. void SetContext(
  671. SpReqAnsContext<HSPScannerService_ShowProperty_Req,
  672. HSPScannerService_ShowProperty_Ans>::Pointer ctx)
  673. {
  674. m_ctx = ctx;
  675. return;
  676. }
  677. };
  678. struct SetPropertyTask : public ITaskSp
  679. {
  680. CHSPScannerFSM* m_fsm;
  681. SpReqAnsContext<HSPScannerService_SetProperty_Req,
  682. HSPScannerService_SetProperty_Ans>::Pointer m_ctx;
  683. SetPropertyTask(CHSPScannerFSM* fsm): m_fsm(fsm){}
  684. void Process()
  685. {
  686. m_fsm->SetProperty(m_ctx);
  687. return;
  688. }
  689. void SetContext(
  690. SpReqAnsContext<HSPScannerService_SetProperty_Req,
  691. HSPScannerService_SetProperty_Ans>::Pointer ctx)
  692. {
  693. m_ctx = ctx;
  694. return;
  695. }
  696. };
  697. struct SetWinPosTask : public ITaskSp
  698. {
  699. CHSPScannerFSM* m_fsm;
  700. SpReqAnsContext<HSPScannerService_SetWinPos_Req,
  701. HSPScannerService_SetWinPos_Ans>::Pointer m_ctx;
  702. SetWinPosTask(CHSPScannerFSM* fsm): m_fsm(fsm){}
  703. void Process()
  704. {
  705. m_fsm->SetWinPos(m_ctx);
  706. return;
  707. }
  708. void SetContext(
  709. SpReqAnsContext<HSPScannerService_SetWinPos_Req,
  710. HSPScannerService_SetWinPos_Ans>::Pointer ctx)
  711. {
  712. m_ctx = ctx;
  713. return;
  714. }
  715. };
  716. struct GetDevStatusTask : public ITaskSp
  717. {
  718. CHSPScannerFSM* m_fsm;
  719. SpReqAnsContext<HSPScannerService_GetDevStatus_Req,
  720. HSPScannerService_GetDevStatus_Ans>::Pointer m_ctx;
  721. GetDevStatusTask(CHSPScannerFSM* fsm): m_fsm(fsm){}
  722. void Process()
  723. {
  724. m_fsm->GetDevStatus(m_ctx);
  725. return;
  726. }
  727. void SetContext(
  728. SpReqAnsContext<HSPScannerService_GetDevStatus_Req,
  729. HSPScannerService_GetDevStatus_Ans>::Pointer ctx)
  730. {
  731. m_ctx = ctx;
  732. return;
  733. }
  734. };
  735. struct GetDevInfoTask : public ITaskSp
  736. {
  737. CHSPScannerFSM* m_fsm;
  738. SpReqAnsContext<HSPScannerService_GetDevInfo_Req,
  739. HSPScannerService_GetDevInfo_Ans>::Pointer m_ctx;
  740. GetDevInfoTask(CHSPScannerFSM* fsm): m_fsm(fsm){}
  741. void Process()
  742. {
  743. m_fsm->GetDevInfo(m_ctx);
  744. return;
  745. }
  746. void SetContext(
  747. SpReqAnsContext<HSPScannerService_GetDevInfo_Req,
  748. HSPScannerService_GetDevInfo_Ans>::Pointer ctx)
  749. {
  750. m_ctx = ctx;
  751. return;
  752. }
  753. };
  754. struct ExitClearTask : public ITaskSp
  755. {
  756. CHSPScannerFSM* m_fsm;
  757. ExitClearTask(CHSPScannerFSM* fsm) : m_fsm(fsm) {}
  758. void Process()
  759. {
  760. FSMEvent* pEvt = new FSMEvent(USER_EVT_EXIT_FINISHED);
  761. if (ISSUCCEEDED(m_fsm->OnDevExit())) {
  762. pEvt->param1 = 0;
  763. }
  764. else {
  765. pEvt->param1 = 1;
  766. }
  767. m_fsm->PostEventFIFO(pEvt);
  768. return;
  769. }
  770. };
  771. /** JS Compoent [Gifur@20241112]*/
  772. namespace JS {
  773. struct StartPreviewTask : public ITaskSp
  774. {
  775. CHSPScannerFSM* m_fsm;
  776. SpReqAnsContext<HSPScannerService_StartPreviewJS_Req, HSPScannerService_StartPreviewJS_Ans>::Pointer m_ctx;
  777. StartPreviewTask(CHSPScannerFSM* fsm) : m_fsm(fsm) {}
  778. void Process()
  779. {
  780. FSMEvent* pEvt = new FSMEvent(USER_EVT_STARTPREVIEW_JS_DONE);
  781. pEvt->param1 = m_fsm->StartPreviewJS(m_ctx);
  782. m_fsm->PostEventFIFO(pEvt);
  783. return;
  784. }
  785. void SetContext(
  786. SpReqAnsContext<HSPScannerService_StartPreviewJS_Req,
  787. HSPScannerService_StartPreviewJS_Ans>::Pointer ctx)
  788. {
  789. m_ctx = ctx;
  790. return;
  791. }
  792. };
  793. struct CancelPreviewTask : public ITaskSp
  794. {
  795. CHSPScannerFSM* m_fsm;
  796. SpReqAnsContext<HSPScannerService_CancelPreviewJS_Req, HSPScannerService_CancelPreviewJS_Ans>::Pointer m_ctx;
  797. CancelPreviewTask(CHSPScannerFSM* fsm) : m_fsm(fsm) {}
  798. void Process()
  799. {
  800. FSMEvent* pEvt = new FSMEvent(USER_EVT_CANCELPREVIEW_JS_DONE);
  801. pEvt->param1 = m_fsm->CancelPreview(m_ctx);
  802. pEvt->param2 = m_ctx->Req.hide ? 1 : 0;
  803. m_fsm->PostEventFIFO(pEvt);
  804. return;
  805. }
  806. void SetContext(
  807. SpReqAnsContext<HSPScannerService_CancelPreviewJS_Req,
  808. HSPScannerService_CancelPreviewJS_Ans>::Pointer ctx)
  809. {
  810. m_ctx = ctx;
  811. return;
  812. }
  813. };
  814. struct ScanImageTask : public ITaskSp
  815. {
  816. CHSPScannerFSM* m_fsm;
  817. SpReqAnsContext<HSPScannerService_ScanImageJS_Req, HSPScannerService_ScanImageJS_Ans>::Pointer m_ctx;
  818. ScanImageTask(CHSPScannerFSM* fsm) : m_fsm(fsm) {}
  819. void Process()
  820. {
  821. FSMEvent* pEvt = new FSMEvent(USER_EVT_SCANIMAGE_JS_DONE);
  822. ////0,succ;1 failed;
  823. pEvt->param1 = m_fsm->ScanImageJS(m_ctx);
  824. ///1 说明隐藏,0说明关闭
  825. pEvt->param2 = m_ctx->Req.hide ? 1 : 0;
  826. m_fsm->PostEventFIFO(pEvt);
  827. return;
  828. }
  829. void SetContext(
  830. SpReqAnsContext<HSPScannerService_ScanImageJS_Req,
  831. HSPScannerService_ScanImageJS_Ans>::Pointer ctx)
  832. {
  833. m_ctx = ctx;
  834. return;
  835. }
  836. };
  837. struct SetParamTask : public ITaskSp
  838. {
  839. CHSPScannerFSM* m_fsm;
  840. SpReqAnsContext<HSPScannerService_SetParamJS_Req, HSPScannerService_SetParamJS_Ans>::Pointer m_ctx;
  841. SetParamTask(CHSPScannerFSM* fsm) : m_fsm(fsm) {}
  842. void Process()
  843. {
  844. m_fsm->SetParam(m_ctx);
  845. return;
  846. }
  847. void SetContext(
  848. SpReqAnsContext<HSPScannerService_SetParamJS_Req,
  849. HSPScannerService_SetParamJS_Ans>::Pointer ctx)
  850. {
  851. m_ctx = ctx;
  852. return;
  853. }
  854. };
  855. }
  856. #endif //_HSPSCANNER_FSM_H_