HSPScannerFSM.h 31 KB

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