|
@@ -29,6 +29,7 @@
|
|
|
#include <math.h>
|
|
|
#include <stdbool.h>
|
|
|
#include <dirent.h>
|
|
|
+#include <signal.h>
|
|
|
|
|
|
#include "../Config.h"
|
|
|
#include "main.h"
|
|
@@ -40,6 +41,7 @@
|
|
|
#include "../Define/define.h"
|
|
|
#include "../ShareMemory/shmMem.h"
|
|
|
#include "../SelectGun/SelectGun.h"
|
|
|
+#include "CheckSystemTask.h"
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
static struct SysInfoData *pSysInfo = NULL;
|
|
@@ -71,13 +73,16 @@ static SelectGunInfo *ShmSelectGunInfo = NULL; //Jerry add
|
|
|
static EvBoardErrMsg gEvBoardErr = {0};
|
|
|
static ChillerTempErr gChillerTempErr = {0};
|
|
|
|
|
|
+struct SysConfigAndInfo *ShmSysConfigAndInfo;
|
|
|
+struct StatusCodeData *ShmStatusCodeData;
|
|
|
+
|
|
|
// for initial index to check EV board type is correct
|
|
|
uint8_t bd0_1_status = 0;
|
|
|
uint8_t bd0_2_status = 0;
|
|
|
uint8_t bd1_1_status = 0;
|
|
|
uint8_t bd1_2_status = 0;
|
|
|
|
|
|
-char *fwVersion = "V1.14.00.0000.00"; // "V0.16.00.0000.00";
|
|
|
+char *fwVersion = "V1.15.00.0000.00"; // "V0.16.00.0000.00";
|
|
|
|
|
|
//sqlite3 *localDb;
|
|
|
bool isDb_ready;
|
|
@@ -123,7 +128,8 @@ extern void GetMacAddress(void);
|
|
|
|
|
|
//WatchDog.c
|
|
|
extern void CreateWatchdog(void);
|
|
|
-extern void WriteWatchDogState(char *value);
|
|
|
+extern void TryCloseWatchdog(void);
|
|
|
+extern void TryFeedWatchdog(void);
|
|
|
|
|
|
//ZipFile.c
|
|
|
extern void zipLogFiles(void);
|
|
@@ -1631,7 +1637,11 @@ void _DetectPlugInTimeout(void)
|
|
|
ClearDetectPluginFlag();
|
|
|
|
|
|
sleep(1); //等待DoComm回報插槍訊號給主櫃
|
|
|
-
|
|
|
+#if defined DD360Audi || DD360 || DD360Combox
|
|
|
+ //pSysInfo->SystemPage = _LCM_COMPLETE;
|
|
|
+ setChargerMode(pSysInfo->CurGunSelected, S_TERMINATING);
|
|
|
+ return;
|
|
|
+#endif
|
|
|
systemPageRestoreInit();
|
|
|
}
|
|
|
|
|
@@ -1661,7 +1671,12 @@ void _DetectEvseChargingEnableTimeout(uint8_t gunIndex)
|
|
|
log_info("*********** _DetectEvseChargingEnableTimeout (GFD timeout) ***********\n");
|
|
|
//if (chargingInfo[gunIndex]->GroundFaultStatus != GFD_PASS)
|
|
|
{
|
|
|
+#if defined DD360Audi || DD360 || DD360Combox
|
|
|
+ pSysInfo->SystemPage = _LCM_COMPLETE;
|
|
|
+ setChargerMode(gunIndex, S_TERMINATING);
|
|
|
+#else
|
|
|
setChargerMode(gunIndex, MODE_IDLE);
|
|
|
+#endif
|
|
|
_AutoReturnTimeout();
|
|
|
}
|
|
|
}
|
|
@@ -1669,7 +1684,12 @@ void _DetectEvseChargingEnableTimeout(uint8_t gunIndex)
|
|
|
void _PrepareTimeout(uint8_t gunIndex)
|
|
|
{
|
|
|
log_info("*********** _PrepareTimeout ***********\n");
|
|
|
- setChargerMode(gunIndex, MODE_IDLE);
|
|
|
+#if defined DD360Audi || DD360 || DD360Combox
|
|
|
+ pSysInfo->SystemPage = _LCM_COMPLETE;
|
|
|
+ setChargerMode(gunIndex, S_TERMINATING);
|
|
|
+#else
|
|
|
+ setChargerMode(gunIndex, MODE_IDLE);
|
|
|
+#endif
|
|
|
pAlarmCode->AlarmEvents.bits.PsuNoResource = YES;
|
|
|
_AutoReturnTimeout();
|
|
|
}
|
|
@@ -1677,9 +1697,76 @@ void _PrepareTimeout(uint8_t gunIndex)
|
|
|
void _CcsPrechargeTimeout(uint8_t gunIndex)
|
|
|
{
|
|
|
log_info("*********** _CcsPrechargeTimeout ***********\n");
|
|
|
- setChargerMode(gunIndex, MODE_IDLE);
|
|
|
+#if defined DD360Audi || DD360 || DD360Combox
|
|
|
+ pSysInfo->SystemPage = _LCM_COMPLETE;
|
|
|
+ setChargerMode(gunIndex, S_TERMINATING);
|
|
|
+#else
|
|
|
+ setChargerMode(gunIndex, MODE_IDLE);
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
+//===============================================
|
|
|
+// Check System Task alive
|
|
|
+// ==============================================
|
|
|
+void CheckSystemTaskAlive()
|
|
|
+{
|
|
|
+ unsigned char lostId = CheckSystemTask(ShmSysConfigAndInfo->SysInfo.SystemPage);
|
|
|
+ if (lostId != 0) {
|
|
|
+ log_info("Check task(%d) lost\n",lostId);
|
|
|
+ if (ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemTaskLost == NO) {
|
|
|
+ if (lostId == _SYSTEM_TASK_LOST_ITEM_MAIN)
|
|
|
+ log_info("System task lost (CSU). \n");
|
|
|
+ else if (lostId == _SYSTEM_TASK_LOST_ITEM_EVCOMM)
|
|
|
+ log_info("System task lost (EVComm). \n");
|
|
|
+// else if (lostId == _SYSTEM_TASK_LOST_ITEM_PSUCOMM)
|
|
|
+// PRINTF_FUNC("System task lost (PSU Task). \n");
|
|
|
+ else if (lostId == _SYSTEM_TASK_LOST_ITEM_EVENTLOG)
|
|
|
+ log_info("System task lost (Event log). \n");
|
|
|
+ else if (lostId == _SYSTEM_TASK_LOST_ITEM_PRIMARYCOMM)
|
|
|
+ log_info("System task lost (Primary). \n");
|
|
|
+ else if (lostId == _SYSTEM_TASK_LOST_ITEM_LCMCONTROL)
|
|
|
+ log_info("System task lost (LCM Comm). \n");
|
|
|
+ else if (lostId == _SYSTEM_TASK_LOST_ITEM_INTERCOMM)
|
|
|
+ log_info("System task lost (Internal Comm). \n");
|
|
|
+ else if (lostId == _SYSTEM_TASK_LOST_ITEM_DOCOMM)
|
|
|
+ log_info("System task lost (Do Comm). \n");
|
|
|
+ else if (lostId == _SYSTEM_TASK_LOST_ITEM_PRODUCTUTILS)
|
|
|
+ log_info("System task lost (ProcductUtils Comm). \n");
|
|
|
+ ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemTaskLost = YES;
|
|
|
+ }
|
|
|
+ } else
|
|
|
+ ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemTaskLost = NO;
|
|
|
+}
|
|
|
+
|
|
|
+void CreateCheckSystemTaskFork()
|
|
|
+{
|
|
|
+ pid_t taskPid;
|
|
|
+ taskPid = fork();
|
|
|
+ if (taskPid == 0)
|
|
|
+ {
|
|
|
+ while(true)
|
|
|
+ {
|
|
|
+ /*
|
|
|
+ for (int _index = 0; _index < ShmSysConfigAndInfo->SysConfig.TotalConnectorCount; _index++)
|
|
|
+ {
|
|
|
+ if (chargingInfo[_index]->SystemStatus == SYS_MODE_UPDATE ||
|
|
|
+ chargingInfo[_index]->Type == 0x09)
|
|
|
+ {
|
|
|
+ stopToDet = true;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ */
|
|
|
+ for (uint8_t gun = 0; gun < pSysConfig->TotalConnectorCount; gun++) {
|
|
|
+ pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(gun);
|
|
|
+ if (pDcChargingInfo->SystemStatus == SYS_MODE_UPDATE )
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ CheckSystemTaskAlive();
|
|
|
+ sleep(5);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
//===============================================
|
|
|
// 取得卡號與卡號驗證
|
|
|
//===============================================
|
|
@@ -2530,6 +2617,7 @@ bool CheckConnectorTypeStatus(void)
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+ pDcChargingInfo->SystemStatus = S_BOOTING;
|
|
|
switch (gunIndex) {
|
|
|
case 0:
|
|
|
if (pSysConfig->TotalConnectorCount == 1) {
|
|
@@ -2970,6 +3058,7 @@ void CheckOcppStatus(void)
|
|
|
sleep(3);
|
|
|
system("killall OcppBackend &");
|
|
|
KillAllTask();
|
|
|
+ TryCloseWatchdog();
|
|
|
system("/usr/bin/run_evse_restart.sh");
|
|
|
}
|
|
|
}
|
|
@@ -3349,6 +3438,7 @@ void StopProcessingLoop()
|
|
|
log_info("Soft reboot for retry self-tets (Primary). \n");
|
|
|
KillAllTask();
|
|
|
sleep(3);
|
|
|
+ TryCloseWatchdog();
|
|
|
system("/usr/bin/run_evse_restart.sh");
|
|
|
return;
|
|
|
}
|
|
@@ -3420,10 +3510,11 @@ void CheckTask()
|
|
|
#endif //0
|
|
|
|
|
|
/*--- 20200908, vern, disable it for DD360 ---*/
|
|
|
+ /*
|
|
|
if (system("pidof -s Module_ProduceUtils > /dev/null") != 0) {
|
|
|
log_error("Module_ProduceUtils not running, restart it.\r\n");
|
|
|
system ("/root/Module_ProduceUtils &");
|
|
|
- }
|
|
|
+ }*/
|
|
|
}
|
|
|
|
|
|
//==========================================
|
|
@@ -4159,6 +4250,9 @@ int main(void)
|
|
|
ShmOCPP16Data = (struct OCPP16Data *)GetShmOCPP16Data();
|
|
|
ShmDcCommonData = (DcCommonInfo *)GetShmDcCommonData();
|
|
|
ShmSelectGunInfo = (SelectGunInfo *)GetShmSelectGunInfo();
|
|
|
+
|
|
|
+ ShmSysConfigAndInfo = (struct SysConfigAndInfo *)GetShmSysConfigAndInfo();
|
|
|
+ ShmStatusCodeData = (struct StatusCodeData *)GetShmStatusCodeData();
|
|
|
|
|
|
log_info(" **************** FileSystem Boot up ***************\n");
|
|
|
if (!InitialSystemDefaultConfig()) {
|
|
@@ -4256,8 +4350,6 @@ int main(void)
|
|
|
// 1. Thernal - 控制風扇轉速
|
|
|
// 2. ouput fuse - 控制風扇轉速
|
|
|
CreateRfidFork();
|
|
|
- // Create Watchdog
|
|
|
- //CreateWatchdog();
|
|
|
// Main loop
|
|
|
|
|
|
log_info("===== Charger info ===== ");
|
|
@@ -4269,6 +4361,12 @@ int main(void)
|
|
|
|
|
|
GunIndexInfo *pGunIndexInfo = (GunIndexInfo *)GetGunIndexInfo();
|
|
|
|
|
|
+ //signal(SIGCHLD,SIG_IGN);
|
|
|
+
|
|
|
+ CreateCheckSystemTaskFork();
|
|
|
+
|
|
|
+ CreateWatchdog();
|
|
|
+
|
|
|
for (;;) {
|
|
|
CheckOcppStatus();
|
|
|
|
|
@@ -4303,7 +4401,7 @@ int main(void)
|
|
|
}
|
|
|
|
|
|
if ((GetTimeoutValue(_cmdMainPriority_time) / 1000) > 5000) {
|
|
|
- CheckTask();
|
|
|
+ //CheckTask();
|
|
|
|
|
|
for (gunIndex = 0; gunIndex < pSysConfig->TotalConnectorCount; gunIndex++) {
|
|
|
pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(gunIndex);
|
|
@@ -4565,6 +4663,9 @@ int main(void)
|
|
|
if (pSysInfo->CurGunSelected == gunIndex) {
|
|
|
pSysInfo->ConnectorPage = _LCM_PRE_CHARGE;
|
|
|
}
|
|
|
+#ifdef DD360Audi
|
|
|
+ pDcChargingInfo->Replug_flag = true;
|
|
|
+#endif
|
|
|
}
|
|
|
break;
|
|
|
|
|
@@ -4842,6 +4943,9 @@ int main(void)
|
|
|
if (pSysInfo->CurGunSelected == gunIndex) {
|
|
|
pSysInfo->ConnectorPage = _LCM_CHARGING;
|
|
|
}
|
|
|
+#ifdef DD360Audi
|
|
|
+ pDcChargingInfo->Replug_flag = false;
|
|
|
+#endif
|
|
|
break;
|
|
|
|
|
|
case S_ALARM:
|
|
@@ -5071,6 +5175,7 @@ int main(void)
|
|
|
}
|
|
|
break;
|
|
|
}//switch
|
|
|
+ TryFeedWatchdog();
|
|
|
}//for
|
|
|
|
|
|
#if defined DD360Audi
|