Module_ChkSysTask.c 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. /*
  2. * CheckTask.c
  3. *
  4. * Created on: 2021年9月22日
  5. * Author: 8513
  6. */
  7. #include <stdio.h> /*標準輸入輸出定義*/
  8. #include <stdlib.h> /*標準函數庫定義*/
  9. #include <string.h>
  10. #include <stdint.h>
  11. #include <sys/types.h>
  12. #include <dirent.h>
  13. #include "../Config.h"
  14. #include "../Log/log.h"
  15. #include "../Define/define.h"
  16. #include "../ShareMemory/shmMem.h"
  17. #include "Module_ChkSysTask.h"
  18. struct SysConfigData *pSysConfig = NULL;
  19. struct SysInfoData *pSysInfo = NULL;
  20. struct OCPP16Data *ShmOCPP16Data = NULL;
  21. struct ChargingInfoData *pAcChargingInfo = NULL;
  22. static struct ChargingInfoData *pDcChargingInfo = NULL;
  23. struct SysConfigAndInfo *ShmSysConfigAndInfo;
  24. struct StatusCodeData *ShmStatusCodeData;
  25. static DcCommonInfo *ShmDcCommonData = NULL;
  26. bool Taskconutstring(char *src, char *taskname)
  27. {
  28. bool result = false;
  29. if (src == NULL || strlen(src) == 0)
  30. return result;
  31. if (strstr(src, taskname) != NULL &&
  32. strstr(src, "grep") == NULL &&
  33. strstr(src, "[") == NULL)
  34. {
  35. result = true;
  36. }
  37. return result;
  38. }
  39. int GetProcessCount(char *procName)
  40. {
  41. int result = 0;
  42. FILE *fp;
  43. char cmd[256];
  44. char buf[256];
  45. sprintf(cmd, "ps -ef |grep %s", procName);
  46. fp = popen(cmd, "r");
  47. if(fp != NULL)
  48. {
  49. while(fgets(buf, sizeof(buf), fp) != NULL)
  50. {
  51. if (Taskconutstring(buf, procName))
  52. result++;
  53. }
  54. }
  55. pclose(fp);
  56. return result;
  57. }
  58. unsigned char CheckSystemTask(unsigned char systemPage)
  59. {
  60. unsigned char result = 0;
  61. unsigned char count_lcmComm = 0;
  62. unsigned char count_main = GetProcessCount("main");
  63. unsigned char count_evComm = GetProcessCount("Module_EvComm");
  64. unsigned char count_interComm = GetProcessCount("Module_InternalComm");
  65. unsigned char count_eventComm = GetProcessCount("Module_EventLogging");
  66. unsigned char count_primaryComm = GetProcessCount("Module_PrimaryComm");
  67. if (SelectGunAction == 1)
  68. count_lcmComm = GetProcessCount("Module_LcmWistronControl");
  69. else
  70. count_lcmComm = GetProcessCount("Module_LcmControl");
  71. unsigned char count_doComm = GetProcessCount("Module_DoComm");
  72. unsigned char count_produceComm = GetProcessCount("Module_ProduceUtils");
  73. unsigned char count_updateFW = GetProcessCount("Module_UpdateFW");
  74. unsigned char count_DcMeter = GetProcessCount("Module_DcMeter");
  75. //if (systemPage != _LCM_FIX )
  76. {
  77. if (count_main < _SYSTEM_TASK_COUNT_MAIN )
  78. {
  79. ///*
  80. system("/usr/bin/fuser -k /dev/watchdog");
  81. sleep(1);
  82. system("echo V > /dev/watchdog");
  83. system("killall main");
  84. system("killall Module_EventLogging");
  85. system("killall Module_PrimaryComm");
  86. system("killall Module_EvComm");
  87. if (SelectGunAction == 1)
  88. system("killall Module_LcmWistronControl");
  89. else
  90. system("killall Module_LcmControl");
  91. system("killall Module_InternalComm");
  92. system("killall Module_DoComm");
  93. system("killall Module_ProduceUtils");
  94. system("killall Module_UpdateFW");
  95. if (pSysConfig->ModelName[3] == 'P')
  96. system("killall Module_DcMeter");
  97. sleep(3);
  98. system("/root/main &");
  99. sleep(20);
  100. //*/
  101. /*
  102. log_info("System task lost (CSU). ");
  103. sleep(3);
  104. system("reboot -f");
  105. */
  106. }
  107. else
  108. {
  109. if (count_evComm < _SYSTEM_TASK_COUNT_EVCOMM )
  110. {
  111. system("killall Module_EvComm");
  112. sleep(3);
  113. system("/root/Module_EvComm &");
  114. }
  115. if (count_interComm < _SYSTEM_TASK_COUNT_INTERNALCOMM )
  116. {
  117. system("killall Module_InternalComm");
  118. sleep(3);
  119. system("/root/Module_InternalComm &");
  120. }
  121. if (count_eventComm < _SYSTEM_TASK_COUNT_EVENTLOGGING )
  122. {
  123. system("killall Module_EventLogging");
  124. sleep(3);
  125. system("/root/Module_EventLogging &");
  126. }
  127. if (count_primaryComm < _SYSTEM_TASK_COUNT_PRIMARYCOMM )
  128. {
  129. system("killall Module_PrimaryComm");
  130. sleep(3);
  131. system("/root/Module_PrimaryComm &");
  132. }
  133. if (count_lcmComm < _SYSTEM_TASK_COUNT_LCM )
  134. {
  135. if (SelectGunAction == 1) {
  136. system("killall Module_LcmWistronControl");
  137. sleep(3);
  138. system("/root/Module_LcmWistronControl &");
  139. } else {
  140. system("killall Module_LcmControl");
  141. sleep(3);
  142. system("/root/Module_LcmControl &");
  143. }
  144. }
  145. if (count_doComm < _SYSTEM_TASK_COUNT_DOCOMM )
  146. {
  147. system("killall Module_DoComm");
  148. sleep(3);
  149. system("/root/Module_DoComm &");
  150. }
  151. if (count_produceComm < _SYSTEM_TASK_COUNT_PRODUCEUTILS )
  152. {
  153. system("killall Module_ProduceUtils");
  154. sleep(3);
  155. system("/root/Module_ProduceUtils &");
  156. }
  157. if (count_updateFW < _SYSTEM_TASK_COUNT_UPDATEFW )
  158. {
  159. system("killall Module_UpdateFW");
  160. sleep(3);
  161. system("/root/Module_UpdateFW &");
  162. }
  163. if (count_DcMeter < _SYSTEM_TASK_COUNT_DCMETER && pSysConfig->ModelName[3] == 'P' )
  164. {
  165. system("killall Module_DcMeter");
  166. sleep(3);
  167. system("/root/Module_DcMeter &");
  168. }
  169. }
  170. }
  171. if (count_main < _SYSTEM_TASK_COUNT_MAIN)
  172. result = _SYSTEM_TASK_LOST_ITEM_MAIN;
  173. else if (count_evComm < _SYSTEM_TASK_COUNT_EVCOMM)
  174. result = _SYSTEM_TASK_LOST_ITEM_EVCOMM;
  175. /* else if (count_psuComm < 2)
  176. result = 3; */
  177. else if (count_eventComm < _SYSTEM_TASK_COUNT_EVENTLOGGING )
  178. result = _SYSTEM_TASK_LOST_ITEM_EVENTLOG;
  179. else if (count_primaryComm < _SYSTEM_TASK_COUNT_PRIMARYCOMM)
  180. result = _SYSTEM_TASK_LOST_ITEM_PRIMARYCOMM;
  181. else if (count_lcmComm < _SYSTEM_TASK_COUNT_LCM)
  182. result = _SYSTEM_TASK_LOST_ITEM_LCMCONTROL;
  183. else if (count_interComm < _SYSTEM_TASK_COUNT_INTERNALCOMM )
  184. result = _SYSTEM_TASK_LOST_ITEM_INTERCOMM;
  185. else if (count_doComm < _SYSTEM_TASK_COUNT_DOCOMM)
  186. result = _SYSTEM_TASK_LOST_ITEM_DOCOMM;
  187. else if (count_produceComm < _SYSTEM_TASK_COUNT_PRODUCEUTILS)
  188. result = _SYSTEM_TASK_LOST_ITEM_PRODUCTUTILS;
  189. else if (count_updateFW < _SYSTEM_TASK_COUNT_UPDATEFW)
  190. result = _SYSTEM_TASK_LOST_ITEM_UPDATEFW;
  191. else if (count_DcMeter < _SYSTEM_TASK_COUNT_DCMETER && pSysConfig->ModelName[3] == 'P')
  192. result = _SYSTEM_TASK_LOST_ITEM_DCMETER;
  193. return result;
  194. }
  195. //===============================================
  196. // Check System Task alive
  197. // ==============================================
  198. void CheckSystemTaskAlive()
  199. {
  200. unsigned char lostId = CheckSystemTask(ShmSysConfigAndInfo->SysInfo.SystemPage);
  201. if (lostId != 0) {
  202. log_error("Check task(%d) lost",lostId);
  203. if (ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemTaskLost == NO) {
  204. if (lostId == _SYSTEM_TASK_LOST_ITEM_MAIN)
  205. log_error("System task lost (CSU). ");
  206. else if (lostId == _SYSTEM_TASK_LOST_ITEM_EVCOMM)
  207. log_error("System task lost (EVComm). ");
  208. // else if (lostId == _SYSTEM_TASK_LOST_ITEM_PSUCOMM)
  209. // PRINTF_FUNC("System task lost (PSU Task). ");
  210. else if (lostId == _SYSTEM_TASK_LOST_ITEM_EVENTLOG)
  211. log_error("System task lost (Event log). ");
  212. else if (lostId == _SYSTEM_TASK_LOST_ITEM_PRIMARYCOMM)
  213. log_error("System task lost (Primary). ");
  214. else if (lostId == _SYSTEM_TASK_LOST_ITEM_LCMCONTROL)
  215. log_error("System task lost (LCM Comm). ");
  216. else if (lostId == _SYSTEM_TASK_LOST_ITEM_INTERCOMM)
  217. log_error("System task lost (Internal Comm). ");
  218. else if (lostId == _SYSTEM_TASK_LOST_ITEM_DOCOMM)
  219. log_error("System task lost (Do Comm). ");
  220. else if (lostId == _SYSTEM_TASK_LOST_ITEM_PRODUCTUTILS)
  221. log_error("System task lost (ProcductUtils Comm). ");
  222. else if (lostId == _SYSTEM_TASK_LOST_ITEM_UPDATEFW)
  223. log_error("System task lost (Update FW) ");
  224. else if (lostId == _SYSTEM_TASK_LOST_ITEM_DCMETER)
  225. log_error("System task lost (DcMeter) ");
  226. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemTaskLost = YES;
  227. }
  228. } else
  229. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemTaskLost = NO;
  230. }
  231. void main(void)
  232. {
  233. if (CreateAllCsuShareMemory() == FAIL) {
  234. log_error("create share memory error");
  235. return ;
  236. }
  237. MappingGunChargingInfo("CheckSystem Task");
  238. pSysConfig = (struct SysConfigData *)GetShmSysConfigData();
  239. pSysInfo = (struct SysInfoData *)GetShmSysInfoData();
  240. ShmOCPP16Data = (struct OCPP16Data *)GetShmOCPP16Data();
  241. ShmSysConfigAndInfo = (struct SysConfigAndInfo *)GetShmSysConfigAndInfo();
  242. ShmStatusCodeData = (struct StatusCodeData *)GetShmStatusCodeData();
  243. ShmDcCommonData = (DcCommonInfo *)GetShmDcCommonData();
  244. while(true)
  245. {
  246. for (uint8_t gun = 0; gun < pSysConfig->TotalConnectorCount; gun++) {
  247. pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(gun);
  248. if (pDcChargingInfo->SystemStatus == SYS_MODE_UPDATE )
  249. continue;
  250. }
  251. if (ShmDcCommonData->debugflag == YES || pSysInfo->FirmwareUpdate) {
  252. sleep(3);
  253. continue;
  254. }
  255. CheckSystemTaskAlive();
  256. sleep(3);
  257. }
  258. }