|
@@ -50,7 +50,11 @@
|
|
|
#define UPGRADE_FAN 0x02
|
|
|
#define UPGRADE_RB 0x03
|
|
|
#define UPGRADE_PRI 0x04
|
|
|
-#define SYSTEM_MIN_VOL 1500
|
|
|
+#define UPGRADE_AC 0x05
|
|
|
+#define SYSTEM_MIN_VOL 150
|
|
|
+
|
|
|
+#define NO_DEFINE 255
|
|
|
+#define DEFAULT_AC_INDEX 2
|
|
|
|
|
|
char *valid_Internet[2] = {"8.8.8.8", "180.76.76.76"};
|
|
|
unsigned char mask_table[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 };
|
|
@@ -75,6 +79,7 @@ int StoreLogMsg_1(const char *fmt, ...);
|
|
|
unsigned long GetTimeoutValue(struct timeval _sour_time);
|
|
|
void gpio_set_value(unsigned int gpio, unsigned int value);
|
|
|
void PRINTF_FUNC(char *string, ...);
|
|
|
+void ChangeGunSelectByIndex(byte sel);
|
|
|
|
|
|
#define DEBUG_INFO_MSG(format, args...) StoreLogMsg_1("[%s:%d][%s][Info] "format, __FILE__, __LINE__, __FUNCTION__, ##args)
|
|
|
#define DEBUG_WARN_MSG(format, args...) StoreLogMsg_1("[%s:%d][%s][Warn] "format, __FILE__, __LINE__, __FUNCTION__, ##args)
|
|
@@ -92,24 +97,28 @@ struct RelayModuleData *ShmRelayModuleData;
|
|
|
struct OCPP16Data *ShmOCPP16Data;
|
|
|
|
|
|
struct ChargingInfoData *chargingInfo[CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY];
|
|
|
+struct ChargingInfoData *ac_chargingInfo[AC_QUANTITY];
|
|
|
struct timeb startChargingTime[CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY];
|
|
|
struct timeb endChargingTime[CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY];
|
|
|
|
|
|
// for initial index to check EV board type is correct
|
|
|
byte _gunIndex = 0;
|
|
|
+byte _acgunIndex = 0;
|
|
|
byte _chademoIndex = 0;
|
|
|
byte _ccsIndex = 0;
|
|
|
byte _gb_Index = 0;
|
|
|
+byte _ac_Index = 0;
|
|
|
byte bd0_1_status = 0;
|
|
|
byte bd0_2_status = 0;
|
|
|
byte bd1_1_status = 0;
|
|
|
byte bd1_2_status = 0;
|
|
|
|
|
|
bool isCardScan = false;
|
|
|
+bool isModelNameMatch = true;
|
|
|
|
|
|
int rfidFd = -1;
|
|
|
char* rfidPortName = "/dev/ttyS2";
|
|
|
-char* fwVersion = "D0.02.00.00.07.00";
|
|
|
+char* fwVersion = "D0.10.00.0000.00";
|
|
|
|
|
|
//================================================
|
|
|
// initial can-bus
|
|
@@ -171,7 +180,7 @@ int InitComPort(byte target)
|
|
|
|
|
|
if(target == UPGRADE_PRI)
|
|
|
fd = open(_priPortName, O_RDWR);
|
|
|
- else if (target == UPGRADE_FAN || target == UPGRADE_RB)
|
|
|
+ else if (target == UPGRADE_FAN || target == UPGRADE_RB || target == UPGRADE_AC)
|
|
|
fd = open(_485PortName, O_RDWR);
|
|
|
|
|
|
if(fd<=0)
|
|
@@ -296,7 +305,7 @@ void PRINTF_FUNC(char *string, ...)
|
|
|
vsnprintf(buffer, sizeof(buffer), string, args);
|
|
|
va_end(args);
|
|
|
|
|
|
- if (DEBUG)
|
|
|
+ if (ShmSysConfigAndInfo->SysConfig.SwitchDebugFlag == YES)
|
|
|
printf("%s \n", buffer);
|
|
|
else
|
|
|
DEBUG_INFO_MSG("%s \n", buffer);
|
|
@@ -1024,12 +1033,17 @@ void GetFirmwareVersion()
|
|
|
ShmSysConfigAndInfo->SysInfo.CsuRootFsFwRev[9] = '0';
|
|
|
break;
|
|
|
}
|
|
|
-
|
|
|
// Get rating power from model name
|
|
|
- memcpy(&ShmSysConfigAndInfo->SysInfo.CsuRootFsFwRev[10], &ShmSysConfigAndInfo->SysConfig.ModelName[4], 0x01);
|
|
|
+ memcpy(&ShmSysConfigAndInfo->SysInfo.CsuRootFsFwRev[10], &ShmSysConfigAndInfo->SysConfig.ModelName[4], 0x03);
|
|
|
|
|
|
- // Get rating power from model name
|
|
|
- memcpy(&ShmSysConfigAndInfo->SysInfo.CsuRootFsFwRev[12], &ShmSysConfigAndInfo->SysConfig.ModelName[5], 0x02);
|
|
|
+ // Get IEC or UL
|
|
|
+ char _buf[3] = {0};
|
|
|
+ memcpy(_buf, &ShmSysConfigAndInfo->SysConfig.ModelName[2], 2);
|
|
|
+
|
|
|
+ if (strcmp(_buf, "YE") == EQUAL)
|
|
|
+ ShmSysConfigAndInfo->SysInfo.ChargerType = _CHARGER_TYPE_IEC;
|
|
|
+ else if (strcmp(_buf, "WU") == EQUAL)
|
|
|
+ ShmSysConfigAndInfo->SysInfo.ChargerType = _CHARGER_TYPE_UL;
|
|
|
}
|
|
|
|
|
|
void InitialShareMemoryInfo()
|
|
@@ -1120,22 +1134,29 @@ void InitialShareMemoryInfo()
|
|
|
char EvsePower[2];
|
|
|
|
|
|
EvsePower[2] = '\0';
|
|
|
+ unsigned short buf_pow = 0;
|
|
|
if (strlen((char *) ShmSysConfigAndInfo->SysConfig.ModelName) >= 6)
|
|
|
{
|
|
|
strncpy(EvsePower, (char *)(ShmSysConfigAndInfo->SysConfig.ModelName + 4), 2);
|
|
|
if (strcmp(EvsePower, "15") == EQUAL)
|
|
|
- ShmSysConfigAndInfo->SysConfig.MaxChargingPower = 150;
|
|
|
+ buf_pow = 150;
|
|
|
else if (strcmp(EvsePower, "30") == EQUAL)
|
|
|
- ShmSysConfigAndInfo->SysConfig.MaxChargingPower = 30;
|
|
|
+ buf_pow = 30;
|
|
|
else if (strcmp(EvsePower, "60") == EQUAL)
|
|
|
- ShmSysConfigAndInfo->SysConfig.MaxChargingPower = 60;
|
|
|
+ buf_pow = 60;
|
|
|
else if (strcmp(EvsePower, "18") == EQUAL)
|
|
|
- ShmSysConfigAndInfo->SysConfig.MaxChargingPower = 180;
|
|
|
+ buf_pow = 180;
|
|
|
else if (strcmp(EvsePower, "36") == EQUAL)
|
|
|
- ShmSysConfigAndInfo->SysConfig.MaxChargingPower = 360;
|
|
|
+ buf_pow = 360;
|
|
|
+
|
|
|
+ if(ShmSysConfigAndInfo->SysConfig.MaxChargingPower == 0 ||
|
|
|
+ ShmSysConfigAndInfo->SysConfig.MaxChargingPower > buf_pow)
|
|
|
+ ShmSysConfigAndInfo->SysConfig.MaxChargingPower = buf_pow;
|
|
|
|
|
|
ShmSysConfigAndInfo->SysConfig.RatingCurrent = (ShmSysConfigAndInfo->SysConfig.MaxChargingPower / 30) * 100;
|
|
|
}
|
|
|
+ ShmSysConfigAndInfo->SysConfig.SwitchDebugFlag = NO;
|
|
|
+ ShmSysConfigAndInfo->SysConfig.AlwaysGfdFlag = NO;
|
|
|
}
|
|
|
|
|
|
int Initialization()
|
|
@@ -1173,10 +1194,17 @@ int Initialization()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
strcpy((char *)ShmOCPP16Data->StatusNotification[count].ErrorCode, "NoError");
|
|
|
}
|
|
|
|
|
|
+ for (byte count = 0; count < ShmSysConfigAndInfo->SysConfig.AcConnectorCount; count++)
|
|
|
+ {
|
|
|
+ if (ac_chargingInfo[count]->Type == _Type_AC)
|
|
|
+ {
|
|
|
+ ac_chargingInfo[count]->SelfTest_Comp = NO;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
PRINTF_FUNC("Initialization OK \n");
|
|
|
return PASS;
|
|
|
}
|
|
@@ -1229,6 +1257,12 @@ void DisplaySelfTestFailReason()
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ for (byte index = 0; index < ShmSysConfigAndInfo->SysConfig.AcConnectorCount; index++)
|
|
|
+ {
|
|
|
+ // 先借 GBT 顯示
|
|
|
+ if (ac_chargingInfo[index]->SelfTest_Comp == NO)
|
|
|
+ { ShmStatusCodeData->AlarmCode.AlarmEvents.bits.AcConnectorStestFail = YES; }
|
|
|
+ }
|
|
|
|
|
|
if (ShmSysConfigAndInfo->SysInfo.AcContactorStatus == NO)
|
|
|
{
|
|
@@ -1342,6 +1376,22 @@ void SelfTestRun()
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ for (byte index = 0; index < ShmSysConfigAndInfo->SysConfig.AcConnectorCount; index++)
|
|
|
+ {
|
|
|
+ if (ac_chargingInfo[index]->Type == _Type_AC)
|
|
|
+ {
|
|
|
+ if (strlen((char *)ac_chargingInfo[index]->version) != 0 ||
|
|
|
+ ac_chargingInfo[index]->version[0] != '\0')
|
|
|
+ {
|
|
|
+ ac_chargingInfo[index]->SelfTest_Comp = YES;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ evInitFlag = NO;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if (ShmFanModuleData->SelfTest_Comp &&
|
|
@@ -1402,6 +1452,7 @@ int SpawnTask()
|
|
|
system("/root/Module_LcmControl &");
|
|
|
system("/root/Module_InternalComm &");
|
|
|
system("/root/Module_PsuComm &");
|
|
|
+ system("/root/Module_ProduceUtils &");
|
|
|
|
|
|
if(strcmp((char *)ShmSysConfigAndInfo->SysConfig.OcppServerURL, "") != EQUAL &&
|
|
|
strcmp((char *)ShmSysConfigAndInfo->SysConfig.ChargeBoxId, "") != EQUAL)
|
|
@@ -1539,7 +1590,7 @@ bool isEvStopCharging_chademo(byte gunIndex)
|
|
|
if (isEvGunLocked_chademo(gunIndex) == NO)
|
|
|
{
|
|
|
// 無鎖槍 = 停止
|
|
|
- PRINTF_FUNC("gun locked none. \n");
|
|
|
+ PRINTF_FUNC("gun locked none (%d) \n", gunIndex);
|
|
|
return YES;
|
|
|
}
|
|
|
|
|
@@ -1621,12 +1672,21 @@ bool isEvStopCharging_ccs(byte gunIndex)
|
|
|
void DisplayChargingInfo()
|
|
|
{
|
|
|
PRINTF_FUNC("*********** DisplayChargingInfo *********** \n");
|
|
|
- for (byte i = ShmSysConfigAndInfo->SysConfig.TotalConnectorCount - 1; i >= 0; i--)
|
|
|
+ if (ShmSysConfigAndInfo->SysConfig.AcConnectorCount > 0 &&
|
|
|
+ ShmSysConfigAndInfo->SysInfo.CurGunSelectedByAc == NO_DEFINE &&
|
|
|
+ ac_chargingInfo[0]->SystemStatus >= S_PREPARNING && ac_chargingInfo[0]->SystemStatus <= S_COMPLETE)
|
|
|
{
|
|
|
- if (chargingInfo[i]->SystemStatus != S_IDLE)
|
|
|
+ ShmSysConfigAndInfo->SysInfo.CurGunSelectedByAc = DEFAULT_AC_INDEX;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ for (byte i = ShmSysConfigAndInfo->SysConfig.TotalConnectorCount - 1; i >= 0; i--)
|
|
|
{
|
|
|
- ShmSysConfigAndInfo->SysInfo.CurGunSelected = i;
|
|
|
- break;
|
|
|
+ if (chargingInfo[i]->SystemStatus != S_IDLE)
|
|
|
+ {
|
|
|
+ ChangeGunSelectByIndex(i);
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
usleep(50000);
|
|
@@ -1800,6 +1860,10 @@ void RecordAlarmCode(char *code)
|
|
|
if (strcmp(code, "012288") == 0) ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CcsOutputUVPFail = YES;
|
|
|
if (strcmp(code, "012289") == 0) ShmStatusCodeData->AlarmCode.AlarmEvents.bits.ChademoOutputUVPFail = YES;
|
|
|
if (strcmp(code, "012290") == 0) ShmStatusCodeData->AlarmCode.AlarmEvents.bits.GbtOutputUVPFail = YES;
|
|
|
+
|
|
|
+ if (strcmp(code, "012296") == 0) ShmStatusCodeData->AlarmCode.AlarmEvents.bits.ChademoGroundWarning = YES;
|
|
|
+ if (strcmp(code, "012297") == 0) ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CcsGroundfaultWarning = YES;
|
|
|
+ if (strcmp(code, "012298") == 0) ShmStatusCodeData->AlarmCode.AlarmEvents.bits.GbGroundfaultWarning = YES;
|
|
|
}
|
|
|
|
|
|
void ReleaseAlarmCode(byte gunIndex)
|
|
@@ -1809,21 +1873,30 @@ void ReleaseAlarmCode(byte gunIndex)
|
|
|
ShmStatusCodeData->AlarmCode.AlarmEvents.bits.ChademoGfdTrip = NO;
|
|
|
ShmStatusCodeData->AlarmCode.AlarmEvents.bits.ChademoOutputUVPFail = NO;
|
|
|
ShmStatusCodeData->FaultCode.FaultEvents.bits.ChademoOutputRelayWelding = NO;
|
|
|
+ ShmStatusCodeData->AlarmCode.AlarmEvents.bits.ChademoGroundWarning = NO;
|
|
|
}
|
|
|
else if (chargingInfo[gunIndex]->Type == _Type_GB)
|
|
|
{
|
|
|
ShmStatusCodeData->AlarmCode.AlarmEvents.bits.GbGfdTrip = NO;
|
|
|
ShmStatusCodeData->AlarmCode.AlarmEvents.bits.GbtOutputUVPFail = NO;
|
|
|
ShmStatusCodeData->FaultCode.FaultEvents.bits.GbOutputRelayWelding = NO;
|
|
|
+ ShmStatusCodeData->AlarmCode.AlarmEvents.bits.GbGroundfaultWarning = NO;
|
|
|
}
|
|
|
else if (chargingInfo[gunIndex]->Type == _Type_CCS_2)
|
|
|
{
|
|
|
ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CcsGfdTrip = NO;
|
|
|
ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CcsOutputUVPFail = NO;
|
|
|
ShmStatusCodeData->FaultCode.FaultEvents.bits.CcsOutputRelayWelding = NO;
|
|
|
+ ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CcsGroundfaultWarning = NO;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+void CleanAlarmCodeByString(char *code)
|
|
|
+{
|
|
|
+ if (strcmp(code, "012296") == 0) ShmStatusCodeData->AlarmCode.AlarmEvents.bits.ChademoGroundWarning = NO;
|
|
|
+ if (strcmp(code, "012297") == 0) ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CcsGroundfaultWarning = NO;
|
|
|
+ if (strcmp(code, "012298") == 0) ShmStatusCodeData->AlarmCode.AlarmEvents.bits.GbGroundfaultWarning = NO;
|
|
|
+}
|
|
|
//===============================================
|
|
|
// EmergencyStop and Charging Stop
|
|
|
//===============================================
|
|
@@ -1832,6 +1905,11 @@ void ChargingTerminalProcess(byte gunIndex)
|
|
|
setChargerMode(gunIndex, MODE_TERMINATING);
|
|
|
}
|
|
|
|
|
|
+void AcChargingTerminalProcess()
|
|
|
+{
|
|
|
+ ac_chargingInfo[0]->SystemStatus = MODE_TERMINATING;
|
|
|
+}
|
|
|
+
|
|
|
void StopChargingProcessByString(byte level)
|
|
|
{
|
|
|
if (level > ShmSysConfigAndInfo->SysWarningInfo.Level)
|
|
@@ -1980,12 +2058,45 @@ void ChkPrimaryStatus()
|
|
|
{
|
|
|
leftBtnPush = true;
|
|
|
PRINTF_FUNC("left btn down............................... \n");
|
|
|
- if (ShmSysConfigAndInfo->SysInfo.CurGunSelected + 1 < ShmSysConfigAndInfo->SysConfig.TotalConnectorCount)
|
|
|
- ShmSysConfigAndInfo->SysInfo.CurGunSelected += 1;
|
|
|
- else
|
|
|
- ShmSysConfigAndInfo->SysInfo.CurGunSelected = 0;
|
|
|
+ switch(chargingInfo[ShmSysConfigAndInfo->SysInfo.CurGunSelected]->SystemStatus)
|
|
|
+ {
|
|
|
+ case S_IDLE:
|
|
|
+ {
|
|
|
+ if(isDetectPlugin())
|
|
|
+ {
|
|
|
+ _DetectPlugInTimeout();
|
|
|
+ StopSystemTimeoutDet();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case S_PREPARNING:
|
|
|
+ case S_PREPARING_FOR_EV:
|
|
|
+ case S_PREPARING_FOR_EVSE:
|
|
|
+ case S_CCS_PRECHARGE_ST0:
|
|
|
+ case S_CCS_PRECHARGE_ST1:
|
|
|
+ {
|
|
|
+ // 取消充電
|
|
|
+ ChargingTerminalProcess(ShmSysConfigAndInfo->SysInfo.CurGunSelected);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case S_CHARGING:
|
|
|
+ {
|
|
|
+ if (ShmSysConfigAndInfo->SysConfig.AuthorisationMode == AUTH_MODE_DISABLE)
|
|
|
+ {
|
|
|
+ // 停止充電
|
|
|
+ ChargingTerminalProcess(ShmSysConfigAndInfo->SysInfo.CurGunSelected);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case S_COMPLETE:
|
|
|
+ {
|
|
|
+ // 回 IDLE
|
|
|
+ //PRINTF_FUNC("right btn down.................S_COMPLETE \n");
|
|
|
+ //chargingInfo[ShmSysConfigAndInfo->SysInfo.CurGunSelected]->SystemStatus = S_IDLE;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
- // 左邊的選槍按鈕,只有在雙槍都在充電時候才有用 : 30KW 以下該按鈕無作用
|
|
|
}
|
|
|
else if (ShmPrimaryMcuData->InputDet.bits.Button1 == BTN_RELEASE)
|
|
|
{
|
|
@@ -2002,43 +2113,18 @@ void ChkPrimaryStatus()
|
|
|
{
|
|
|
rightBtnPush = true;
|
|
|
PRINTF_FUNC("right btn down............................... %d \n", ShmSysConfigAndInfo->SysInfo.CurGunSelected);
|
|
|
- switch(chargingInfo[ShmSysConfigAndInfo->SysInfo.CurGunSelected]->SystemStatus)
|
|
|
- {
|
|
|
- case S_IDLE:
|
|
|
- {
|
|
|
- if(isDetectPlugin())
|
|
|
- {
|
|
|
- _DetectPlugInTimeout();
|
|
|
- StopSystemTimeoutDet();
|
|
|
- }
|
|
|
- }
|
|
|
- break;
|
|
|
- case S_PREPARNING:
|
|
|
- case S_PREPARING_FOR_EV:
|
|
|
- case S_PREPARING_FOR_EVSE:
|
|
|
- case S_CCS_PRECHARGE_ST0:
|
|
|
- case S_CCS_PRECHARGE_ST1:
|
|
|
- {
|
|
|
- // 取消充電
|
|
|
- ChargingTerminalProcess(ShmSysConfigAndInfo->SysInfo.CurGunSelected);
|
|
|
- }
|
|
|
- break;
|
|
|
- case S_CHARGING:
|
|
|
+ if (ShmSysConfigAndInfo->SysInfo.CurGunSelected + 1 < ShmSysConfigAndInfo->SysConfig.TotalConnectorCount)
|
|
|
{
|
|
|
- if (ShmSysConfigAndInfo->SysConfig.AuthorisationMode == _SYS_AUTHORIZE_FREE)
|
|
|
- {
|
|
|
- // 停止充電
|
|
|
- ChargingTerminalProcess(ShmSysConfigAndInfo->SysInfo.CurGunSelected);
|
|
|
- }
|
|
|
+ ShmSysConfigAndInfo->SysInfo.CurGunSelected++;
|
|
|
+ ChangeGunSelectByIndex(ShmSysConfigAndInfo->SysInfo.CurGunSelected);
|
|
|
}
|
|
|
- break;
|
|
|
- case S_COMPLETE:
|
|
|
+ else if (ShmSysConfigAndInfo->SysConfig.AcConnectorCount > 0 &&
|
|
|
+ ShmSysConfigAndInfo->SysInfo.CurGunSelectedByAc == NO_DEFINE)
|
|
|
+ ShmSysConfigAndInfo->SysInfo.CurGunSelectedByAc = DEFAULT_AC_INDEX;
|
|
|
+ else
|
|
|
{
|
|
|
- // 回 IDLE
|
|
|
- //PRINTF_FUNC("right btn down.................S_COMPLETE \n");
|
|
|
- //chargingInfo[ShmSysConfigAndInfo->SysInfo.CurGunSelected]->SystemStatus = S_IDLE;
|
|
|
- }
|
|
|
- break;
|
|
|
+ ShmSysConfigAndInfo->SysInfo.CurGunSelected = 0;
|
|
|
+ ChangeGunSelectByIndex(ShmSysConfigAndInfo->SysInfo.CurGunSelected);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -2102,6 +2188,25 @@ void CheckErrorOccurStatus(byte index)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ if (ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL1InputOVP == YES ||
|
|
|
+ ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL2InputOVP == YES ||
|
|
|
+ ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL3InputOVP == YES)
|
|
|
+ {
|
|
|
+ if (ShmSysConfigAndInfo->SysWarningInfo.ExtraErrProcess == _EXTRA_ERR_PROCESS_NONE)
|
|
|
+ {
|
|
|
+ ShmSysConfigAndInfo->SysWarningInfo.ExtraErrProcess = _EXTRA_ERR_PROCESS_INOVP;
|
|
|
+ StopChargingProcessByString(2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (ShmSysConfigAndInfo->SysWarningInfo.ExtraErrProcess == _EXTRA_ERR_PROCESS_INOVP)
|
|
|
+ {
|
|
|
+ ShmSysConfigAndInfo->SysWarningInfo.ExtraErrProcess = _EXTRA_ERR_PROCESS_NONE;
|
|
|
+ ReleaseChargingProcessByString(2);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//===============================================
|
|
@@ -2302,7 +2407,6 @@ void UserScanFunction()
|
|
|
// 2. 停止充電
|
|
|
for (byte i = 0; i < ShmSysConfigAndInfo->SysConfig.TotalConnectorCount; i++)
|
|
|
{
|
|
|
- // 二擇一
|
|
|
if (ShmSysConfigAndInfo->SysInfo.PageIndex == _LCM_FIX ||
|
|
|
(chargingInfo[i]->SystemStatus >= S_AUTHORIZING && chargingInfo[i]->SystemStatus <= S_PREPARNING) ||
|
|
|
(chargingInfo[i]->SystemStatus >= S_TERMINATING && chargingInfo[i]->SystemStatus < S_COMPLETE))
|
|
@@ -2314,16 +2418,39 @@ void UserScanFunction()
|
|
|
{
|
|
|
stopReq = i;
|
|
|
}
|
|
|
- else if (chargingInfo[i]->SystemStatus == S_IDLE && chargingInfo[i]->IsAvailable == YES)
|
|
|
+ if ((chargingInfo[i]->SystemStatus == S_IDLE && chargingInfo[i]->IsAvailable) == YES ||
|
|
|
+ (_acgunIndex > 0 && ac_chargingInfo[0]->SystemStatus == S_IDLE && ac_chargingInfo[0]->IsAvailable))
|
|
|
{
|
|
|
idleReq = true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ if (_acgunIndex > 0 && ShmSysConfigAndInfo->SysInfo.CurGunSelectedByAc == DEFAULT_AC_INDEX &&
|
|
|
+ ac_chargingInfo[0]->SystemStatus == S_CHARGING)
|
|
|
+ {
|
|
|
+ stopReq = DEFAULT_AC_INDEX;
|
|
|
+ }
|
|
|
+
|
|
|
if (strlen((char *)ShmSysConfigAndInfo->SysConfig.UserId) > 0)
|
|
|
{
|
|
|
- if (stopReq < ShmSysConfigAndInfo->SysConfig.TotalConnectorCount &&
|
|
|
- chargingInfo[ShmSysConfigAndInfo->SysInfo.CurGunSelected]->SystemStatus == S_CHARGING)
|
|
|
+ if (_acgunIndex > 0 && stopReq == DEFAULT_AC_INDEX && ShmSysConfigAndInfo->SysInfo.CurGunSelectedByAc == DEFAULT_AC_INDEX)
|
|
|
+ {
|
|
|
+ char value[32];
|
|
|
+
|
|
|
+ PRINTF_FUNC("ac stop charging \n");
|
|
|
+ PRINTF_FUNC("index = %d, card number = %s, UserId = %s \n", ShmSysConfigAndInfo->SysInfo.CurGunSelectedByAc,
|
|
|
+ ac_chargingInfo[0]->StartUserId, ShmSysConfigAndInfo->SysConfig.UserId);
|
|
|
+ memcpy(value, (unsigned char *)ac_chargingInfo[0]->StartUserId,
|
|
|
+ ARRAY_SIZE(ac_chargingInfo[0]->StartUserId));
|
|
|
+ if (strcmp((char *)ShmSysConfigAndInfo->SysConfig.UserId, value) == EQUAL)
|
|
|
+ {
|
|
|
+ AcChargingTerminalProcess();
|
|
|
+ }
|
|
|
+ strcpy((char *)ShmSysConfigAndInfo->SysConfig.UserId, "");
|
|
|
+ }
|
|
|
+ else if (stopReq < ShmSysConfigAndInfo->SysConfig.TotalConnectorCount &&
|
|
|
+ chargingInfo[ShmSysConfigAndInfo->SysInfo.CurGunSelected]->SystemStatus == S_CHARGING &&
|
|
|
+ (_acgunIndex > 0 && ShmSysConfigAndInfo->SysInfo.CurGunSelectedByAc == NO_DEFINE))
|
|
|
{
|
|
|
char value[32];
|
|
|
|
|
@@ -2381,8 +2508,8 @@ unsigned char isModeChange(unsigned char gun_index)
|
|
|
|
|
|
void ScannerCardProcess()
|
|
|
{
|
|
|
- if (!isDetectPlugin() && !isCardScan && ShmSysConfigAndInfo->SysWarningInfo.Level == 0 &&
|
|
|
- ShmSysConfigAndInfo->SysConfig.AuthorisationMode == _SYS_AUTHORIZE_OCPP)
|
|
|
+ if (!isDetectPlugin() && !isCardScan && ShmSysConfigAndInfo->SysWarningInfo.Level != 2 &&
|
|
|
+ ShmSysConfigAndInfo->SysConfig.AuthorisationMode == AUTH_MODE_ENABLE)
|
|
|
{
|
|
|
isCardScan = true;
|
|
|
// 處理刷卡及驗證卡號的動作
|
|
@@ -2444,8 +2571,10 @@ void ScannerCardProcess()
|
|
|
isCardScan = false;
|
|
|
}
|
|
|
|
|
|
-void AddGunInfoByConnector(byte typeValue, byte slots)
|
|
|
+bool AddGunInfoByConnector(byte typeValue, byte slots)
|
|
|
{
|
|
|
+ bool result = true;
|
|
|
+
|
|
|
switch (typeValue)
|
|
|
{
|
|
|
case '0': // none
|
|
@@ -2457,6 +2586,20 @@ void AddGunInfoByConnector(byte typeValue, byte slots)
|
|
|
case '3': // IEC 62196-2 Type 2 Plug
|
|
|
break;
|
|
|
case '4': // IEC 62196-2 Type 2 Socket
|
|
|
+ if (AC_QUANTITY > _ac_Index)
|
|
|
+ {
|
|
|
+ ac_chargingInfo[_acgunIndex] = &ShmSysConfigAndInfo->SysInfo.AcChargingData[_ac_Index];
|
|
|
+
|
|
|
+ // AC 固定 index
|
|
|
+ ac_chargingInfo[_acgunIndex]->Index = 1;
|
|
|
+ ac_chargingInfo[_acgunIndex]->SystemStatus = S_BOOTING;
|
|
|
+ ac_chargingInfo[_acgunIndex]->Type = _Type_AC;
|
|
|
+ ac_chargingInfo[_acgunIndex]->IsAvailable = YES;
|
|
|
+ _ac_Index++;
|
|
|
+ _acgunIndex++;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ result = false;
|
|
|
break;
|
|
|
case '5': // GB/T AC Plug
|
|
|
break;
|
|
@@ -2477,6 +2620,8 @@ void AddGunInfoByConnector(byte typeValue, byte slots)
|
|
|
_chademoIndex++;
|
|
|
_gunIndex++;
|
|
|
}
|
|
|
+ else
|
|
|
+ result = false;
|
|
|
}
|
|
|
break;
|
|
|
case 'U': // CCS1 combo
|
|
@@ -2497,6 +2642,8 @@ void AddGunInfoByConnector(byte typeValue, byte slots)
|
|
|
_ccsIndex++;
|
|
|
_gunIndex++;
|
|
|
}
|
|
|
+ else
|
|
|
+ result = false;
|
|
|
}
|
|
|
break;
|
|
|
case 'G': // GBT DC
|
|
@@ -2505,7 +2652,7 @@ void AddGunInfoByConnector(byte typeValue, byte slots)
|
|
|
{
|
|
|
chargingInfo[_gunIndex] = &ShmSysConfigAndInfo->SysInfo.GbChargingData[_gb_Index];
|
|
|
|
|
|
- chargingInfo[_gunIndex]->Index = _gunIndex;
|
|
|
+ chargingInfo[_gunIndex]->Index = _gunIndex;
|
|
|
chargingInfo[_gunIndex]->slotsIndex = slots;
|
|
|
chargingInfo[_gunIndex]->SystemStatus = S_BOOTING;
|
|
|
chargingInfo[_gunIndex]->Type = _Type_GB;
|
|
@@ -2514,11 +2661,14 @@ void AddGunInfoByConnector(byte typeValue, byte slots)
|
|
|
_gb_Index++;
|
|
|
_gunIndex++;
|
|
|
}
|
|
|
+ else
|
|
|
+ result = false;
|
|
|
}
|
|
|
break;
|
|
|
case 'D': // GBT DC x 2
|
|
|
break;
|
|
|
}
|
|
|
+ return result;
|
|
|
}
|
|
|
|
|
|
bool CheckConnectorTypeStatus()
|
|
@@ -2532,13 +2682,21 @@ bool CheckConnectorTypeStatus()
|
|
|
byte slots = 1;
|
|
|
for (byte typeIndex = 7; typeIndex <= 9; typeIndex++)
|
|
|
{
|
|
|
- AddGunInfoByConnector(ShmSysConfigAndInfo->SysConfig.ModelName[typeIndex], slots);
|
|
|
+ if(!AddGunInfoByConnector(ShmSysConfigAndInfo->SysConfig.ModelName[typeIndex], slots))
|
|
|
+ {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
slots++;
|
|
|
}
|
|
|
|
|
|
ShmSysConfigAndInfo->SysConfig.TotalConnectorCount = _gunIndex;
|
|
|
- PRINTF_FUNC("_gunCount = %d \n", ShmSysConfigAndInfo->SysConfig.TotalConnectorCount);
|
|
|
- if (ShmSysConfigAndInfo->SysConfig.TotalConnectorCount == 0)
|
|
|
+ ShmSysConfigAndInfo->SysConfig.AcConnectorCount = _acgunIndex;
|
|
|
+ PRINTF_FUNC("DC _gunCount = %d, AC _gunCount = %d \n",
|
|
|
+ ShmSysConfigAndInfo->SysConfig.TotalConnectorCount,
|
|
|
+ ShmSysConfigAndInfo->SysConfig.AcConnectorCount);
|
|
|
+
|
|
|
+ if (ShmSysConfigAndInfo->SysConfig.TotalConnectorCount == 0 &&
|
|
|
+ ShmSysConfigAndInfo->SysConfig.AcConnectorCount == 0)
|
|
|
result = false;
|
|
|
|
|
|
// 偵測槍屬於哪個 slot : 可知道插在板上的Slot 0 或 1 是 Chademo 還是 CCS
|
|
@@ -2688,6 +2846,7 @@ char CheckUpdateProcess()
|
|
|
case 0x10000006:
|
|
|
case 0x1000000D:
|
|
|
case 0x1000000E:
|
|
|
+ case 0x20000002:
|
|
|
{
|
|
|
// CSU_PRIMARY_CONTROLLER : 0x10000006
|
|
|
byte target = 0x00;
|
|
@@ -2698,6 +2857,8 @@ char CheckUpdateProcess()
|
|
|
target = UPGRADE_RB;
|
|
|
else if (Type == 0x1000000E)
|
|
|
target = UPGRADE_FAN;
|
|
|
+ else if (Type == 0x20000002)
|
|
|
+ target = UPGRADE_AC;
|
|
|
|
|
|
int fd = InitComPort(target);
|
|
|
|
|
@@ -2764,11 +2925,12 @@ void CreateRfidFork()
|
|
|
{
|
|
|
// 刷卡判斷
|
|
|
RFID rfid;
|
|
|
- if (ShmSysConfigAndInfo->SysConfig.OfflinePolicy == _OFFLINE_POLICY_NO_CHARGING)
|
|
|
+ if (ShmSysConfigAndInfo->SysConfig.OfflinePolicy == _OFFLINE_POLICY_NO_CHARGING ||
|
|
|
+ !ShmSysConfigAndInfo->SysConfig.isRFID)
|
|
|
{}
|
|
|
else if(getRequestCardSN(rfidFd, 0, &rfid))
|
|
|
{
|
|
|
- PRINTF_FUNC("Get Card.. \n");
|
|
|
+ PRINTF_FUNC("Get Card..-%s- \n", ShmSysConfigAndInfo->SysConfig.UserId);
|
|
|
if (strlen((char *)ShmSysConfigAndInfo->SysConfig.UserId) == 0)
|
|
|
{
|
|
|
if (ShmSysConfigAndInfo->SysConfig.RfidCardNumEndian == RFID_ENDIAN_LITTLE)
|
|
@@ -3264,7 +3426,7 @@ bool CheckBackendChargingTimeout(byte gunIndex)
|
|
|
{
|
|
|
bool result = false;
|
|
|
|
|
|
- if (ShmSysConfigAndInfo->SysConfig.AuthorisationMode == _SYS_AUTHORIZE_OCPP)
|
|
|
+ if (ShmSysConfigAndInfo->SysConfig.AuthorisationMode == AUTH_MODE_ENABLE)
|
|
|
{
|
|
|
if (ShmSysConfigAndInfo->SysConfig.MaxChargingDuration > 0)
|
|
|
{
|
|
@@ -3272,7 +3434,7 @@ bool CheckBackendChargingTimeout(byte gunIndex)
|
|
|
result = true;
|
|
|
}
|
|
|
}
|
|
|
- else if (ShmSysConfigAndInfo->SysConfig.AuthorisationMode == _SYS_AUTHORIZE_FREE)
|
|
|
+ else if (ShmSysConfigAndInfo->SysConfig.AuthorisationMode == AUTH_MODE_DISABLE)
|
|
|
{
|
|
|
// 隨插即充電的要看 offline
|
|
|
if (ShmSysConfigAndInfo->SysConfig.OfflineMaxChargeDuration > 0)
|
|
@@ -3289,7 +3451,7 @@ bool CheckBackendChargingEnergy(byte gunIndex)
|
|
|
{
|
|
|
bool result = false;
|
|
|
|
|
|
- if (ShmSysConfigAndInfo->SysConfig.AuthorisationMode == _SYS_AUTHORIZE_OCPP)
|
|
|
+ if (ShmSysConfigAndInfo->SysConfig.AuthorisationMode == AUTH_MODE_ENABLE)
|
|
|
{
|
|
|
if (ShmSysConfigAndInfo->SysConfig.MaxChargingEnergy > 0)
|
|
|
{
|
|
@@ -3297,7 +3459,7 @@ bool CheckBackendChargingEnergy(byte gunIndex)
|
|
|
result = true;
|
|
|
}
|
|
|
}
|
|
|
- else if (ShmSysConfigAndInfo->SysConfig.AuthorisationMode == _SYS_AUTHORIZE_FREE)
|
|
|
+ else if (ShmSysConfigAndInfo->SysConfig.AuthorisationMode == AUTH_MODE_DISABLE)
|
|
|
{
|
|
|
// 隨插即充電的要看 offline
|
|
|
if (ShmSysConfigAndInfo->SysConfig.OfflineMaxChargeEnergy > 0)
|
|
@@ -3408,6 +3570,12 @@ void zipLogFiles()
|
|
|
closedir(pDir);
|
|
|
}
|
|
|
|
|
|
+void ChangeGunSelectByIndex(byte sel)
|
|
|
+{
|
|
|
+ ShmSysConfigAndInfo->SysInfo.CurGunSelected = sel;
|
|
|
+ ShmSysConfigAndInfo->SysInfo.CurGunSelectedByAc = NO_DEFINE;
|
|
|
+}
|
|
|
+
|
|
|
void CheckIsAlternatvieByModelName()
|
|
|
{
|
|
|
// 黑白機 ?
|
|
@@ -3430,7 +3598,7 @@ void StopProcessingLoop()
|
|
|
|
|
|
void CreateWatchdog()
|
|
|
{
|
|
|
- if (DEBUG == NO)
|
|
|
+ if (ShmSysConfigAndInfo->SysConfig.SwitchDebugFlag == NO)
|
|
|
{
|
|
|
wtdFd = InitWatchDog();
|
|
|
|
|
@@ -3439,6 +3607,33 @@ void CreateWatchdog()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+bool IsConnectorWholeIdle()
|
|
|
+{
|
|
|
+ bool result = true;
|
|
|
+
|
|
|
+ for (byte count = 0; count < ShmSysConfigAndInfo->SysConfig.TotalConnectorCount; count++)
|
|
|
+ {
|
|
|
+ if (chargingInfo[count]->SystemStatus != S_IDLE &&
|
|
|
+ chargingInfo[count]->SystemStatus != S_RESERVATION)
|
|
|
+ {
|
|
|
+ result = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for (byte count = 0; count < ShmSysConfigAndInfo->SysConfig.AcConnectorCount; count++)
|
|
|
+ {
|
|
|
+ if (ac_chargingInfo[count]->SystemStatus != S_IDLE &&
|
|
|
+ ac_chargingInfo[count]->IsErrorOccur == NO)
|
|
|
+ {
|
|
|
+ result = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
int main(void)
|
|
|
{
|
|
|
if(CreateShareMemory() == 0)
|
|
@@ -3457,14 +3652,14 @@ int main(void)
|
|
|
system("reboot -f");
|
|
|
}
|
|
|
|
|
|
- PRINTF_FUNC("Chademo = %d, CCS = %d, GB = %d \n", CHAdeMO_QUANTITY, CCS_QUANTITY, GB_QUANTITY);
|
|
|
+ PRINTF_FUNC("Chademo = %d, CCS = %d, GB = %d, AC = %d \n",
|
|
|
+ CHAdeMO_QUANTITY, CCS_QUANTITY, GB_QUANTITY, AC_QUANTITY);
|
|
|
PRINTF_FUNC("\n"); PRINTF_FUNC("Initial SystemConfig and Info.......\n");
|
|
|
if (!InitialSystemDefaultConfig())
|
|
|
{
|
|
|
DEBUG_ERROR_MSG("InitialSystemDefaultConfig NG \n");
|
|
|
StopProcessingLoop();
|
|
|
}
|
|
|
-
|
|
|
PRINTF_FUNC("CheckConnectorTypeStatus. \n");
|
|
|
CheckGunTypeFromHw();
|
|
|
PRINTF_FUNC("CheckIsAlternatvieByModelName. \n");
|
|
@@ -3472,8 +3667,15 @@ int main(void)
|
|
|
PRINTF_FUNC("ModelName = %s\n", ShmSysConfigAndInfo->SysConfig.ModelName);
|
|
|
PRINTF_FUNC("InitialShareMemoryInfo \n");
|
|
|
InitialShareMemoryInfo();
|
|
|
+ PRINTF_FUNC("ChargerType (IEC or UL) = %d \n", ShmSysConfigAndInfo->SysInfo.ChargerType);
|
|
|
ChangeLcmByIndex(_LCM_INIT);
|
|
|
if (!CheckConnectorTypeStatus())
|
|
|
+ isModelNameMatch = false;
|
|
|
+
|
|
|
+ Initialization();
|
|
|
+ PRINTF_FUNC("Spawn all Task. \n");
|
|
|
+ SpawnTask();
|
|
|
+ if (!isModelNameMatch)
|
|
|
{
|
|
|
ShmStatusCodeData->AlarmCode.AlarmEvents.bits.ModelNameNoneMatchStestFail = YES;
|
|
|
ChangeLcmByIndex(_LCM_FIX);
|
|
@@ -3484,15 +3686,11 @@ int main(void)
|
|
|
KillTask();
|
|
|
StopProcessingLoop();
|
|
|
}
|
|
|
- Initialization();
|
|
|
- PRINTF_FUNC("Spawn all Task. \n");
|
|
|
- SpawnTask();
|
|
|
PRINTF_FUNC("Module Name & HW info correct. Initialize.......\n");
|
|
|
CreateTimeoutFork();
|
|
|
PRINTF_FUNC("Self test. \n");
|
|
|
SelfTestRun();
|
|
|
StopSystemTimeoutDet();
|
|
|
-
|
|
|
PRINTF_FUNC("SelfTestSeq = %d, Work_Step = %d \n", ShmSysConfigAndInfo->SysInfo.SelfTestSeq, ShmPsuData->Work_Step);
|
|
|
if (ShmSysConfigAndInfo->SysInfo.SelfTestSeq == _STEST_FAIL ||
|
|
|
ShmPsuData->Work_Step == _NO_WORKING)
|
|
@@ -3503,6 +3701,8 @@ int main(void)
|
|
|
setChargerMode(gun_index, MODE_ALARM);
|
|
|
}
|
|
|
ChangeLcmByIndex(_LCM_FIX);
|
|
|
+ sleep(3);
|
|
|
+ KillTask();
|
|
|
StopProcessingLoop();
|
|
|
}
|
|
|
else
|
|
@@ -3520,14 +3720,14 @@ int main(void)
|
|
|
// 2. ouput fuse - 控制風扇轉速
|
|
|
CreateRfidFork();
|
|
|
// Create Watchdog
|
|
|
- CreateWatchdog();
|
|
|
+ //CreateWatchdog();
|
|
|
// Main loop
|
|
|
PRINTF_FUNC("Main Loop. \n");
|
|
|
for (;;)
|
|
|
{
|
|
|
CheckOcppStatus();
|
|
|
ChkPrimaryStatus();
|
|
|
- if ((ShmSysConfigAndInfo->SysInfo.PageIndex == _LCM_IDLE || ShmSysConfigAndInfo->SysInfo.PageIndex == _LCM_FIX)&&
|
|
|
+ if ((IsConnectorWholeIdle() || ShmSysConfigAndInfo->SysInfo.PageIndex == _LCM_FIX) &&
|
|
|
ShmSysConfigAndInfo->SysInfo.SystemTimeoutFlag != Timeout_ReturnToChargingGunDet)
|
|
|
{
|
|
|
CheckFactoryConfigFunction();
|
|
@@ -3539,6 +3739,12 @@ int main(void)
|
|
|
OcppRemoteStartChk();
|
|
|
// 讀卡邏輯
|
|
|
ScannerCardProcess();
|
|
|
+
|
|
|
+ if (_acgunIndex > 0 && isDetectPlugin() && !isCardScan)
|
|
|
+ {
|
|
|
+ ShmSysConfigAndInfo->SysInfo.SystemPage = _LCM_WAIT_FOR_PLUG;
|
|
|
+ }
|
|
|
+
|
|
|
for (byte gun_index = 0; gun_index < ShmSysConfigAndInfo->SysConfig.TotalConnectorCount; gun_index++)
|
|
|
{
|
|
|
CheckGpioInStatus();
|
|
@@ -3613,6 +3819,8 @@ int main(void)
|
|
|
ShmSysConfigAndInfo->SysInfo.ReAssignedFlag = _REASSIGNED_NONE;
|
|
|
}
|
|
|
}
|
|
|
+ else
|
|
|
+ ShmSysConfigAndInfo->SysInfo.ReAssignedFlag = _REASSIGNED_NONE;
|
|
|
|
|
|
{ // Idle 正常程序起點
|
|
|
// 判斷是否有啟用檢查插槍
|
|
@@ -3626,7 +3834,7 @@ int main(void)
|
|
|
chargingInfo[gun_index]->IsAvailable)
|
|
|
{
|
|
|
PRINTF_FUNC("-----------------1----------------- %d \n", ShmSysConfigAndInfo->SysInfo.OrderCharging);
|
|
|
- ShmSysConfigAndInfo->SysInfo.CurGunSelected = ShmSysConfigAndInfo->SysInfo.OrderCharging;
|
|
|
+ ChangeGunSelectByIndex(ShmSysConfigAndInfo->SysInfo.OrderCharging);
|
|
|
AddPlugInTimes(ShmSysConfigAndInfo->SysInfo.OrderCharging);
|
|
|
setChargerMode(ShmSysConfigAndInfo->SysInfo.OrderCharging, MODE_REASSIGN_CHECK);
|
|
|
ClearDetectPluginFlag();
|
|
@@ -3639,7 +3847,7 @@ int main(void)
|
|
|
chargingInfo[gun_index]->SystemStatus == S_IDLE)
|
|
|
{
|
|
|
PRINTF_FUNC("-----------------2----------------- \n");
|
|
|
- ShmSysConfigAndInfo->SysInfo.CurGunSelected = gun_index;
|
|
|
+ ChangeGunSelectByIndex(gun_index);
|
|
|
AddPlugInTimes(gun_index);
|
|
|
strcpy((char *)chargingInfo[gun_index]->StartUserId, (char *)ShmSysConfigAndInfo->SysConfig.UserId);
|
|
|
PRINTF_FUNC("index = %d, CardNumber = %s \n", gun_index, chargingInfo[gun_index]->StartUserId);
|
|
@@ -3664,11 +3872,11 @@ int main(void)
|
|
|
chargingInfo[gun_index]->SystemStatus = S_IDLE;
|
|
|
}
|
|
|
}
|
|
|
- else if (ShmSysConfigAndInfo->SysConfig.AuthorisationMode == _SYS_AUTHORIZE_FREE &&
|
|
|
+ else if (ShmSysConfigAndInfo->SysConfig.AuthorisationMode == AUTH_MODE_DISABLE &&
|
|
|
(chargingInfo[gun_index]->ConnectorPlugIn == YES && chargingInfo[gun_index]->IsAvailable))
|
|
|
{
|
|
|
PRINTF_FUNC("-----------------3----------------- \n");
|
|
|
- ShmSysConfigAndInfo->SysInfo.CurGunSelected = gun_index;
|
|
|
+ ChangeGunSelectByIndex(gun_index);
|
|
|
AddPlugInTimes(gun_index);
|
|
|
setChargerMode(gun_index, MODE_REASSIGN_CHECK);
|
|
|
ClearDetectPluginFlag();
|
|
@@ -3679,27 +3887,38 @@ int main(void)
|
|
|
if (ShmSysConfigAndInfo->SysInfo.CurGunSelected == gun_index)
|
|
|
ShmSysConfigAndInfo->SysInfo.ConnectorPage = _LCM_IDLE;
|
|
|
|
|
|
- if (ShmSysConfigAndInfo->SysConfig.TotalConnectorCount > 1 &&
|
|
|
+ if ((ShmSysConfigAndInfo->SysConfig.TotalConnectorCount + ShmSysConfigAndInfo->SysConfig.AcConnectorCount) > 1 &&
|
|
|
ShmSysConfigAndInfo->SysInfo.PageIndex != _LCM_AUTHORIZING &&
|
|
|
ShmSysConfigAndInfo->SysInfo.PageIndex != _LCM_AUTHORIZ_FAIL &&
|
|
|
ShmSysConfigAndInfo->SysInfo.PageIndex != _LCM_AUTHORIZ_COMP &&
|
|
|
ShmSysConfigAndInfo->SysInfo.PageIndex != _LCM_WAIT_FOR_PLUG)
|
|
|
{
|
|
|
+ bool isReturnTimeout = false;
|
|
|
for (byte count = 0; count < ShmSysConfigAndInfo->SysConfig.TotalConnectorCount; count++)
|
|
|
{
|
|
|
- if (count != ShmSysConfigAndInfo->SysInfo.CurGunSelected)
|
|
|
+ if (count != ShmSysConfigAndInfo->SysInfo.CurGunSelected ||
|
|
|
+ (ShmSysConfigAndInfo->SysConfig.AcConnectorCount > 0 &&
|
|
|
+ ShmSysConfigAndInfo->SysInfo.CurGunSelectedByAc == DEFAULT_AC_INDEX))
|
|
|
{
|
|
|
if ((chargingInfo[count]->SystemStatus >= S_REASSIGN_CHECK && chargingInfo[count]->SystemStatus <= S_COMPLETE) ||
|
|
|
- (chargingInfo[count]->SystemStatus >= S_CCS_PRECHARGE_ST0 && chargingInfo[count]->SystemStatus <= S_CCS_PRECHARGE_ST1) )
|
|
|
+ (chargingInfo[count]->SystemStatus >= S_CCS_PRECHARGE_ST0 && chargingInfo[count]->SystemStatus <= S_CCS_PRECHARGE_ST1))
|
|
|
{
|
|
|
+ isReturnTimeout = true;
|
|
|
StartSystemTimeoutDet(Timeout_ReturnToChargingGunDet);
|
|
|
}
|
|
|
- else
|
|
|
- {
|
|
|
- StopSystemTimeoutDet();
|
|
|
- }
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ if (!isReturnTimeout && ShmSysConfigAndInfo->SysConfig.AcConnectorCount > 0 &&
|
|
|
+ ShmSysConfigAndInfo->SysInfo.CurGunSelectedByAc == NO_DEFINE &&
|
|
|
+ ac_chargingInfo[0]->SystemStatus >= S_PREPARNING && ac_chargingInfo[0]->SystemStatus <= S_COMPLETE)
|
|
|
+ {
|
|
|
+ isReturnTimeout = true;
|
|
|
+ StartSystemTimeoutDet(Timeout_ReturnToChargingGunDet);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!isReturnTimeout)
|
|
|
+ StopSystemTimeoutDet();
|
|
|
}
|
|
|
}
|
|
|
} // Idle 正常程序終點
|
|
@@ -3756,12 +3975,15 @@ int main(void)
|
|
|
// 此狀態下~ 控制權在於 PSU 及 EV小板 Process
|
|
|
if (ShmSysConfigAndInfo->SysInfo.ReAssignedFlag == _REASSIGNED_NONE ||
|
|
|
ShmSysConfigAndInfo->SysInfo.MainChargingMode == _MAIN_CHARGING_MODE_AVER)
|
|
|
- setChargerMode(gun_index, MODE_PRECHARGE);
|
|
|
+ {
|
|
|
+ setChargerMode(gun_index, MODE_PRECHARGE);
|
|
|
+ }
|
|
|
else if (ShmSysConfigAndInfo->SysInfo.ReAssignedFlag == _REASSIGNED_RELAY_M_TO_A &&
|
|
|
ShmSysConfigAndInfo->SysInfo.BridgeRelayStatus == NO)
|
|
|
{
|
|
|
PRINTF_FUNC("=============Smart Charging : _REASSIGNED_COMP============= Step 6 \n");
|
|
|
ShmSysConfigAndInfo->SysInfo.MainChargingMode = _MAIN_CHARGING_MODE_AVER;
|
|
|
+ ShmSysConfigAndInfo->SysInfo.ReAssignedFlag = _REASSIGNED_NONE;
|
|
|
}
|
|
|
|
|
|
//PRINTF_FUNC("CurGunSelected = %d, gun_index = %d \n", ShmSysConfigAndInfo->SysInfo.CurGunSelected, gun_index);
|
|
@@ -3778,13 +4000,6 @@ int main(void)
|
|
|
StartGunInfoTimeoutDet(gun_index, Timeout_Preparing);
|
|
|
}
|
|
|
|
|
|
- if (ShmSysConfigAndInfo->SysInfo.ReAssignedFlag != _REASSIGNED_NONE)
|
|
|
- ShmSysConfigAndInfo->SysInfo.ReAssignedFlag = _REASSIGNED_NONE;
|
|
|
-
|
|
|
-// if (((ShmPsuData->SystemPresentPsuQuantity > 0 &&
|
|
|
-// ShmPsuData->PsuGroup[gun_index].GroupPresentPsuQuantity > 0 &&
|
|
|
-// ShmPsuData->PsuGroup[gun_index].GroupAvailablePower > 10) &&
|
|
|
-// chargingInfo[gun_index]->AvailableChargingPower > 10))
|
|
|
if (ShmPsuData->SystemPresentPsuQuantity > 0 && ShmPsuData->SystemAvailablePower > 10)
|
|
|
{
|
|
|
setChargerMode(gun_index, MODE_PREPARE_FOR_EV);
|
|
@@ -3870,6 +4085,11 @@ int main(void)
|
|
|
// GFD 錯誤停止
|
|
|
RecordAlarmCode("012234");
|
|
|
}
|
|
|
+ else if (chargingInfo[gun_index]->GroundFaultStatus == GFD_WARNING)
|
|
|
+ {
|
|
|
+ // GFD 警告
|
|
|
+ RecordAlarmCode("012296");
|
|
|
+ }
|
|
|
}
|
|
|
else if (chargingInfo[gun_index]->Type == _Type_GB)
|
|
|
{
|
|
@@ -3884,11 +4104,17 @@ int main(void)
|
|
|
// GFD 錯誤停止
|
|
|
RecordAlarmCode("012236");
|
|
|
}
|
|
|
+ else if (chargingInfo[gun_index]->GroundFaultStatus == GFD_WARNING)
|
|
|
+ {
|
|
|
+ // GFD 警告
|
|
|
+ RecordAlarmCode("012298");
|
|
|
+ }
|
|
|
}
|
|
|
else if (chargingInfo[gun_index]->Type == _Type_CCS_2)
|
|
|
{
|
|
|
// 檢查樁端的 GFD 結果
|
|
|
- if (chargingInfo[gun_index]->GroundFaultStatus == GFD_PASS)
|
|
|
+ if (chargingInfo[gun_index]->GroundFaultStatus == GFD_PASS ||
|
|
|
+ chargingInfo[gun_index]->GroundFaultStatus == GFD_WARNING)
|
|
|
{
|
|
|
setChargerMode(gun_index, MODE_CCS_PRECHARGE_STEP0);
|
|
|
}
|
|
@@ -3898,6 +4124,11 @@ int main(void)
|
|
|
// GFD 錯誤停止
|
|
|
RecordAlarmCode("012235");
|
|
|
}
|
|
|
+ else if (chargingInfo[gun_index]->GroundFaultStatus == GFD_WARNING)
|
|
|
+ {
|
|
|
+ // GFD 警告
|
|
|
+ RecordAlarmCode("012297");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if (isEvBoardStopChargeFlag(gun_index) == YES ||
|
|
@@ -3940,6 +4171,13 @@ int main(void)
|
|
|
RecordAlarmCode("012289");
|
|
|
ChargingTerminalProcess(gun_index);
|
|
|
}
|
|
|
+ else if (chargingInfo[gun_index]->GroundFaultStatus == GFD_WARNING)
|
|
|
+ {
|
|
|
+ // GFD 警告
|
|
|
+ RecordAlarmCode("012296");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ CleanAlarmCodeByString("012296");
|
|
|
}
|
|
|
else if (chargingInfo[gun_index]->Type == _Type_GB)
|
|
|
{
|
|
@@ -3956,6 +4194,13 @@ int main(void)
|
|
|
RecordAlarmCode("012290");
|
|
|
ChargingTerminalProcess(gun_index);
|
|
|
}
|
|
|
+ else if (chargingInfo[gun_index]->GroundFaultStatus == GFD_WARNING)
|
|
|
+ {
|
|
|
+ // GFD 警告
|
|
|
+ RecordAlarmCode("012298");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ CleanAlarmCodeByString("012298");
|
|
|
}
|
|
|
else if (chargingInfo[gun_index]->Type == _Type_CCS_2)
|
|
|
{
|
|
@@ -3971,6 +4216,13 @@ int main(void)
|
|
|
RecordAlarmCode("012288");
|
|
|
ChargingTerminalProcess(gun_index);
|
|
|
}
|
|
|
+ else if (chargingInfo[gun_index]->GroundFaultStatus == GFD_WARNING)
|
|
|
+ {
|
|
|
+ // GFD 警告
|
|
|
+ RecordAlarmCode("012297");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ CleanAlarmCodeByString("012297");
|
|
|
}
|
|
|
|
|
|
if (isEvBoardStopChargeFlag(gun_index) ||
|
|
@@ -4132,9 +4384,29 @@ int main(void)
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- ChangeLcmByIndex(ShmSysConfigAndInfo->SysInfo.ConnectorPage);
|
|
|
+ bool dcPageRun = false;
|
|
|
+ if (_acgunIndex > 0 && ShmSysConfigAndInfo->SysInfo.CurGunSelectedByAc != NO_DEFINE)
|
|
|
+ {
|
|
|
+ if (ac_chargingInfo[0]->SystemStatus == S_IDLE)
|
|
|
+ ChangeLcmByIndex(_LCM_IDLE);
|
|
|
+ else if (ac_chargingInfo[0]->SystemStatus == S_PREPARNING)
|
|
|
+ ChangeLcmByIndex(_LCM_PRE_CHARGE);
|
|
|
+ else if (ac_chargingInfo[0]->SystemStatus == S_CHARGING)
|
|
|
+ ChangeLcmByIndex(_LCM_CHARGING);
|
|
|
+ else if (ac_chargingInfo[0]->SystemStatus == S_TERMINATING ||
|
|
|
+ ac_chargingInfo[0]->SystemStatus == S_COMPLETE)
|
|
|
+ ChangeLcmByIndex(_LCM_COMPLETE);
|
|
|
+ else
|
|
|
+ dcPageRun = true;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ dcPageRun = true;
|
|
|
+
|
|
|
+ if (dcPageRun)
|
|
|
+ ChangeLcmByIndex(ShmSysConfigAndInfo->SysInfo.ConnectorPage);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
write(wtdFd, "a", 1);
|
|
|
usleep(whileLoopTime);
|
|
|
}
|