HSPScannerFSM.h 30 KB

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