WatchDogClassImpl.cpp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502
  1. #include "WatchDogClassImpl.h"
  2. //#include "CkLog.h"
  3. LOG_EXTERN()
  4. //extern CTraceManager g_Trace;
  5. static DWORD dwWDTTime = 0;
  6. static DWORD dwDelayTime = 0;
  7. WatchDogClassImpl::WatchDogClassImpl():
  8. m_bDevOpen(false)
  9. ,m_bDelayTimer(false)
  10. ,m_bWDTTimer(false)
  11. ,m_dwTimeOut(0)
  12. ,m_dwRealTimeOut(0)
  13. ,m_dwWDTDelayTime(0)
  14. ,m_dwDelay(0)
  15. ,m_dwDelayTime(0)
  16. ,m_dwDelayRemain(0)
  17. {
  18. LOG_FUNCTION();
  19. m_TimerCtrl=new CTimerCtrl;
  20. m_wfd=NULL;
  21. }
  22. WatchDogClassImpl::~WatchDogClassImpl()
  23. {
  24. LOG_FUNCTION();
  25. m_bDevOpen = false;
  26. if(m_TimerCtrl!=nullptr)
  27. {
  28. delete m_TimerCtrl;
  29. }
  30. if(m_wfd!=NULL)
  31. {
  32. ioctl(m_wfd, WDIOC_SETOPTIONS, WDIOS_DISABLECARD) ;
  33. char stopmagic='v';
  34. write(m_wfd, &stopmagic, sizeof(stopmagic));
  35. close(m_wfd);
  36. }
  37. }
  38. ErrorCodeEnum WatchDogClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
  39. {
  40. LOG_FUNCTION();
  41. memset(&devCategory, 0, sizeof(devCategory));
  42. strcpy(devCategory.szModel, "FWID=MB330");
  43. strcpy(devCategory.szVendor, "keba");
  44. sprintf(devCategory.szType, "keba.WatchDog.MB330-1.0.0.5");
  45. char sPath[256], sFile[128] = {0};
  46. GetCurModulePath(sPath, sFile);
  47. short v1,v2;
  48. getFileVer(sFile, v1, v2);
  49. devCategory.version.wMajor = v1;
  50. devCategory.version.wMinor = v2;
  51. devCategory.version.wRevision = 0xffff;
  52. devCategory.version.wBuild = FILE_VERSION;
  53. if(m_bDevOpen)
  54. devCategory.eState = DEVICE_STATUS_NORMAL;
  55. else
  56. devCategory.eState = DEVICE_STATUS_NOT_READY;
  57. return Error_Succeed;
  58. }
  59. ErrorCodeEnum WatchDogClassImpl::Reset()
  60. {
  61. LOG_FUNCTION();
  62. if (!m_bDevOpen)
  63. {
  64. SaveErrorInfo("Reset m_bDevOpen is null!", Error_DevNotAvailable);
  65. LogE("WatchDogClassImpl::Reset()->Reset m_bDevOpen is nullline=%d",__LINE__);
  66. return Error_DevNotAvailable;
  67. }
  68. if(m_wfd == NULL)
  69. {
  70. SaveErrorInfo("Reset m_pMB330CRM is null!", Error_DevNotAvailable);
  71. LogE("WatchDogClassImpl::Reset()->Reset m_wfd is null! line=%d",__LINE__);
  72. return Error_DevNotAvailable;
  73. }
  74. ioctl(m_wfd, WDIOC_SETOPTIONS, WDIOS_DISABLECARD);
  75. LogM("WatchDogClassImpl::Reset()->Reset is Execute success! line=%d",__LINE__);
  76. return Error_Succeed;
  77. }
  78. ErrorCodeEnum WatchDogClassImpl::DevClose()
  79. {
  80. LOG_FUNCTION();
  81. m_bDevOpen = false;
  82. if(m_wfd == NULL)
  83. {
  84. SaveErrorInfo("DevClose m_pMB330CRM is null!", Error_DevNotAvailable);
  85. LogE(" WatchDogClassImpl::DevClose()-> DevClose m_wfd is null! line=%d",__LINE__);
  86. return Error_DevNotAvailable;
  87. }
  88. ioctl(m_wfd, WDIOC_SETOPTIONS, WDIOS_DISABLECARD) ;
  89. char stopmagic='v';
  90. write(m_wfd, &stopmagic, sizeof(stopmagic));
  91. close(m_wfd);
  92. LogE("WatchDogClassImpl::DevClose()-> DevClose DevClose is Execute success! line=%d",__LINE__);
  93. return Error_Succeed;
  94. }
  95. ErrorCodeEnum WatchDogClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
  96. {
  97. LOG_FUNCTION();
  98. devErrInfo.dwErrMsgLen = strlen(m_szErrMsg);
  99. memset(devErrInfo.szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
  100. memcpy(devErrInfo.szErrMsg, m_szErrMsg, std::min((uint32_t)devErrInfo.dwErrMsgLen,(uint32_t) MAX_DEV_ERROR_MSG_LEN));
  101. return Error_Succeed;
  102. }
  103. ErrorCodeEnum WatchDogClassImpl::DevOpen()
  104. {
  105. LOG_FUNCTION();
  106. int preset_timeout{0};
  107. if(m_bDevOpen)
  108. {
  109. SaveErrorInfo("DevOpen DevAlreadyConnected!");
  110. LogW("DevOpen DevAlreadyConnected! line=%d",__LINE__);
  111. return Error_DevAlreadyConnected;
  112. }
  113. ErrorCodeEnum eErr = Error_DevNotAvailable;
  114. if(m_wfd==NULL)
  115. {
  116. m_wfd = open(WATCHDOG0, O_RDWR);
  117. if (m_wfd == -1)
  118. {
  119. eErr = Error_Failed;
  120. LogE("WatchDogClassImpl::DevOpen Error_DevCommFailed=%d line=%d",eErr,__LINE__);
  121. return Error_Failed;
  122. }
  123. ioctl(m_wfd, WDIOC_GETTIMEOUT, &preset_timeout);
  124. LogW("ioctl(m_wfd, WDIOC_GETTIMEOUT, &preset_timeout=%d) line=%d",preset_timeout,__LINE__);
  125. int config_timeout=178;
  126. ioctl(m_wfd, WDIOC_SETTIMEOUT, &config_timeout);
  127. int flag=WDIOS_DISABLECARD;
  128. if(-1== ioctl(m_wfd, WDIOC_SETOPTIONS, &flag))
  129. {
  130. LogW("-1==ioctl(m_wfd, WDIOC_SETOPTIONS, &flag=WDIOS_DISABLECARD); line=%d",__LINE__);
  131. }
  132. else
  133. {
  134. LogW("ioctl(m_wfd, WDIOC_SETOPTIONS, WDIOS_DISABLECARD) sucessfull line=%d",__LINE__);
  135. }
  136. }
  137. if(m_wfd)
  138. {
  139. eErr = Error_Succeed;
  140. m_bDevOpen=true;
  141. /*测试能否获取看门狗打开后,默认的时间*/
  142. if(-1==ioctl(m_wfd, WDIOC_GETTIMEOUT, &preset_timeout))
  143. {
  144. LogW("-1==ioctl(m_wfd, WDIOC_GETTIMEOUT, &preset_timeout=%d) line=%d",preset_timeout,__LINE__);
  145. char stopmagic = 'V';
  146. if (write(m_wfd, &stopmagic, sizeof(stopmagic)) != sizeof(stopmagic))
  147. {
  148. LogW("Watchdog magic stop write error line=%d",__LINE__);
  149. }
  150. close(m_wfd);
  151. LogW("Watchdog gettimeout ioctl error %s line=%d", strerror(errno),__LINE__);
  152. return Error_Failed;
  153. }
  154. else
  155. {
  156. LogW("Watchdog preset timeout is %d line=%d",preset_timeout,__LINE__);
  157. }
  158. }
  159. else
  160. {
  161. eErr = Error_DevCommFailed;
  162. LogE("WatchDogClassImpl::DevOpen Error_DevCommFailed=%d line=%d",eErr,__LINE__);
  163. }
  164. return eErr;
  165. }
  166. ErrorCodeEnum WatchDogClassImpl::StartWatch(DWORD dwDelay, DWORD dwTimeout)
  167. {
  168. LOG_FUNCTION();
  169. LogE("StartWatch dwDelay=%d,dwTimeout=%d,line=%d",dwDelay,dwTimeout,__LINE__);
  170. if (!m_bDevOpen)
  171. {
  172. SaveErrorInfo("StartWatch m_bDevOpen is null!");
  173. LogE("StartWatch m_bDevOpen is null! line=%d",__LINE__);
  174. return Error_DevNotAvailable;
  175. }
  176. if(m_wfd == NULL)
  177. {
  178. SaveErrorInfo("StartWatch m_pMB330CRM is null!");
  179. LogE("StartWatch m_pMB330CRM is null! Error_DevNotAvailable=%d line=%d",Error_DevNotAvailable,__LINE__);
  180. return Error_DevNotAvailable;
  181. }
  182. //初始化全局静态变量
  183. dwWDTTime = 0 ;
  184. dwDelayTime = 0;
  185. if (dwTimeout > 178)
  186. {
  187. m_dwTimeOut = dwTimeout % 178;//设置看门狗的超时时间
  188. m_dwWDTDelayTime = (dwTimeout - m_dwTimeOut) / 178;//超过178秒后确定要延迟几次
  189. LogW("m_dwTimeOut=%d,m_dwWDTDelayTime=%d line=%d,",m_dwTimeOut,m_dwWDTDelayTime,__LINE__);
  190. }
  191. else if (dwTimeout > 0 && dwTimeout < 178)
  192. {
  193. m_dwTimeOut = dwTimeout;
  194. }
  195. m_dwRealTimeOut = dwTimeout;
  196. LogE("m_dwRealTimeOut=%d line=%d" ,m_dwRealTimeOut , __LINE__);
  197. //Start DelayTimer
  198. if ( dwDelay != 0 )
  199. {
  200. LogW("dwDelay != 0! line=%d",__LINE__);
  201. if (m_bDelayTimer)
  202. {
  203. m_TimerCtrl->EndTimer_ptr(m_mmDelayTimerID);
  204. LogW("StartWatch(dwDelay=%d, dwTimeout=%d) StartWatch Delay timeKillEvent m_mmDelayTimerID = %d line=%d ",dwDelay, dwTimeout,m_mmDelayTimerID, __LINE__);
  205. }
  206. m_dwDelayTime = dwDelay;
  207. LogW("m_dwDelayTime = %d line=%d !", m_dwDelayTime,__LINE__);
  208. m_TimerCtrl->SetTimerFunction(DelayTimer);
  209. m_TimerCtrl->StartTimer_ptr(m_mmDelayTimerID,this,dwDelay*1000,FALSE);
  210. LogW("WatchDogClassImpl::StartWatch->StartWatch Delay timeSetEvent m_mmDelayTimerID = %d line=%d !", m_mmDelayTimerID,__LINE__);
  211. m_bDelayTimer = true;
  212. m_dwDelay = dwDelay;
  213. }
  214. //处理延时为0的情况,dwTimeout >178的时候定时器调用WDTTimer函数
  215. else if(dwDelay==0)
  216. {
  217. LogW("dwDelay==0! line=%d",__LINE__);
  218. if ( dwTimeout == 0)
  219. {
  220. //SaveErrorInfo("StartWatch Check Param fail!");
  221. LogW("StartWatch Check two Param are 0! line=%d",__LINE__);
  222. int flag=WDIOS_ENABLECARD;
  223. if(-1== ioctl(m_wfd, WDIOC_SETOPTIONS, &flag))
  224. {
  225. LogW("-1==ioctl(m_wfd, WDIOC_SETOPTIONS, &flag=WDIOS_ENABLECARD); line=%d",__LINE__);
  226. }
  227. dwTimeout=1;
  228. LogW("dwTimeout=%d, line=%d",dwTimeout,__LINE__);
  229. ioctl(m_wfd,WDIOC_SETTIMEOUT,&dwTimeout);
  230. return Error_Succeed;
  231. }
  232. else if (dwTimeout > 0 && dwTimeout < 178)
  233. {
  234. LogW("StartWatch Check dwDelay == 0 && dwTimeout =%d 0! line=%d",dwTimeout,__LINE__);
  235. int flag=WDIOS_ENABLECARD;
  236. if(-1== ioctl(m_wfd, WDIOC_SETOPTIONS, &flag))
  237. {
  238. LogW("-1==ioctl(m_wfd, WDIOC_SETOPTIONS, &flag=WDIOS_ENABLECARD); line=%d",__LINE__);
  239. }
  240. LogW("dwTimeout=%d, line=%d",dwTimeout,__LINE__);
  241. ioctl(m_wfd,WDIOC_SETTIMEOUT,&dwTimeout);
  242. return Error_Succeed;
  243. }
  244. else if (dwTimeout > 178)
  245. {
  246. //Start WDTTimer
  247. if (m_bWDTTimer)
  248. {
  249. m_TimerCtrl->EndTimer_ptr(m_mmWDTTimerID);
  250. LogW("WatchDogClassImpl::StartWatch->StartWatch no Delay Timeout timeKillEvent m_mmWDTTimerID = %d ! line=%d", m_mmDelayTimerID ,__LINE__);
  251. }
  252. //m_mmWDTTimerID = timeSetEvent( _TIMER_DELAY, 1, &WDTTimer, (DWORD)this, TIME_PERIODIC );
  253. m_TimerCtrl->SetTimerFunction(WDTTimer);
  254. m_TimerCtrl->StartTimer_ptr(m_mmWDTTimerID,this,_TIMER_DELAY,TRUE);//TRUE表示循环定时器
  255. LogW(" m_TimerCtrl->StartTimer_ptr(m_mmWDTTimerID,this,dwDelay*1000=%d,TRUE) ! line=%d", dwDelay*1000,__LINE__);
  256. m_bWDTTimer = true;
  257. }
  258. }
  259. LogW(" WatchDogClassImpl::StartWatch->StartWatch is Execute success!,line=%d",__LINE__);
  260. return Error_Succeed;
  261. }
  262. ErrorCodeEnum WatchDogClassImpl::StopWatch()
  263. {
  264. LOG_FUNCTION();
  265. if (!m_bDevOpen)
  266. {
  267. SaveErrorInfo("StopWatch m_bDevOpen is null!");
  268. LogE(" WatchDogClassImpl::StopWatch()->StopWatch m_bDevOpen is null !");
  269. return Error_DevNotAvailable;
  270. }
  271. if ( m_bDelayTimer )
  272. {
  273. dwDelayTime = 0;
  274. //timeKillEvent(m_mmDelayTimerID);
  275. m_TimerCtrl->EndTimer_ptr(m_mmDelayTimerID);
  276. LogW(" WatchDogClassImpl::StopWatch()->Delay timeKillEvent m_mmDelayTimerID = %d !", m_mmDelayTimerID );
  277. m_bDelayTimer = false;
  278. }
  279. if (m_bWDTTimer)
  280. {
  281. dwWDTTime = 0;
  282. //timeKillEvent(m_mmWDTTimerID);
  283. m_TimerCtrl->EndTimer_ptr(m_mmWDTTimerID);
  284. LogW(" WatchDogClassImpl::StopWatch()->WDTTimer timeKillEvent m_mmWDTTimerID = %d !", m_mmWDTTimerID);
  285. m_bWDTTimer = false;
  286. }
  287. if (!m_bDelayTimer && !m_bWDTTimer)
  288. {
  289. //m_pMB330CRM->StopWDT();
  290. int flag = WDIOS_DISABLECARD;
  291. ioctl(m_wfd, WDIOC_SETOPTIONS, &flag);
  292. char stopmagic = 'V';
  293. write(m_wfd, &stopmagic, sizeof(stopmagic));
  294. }
  295. LogW("WatchDogClassImpl::StopWatch()->StopWatch is Execute success! !");
  296. return Error_Succeed;
  297. }
  298. ErrorCodeEnum WatchDogClassImpl::RefreshDog()
  299. {
  300. LOG_FUNCTION();
  301. if (!m_bDevOpen)
  302. {
  303. SaveErrorInfo("RefreshDog m_bDevOpen is null!");
  304. LogW("WatchDogClassImpl::RefreshDog()->RefreshDog m_bDevOpen is false! line=%d",__LINE__);
  305. return Error_DevNotAvailable;
  306. }
  307. if(m_wfd == NULL)
  308. {
  309. SaveErrorInfo("RefreshDog m_pMB330CRM is null!");
  310. LogE(" WatchDogClassImpl::RefreshDog()->RefreshDog m_wfd is null! line=%d",__LINE__);
  311. return Error_DevNotAvailable;
  312. }
  313. if ( m_bDelayTimer)
  314. {
  315. m_TimerCtrl->EndTimer_ptr(m_mmDelayTimerID);
  316. LogW("WatchDogClassImpl::RefreshDog()->RefreshDog m_bDelayTimer timeKillEvent m_mmDelayTimerID = %d !", m_mmDelayTimerID);
  317. m_TimerCtrl->SetTimerFunction(DelayTimer);
  318. m_TimerCtrl->StartTimer_ptr(m_mmDelayTimerID,this, m_dwDelay*1000,TRUE);
  319. LogW("WatchDogClassImpl::RefreshDog()->RefreshDog Delay < 178 timeSetEvent m_mmDelayTimerID = %d !", m_mmDelayTimerID );
  320. m_bDelayTimer = true;
  321. dwDelayTime = 0;
  322. return Error_Succeed;
  323. }
  324. //TimeOut > 178
  325. if (m_dwRealTimeOut > 178)
  326. {
  327. //m_pMB330CRM->StopWDT();
  328. if (m_bWDTTimer)
  329. {
  330. //timeKillEvent(m_mmWDTTimerID);
  331. m_TimerCtrl->EndTimer_ptr(m_mmWDTTimerID);
  332. LogW("WatchDogClassImpl::RefreshDog()->RefreshDog Kill m_mmWDTTimerID = %d !", m_mmWDTTimerID );
  333. }
  334. ioctl(m_wfd, WDIOC_KEEPALIVE, 0);
  335. m_TimerCtrl->SetTimerFunction(WDTTimer);
  336. m_TimerCtrl->StartTimer_ptr(m_mmDelayTimerID,this, _TIMER_DELAY,TRUE);
  337. LogW("WatchDogClassImpl::RefreshDog()->RefreshDog timeSetEvent m_mmWDTTimerID = %d !", m_mmWDTTimerID );
  338. m_bWDTTimer = true;
  339. dwWDTTime = 0;
  340. }
  341. else
  342. {
  343. //m_pMB330CRM->TimeOutFresh();
  344. ioctl(m_wfd, WDIOC_KEEPALIVE, 0);
  345. LogW("WatchDogClassImpl::RefreshDog()->RefreshDog TimeOutFresh ok!");
  346. }
  347. LogW("WatchDogClassImpl::RefreshDog()->RefreshDog is Execute success!");
  348. return Error_Succeed;
  349. }
  350. void WatchDogClassImpl::SaveErrorInfo(CHAR *errMsg, int errCode)
  351. {
  352. LOG_FUNCTION();
  353. memset(m_szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
  354. sprintf(m_szErrMsg, "%s[%d]", errMsg, errCode);
  355. LogE("SaveErrorInfo(errMsg=%s, errCode=%d)",errMsg,errCode);
  356. }
  357. void WatchDogClassImpl::DelayTimer(sigval_t ptr)
  358. {
  359. LOG_FUNCTION();
  360. WatchDogClassImpl *pThis = (WatchDogClassImpl *)ptr.sival_ptr;
  361. static bool bTimeSet = false;
  362. // if (pThis->m_dwDelayTime > 0 && !bTimeSet)
  363. // {
  364. // dwDelayTime++ ;
  365. // if (dwDelayTime < pThis->m_dwDelayTime)
  366. // {
  367. // return;
  368. // }
  369. // //timeKillEvent(pThis->m_mmDelayTimerID);
  370. // pThis->m_TimerCtrl->EndTimer_ptr(pThis->m_mmDelayTimerID);
  371. // if (pThis->m_dwDelayRemain > 0 && !bTimeSet)
  372. // {
  373. // //pThis->m_mmDelayTimerID = timeSetEvent( pThis->m_dwDelayRemain*1000, 1, &DelayTimer, (DWORD)pThis, TIME_ONESHOT );
  374. // pThis->m_TimerCtrl->SetTimerFunction(DelayTimer);
  375. // pThis->m_TimerCtrl->StartTimer_ptr(pThis->m_mmDelayTimerID,pThis,pThis->m_dwDelayRemain*1000,FALSE);
  376. // LogW("WatchDogClassImpl::DelayTimer->DelayTimer TimeOut timeSetEvent m_mmWDTTimerID = %d ! TIME_ONESHOT line=%d ", pThis->m_mmWDTTimerID ,__LINE__);
  377. // pThis->m_bDelayTimer = true;
  378. // bTimeSet = true;
  379. // if (bTimeSet)
  380. // {
  381. // return;
  382. // }
  383. // }
  384. // }
  385. //Start WDTTimer
  386. if(0==pThis->m_dwRealTimeOut)
  387. {
  388. LogW("pThis->m_dwRealTimeOut==0 line=%d",__LINE__);
  389. int flag=WDIOS_ENABLECARD;
  390. if(-1== ioctl(pThis->m_wfd, WDIOC_SETOPTIONS, &flag))
  391. {
  392. LogW("-1==ioctl(m_wfd, WDIOC_SETOPTIONS, &flag=WDIOS_ENABLECARD); line=%d",__LINE__);
  393. }
  394. pThis->m_dwRealTimeOut=1;
  395. LogW("pThis->m_dwRealTimeOut=%d, line=%d",pThis->m_dwRealTimeOut,__LINE__);
  396. ioctl(pThis->m_wfd,WDIOC_SETTIMEOUT,&pThis->m_dwRealTimeOut);
  397. //pThis->m_bWDTTimer = true;
  398. }
  399. else if (pThis->m_dwRealTimeOut >0 && pThis->m_dwRealTimeOut <178)
  400. {
  401. LogW("pThis->m_dwRealTimeOut==0 line=%d",__LINE__);
  402. int flag = WDIOS_ENABLECARD;
  403. ioctl(pThis->m_wfd,WDIOC_SETOPTIONS,&flag);
  404. LogW(" ioctl(pThis->m_wfd,WDIOC_SETOPTIONS,&flag=WDIOS_ENABLECARD) line=%d", __LINE__ );
  405. ioctl(pThis->m_wfd,WDIOC_SETTIMEOUT,&pThis->m_dwTimeOut);
  406. LogW("ioctl(pThis->m_wfd,WDIOC_SETTIMEOUT,&pThis->m_dwTimeOut= %d line=%d!) ",pThis->m_dwTimeOut ,__LINE__);
  407. }
  408. else if (pThis->m_dwRealTimeOut > 178)
  409. {
  410. LogW("pThis->m_dwRealTimeOut==0 line=%d",__LINE__);
  411. pThis->m_TimerCtrl->SetTimerFunction(WDTTimer);
  412. pThis->m_TimerCtrl->StartTimer_ptr(pThis->m_mmWDTTimerID,pThis,_TIMER_DELAY,TRUE);
  413. LogW("WatchDogClassImpl::DelayTimer->DelayTimer TimeOut timeSetEvent m_mmWDTTimerID = %d ! TIME_PERIODIC line=%d ", pThis->m_mmWDTTimerID ,__LINE__);
  414. pThis->m_bWDTTimer = true;
  415. }
  416. pThis->m_TimerCtrl->EndTimer_ptr(pThis->m_mmDelayTimerID);
  417. LogW(" WatchDogClassImpl::DelayTimer->DelayTimer Kill m_mmDelayTimerID = %d line=%d!", pThis->m_mmDelayTimerID ,__LINE__);
  418. pThis->m_bDelayTimer = false;
  419. bTimeSet = false;
  420. dwDelayTime = 0;
  421. return;
  422. }
  423. void WatchDogClassImpl::WDTTimer(sigval_t ptr)
  424. {
  425. LOG_FUNCTION();
  426. WatchDogClassImpl *pThis = (WatchDogClassImpl *)ptr.sival_ptr;
  427. dwWDTTime++ ;
  428. if (dwWDTTime < pThis->m_dwWDTDelayTime)
  429. {
  430. return;
  431. }
  432. //Set WDT
  433. //pThis->m_pMB330CRM->SetWDT(true, (BYTE)(pThis->m_dwTimeOut));
  434. int flag = WDIOS_ENABLECARD;
  435. ioctl(pThis->m_wfd,WDIOC_SETOPTIONS,&flag);
  436. LogW(" ioctl(pThis->m_wfd,WDIOC_SETOPTIONS,&flag=WDIOS_ENABLECARD) line=%d", __LINE__ );
  437. ioctl(pThis->m_wfd,WDIOC_SETTIMEOUT,&(pThis->m_dwRealTimeOut));
  438. LogW(" ioctl(pThis->m_wfd,WDIOC_SETTIMEOUT,pThis->m_dwTimeOut=%d) line=%d", pThis->m_mmDelayTimerID,__LINE__ );
  439. //timeKillEvent(pThis->m_mmWDTTimerID);
  440. pThis->m_TimerCtrl->EndTimer_ptr(pThis->m_mmWDTTimerID);
  441. LogW("pThis->m_TimerCtrl->EndTimer_ptr(pThis->m_mmWDTTimerID); line=%d",__LINE__ );
  442. pThis->m_bWDTTimer = false;
  443. dwWDTTime = 0;
  444. }