Module_ChkSysTask.c 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  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. bool Taskconutstring(char *src, char *taskname)
  26. {
  27. bool result = false;
  28. if (src == NULL || strlen(src) == 0)
  29. return result;
  30. if (strstr(src, taskname) != NULL &&
  31. strstr(src, "grep") == NULL &&
  32. strstr(src, "[") == NULL)
  33. {
  34. result = true;
  35. }
  36. return result;
  37. }
  38. int GetProcessCount(char *procName)
  39. {
  40. int result = 0;
  41. FILE *fp;
  42. char cmd[256];
  43. char buf[256];
  44. sprintf(cmd, "ps -ef |grep %s", procName);
  45. fp = popen(cmd, "r");
  46. if(fp != NULL)
  47. {
  48. while(fgets(buf, sizeof(buf), fp) != NULL)
  49. {
  50. if (Taskconutstring(buf, procName))
  51. result++;
  52. }
  53. }
  54. pclose(fp);
  55. return result;
  56. }
  57. unsigned char CheckSystemTask(unsigned char systemPage)
  58. {
  59. unsigned char result = 0;
  60. unsigned char count_main = GetProcessCount("main");
  61. unsigned char count_evComm = GetProcessCount("Module_EvComm");
  62. unsigned char count_interComm = GetProcessCount("Module_InternalComm");
  63. unsigned char count_eventComm = GetProcessCount("Module_EventLogging");
  64. unsigned char count_primaryComm = GetProcessCount("Module_PrimaryComm");
  65. unsigned char count_lcmComm = GetProcessCount("Module_LcmControl");
  66. unsigned char count_doComm = GetProcessCount("Module_DoComm");
  67. unsigned char count_produceComm = GetProcessCount("Module_ProduceUtils");
  68. unsigned char count_updateFW = GetProcessCount("Module_UpdateFW");
  69. // if (systemPage == 0x09 || systemPage == 0x0A)
  70. {
  71. if (count_main < _SYSTEM_TASK_COUNT_MAIN )
  72. {
  73. system("killall Module_EventLogging");
  74. system("killall Module_PrimaryComm");
  75. system("killall Module_EvComm");
  76. system("killall Module_LcmControl");
  77. system("killall Module_InternalComm");
  78. system("killall Module_DoComm");
  79. system("killall Module_ProduceUtils");
  80. system("killall Module_UpdateFW");
  81. system("pkill main");
  82. sleep(1);
  83. system("echo V > /dev/watchdog");
  84. system("/usr/bin/run_evse_restart.sh");
  85. sleep(10);
  86. }
  87. else
  88. {
  89. if (count_evComm < _SYSTEM_TASK_COUNT_EVCOMM )
  90. {
  91. system("killall Module_EvComm");
  92. sleep(1);
  93. system("/root/Module_EvComm &");
  94. }
  95. if (count_interComm < _SYSTEM_TASK_COUNT_INTERNALCOMM )
  96. {
  97. system("killall Module_InternalComm");
  98. sleep(1);
  99. system("/root/Module_InternalComm &");
  100. }
  101. if (count_eventComm < _SYSTEM_TASK_COUNT_EVENTLOGGING )
  102. {
  103. system("killall Module_EventLogging");
  104. sleep(1);
  105. system("/root/Module_EventLogging &");
  106. }
  107. if (count_primaryComm < _SYSTEM_TASK_COUNT_PRIMARYCOMM )
  108. {
  109. system("killall Module_PrimaryComm");
  110. sleep(1);
  111. system("/root/Module_PrimaryComm &");
  112. }
  113. if (count_lcmComm < _SYSTEM_TASK_COUNT_LCM )
  114. {
  115. system("killall Module_LcmControl");
  116. sleep(1);
  117. system("/root/Module_LcmControl &");
  118. }
  119. if (count_doComm < _SYSTEM_TASK_COUNT_DOCOMM )
  120. {
  121. system("killall Module_DoComm");
  122. sleep(1);
  123. system("/root/Module_DoComm &");
  124. }
  125. if (count_produceComm < _SYSTEM_TASK_COUNT_PRODUCEUTILS )
  126. {
  127. system("killall Module_ProduceUtils");
  128. sleep(1);
  129. system("/root/Module_ProduceUtils &");
  130. }
  131. if (count_updateFW < _SYSTEM_TASK_COUNT_UPDATEFW )
  132. {
  133. system("killall Module_UpdateFW");
  134. sleep(1);
  135. system("/root/Module_UpdateFW &");
  136. }
  137. }
  138. }
  139. if (count_main < _SYSTEM_TASK_COUNT_MAIN)
  140. result = _SYSTEM_TASK_LOST_ITEM_MAIN;
  141. else if (count_evComm < _SYSTEM_TASK_COUNT_EVCOMM)
  142. result = _SYSTEM_TASK_LOST_ITEM_EVCOMM;
  143. /* else if (count_psuComm < 2)
  144. result = 3; */
  145. else if (count_eventComm < _SYSTEM_TASK_COUNT_EVENTLOGGING )
  146. result = _SYSTEM_TASK_LOST_ITEM_EVENTLOG;
  147. else if (count_primaryComm < _SYSTEM_TASK_COUNT_PRIMARYCOMM)
  148. result = _SYSTEM_TASK_LOST_ITEM_PRIMARYCOMM;
  149. else if (count_lcmComm < _SYSTEM_TASK_COUNT_LCM)
  150. result = _SYSTEM_TASK_LOST_ITEM_LCMCONTROL;
  151. else if (count_interComm < _SYSTEM_TASK_COUNT_INTERNALCOMM )
  152. result = _SYSTEM_TASK_LOST_ITEM_INTERCOMM;
  153. else if (count_doComm < _SYSTEM_TASK_COUNT_DOCOMM)
  154. result = _SYSTEM_TASK_LOST_ITEM_DOCOMM;
  155. else if (count_produceComm < _SYSTEM_TASK_COUNT_PRODUCEUTILS)
  156. result = _SYSTEM_TASK_LOST_ITEM_PRODUCTUTILS;
  157. else if (count_updateFW < _SYSTEM_TASK_COUNT_UPDATEFW)
  158. result = _SYSTEM_TASK_LOST_ITEM_UPDATEFW;
  159. return result;
  160. }
  161. //===============================================
  162. // Check System Task alive
  163. // ==============================================
  164. void CheckSystemTaskAlive()
  165. {
  166. unsigned char lostId = CheckSystemTask(ShmSysConfigAndInfo->SysInfo.SystemPage);
  167. if (lostId != 0) {
  168. log_info("Check task(%d) lost\n",lostId);
  169. if (ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemTaskLost == NO) {
  170. if (lostId == _SYSTEM_TASK_LOST_ITEM_MAIN)
  171. log_info("System task lost (CSU). \n");
  172. else if (lostId == _SYSTEM_TASK_LOST_ITEM_EVCOMM)
  173. log_info("System task lost (EVComm). \n");
  174. // else if (lostId == _SYSTEM_TASK_LOST_ITEM_PSUCOMM)
  175. // PRINTF_FUNC("System task lost (PSU Task). \n");
  176. else if (lostId == _SYSTEM_TASK_LOST_ITEM_EVENTLOG)
  177. log_info("System task lost (Event log). \n");
  178. else if (lostId == _SYSTEM_TASK_LOST_ITEM_PRIMARYCOMM)
  179. log_info("System task lost (Primary). \n");
  180. else if (lostId == _SYSTEM_TASK_LOST_ITEM_LCMCONTROL)
  181. log_info("System task lost (LCM Comm). \n");
  182. else if (lostId == _SYSTEM_TASK_LOST_ITEM_INTERCOMM)
  183. log_info("System task lost (Internal Comm). \n");
  184. else if (lostId == _SYSTEM_TASK_LOST_ITEM_DOCOMM)
  185. log_info("System task lost (Do Comm). \n");
  186. else if (lostId == _SYSTEM_TASK_LOST_ITEM_PRODUCTUTILS)
  187. log_info("System task lost (ProcductUtils Comm). \n");
  188. else if (lostId == _SYSTEM_TASK_LOST_ITEM_UPDATEFW)
  189. log_info("System task lost (Update FW) \n");
  190. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemTaskLost = YES;
  191. }
  192. } else
  193. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemTaskLost = NO;
  194. }
  195. void main(void)
  196. {
  197. if (CreateAllCsuShareMemory() == FAIL) {
  198. log_error("create share memory error\r\n");
  199. return FAIL;
  200. }
  201. pSysConfig = (struct SysConfigData *)GetShmSysConfigData();
  202. pSysInfo = (struct SysInfoData *)GetShmSysInfoData();
  203. ShmOCPP16Data = (struct OCPP16Data *)GetShmOCPP16Data();
  204. ShmSysConfigAndInfo = (struct SysConfigAndInfo *)GetShmSysConfigAndInfo();
  205. ShmStatusCodeData = (struct StatusCodeData *)GetShmStatusCodeData();
  206. MappingGunChargingInfo("CheckSystem Task");
  207. sleep(20);
  208. while(true)
  209. {
  210. for (uint8_t gun = 0; gun < pSysConfig->TotalConnectorCount; gun++) {
  211. pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(gun);
  212. if (pDcChargingInfo->SystemStatus == SYS_MODE_UPDATE )
  213. continue;
  214. }
  215. CheckSystemTaskAlive();
  216. sleep(3);
  217. }
  218. }