HSPScannerFSM.h 27 KB

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