WatchDogFSM.cpp 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. #include "stdafx.h"
  2. #include "SpBase.h"
  3. #include "WatchDogFSM.h"
  4. #include "GetDevInfoHelper.h"
  5. const int MAX_INIT_TRIES = 3;
  6. ErrorCodeEnum CWatchDogFSM::OnInit()
  7. {
  8. LOG_FUNCTION();
  9. GET_DEV_ENTITY_BASE_POINTER()->InitializeVendorLogSwitch();
  10. ErrorCodeEnum err = Load();
  11. return err;
  12. }
  13. ErrorCodeEnum CWatchDogFSM::OnExit()
  14. {
  15. LOG_FUNCTION();
  16. ErrorCodeEnum errCode = Error_Succeed;
  17. m_hDevHelper.TearDown();
  18. return errCode;
  19. }
  20. void CWatchDogFSM::s0_on_entry()
  21. {
  22. LOG_FUNCTION();
  23. }
  24. void CWatchDogFSM::s0_on_exit()
  25. {
  26. LOG_FUNCTION();
  27. }
  28. unsigned int CWatchDogFSM::s0_on_event(FSMEvent* pEvt)
  29. {
  30. Dbg("s0 evt %d",pEvt->iEvt);
  31. int rt = 0;
  32. switch(pEvt->iEvt)
  33. {
  34. case USER_EVT_STARTWATCH:
  35. {
  36. StartWatchEvent* swe = dynamic_cast<StartWatchEvent*>(pEvt);
  37. StartWatchTask* task = new StartWatchTask(this);
  38. task->ctx = swe->ctx;
  39. GetEntityBase()->GetFunction()->PostThreadPoolTask(task);
  40. pEvt->SetHandled();
  41. rt = 0;
  42. }
  43. break;
  44. case USER_EVT_QUIT:
  45. pEvt->SetHandled();
  46. rt = 0;
  47. break;
  48. default:
  49. break;
  50. }
  51. return rt;
  52. }
  53. void CWatchDogFSM::s1_on_entry()
  54. {
  55. LOG_FUNCTION();
  56. }
  57. void CWatchDogFSM::s1_on_exit()
  58. {
  59. LOG_FUNCTION();
  60. }
  61. unsigned int CWatchDogFSM::s1_on_event(FSMEvent* evt)
  62. {
  63. LOG_FUNCTION();
  64. int rt = 0;
  65. switch(evt->iEvt)
  66. {
  67. case USER_EVT_STARTWATCH_FINISHED:
  68. {
  69. rt = evt->param1;
  70. evt->SetHandled();
  71. }
  72. break;
  73. case USER_EVT_QUIT:
  74. evt->SetHandled();
  75. rt = 0;
  76. break;
  77. default:
  78. break;
  79. }
  80. return rt;
  81. }
  82. void CWatchDogFSM::s2_on_entry()
  83. {
  84. LOG_FUNCTION();
  85. }
  86. void CWatchDogFSM::s2_on_exit()
  87. {
  88. }
  89. unsigned int CWatchDogFSM::s2_on_event(FSMEvent* evt)
  90. {
  91. //LOG_FUNCTION();
  92. int rt = 0;
  93. switch(evt->iEvt)
  94. {
  95. case USER_EVT_REFRESH:
  96. {
  97. RefreshEvent* re = dynamic_cast<RefreshEvent*>(evt);
  98. RefreshTask* task = new RefreshTask(this);
  99. task->ctx = re->ctx;
  100. GetEntityBase()->GetFunction()->PostThreadPoolTask(task);
  101. evt->SetHandled();
  102. rt = 0;
  103. }
  104. break;
  105. case USER_EVT_REFRESH_FINISHED:
  106. {
  107. if (evt->param1 != 0)
  108. {
  109. Dbg("Refresh failed(%d).",evt->param1);
  110. rt = 1;
  111. }
  112. else
  113. rt = 0;
  114. evt->SetHandled();
  115. }
  116. break;
  117. case USER_EVT_STOPWATCH:
  118. {
  119. StopWatchEvent* swe = dynamic_cast<StopWatchEvent*>(evt);
  120. StopWatchTask* task = new StopWatchTask(this);
  121. task->ctx = swe->ctx;
  122. GetEntityBase()->GetFunction()->PostThreadPoolTask(task);
  123. evt->SetHandled();
  124. rt = 0;
  125. }
  126. break;
  127. case USER_EVT_QUIT:
  128. evt->SetHandled();
  129. break;
  130. default:
  131. break;
  132. }
  133. return rt;
  134. }
  135. void CWatchDogFSM::s3_on_entry()
  136. {
  137. LOG_FUNCTION();
  138. }
  139. void CWatchDogFSM::s3_on_exit()
  140. {
  141. LOG_FUNCTION();
  142. }
  143. unsigned int CWatchDogFSM::s3_on_event(FSMEvent* pEvt)
  144. {
  145. Dbg("s3 evt %d",pEvt->iEvt);
  146. int rt = 0;
  147. switch(pEvt->iEvt)
  148. {
  149. case USER_EVT_STOPWATCH_FINISHED:
  150. if (pEvt->param1 == 0)
  151. rt = 0;
  152. else
  153. rt = 1;
  154. pEvt->SetHandled();
  155. break;
  156. case USER_EVT_QUIT:
  157. pEvt->SetHandled();
  158. break;
  159. default:
  160. break;
  161. }
  162. return rt;
  163. }
  164. void CWatchDogFSM::s4_on_entry()
  165. {
  166. LOG_FUNCTION();
  167. }
  168. void CWatchDogFSM::s4_on_exit()
  169. {
  170. LOG_FUNCTION();
  171. }
  172. unsigned int CWatchDogFSM::s4_on_event(FSMEvent* evt)
  173. {
  174. LOG_FUNCTION();
  175. int rt = 0;
  176. switch(evt->iEvt)
  177. {
  178. case USER_EVT_QUIT:
  179. evt->SetHandled();
  180. break;
  181. default:
  182. break;
  183. }
  184. return rt;
  185. }
  186. ErrorCodeEnum CWatchDogFSM::Load()
  187. {
  188. CSimpleStringA dllName;
  189. auto pEntity = GET_DEV_ENTITY_BASE_POINTER();
  190. auto result = pEntity->ExtractVendorLibFullPath(dllName);
  191. if (result != Error_Succeed) {
  192. return result;
  193. }
  194. HARDWARE_ENTITY_SET_VENDOR_NAME(m_entCode, pEntity->vendorLibInfo.strVendor);
  195. Dbg("vendor library path: %s", (LPCTSTR)dllName);
  196. result = m_hDevHelper.LoadUp(dllName);
  197. if (result != Error_Succeed) {
  198. return result;
  199. }
  200. result = m_hDevHelper->DevOpen();
  201. if (result == Error_Succeed) {
  202. LOG_TRACE("WatchDog open succeed.");
  203. } else {
  204. LOG_WATCHDOG_ERROR_MSG_MACRO(result, DevOpen);
  205. return Error_DevConnFailed;
  206. }
  207. return Error_Succeed;
  208. }
  209. int CWatchDogFSM::StartWatch(SpReqAnsContext<WatchDogService_StartWatch_Req,WatchDogService_StartWatch_Ans>::Pointer ctx)
  210. {
  211. Dbg("fsm starwatch %d,%d", ctx->Req.Delay, ctx->Req.Timeout);
  212. if (ctx->Req.Delay < 0 || ctx->Req.Timeout < 0) {
  213. Dbg("error param");
  214. ctx->Answer(Error_Param);
  215. return 2;
  216. }
  217. ErrorCodeEnum eErrCode = m_hDevHelper->StartWatch(ctx->Req.Delay, ctx->Req.Timeout);
  218. if (eErrCode != Error_Succeed)
  219. {
  220. LOG_WATCHDOG_ERROR_MSG_MACRO(eErrCode, StartWatch);
  221. if (ctx != NULL)
  222. ctx->Answer(Error_Unexpect);
  223. return 1;
  224. }
  225. ctx->Answer(Error_Succeed);
  226. return 0;
  227. }
  228. int CWatchDogFSM::Refresh(SpReqAnsContext<WatchDogService_Refresh_Req,WatchDogService_Refresh_Ans>::Pointer ctx)
  229. {
  230. ErrorCodeEnum eErrCode = m_hDevHelper->RefreshDog();
  231. if (eErrCode != Error_Succeed)
  232. {
  233. LOG_WATCHDOG_ERROR_MSG_MACRO(eErrCode, RefreshDog);
  234. if (ctx != NULL)
  235. ctx->Answer(Error_Unexpect);
  236. return 1;
  237. }
  238. ctx->Answer(Error_Succeed);
  239. return 0;
  240. }
  241. int CWatchDogFSM::StopWatch(SpReqAnsContext<WatchDogService_StopWatch_Req,WatchDogService_StopWatch_Ans>::Pointer ctx)
  242. {
  243. ErrorCodeEnum eErrCode = m_hDevHelper->StopWatch();
  244. if (eErrCode != Error_Succeed)
  245. {
  246. LOG_WATCHDOG_ERROR_MSG_MACRO(eErrCode, StopWatch);
  247. if (ctx != NULL)
  248. ctx->Answer(Error_Unexpect);
  249. return 1;
  250. }
  251. if (ctx != NULL)
  252. ctx->Answer(Error_Succeed);
  253. return 0;
  254. }