|
@@ -85,8 +85,8 @@ uint8_t bd0_2_status = 0;
|
|
|
uint8_t bd1_1_status = 0;
|
|
|
uint8_t bd1_2_status = 0;
|
|
|
|
|
|
-char *fwVersion = "V1.23.00.0000.00"; // "V0.16.00.0000.00";
|
|
|
-char* DebugVersion = "V1.23.5";
|
|
|
+char *fwVersion = "V1.24.01.0000.00";
|
|
|
+char* DebugVersion = "V1.24.1";
|
|
|
//sqlite3 *localDb;
|
|
|
bool isDb_ready;
|
|
|
|
|
@@ -398,7 +398,14 @@ static void GetFirmwareVersion(void)
|
|
|
log_info("UL model");
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+bool isCharging(uint8_t status)
|
|
|
+{
|
|
|
+ if ((status >= S_REASSIGN_CHECK && status <= S_CHARGING) ||
|
|
|
+ status == S_CCS_PRECHARGE_ST0 || status == S_CCS_PRECHARGE_ST1 ) {
|
|
|
+ return TRUE;
|
|
|
+ }
|
|
|
+ return FALSE;
|
|
|
+}
|
|
|
static void checkGunOTPState(uint8_t gunIndex)
|
|
|
{
|
|
|
pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(gunIndex);
|
|
@@ -409,29 +416,23 @@ static void checkGunOTPState(uint8_t gunIndex)
|
|
|
if ((ShmDcCommonData->ChillerValve.MultiChillerGun & 0x7F) == 1) {
|
|
|
// 單水冷機
|
|
|
// Chiller OTP
|
|
|
- if (ShmDcCommonData->SystemTemp[0] == UNDEFINED_TEMP || ShmDcCommonData->SystemTemp[1] == UNDEFINED_TEMP) {
|
|
|
+ if (pDcChargingInfo->ChillerTemp == UNDEFINED_TEMP) {
|
|
|
// 溫度為255時判斷Sensor fail
|
|
|
ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerOTP = NO;
|
|
|
ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerTempSensorFail = YES;
|
|
|
} else {
|
|
|
//判斷OTP
|
|
|
- if (ShmDcCommonData->SystemTemp[0] >= pSysInfo->OTPTemp || ShmDcCommonData->SystemTemp[1] >= pSysInfo->OTPTemp) {
|
|
|
+ if ((ShmDcCommonData->SystemTemp[0] >= pSysInfo->OTPTemp && ShmDcCommonData->SystemTemp[0] != UNDEFINED_TEMP) ||
|
|
|
+ (ShmDcCommonData->SystemTemp[1] >= pSysInfo->OTPTemp && ShmDcCommonData->SystemTemp[1] != UNDEFINED_TEMP)) {
|
|
|
ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerOTP = YES;
|
|
|
RecordAlarmCode(gunIndex, "012323");
|
|
|
} else if (ShmDcCommonData->SystemTemp[0] != 0 && ShmDcCommonData->SystemTemp[0] < pSysInfo->OTPTempR &&
|
|
|
ShmDcCommonData->SystemTemp[1] != 0 && ShmDcCommonData->SystemTemp[1] < pSysInfo->OTPTempR) {
|
|
|
ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerOTP = NO;
|
|
|
}
|
|
|
- ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerTempSensorFail = NO;
|
|
|
- }
|
|
|
- // Chiller Tube OTP
|
|
|
- if (ShmDcCommonData->SystemTemp[2] == UNDEFINED_TEMP || ShmDcCommonData->SystemTemp[3] == UNDEFINED_TEMP) {
|
|
|
- // 溫度為255時判斷Sensor fail
|
|
|
- ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerTubeOTP = NO;
|
|
|
- ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerTempSensorFail = YES;
|
|
|
- } else {
|
|
|
- //判斷OTP
|
|
|
- if (ShmDcCommonData->SystemTemp[2] >= pSysInfo->OTPTemp || ShmDcCommonData->SystemTemp[3] >= pSysInfo->OTPTemp) {
|
|
|
+ //判斷Tube OTP
|
|
|
+ if ((ShmDcCommonData->SystemTemp[2] >= pSysInfo->OTPTemp && ShmDcCommonData->SystemTemp[2] != UNDEFINED_TEMP)||
|
|
|
+ (ShmDcCommonData->SystemTemp[3] >= pSysInfo->OTPTemp && ShmDcCommonData->SystemTemp[3] != UNDEFINED_TEMP)) {
|
|
|
ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerTubeOTP = YES;
|
|
|
RecordAlarmCode(gunIndex, "012332");
|
|
|
} else if (ShmDcCommonData->SystemTemp[2] != 0 && ShmDcCommonData->SystemTemp[2] < pSysInfo->OTPTempR &&
|
|
@@ -440,67 +441,28 @@ static void checkGunOTPState(uint8_t gunIndex)
|
|
|
}
|
|
|
ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerTempSensorFail = NO;
|
|
|
}
|
|
|
+
|
|
|
} else {
|
|
|
// 雙水冷機
|
|
|
- if (gunIndex == LEFT_GUN_NUM) {
|
|
|
- if (ShmDcCommonData->SystemTemp[0] == UNDEFINED_TEMP) {
|
|
|
- // 溫度為255時判斷Sensor fail
|
|
|
- ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerOTP = NO;
|
|
|
- ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerTempSensorFail = YES;
|
|
|
- } else {
|
|
|
- //判斷OTP
|
|
|
- if (ShmDcCommonData->SystemTemp[0] >= pSysInfo->OTPTemp) {
|
|
|
- ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerOTP = YES;
|
|
|
- RecordAlarmCode(gunIndex, "012323");
|
|
|
- } else if (ShmDcCommonData->SystemTemp[0] != 0 && ShmDcCommonData->SystemTemp[0] < pSysInfo->OTPTempR) {
|
|
|
- ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerOTP = NO;
|
|
|
- }
|
|
|
- ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerTempSensorFail = NO;
|
|
|
- }
|
|
|
- if (ShmDcCommonData->SystemTemp[1] == UNDEFINED_TEMP) {
|
|
|
- // 溫度為255時判斷Sensor fail
|
|
|
- ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerTubeOTP = NO;
|
|
|
- ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerTempSensorFail = YES;
|
|
|
- } else {
|
|
|
- //判斷OTP
|
|
|
- if (ShmDcCommonData->SystemTemp[1] >= pSysInfo->OTPTemp) {
|
|
|
- ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerTubeOTP = YES;
|
|
|
- RecordAlarmCode(gunIndex, "012332");
|
|
|
- } else if (ShmDcCommonData->SystemTemp[1] != 0 && ShmDcCommonData->SystemTemp[1] < pSysInfo->OTPTempR) {
|
|
|
- ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerTubeOTP = NO;
|
|
|
- }
|
|
|
- ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerTempSensorFail = NO;
|
|
|
- }
|
|
|
+ if (pDcChargingInfo->ChillerTemp == UNDEFINED_TEMP) {
|
|
|
+ // 溫度為255時判斷Sensor fail
|
|
|
+ ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerOTP = NO;
|
|
|
+ ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerTempSensorFail = YES;
|
|
|
} else {
|
|
|
- if (ShmDcCommonData->SystemTemp[2] == UNDEFINED_TEMP) {
|
|
|
- // 溫度為255時判斷Sensor fail
|
|
|
+ //判斷OTP
|
|
|
+ if (ShmDcCommonData->SystemTemp[gunIndex*2] >= pSysInfo->OTPTemp && ShmDcCommonData->SystemTemp[gunIndex*2] != UNDEFINED_TEMP) {
|
|
|
+ ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerOTP = YES;
|
|
|
+ RecordAlarmCode(gunIndex, "012323");
|
|
|
+ } else if (ShmDcCommonData->SystemTemp[gunIndex*2] != 0 && ShmDcCommonData->SystemTemp[gunIndex*2] < pSysInfo->OTPTempR) {
|
|
|
ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerOTP = NO;
|
|
|
- ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerTempSensorFail = YES;
|
|
|
- } else {
|
|
|
- //判斷OTP
|
|
|
- if (ShmDcCommonData->SystemTemp[2] >= pSysInfo->OTPTemp) {
|
|
|
- ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerOTP = YES;
|
|
|
- RecordAlarmCode(gunIndex, "012323");
|
|
|
- } else if (ShmDcCommonData->SystemTemp[2] != 0 && ShmDcCommonData->SystemTemp[2] < pSysInfo->OTPTempR) {
|
|
|
- ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerOTP = NO;
|
|
|
- }
|
|
|
- ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerTempSensorFail = NO;
|
|
|
}
|
|
|
- if (ShmDcCommonData->SystemTemp[3] == UNDEFINED_TEMP) {
|
|
|
- // 溫度為255時判斷Sensor fail
|
|
|
+ if (ShmDcCommonData->SystemTemp[gunIndex*2+1] >= pSysInfo->OTPTemp && ShmDcCommonData->SystemTemp[gunIndex*2+1] != UNDEFINED_TEMP) {
|
|
|
+ ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerTubeOTP = YES;
|
|
|
+ RecordAlarmCode(gunIndex, "012332");
|
|
|
+ } else if (ShmDcCommonData->SystemTemp[gunIndex*2+1] != 0 && ShmDcCommonData->SystemTemp[gunIndex*2+1] < pSysInfo->OTPTempR) {
|
|
|
ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerTubeOTP = NO;
|
|
|
- ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerTempSensorFail = YES;
|
|
|
- } else {
|
|
|
- //判斷OTP
|
|
|
- if (ShmDcCommonData->SystemTemp[3] >= pSysInfo->OTPTemp) {
|
|
|
- ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerTubeOTP = YES;
|
|
|
- RecordAlarmCode(gunIndex, "012332");
|
|
|
-
|
|
|
- } else if (ShmDcCommonData->SystemTemp[2] != 0 && ShmDcCommonData->SystemTemp[3] < pSysInfo->OTPTempR) {
|
|
|
- ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerTubeOTP = NO;
|
|
|
- }
|
|
|
- ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerTempSensorFail = NO;
|
|
|
}
|
|
|
+ ShmDcCommonData->ChillerTempErr[gunIndex].StatusBit.ChillerTempSensorFail = NO;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -527,6 +489,7 @@ static void checkGunOTPState(uint8_t gunIndex)
|
|
|
//ResetChargerAlarmCode(gunIndex, "012229");
|
|
|
ShmDcCommonData->ConnectErrList[gunIndex].GunBits.ChaConnectOTP = NO;
|
|
|
ShmDcCommonData->ConnectErrList[gunIndex].GunBits.ChaConnectTempSensorFail = YES;
|
|
|
+
|
|
|
if ((gunIndex == 0) &&
|
|
|
(strncmp((char *)&pSysConfig->ModelName[7], "J", 1) == 0)) {
|
|
|
ShmDcCommonData->ConnectErrList[gunIndex].GunBits.ChaConnectOTP = NO;
|
|
@@ -1394,11 +1357,7 @@ bool DisplaySelfTestFailReason()
|
|
|
pAlarmCode->AlarmEvents.bits.AcContactStestFail = true;
|
|
|
result = true;
|
|
|
#endif // !defined DD360 && !defined DD360Audi && !defined DD360ComBox
|
|
|
- }
|
|
|
- //else if (pAlarmCode->AlarmEvents.bits.PsuDipSwitchStestFail == YES) { //DS60-120 add
|
|
|
- // result = true;
|
|
|
- //}
|
|
|
- else if (ShmPsuData->SystemAvailablePower <= 0 &&
|
|
|
+ } else if (ShmPsuData->SystemAvailablePower <= 0 &&
|
|
|
ShmPsuData->SystemAvailableCurrent <= 0) {
|
|
|
// PSU 通訊問題
|
|
|
pAlarmCode->AlarmEvents.bits.PsuModuleStestFail = true;
|
|
@@ -1712,6 +1671,8 @@ void _SelfTestTimeout(void)
|
|
|
ShmPsuData->Work_Step = _NO_WORKING;
|
|
|
pSysInfo->SelfTestSeq = _STEST_FAIL;
|
|
|
log_info("Self test timeout. ");
|
|
|
+ sleep(3);
|
|
|
+ system("/usr/bin/run_evse_restart.sh");
|
|
|
}
|
|
|
|
|
|
void _AuthorizedTimeout(void)
|
|
@@ -2260,6 +2221,10 @@ void ReleaseEmsOccureByString(uint8_t index, char *code)
|
|
|
pAlarmCode->AlarmEvents.bits.MainPowerBreakerTrip == YES) {
|
|
|
isTrigger = true;
|
|
|
pAlarmCode->AlarmEvents.bits.MainPowerBreakerTrip = NO;
|
|
|
+ } else if (strncmp(code, "012348", 6) == 0 &&
|
|
|
+ pAlarmCode->AlarmEvents.bits.ChillerAlarmFail == YES) {
|
|
|
+ isTrigger = true;
|
|
|
+ pAlarmCode->AlarmEvents.bits.ChillerAlarmFail = NO;
|
|
|
}
|
|
|
|
|
|
if (isTrigger) {
|
|
@@ -2727,33 +2692,10 @@ int SpawnTask(void)
|
|
|
system("/root/Module_InternalComm &");
|
|
|
system("/root/Module_ProduceUtils &");
|
|
|
system("/root/Module_UpdateFW &");
|
|
|
-
|
|
|
- #if defined DD360 ||defined DD360Audi || defined DD360ComBox
|
|
|
+ if (pSysConfig->ModelName[3] == 'P')
|
|
|
+ system("/root/Module_DcMeter &");
|
|
|
system("/root/Module_DoComm &");
|
|
|
|
|
|
- return PASS;
|
|
|
-#endif //defined DD360 ||defined DD360Audi || defined DD360ComBox
|
|
|
-
|
|
|
- system("/root/Module_PsuComm &");
|
|
|
-
|
|
|
- if (strcmp((char *)pSysConfig->OcppServerURL, "") != EQUAL &&
|
|
|
- strcmp((char *)pSysConfig->ChargeBoxId, "") != EQUAL) {
|
|
|
- system("/root/OcppBackend &");
|
|
|
- }
|
|
|
-
|
|
|
- if (pSysConfig->ModelName[10] == 'T') {
|
|
|
- system("/root/Module_4g &");
|
|
|
- }
|
|
|
-
|
|
|
- if (pSysConfig->ModelName[10] == 'W') {
|
|
|
- system("/root/Module_Wifi &");
|
|
|
- }
|
|
|
-
|
|
|
- if (pSysConfig->ModelName[10] == 'D') {
|
|
|
- system("/root/Module_4g &");
|
|
|
- system("/root/Module_Wifi &");
|
|
|
- }
|
|
|
-
|
|
|
return PASS;
|
|
|
}
|
|
|
|
|
@@ -2768,15 +2710,11 @@ void KillTask(void)
|
|
|
system("killall Module_InternalComm");
|
|
|
system("killall Module_UpdateFW");
|
|
|
system("killall Module_ChkSysTask");
|
|
|
+ if (pSysConfig->ModelName[3] == 'P')
|
|
|
+ system("killall Module_DcMeter");
|
|
|
//system("killall Module_DoComm");
|
|
|
-#if defined DD360 || defined DD360Audi || defined DD360ComBox
|
|
|
return ;
|
|
|
-#endif //defined DD360 || defined DD360Audi || defined DD360ComBox
|
|
|
|
|
|
- system("killall Module_PsuComm");
|
|
|
- system("killall OcppBackend &");
|
|
|
- system("killall Module_4g &");
|
|
|
- system("killall Module_Wifi &");
|
|
|
}
|
|
|
|
|
|
void KillTaskExceptPrimary(void)
|
|
@@ -2785,7 +2723,8 @@ void KillTaskExceptPrimary(void)
|
|
|
|
|
|
system("killall Module_EvComm");
|
|
|
system("killall Module_InternalComm");
|
|
|
-
|
|
|
+ if (pSysConfig->ModelName[3] == 'P')
|
|
|
+ system("killall Module_DcMeter");
|
|
|
#if defined DD360 || defined DD360Audi || defined DD360ComBox
|
|
|
return;
|
|
|
#endif //defined DD360 || defined DD360Audi || defined DD360ComBox
|
|
@@ -2806,7 +2745,8 @@ void KillAllTask(void)
|
|
|
system("killall Module_InternalComm");
|
|
|
system("killall Module_UpdateFW");
|
|
|
system("killall Module_ChkSysTask");
|
|
|
-
|
|
|
+ if (pSysConfig->ModelName[3] == 'P')
|
|
|
+ system("killall Module_DcMeter");
|
|
|
#if defined DD360 || defined DD360Audi || defined DD360ComBox
|
|
|
system("killall Module_DoComm");
|
|
|
return ;
|
|
@@ -2845,7 +2785,19 @@ void StartGunInfoTimeoutDet(uint8_t gunIndex, uint8_t flag)
|
|
|
pDcChargingInfo->TimeoutFlag = flag;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+void checkLanguagePageTimeout(void)
|
|
|
+{
|
|
|
+ int is_idle = TRUE;
|
|
|
+ for (int i = 0; i < pSysConfig->TotalConnectorCount; i++) {
|
|
|
+ pDcChargingInfo = (struct ChargingInfoData*)GetDcChargingInfoData(i);
|
|
|
+ if (pDcChargingInfo->SystemStatus != S_IDLE)
|
|
|
+ is_idle = FALSE;
|
|
|
+ }
|
|
|
+ if (is_idle)
|
|
|
+ pSysInfo->SystemPage = _PAGE_VIEW;
|
|
|
+ else
|
|
|
+ pSysInfo->SystemPage = _PAGE_SELECT_PAY;
|
|
|
+}
|
|
|
void StopGunInfoTimeoutDet(uint8_t gunIndex)
|
|
|
{
|
|
|
|
|
@@ -2917,6 +2869,30 @@ void CreateTimeoutFork(void)
|
|
|
destroySelGun(DESTROY_ALL_SEL); //jerry add
|
|
|
}
|
|
|
break;
|
|
|
+ case Timeout_ReturnViewPage:
|
|
|
+ if (GetClockTimeoutValue(pSysInfo->SystemTimeoutTimer) / uSEC_VAL >= RETURN_VIEWPAGE_TIMEOUT) {
|
|
|
+ log_error("Timeout_ReturnViewPage");
|
|
|
+ StopSystemTimeoutDet();
|
|
|
+ pSysInfo->SystemPage = _PAGE_VIEW;
|
|
|
+ pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(pSysInfo->CurGunSelected);
|
|
|
+ if (pDcChargingInfo->SystemStatus == S_AUTHORIZING || pDcChargingInfo->SystemStatus == S_COMPLETE ||
|
|
|
+ pDcChargingInfo->SystemStatus == S_ALARM) {
|
|
|
+ setChargerMode(pSysInfo->CurGunSelected, MODE_IDLE);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case Timeout_helpPage:
|
|
|
+ if (GetClockTimeoutValue(pSysInfo->SystemTimeoutTimer) / uSEC_VAL >= HELP_PAGE_TIMEOUT) {
|
|
|
+ StopSystemTimeoutDet();
|
|
|
+ pSysInfo->SystemPage = ShmDcCommonData->previousPage;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case Timeout_LanguagePage:
|
|
|
+ if (GetClockTimeoutValue(pSysInfo->SystemTimeoutTimer) / uSEC_VAL >= LANGUAGE_PAGE_TIMEOUT) {
|
|
|
+ StopSystemTimeoutDet();
|
|
|
+ checkLanguagePageTimeout();
|
|
|
+ }
|
|
|
+ break;
|
|
|
case Timeout_Authorizing:
|
|
|
if (GetClockTimeoutValue(pSysInfo->SystemTimeoutTimer) / uSEC_VAL >= AUTHORIZE_TIMEOUT) {
|
|
|
log_error("Authorizing Timeout");
|
|
@@ -3334,7 +3310,6 @@ void ChkOcppStatus(uint8_t gunIndex)
|
|
|
ShmOCPP16Data->CsMsg.bits[gunIndex].ReserveNowReq = NO;
|
|
|
if (isReservationExpired(gunIndex)) {
|
|
|
log_info("***************ChkOcppStatus : OcppReservedStatus******************** ");
|
|
|
- log_error("***************ChkOcppStatus : OcppReservedStatus******************** ");
|
|
|
pDcChargingInfo->ReservationId = ShmOCPP16Data->ReserveNow[gunIndex].ReservationId;
|
|
|
pDcChargingInfo->SystemStatus = S_RESERVATION;
|
|
|
}
|
|
@@ -3346,7 +3321,6 @@ void ChkOcppStatus(uint8_t gunIndex)
|
|
|
ShmOCPP16Data->CsMsg.bits[gunIndex].CancelReservationReq = NO;
|
|
|
if (isReservationExpired(gunIndex)) {
|
|
|
log_info("***************ChkOcppStatus : Cancel OcppReservedStatus******************** ");
|
|
|
- log_error("***************ChkOcppStatus : Cancel OcppReservedStatus******************** ");
|
|
|
pDcChargingInfo->ReservationId = 0;
|
|
|
pDcChargingInfo->SystemStatus = S_IDLE;
|
|
|
}
|
|
@@ -3355,7 +3329,6 @@ void ChkOcppStatus(uint8_t gunIndex)
|
|
|
|
|
|
if (ShmOCPP16Data->CsMsg.bits[gunIndex].ChangeAvailabilityReq == YES) {
|
|
|
log_info("***************ChkOcppStatus : OcppChangeAvailability******************** ");
|
|
|
- log_error("***************ChkOcppStatus : OcppChangeAvailability******************** ");
|
|
|
ShmOCPP16Data->CsMsg.bits[gunIndex].ChangeAvailabilityReq = NO;
|
|
|
if (strcmp((char *)ShmOCPP16Data->ChangeAvailability[gunIndex].Type, "Operative") == EQUAL) {
|
|
|
if (isDb_ready) {
|
|
@@ -3376,7 +3349,7 @@ void ChkOcppStatus(uint8_t gunIndex)
|
|
|
pDcChargingInfo->IsAvailable = NO;
|
|
|
if (pDcChargingInfo->SystemStatus == S_IDLE ||
|
|
|
pDcChargingInfo->SystemStatus == S_RESERVATION ||
|
|
|
- pDcChargingInfo->SystemStatus == S_MAINTAIN) {
|
|
|
+ pDcChargingInfo->SystemStatus == S_MAINTAIN ) {
|
|
|
setChargerMode(gunIndex, MODE_MAINTAIN);
|
|
|
}
|
|
|
}
|
|
@@ -3934,6 +3907,7 @@ static void autoStartCharging(uint8_t gunIndex)
|
|
|
confirmSelGun(gunIndex);
|
|
|
pSysInfo->SystemPage = _LCM_AUTHORIZING;
|
|
|
ShmDcCommonData->AuthroizeType = IdTokenType_NoAuthorization;
|
|
|
+ pDcChargingInfo->StartMethod = _CHARGING_START_AUTOSTART;
|
|
|
}
|
|
|
if (strcmp( (char *)pSysConfig->UserId , OldUseId ) != EQUAL) {
|
|
|
strcpy((char *)OldUseId, (char *)pSysConfig->UserId);
|
|
@@ -4211,7 +4185,6 @@ void CheckTaskAlive()
|
|
|
if( count != 1 ) {
|
|
|
system("pkill Module_ChkSysTask");
|
|
|
sleep(10);
|
|
|
- log_info("Create Check System Task");
|
|
|
system("/root/Module_ChkSysTask &");
|
|
|
}
|
|
|
}
|
|
@@ -4483,6 +4456,16 @@ void SetCHAdeMoTypeSJOTPValue(struct DERATING_BY_OTP* deratingByConnOtp)
|
|
|
deratingByConnOtp->deratingTargetCurrent[4] = 0;
|
|
|
}
|
|
|
|
|
|
+void SetCHAdeMoTypeOOTPValue(struct DERATING_BY_OTP* deratingByConnOtp)
|
|
|
+{
|
|
|
+ deratingByConnOtp->isNeedDerating = YES;
|
|
|
+ deratingByConnOtp->deratingTargetCurrent[0] = 3500;
|
|
|
+ deratingByConnOtp->deratingTargetCurrent[1] = 2000;
|
|
|
+ deratingByConnOtp->deratingTargetCurrent[2] = 2000;
|
|
|
+ deratingByConnOtp->deratingTargetCurrent[3] = 0;
|
|
|
+ deratingByConnOtp->deratingTargetCurrent[4] = 0;
|
|
|
+}
|
|
|
+
|
|
|
static void SetGunTypeOTPValue(void)
|
|
|
{
|
|
|
//struct ChargingInfoData* chargingData_2 = NULL;
|
|
@@ -4496,17 +4479,19 @@ static void SetGunTypeOTPValue(void)
|
|
|
Gun2Type = pSysConfig->ModelName[7];
|
|
|
|
|
|
switch (Gun1Type) {
|
|
|
-
|
|
|
case 'K':
|
|
|
SetCHAdeMoTypeKOTPValue(&pDcChargingInfo->deratingByConnOtp);
|
|
|
break;
|
|
|
case 'S':
|
|
|
SetCHAdeMoTypeSJOTPValue(&pDcChargingInfo->deratingByConnOtp);
|
|
|
break;
|
|
|
- case 'T':
|
|
|
- case 'D':
|
|
|
+ case 'I':
|
|
|
+ case 'Q':
|
|
|
SetNatural300AGunOTPValue(&pDcChargingInfo->deratingByConnOtp);
|
|
|
break;
|
|
|
+ case 'O':
|
|
|
+ SetCHAdeMoTypeOOTPValue(&pDcChargingInfo->deratingByConnOtp);
|
|
|
+ break;
|
|
|
// 水冷
|
|
|
case 'V':
|
|
|
case 'F':
|
|
@@ -4546,10 +4531,13 @@ static void SetGunTypeOTPValue(void)
|
|
|
SetCHAdeMoTypeSJOTPValue(&pDcChargingInfo->deratingByConnOtp);
|
|
|
break;
|
|
|
// 風冷300A
|
|
|
- case 'T':
|
|
|
- case 'D':
|
|
|
+ case 'I':
|
|
|
+ case 'Q':
|
|
|
SetNatural300AGunOTPValue(&pDcChargingInfo->deratingByConnOtp);
|
|
|
break;
|
|
|
+ case 'O':
|
|
|
+ SetCHAdeMoTypeOOTPValue(&pDcChargingInfo->deratingByConnOtp);
|
|
|
+ break;
|
|
|
// 水冷
|
|
|
case 'V':
|
|
|
case 'F':
|
|
@@ -4577,7 +4565,170 @@ static void SetGunTypeOTPValue(void)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+bool checkGunTempFail(uint8_t gunIndex)
|
|
|
+{
|
|
|
+#ifndef DD360
|
|
|
+ return FALSE;
|
|
|
+#endif
|
|
|
+ pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(gunIndex);
|
|
|
+ switch (pDcChargingInfo->Type) {
|
|
|
+ case _Type_Chademo:
|
|
|
+ if (ShmDcCommonData->ConnectErrList[gunIndex].GunBits.ChaConnectTempSensorFail) {
|
|
|
+ if (isCharging(pDcChargingInfo->SystemStatus)) {
|
|
|
+ RecordAlarmCode(gunIndex,"011018");
|
|
|
+ } else {
|
|
|
+ setChargerMode(gunIndex,S_FAULT);
|
|
|
+ }
|
|
|
+ return TRUE;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case _Type_CCS_2:
|
|
|
+ if (ShmDcCommonData->ConnectErrList[gunIndex].GunBits.CCSConnectTempSensorFail) {
|
|
|
+ if (isCharging(pDcChargingInfo->SystemStatus)) {
|
|
|
+ RecordAlarmCode(gunIndex,"011019");
|
|
|
+ } else {
|
|
|
+ setChargerMode(gunIndex,S_FAULT);
|
|
|
+ }
|
|
|
+ return TRUE;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case _Type_GB:
|
|
|
+ if (ShmDcCommonData->ConnectErrList[gunIndex].GunBits.GBTConnectTempSensorFail) {
|
|
|
+ if (isCharging(pDcChargingInfo->SystemStatus)) {
|
|
|
+ RecordAlarmCode(gunIndex,"011020");
|
|
|
+ } else {
|
|
|
+ setChargerMode(gunIndex,S_FAULT);
|
|
|
+ }
|
|
|
+ return TRUE;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ return FALSE;
|
|
|
+}
|
|
|
+
|
|
|
+//==========================================
|
|
|
+// Ocmf
|
|
|
+//==========================================
|
|
|
|
|
|
+void ConfigOcmfInfo(uint8_t gun_index)
|
|
|
+{
|
|
|
+ pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(gun_index);
|
|
|
+ strncpy((char *)pSysInfo->DcMeterTransactionAction[gun_index].head.evseId,
|
|
|
+ (char *)pSysConfig->SerialNumber, ARRAY_SIZE(pSysConfig->SerialNumber));
|
|
|
+
|
|
|
+ char trId[32];
|
|
|
+ sprintf(trId, "%d", ShmSelectGunInfo->PricesInfo[gun_index].TransactionId);
|
|
|
+ memcpy((char *)pSysInfo->DcMeterTransactionAction[gun_index].head.transactionId, trId,
|
|
|
+ sizeof(trId));
|
|
|
+
|
|
|
+ char clientId[32] = "DC_Charger";
|
|
|
+ memcpy((char *)pSysInfo->DcMeterTransactionAction[gun_index].head.clientId, clientId,
|
|
|
+ sizeof(clientId));
|
|
|
+
|
|
|
+ pSysInfo->DcMeterTransactionAction[gun_index].head.tariffId = 0;
|
|
|
+ pSysInfo->DcMeterTransactionAction[gun_index].head.cableId = 2;
|
|
|
+
|
|
|
+ memcpy((char *)pSysInfo->DcMeterTransactionAction[gun_index].head.userData,
|
|
|
+ (char *)pDcChargingInfo->StartUserId,
|
|
|
+ sizeof(pDcChargingInfo->StartUserId));
|
|
|
+}
|
|
|
+
|
|
|
+void ConfigOcmfInfo_Record(int _trID, uint8_t gun_index)
|
|
|
+{
|
|
|
+ strncpy((char *)pSysInfo->DcMeterReadTransactionRecord[gun_index].head.evseId,
|
|
|
+ (char *)pSysConfig->SerialNumber, ARRAY_SIZE(pSysConfig->SerialNumber));
|
|
|
+
|
|
|
+ char trId[32];
|
|
|
+ sprintf(trId, "%d", _trID);
|
|
|
+ strcpy((char *)pSysInfo->DcMeterReadTransactionRecord[gun_index].head.transactionId, trId);
|
|
|
+ strcpy((char *)pSysInfo->DcMeterReadTransactionRecord[gun_index].head.clientId, "DC_Charger");
|
|
|
+
|
|
|
+ pSysInfo->DcMeterReadTransactionRecord[gun_index].head.tariffId = 0;
|
|
|
+ pSysInfo->DcMeterReadTransactionRecord[gun_index].head.cableId = 2;
|
|
|
+
|
|
|
+ strcpy((char *)pSysInfo->DcMeterReadTransactionRecord[gun_index].head.userData, "Record");
|
|
|
+}
|
|
|
+void StoreOcmfFile(uint8_t gun_index,int trid,int isRecord)
|
|
|
+{
|
|
|
+ if (ShmDcCommonData->pGunInfo[gun_index].ConnectorID <= 0 || ShmDcCommonData->pGunInfo[gun_index].ConnectorID > 4) {
|
|
|
+ log_info("Gun%d ConnectorID:%d",gun_index,ShmDcCommonData->pGunInfo[gun_index].ConnectorID);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ FILE *pfile;
|
|
|
+ char cmd[500];
|
|
|
+ sprintf((char*)ShmDcCommonData->pGunInfo[gun_index].OcmfFileName,"/mnt/Gun_%d_%d_OCMF",
|
|
|
+ ShmDcCommonData->pGunInfo[gun_index].ConnectorID,trid);
|
|
|
+ log_info("OCMF File:%s",ShmDcCommonData->pGunInfo[gun_index].OcmfFileName);
|
|
|
+
|
|
|
+ pfile = fopen(ShmDcCommonData->pGunInfo[gun_index].OcmfFileName,"w+");
|
|
|
+ if (isRecord)
|
|
|
+ fprintf(pfile,"%s",pSysInfo->DcMeterReadTransactionRecord[gun_index].transactionOCMF);
|
|
|
+ else
|
|
|
+ fprintf(pfile,"%s",pSysInfo->DcMeterTransactionAction[gun_index].transactionOCMF);
|
|
|
+ fclose(pfile);
|
|
|
+ sprintf(cmd,"ftpput -u root -p y42j/4cj84 192.168.100.1 %s",ShmDcCommonData->pGunInfo[gun_index].OcmfFileName);
|
|
|
+ if (system(cmd) != 0 ) {
|
|
|
+ log_info("Put OCMF File to Cabinet Fail");
|
|
|
+ sprintf(cmd,"rm -f %s",ShmDcCommonData->pGunInfo[gun_index].OcmfFileName);
|
|
|
+ system(cmd);
|
|
|
+ } else {
|
|
|
+ log_info("Put OCMF File to Cabinet OK");
|
|
|
+ ShmDcCommonData->pGunInfo[gun_index].SendOcmfDataReq = TRUE;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+void ChkOcmfRecord(uint8_t gun_index)
|
|
|
+{
|
|
|
+ if (pAlarmCode->AlarmEvents.bits.Meter1CommTimeout) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ int trid = DB_Get_OcmfTrid(gun_index);
|
|
|
+
|
|
|
+ if (trid != 0 &&
|
|
|
+ trid != ShmDcCommonData->ocmfTridRecord[gun_index] &&
|
|
|
+ trid != ShmSelectGunInfo->PricesInfo[gun_index].TransactionId)
|
|
|
+ {
|
|
|
+ ShmDcCommonData->ocmfTridRecord[gun_index] = trid;
|
|
|
+ ConfigOcmfInfo_Record(ShmDcCommonData->ocmfTridRecord[gun_index], gun_index);
|
|
|
+ pSysInfo->DcMeterReadTransactionRecord[gun_index].ActionCmd = _DC_METER_TRANSACTION_ACTION_START;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (pSysInfo->DcMeterReadTransactionRecord[gun_index].OcmfInfoReady == _OCMF_INFO_READY_YES &&
|
|
|
+ ShmDcCommonData->pGunInfo[gun_index].SendOcmfDataReq == FALSE)
|
|
|
+ {
|
|
|
+ log_info("OCMF Record - Reture Pass \n");
|
|
|
+ pSysInfo->DcMeterReadTransactionRecord[gun_index].OcmfInfoReady = _OCMF_INFO_READY_NO;
|
|
|
+ //ocpp_ocmf_information(gun_index);
|
|
|
+ DB_Update_ocmf_Record(gun_index, ShmDcCommonData->ocmfTridRecord[gun_index], true);
|
|
|
+ StoreOcmfFile(gun_index,trid,TRUE);
|
|
|
+ //ShmDcCommonData->ocmfTridRecord[gun_index] = 0;
|
|
|
+ }
|
|
|
+ else if (pSysInfo->DcMeterReadTransactionRecord[gun_index].OcmfInfoReady == _OCMF_INFO_READY_FAIL)
|
|
|
+ {
|
|
|
+ log_info("OCMF Record - Reture Fail \n");
|
|
|
+ pSysInfo->DcMeterReadTransactionRecord[gun_index].OcmfInfoReady = _OCMF_INFO_READY_NO;
|
|
|
+ DB_Update_ocmf_Record(gun_index, ShmDcCommonData->ocmfTridRecord[gun_index], false);
|
|
|
+ //ShmDcCommonData->ocmfTridRecord[gun_index] = 0;
|
|
|
+ }
|
|
|
+}
|
|
|
+void SetGunMeterCableLoss()
|
|
|
+{
|
|
|
+ if (pSysConfig->TotalConnectorCount >= 2) {
|
|
|
+ if (pSysConfig->ModelName[7] == 'V' || pSysConfig->ModelName[7] == 'F') {
|
|
|
+ pSysInfo->DcMeterTransactionAction[LEFT_GUN_NUM].head.cableId = 3;
|
|
|
+ }
|
|
|
+ if (pSysConfig->ModelName[9] == 'V' || pSysConfig->ModelName[9] == 'F') {
|
|
|
+ pSysInfo->DcMeterTransactionAction[RIGHT_GUN_NUM].head.cableId = 3;
|
|
|
+ }
|
|
|
+ } else if (pSysConfig->TotalConnectorCount == 1){
|
|
|
+ if (pSysConfig->ModelName[7] == 'V' || pSysConfig->ModelName[7] == 'F' ||
|
|
|
+ pSysConfig->ModelName[9] == 'V' || pSysConfig->ModelName[9] == 'F') {
|
|
|
+ pSysInfo->DcMeterTransactionAction[LEFT_GUN_NUM].head.cableId = 3;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
int main(void)
|
|
|
{
|
|
|
bool isModelNameMatch = true;
|
|
@@ -4585,8 +4736,10 @@ int main(void)
|
|
|
uint8_t evBoardStopState = 0;
|
|
|
uint8_t _ocppProfileChkFlag;
|
|
|
uint8_t gunIndex = 0;
|
|
|
+ uint8_t _isStop[2] = {0};
|
|
|
float powerconsumption;
|
|
|
-
|
|
|
+ uint8_t ConnectID[2];
|
|
|
+ uint8_t SendOcmfDataReq[2];
|
|
|
if (CreateAllCsuShareMemory() == FAIL) {
|
|
|
log_error("create share memory error");
|
|
|
return FAIL;
|
|
@@ -4660,6 +4813,7 @@ int main(void)
|
|
|
CreateTimeoutFork();
|
|
|
log_info("Start self test... ");
|
|
|
PrimaryLedIndicatorCtrlFork();
|
|
|
+ ChangeLcmByIndex(_LCM_FIX);
|
|
|
SelfTestRun();
|
|
|
StopSystemTimeoutDet();
|
|
|
log_info("Self test finished : SelfTestSeq = %d, Work_Step = %d ",
|
|
@@ -4750,7 +4904,9 @@ int main(void)
|
|
|
|
|
|
time_t ShowEVStatusTimer[2] = { 0 };
|
|
|
|
|
|
- //SetGunTypeOTPValue();
|
|
|
+ SetGunTypeOTPValue();
|
|
|
+
|
|
|
+ SetGunMeterCableLoss();
|
|
|
|
|
|
for (;;) {
|
|
|
|
|
@@ -4804,6 +4960,9 @@ int main(void)
|
|
|
}
|
|
|
}
|
|
|
checkGunOTPState(gunIndex); //check gun OTP
|
|
|
+
|
|
|
+ // OCMF
|
|
|
+ ChkOcmfRecord(gunIndex);
|
|
|
}
|
|
|
gettimeofday(&_cmdMainPriority_time, NULL);
|
|
|
}
|
|
@@ -4824,6 +4983,8 @@ int main(void)
|
|
|
}
|
|
|
checkChillerAlarmState();
|
|
|
|
|
|
+ //log_info("MeterCommTimeout:%d",pAlarmCode->AlarmEvents.bits.MeterCommTimeout);
|
|
|
+
|
|
|
for (gunIndex = 0; gunIndex < pSysConfig->TotalConnectorCount; gunIndex++) {
|
|
|
pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(gunIndex);
|
|
|
|
|
@@ -4853,6 +5014,13 @@ int main(void)
|
|
|
CheckSmartChargeProfile(gunIndex);
|
|
|
}
|
|
|
|
|
|
+ checkGunTempFail(gunIndex);
|
|
|
+
|
|
|
+ if (pSysInfo->SelfTestSeq == _STEST_FAIL ) {
|
|
|
+ setChargerMode(gunIndex, MODE_MAINTAIN);
|
|
|
+ ChangeLcmByIndex(_LCM_FIX);
|
|
|
+ }
|
|
|
+
|
|
|
switch (pDcChargingInfo->SystemStatus) {
|
|
|
case S_IDLE:
|
|
|
case S_RESERVATION:
|
|
@@ -4874,11 +5042,18 @@ int main(void)
|
|
|
if (pDcChargingInfo->deratingByConnOtp.deratingIndex != 0) {
|
|
|
pDcChargingInfo->deratingByConnOtp.deratingIndex = 0;
|
|
|
}
|
|
|
+ ShmDcCommonData->ocmfTridRecord[gunIndex] = 0 ;
|
|
|
+ _isStop[gunIndex] = 0;
|
|
|
//Jerry add
|
|
|
memset(&ShmSelectGunInfo->PricesInfo[gunIndex], 0, sizeof(PricesInfo));
|
|
|
+
|
|
|
powerconsumption = ShmDcCommonData->pGunInfo[gunIndex].PowerConsumption;
|
|
|
+ ConnectID[gunIndex] = ShmDcCommonData->pGunInfo[gunIndex].ConnectorID;
|
|
|
+ SendOcmfDataReq[gunIndex] = ShmDcCommonData->pGunInfo[gunIndex].SendOcmfDataReq;
|
|
|
memset(&ShmDcCommonData->pGunInfo[gunIndex], 0, sizeof(GunInfo));
|
|
|
ShmDcCommonData->pGunInfo[gunIndex].PowerConsumption = powerconsumption;
|
|
|
+ ShmDcCommonData->pGunInfo[gunIndex].ConnectorID = ConnectID[gunIndex];
|
|
|
+ ShmDcCommonData->pGunInfo[gunIndex].SendOcmfDataReq = SendOcmfDataReq[gunIndex];
|
|
|
|
|
|
ShmSelectGunInfo->PricesInfo[gunIndex].Balance = FAIL_BALANCE_PRICES;
|
|
|
destroySelGun(gunIndex);
|
|
@@ -4889,44 +5064,14 @@ int main(void)
|
|
|
//strcpy((char *)ShmOCPP16Data->StatusNotification[gunIndex].VendorErrorCode, "");
|
|
|
ReleaseAlarmCode(gunIndex);
|
|
|
}
|
|
|
-
|
|
|
if (pDcChargingInfo->IsAvailable == NO) {
|
|
|
setChargerMode(gunIndex, MODE_MAINTAIN);
|
|
|
}
|
|
|
-
|
|
|
- case S_MAINTAIN:
|
|
|
case S_FAULT:
|
|
|
if (isModeChange(gunIndex)) {
|
|
|
- if(pDcChargingInfo->SystemStatus == S_MAINTAIN)
|
|
|
- {
|
|
|
- log_info("============================= S_MAINTAIN(%x) ============================= ", gunIndex);
|
|
|
- if (pSysInfo->FirmwareUpdate == YES)
|
|
|
- continue;
|
|
|
- if (pDcChargingInfo->IsAvailable == NO )
|
|
|
- continue;
|
|
|
- if (pSysWarning->Level != WARN_LV_ER) {
|
|
|
- if (!DisplaySelfTestFailReason()) { //DS60-120 add
|
|
|
- log_info("Soft reboot for retry self-tets. ");
|
|
|
- sleep(3);
|
|
|
- system("killall OcppBackend &");
|
|
|
- KillAllTask();
|
|
|
- system("/usr/bin/run_evse_restart.sh");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- sleep(3);
|
|
|
- if (pSysWarning->Level == WARN_LV_ER) { //DS60-120 add
|
|
|
- KillTaskExceptPrimary();
|
|
|
- } else {
|
|
|
- KillTask();
|
|
|
- }
|
|
|
- StopProcessingLoop();
|
|
|
- }
|
|
|
- if(pDcChargingInfo->SystemStatus == S_FAULT)
|
|
|
- {
|
|
|
- log_info("============================= S_FAULT(%x) ============================= ", gunIndex);
|
|
|
- }
|
|
|
+ log_info("============================= S_FAULT(%x) ============================= ", gunIndex);
|
|
|
}
|
|
|
+
|
|
|
if (pSysWarning->Level == WARN_LV_ER) {
|
|
|
struct ChargingInfoData *pSelectedDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(pSysInfo->CurGunSelected);
|
|
|
if (gunIndex == pSysInfo->CurGunSelected) {
|
|
@@ -4950,7 +5095,9 @@ int main(void)
|
|
|
}
|
|
|
continue;
|
|
|
}
|
|
|
-
|
|
|
+ if (checkGunTempFail(gunIndex)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
if (pDcChargingInfo->SystemStatus == S_FAULT) {
|
|
|
systemPageRestoreInit();
|
|
|
setChargerMode(gunIndex, MODE_IDLE);
|
|
@@ -4996,6 +5143,7 @@ int main(void)
|
|
|
strcpy((char *)pDcChargingInfo->StartUserId, "");
|
|
|
ClearDetectPluginFlag(gunIndex);
|
|
|
StopGunInfoTimeoutDet(gunIndex);
|
|
|
+ pDcChargingInfo->StartMethod = _CHARGING_START_REMOTESTART;
|
|
|
continue;
|
|
|
}
|
|
|
} else if (pSysInfo->OrderCharging == NO_DEFINE) {
|
|
@@ -5027,11 +5175,13 @@ int main(void)
|
|
|
ClearDetectPluginFlag(RIGHT_GUN_NUM);
|
|
|
StopGunInfoTimeoutDet(LEFT_GUN_NUM);
|
|
|
StopGunInfoTimeoutDet(RIGHT_GUN_NUM);
|
|
|
+ if (pDcChargingInfo->StartMethod != _CHARGING_START_AUTOSTART)
|
|
|
+ pDcChargingInfo->StartMethod = _CHARGING_START_RFID;
|
|
|
continue;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (!GetIsCardScan()) {
|
|
|
+ if (isDetectPlugin(gunIndex) && pSysInfo->CurGunSelected == gunIndex) {
|
|
|
// LCM => Waiting for plugging
|
|
|
// AUDI_LCM_CHANGE
|
|
|
pSysInfo->SystemPage = _LCM_WAIT_FOR_PLUG;
|
|
@@ -5088,6 +5238,7 @@ int main(void)
|
|
|
checkEvBoardReqStop(pDcChargingInfo->SystemStatus, gunIndex);
|
|
|
|
|
|
if (pSysInfo->CurGunSelected == gunIndex) {
|
|
|
+ systemPageRestoreInit();
|
|
|
pSysInfo->ConnectorPage = _LCM_PRE_CHARGE;
|
|
|
}
|
|
|
break;
|
|
@@ -5103,16 +5254,37 @@ int main(void)
|
|
|
if (pDcChargingInfo->Type == _Type_Chademo) {
|
|
|
// 檢查車端的槍鎖是否為鎖上
|
|
|
if (isEvGunLocked_chademo(gunIndex) == YES) {
|
|
|
+ if (pSysConfig->ModelName[3] == 'P')
|
|
|
+ {
|
|
|
+ ConfigOcmfInfo(gunIndex);
|
|
|
+ DB_Insert_ocmf(gunIndex);
|
|
|
+ //pSysInfo->DcMeterTransactionAction[gunIndex].head.cableId = 3;
|
|
|
+ pSysInfo->DcMeterTransactionAction[gunIndex].ActionCmd = _DC_METER_TRANSACTION_ACTION_START;
|
|
|
+ }
|
|
|
setChargerMode(gunIndex, MODE_PREPARE_FOR_EVSE);
|
|
|
}
|
|
|
} else if (pDcChargingInfo->Type == _Type_GB) {
|
|
|
// 檢查車端的 charging enable 是否為 1
|
|
|
if (isEvGunLocked_gb(gunIndex) == YES) {
|
|
|
+ if (pSysConfig->ModelName[3] == 'P')
|
|
|
+ {
|
|
|
+ ConfigOcmfInfo(gunIndex);
|
|
|
+ DB_Insert_ocmf(gunIndex);
|
|
|
+ //pSysInfo->DcMeterTransactionAction[gunIndex].head.cableId = 3;
|
|
|
+ pSysInfo->DcMeterTransactionAction[gunIndex].ActionCmd = _DC_METER_TRANSACTION_ACTION_START;
|
|
|
+ }
|
|
|
setChargerMode(gunIndex, MODE_PREPARE_FOR_EVSE);
|
|
|
}
|
|
|
} else if (pDcChargingInfo->Type == _Type_CCS_2) {
|
|
|
// 檢查車端的 charging enable 是否為 1
|
|
|
if (isEvGunLocked_ccs(gunIndex) == YES) {
|
|
|
+ if (pSysConfig->ModelName[3] == 'P')
|
|
|
+ {
|
|
|
+ ConfigOcmfInfo(gunIndex);
|
|
|
+ DB_Insert_ocmf(gunIndex);
|
|
|
+ //pSysInfo->DcMeterTransactionAction[gunIndex].head.cableId = 3;
|
|
|
+ pSysInfo->DcMeterTransactionAction[gunIndex].ActionCmd = _DC_METER_TRANSACTION_ACTION_START;
|
|
|
+ }
|
|
|
setChargerMode(gunIndex, MODE_PREPARE_FOR_EVSE);
|
|
|
}
|
|
|
}
|
|
@@ -5130,6 +5302,10 @@ int main(void)
|
|
|
log_info("============================= S_PREPARING_FOR_EVSE(%x) ============================= ", gunIndex);
|
|
|
StopGunInfoTimeoutDet(gunIndex);
|
|
|
StartGunInfoTimeoutDet(gunIndex, Timeout_EvseChargingDet);
|
|
|
+ if (pSysConfig->ModelName[3] == 'P') {
|
|
|
+ ShmDcCommonData->pGunInfo[gunIndex].isMeterStart = TRUE;
|
|
|
+ ShmDcCommonData->ocmfTridRecord[gunIndex] = ShmSelectGunInfo->PricesInfo[gunIndex].TransactionId;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
checkPileEndGfdResult(gunIndex, pDcChargingInfo->Type, pDcChargingInfo->SystemStatus);
|
|
@@ -5230,10 +5406,16 @@ int main(void)
|
|
|
ShmDcCommonData->pGunInfo[gunIndex].RecordEnergyTime = time((time_t*)NULL);
|
|
|
if (ShmDcCommonData->pGunInfo[gunIndex].PowerConsumption != 0)
|
|
|
DB_Update_PowerConsumption(gunIndex, ShmDcCommonData->pGunInfo[gunIndex].PowerConsumption);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
//checkPileEndGfdResult(gunIndex, pDcChargingInfo->Type, pDcChargingInfo->SystemStatus);
|
|
|
-
|
|
|
+ if (ShmSysConfigAndInfo->SysConfig.ModelName[3] == 'P' && ShmDcCommonData->pGunInfo[gunIndex].isMeterStart &&
|
|
|
+ pDcChargingInfo->RelayK1K2Status == NO && !_isStop[gunIndex]) {
|
|
|
+ pSysInfo->DcMeterTransactionAction[gunIndex].ActionCmd = _DC_METER_TRANSACTION_ACTION_STOP;
|
|
|
+ log_info("Gun%d Stop Dc Meter Transcation",gunIndex);
|
|
|
+ _isStop[gunIndex] = TRUE;
|
|
|
+ }
|
|
|
if (pDcChargingInfo->SystemStatus == S_ALARM) {
|
|
|
if (pDcChargingInfo->ConnectorPlugIn == NO &&
|
|
|
GetTimeoutValue(pDcChargingInfo->TimeoutTimer) >= 10000000) {
|
|
@@ -5266,6 +5448,17 @@ int main(void)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ if (ShmSysConfigAndInfo->SysConfig.ModelName[3] == 'P') {
|
|
|
+ if (pDcChargingInfo->SystemStatus == S_ALARM && ShmDcCommonData->pGunInfo[gunIndex].isMeterStop &&
|
|
|
+ pSysInfo->DcMeterTransactionAction[gunIndex].OcmfInfoReady)
|
|
|
+ {
|
|
|
+ pSysInfo->DcMeterTransactionAction[gunIndex].OcmfInfoReady = NO;
|
|
|
+ DB_Update_ocmf(gunIndex);
|
|
|
+ StoreOcmfFile(gunIndex,ShmSelectGunInfo->PricesInfo[gunIndex].TransactionId,FALSE);
|
|
|
+ DB_Update_PowerConsumption(gunIndex, ShmDcCommonData->pGunInfo[gunIndex].PowerConsumption);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if (pSysInfo->CurGunSelected == gunIndex) {
|
|
|
pSysInfo->ConnectorPage = _LCM_COMPLETE;
|
|
|
}
|
|
@@ -5277,11 +5470,15 @@ int main(void)
|
|
|
if (strcmp((char *)pDcChargingInfo->StartDateTime, "") != EQUAL) {
|
|
|
OcppStopTransation(gunIndex);
|
|
|
}
|
|
|
-
|
|
|
TheEndCharging(gunIndex);
|
|
|
-
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
+ if (pSysInfo->DcMeterTransactionAction[gunIndex].OcmfInfoReady && ShmDcCommonData->pGunInfo[gunIndex].isMeterStop) {
|
|
|
+ pSysInfo->DcMeterTransactionAction[gunIndex].OcmfInfoReady = NO;
|
|
|
+ DB_Update_ocmf(gunIndex);
|
|
|
+ StoreOcmfFile(gunIndex,ShmSelectGunInfo->PricesInfo[gunIndex].TransactionId,FALSE);
|
|
|
+ DB_Update_PowerConsumption(gunIndex, ShmDcCommonData->pGunInfo[gunIndex].PowerConsumption);
|
|
|
+ }
|
|
|
if (pDcChargingInfo->ConnectorPlugIn == NO &&
|
|
|
GetTimeoutValue(pDcChargingInfo->TimeoutTimer) >= 10000000) {
|
|
|
if (ShmDcCommonData->pGunInfo[gunIndex].ReservationStatus) {
|
|
@@ -5374,6 +5571,57 @@ int main(void)
|
|
|
pSysInfo->ConnectorPage = _LCM_PRE_CHARGE;
|
|
|
}
|
|
|
break;
|
|
|
+ case S_MAINTAIN:
|
|
|
+ if (isModeChange(gunIndex)) {
|
|
|
+ log_info("============================= S_MAINTAIN(%x) ============================= ", gunIndex);
|
|
|
+ //pSysInfo->SystemPage = _PAGE_MAINTAIN;
|
|
|
+ if (pSysInfo->FirmwareUpdate == YES) {
|
|
|
+ pSysInfo->SystemPage = _PAGE_MAINTAIN;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (pDcChargingInfo->IsAvailable == NO) {
|
|
|
+ log_info("Gun%d is not availbale");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (pSysWarning->Level != WARN_LV_ER) {
|
|
|
+ if (!DisplaySelfTestFailReason()) { //DS60-120 add
|
|
|
+ log_info("Soft reboot for retry self-tets. ");
|
|
|
+ sleep(3);
|
|
|
+ KillAllTask();
|
|
|
+ system("/usr/bin/run_evse_restart.sh");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (pSysWarning->Level == WARN_LV_ER) { //DS60-120 add
|
|
|
+ KillTaskExceptPrimary();
|
|
|
+ } else {
|
|
|
+ KillTask();
|
|
|
+ }
|
|
|
+ /*
|
|
|
+ if (pSysInfo->SelfTestSeq == _STEST_FAIL)
|
|
|
+ StopProcessingLoop();
|
|
|
+ */
|
|
|
+ }
|
|
|
+
|
|
|
+ if (pSysInfo->SelfTestSeq == _STEST_FAIL && pSysInfo->SystemTimeoutFlag != Timeout_SelftestChk) {
|
|
|
+ SelfTestRun();
|
|
|
+ StopSystemTimeoutDet();
|
|
|
+ sleep(3);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (pDcChargingInfo->IsAvailable && pSysInfo->SelfTestSeq == _STEST_COMPLETE) {
|
|
|
+ if (pSysWarning->Level == WARN_LV_ER)
|
|
|
+ setChargerMode(gunIndex, MODE_FAULT);
|
|
|
+ else
|
|
|
+ setChargerMode(gunIndex, MODE_IDLE);
|
|
|
+ }
|
|
|
+#ifndef DD360Audi
|
|
|
+ if (pSysInfo->CurGunSelected == gunIndex) {
|
|
|
+ pSysInfo->SystemPage = _PAGE_MAINTAIN;
|
|
|
+ }
|
|
|
+#endif
|
|
|
+ break;
|
|
|
}//switch
|
|
|
TryFeedWatchdog();
|
|
|
}//for
|