浏览代码

2020-07-01 /Edward Lien

Actions:
1.Merge from Noodoe change swipe not valid RFID will not go back to terminate mode keep in charging mode.
1.Add EV READY 30 secs not B2=>C2 need change to State E for 4 secs once & go back to B2.

Files:
1. As follow commit history

Image version: D0.25.XX.XXXX.XX
Image checksum: XXXXXXXX

Hardware PWB P/N : XXXXXXX
Hardware Version : XXXXXXX
Edward Lien 4 年之前
父节点
当前提交
5cb93a0145

+ 2 - 2
EVSE/Projects/AW-CCS/Apps/Module_AlarmDetect.c

@@ -92,7 +92,7 @@ int StoreLogMsg(const char *fmt, ...)
 
 	if((ShmSysConfigAndInfo->SysConfig.ModelName != NULL) && (ShmSysConfigAndInfo->SysConfig.SerialNumber != NULL) && (strlen((char*)ShmSysConfigAndInfo->SysConfig.ModelName) >= 14))
 	{
-		sprintf(Buf,"echo \"[%04d.%02d.%02d %02d:%02d:%02d] - %s\" >> /Storage/SystemLog/[%04d.%02d]%s_%s_SystemLog",
+		sprintf(Buf,"echo -n \"[%04d.%02d.%02d %02d:%02d:%02d] - %s\" >> /Storage/SystemLog/[%04d.%02d]%s_%s_SystemLog",
 					tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,
 					buffer,
 					tm->tm_year+1900,tm->tm_mon+1,
@@ -101,7 +101,7 @@ int StoreLogMsg(const char *fmt, ...)
 	}
 	else
 	{
-		sprintf(Buf,"echo \"[%04d.%02d.%02d %02d:%02d:%02d] - %s\" >> /Storage/SystemLog/[%04d.%02d]SystemLog",
+		sprintf(Buf,"echo -n \"[%04d.%02d.%02d %02d:%02d:%02d] - %s\" >> /Storage/SystemLog/[%04d.%02d]SystemLog",
 					tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,
 					buffer,
 					tm->tm_year+1900,tm->tm_mon+1);

+ 1 - 1
EVSE/Projects/AW-CCS/Apps/Module_FactoryConfig.c

@@ -66,7 +66,7 @@ int StoreLogMsg(const char *fmt, ...)
 	memset(Buf,0,sizeof(Buf));
 	CurrentTime = time(NULL);
 	tm=localtime(&CurrentTime);
-	sprintf(Buf,"echo \"[%04d.%02d.%02d %02d:%02d:%02d] - %s\" >> /Storage/SystemLog/%04d-%02d_%s_%s_SystemLog",
+	sprintf(Buf,"echo -n \"[%04d.%02d.%02d %02d:%02d:%02d] - %s\" >> /Storage/SystemLog/%04d-%02d_%s_%s_SystemLog",
 			tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,
 			buffer,
 			tm->tm_year+1900,tm->tm_mon+1,

+ 3 - 2
EVSE/Projects/AW-CCS/Apps/Module_InternalComm.c

@@ -75,7 +75,7 @@ int StoreLogMsg(const char *fmt, ...)
 
 	if((ShmSysConfigAndInfo->SysConfig.ModelName != NULL) && (ShmSysConfigAndInfo->SysConfig.SerialNumber != NULL) && (strlen((char*)ShmSysConfigAndInfo->SysConfig.ModelName) >= 14))
 	{
-		sprintf(Buf,"echo \"[%04d.%02d.%02d %02d:%02d:%02d] - %s\" >> /Storage/SystemLog/[%04d.%02d]%s_%s_SystemLog",
+		sprintf(Buf,"echo -n \"[%04d.%02d.%02d %02d:%02d:%02d] - %s\" >> /Storage/SystemLog/[%04d.%02d]%s_%s_SystemLog",
 					tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,
 					buffer,
 					tm->tm_year+1900,tm->tm_mon+1,
@@ -84,7 +84,7 @@ int StoreLogMsg(const char *fmt, ...)
 	}
 	else
 	{
-		sprintf(Buf,"echo \"[%04d.%02d.%02d %02d:%02d:%02d] - %s\" >> /Storage/SystemLog/[%04d.%02d]SystemLog",
+		sprintf(Buf,"echo -n \"[%04d.%02d.%02d %02d:%02d:%02d] - %s\" >> /Storage/SystemLog/[%04d.%02d]SystemLog",
 					tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,
 					buffer,
 					tm->tm_year+1900,tm->tm_mon+1);
@@ -2366,6 +2366,7 @@ int main(void)
 						if(Query_Temperature(Uart1Fd, (gun_index>0?ADDR_AC_PRIMARY_2:ADDR_AC_PRIMARY_1), &ShmCharger->gun_info[gun_index].temperature) == PASS)
 						{
 							ShmSysConfigAndInfo->SysInfo.SystemAmbientTemp = ShmCharger->gun_info[gun_index].temperature.point[0];
+							ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].ConnectorTemp = ShmCharger->gun_info[gun_index].temperature.point[0];
 
 							failCount[gun_index] = 0;
 						}

+ 2 - 2
EVSE/Projects/AW-CCS/Apps/Module_Speaker.c

@@ -82,7 +82,7 @@ int StoreLogMsg(const char *fmt, ...)
 
 	if((ShmSysConfigAndInfo->SysConfig.ModelName != NULL) && (ShmSysConfigAndInfo->SysConfig.SerialNumber != NULL) && (strlen((char*)ShmSysConfigAndInfo->SysConfig.ModelName) >= 14))
 	{
-		sprintf(Buf,"echo \"[%04d.%02d.%02d %02d:%02d:%02d] - %s\" >> /Storage/SystemLog/[%04d.%02d]%s_%s_SystemLog",
+		sprintf(Buf,"echo -n \"[%04d.%02d.%02d %02d:%02d:%02d] - %s\" >> /Storage/SystemLog/[%04d.%02d]%s_%s_SystemLog",
 					tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,
 					buffer,
 					tm->tm_year+1900,tm->tm_mon+1,
@@ -91,7 +91,7 @@ int StoreLogMsg(const char *fmt, ...)
 	}
 	else
 	{
-		sprintf(Buf,"echo \"[%04d.%02d.%02d %02d:%02d:%02d] - %s\" >> /Storage/SystemLog/[%04d.%02d]SystemLog",
+		sprintf(Buf,"echo -n \"[%04d.%02d.%02d %02d:%02d:%02d] - %s\" >> /Storage/SystemLog/[%04d.%02d]SystemLog",
 					tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,
 					buffer,
 					tm->tm_year+1900,tm->tm_mon+1);

+ 348 - 270
EVSE/Projects/AW-CCS/Apps/main.c

@@ -34,6 +34,7 @@
 #define TIMEOUT_SPEC_LOGPPRINTOUT				30000
 #define TIMEOUT_SPEC_PROFILE_PREPARE			5000
 #define TIMEOUT_SPEC_BS_HLC_HANDSHAKE			2000
+#define TIMEOUT_SPEC_EV_READY					30000
 #define TIMEOUT_SPEC_CCS_HEARTBEAT_COUNT_RESET		10000
 #define TIMEOUT_SPEC_CCS_HANDSHAKE				120000
 
@@ -1196,7 +1197,7 @@ void get_firmware_version(unsigned char gun_index)
 	strcpy((char*)ShmSysConfigAndInfo->SysInfo.CsuPrimFwRev, ShmCharger->gun_info[gun_index].ver.Version_FW);
 
 	// Get CSU root file system version
-	sprintf((char*)ShmSysConfigAndInfo->SysInfo.CsuRootFsFwRev, "D0.24.00.0000.00");
+	sprintf((char*)ShmSysConfigAndInfo->SysInfo.CsuRootFsFwRev, "D0.25.00.0000.00");
 
 	// Get AC connector type from model name
 	for(uint8_t idx=0;idx<3;idx++)
@@ -1935,10 +1936,13 @@ void checkTask()
 		system("/root/Module_EventLogging &");
 	}
 
-	if(system("pidof -s OcppBackend > /dev/null") != 0)
+	if(strcmp((char *)&ShmSysConfigAndInfo->SysConfig.OcppServerURL,"") != 0)
 	{
-		DEBUG_INFO("OcppBackend not running, restart it.\r\n");
-		system("/root/OcppBackend &");
+		if(system("pidof -s OcppBackend > /dev/null") != 0)
+		{
+			DEBUG_INFO("OcppBackend not running, restart it.\r\n");
+			system("/root/OcppBackend &");
+		}
 	}
 
 	if(system("pidof -s Module_AlarmDetect > /dev/null") != 0)
@@ -2300,10 +2304,19 @@ int main(void)
 						ShmCharger->gun_info[gun_index].isInitialPass = YES;
 
 						// Set max current to rating current
-						//ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current = ShmCharger->gun_info[gun_index].primaryMcuState.rating_current;
-						ShmCharger->gun_info[gun_index].acCcsInfo.EVSEMaxCurrent = (float)ShmCharger->gun_info[gun_index].primaryMcuState.rating_current;
-						ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current = CCS_PWM_DUTY_100;
-						ShmCharger->gun_info[gun_index].mcuFlag.isSetCpPwmDuty = ON;							
+						ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current = ShmCharger->gun_info[gun_index].primaryMcuState.rating_current;
+						
+						// Default Ethernet / Wifi / 4G to 1:disconnected 
+						ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaEthernet = ON;
+						ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaWiFi = ON;
+						ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectVia4Gi = ON;
+						
+						// If Web Server OPCC URL is empty kill Module_OcppBackend
+						if(strcmp((char *)&ShmSysConfigAndInfo->SysConfig.OcppServerURL,"") == 0)
+						{
+							DEBUG_INFO("URL is empty kill Module_OcppBackend...\r\n");
+							system ("pkill OcppBackend");
+						}
 
 						// If rotate switch equal zero, the system needs to change Debug mode
 						if(ShmCharger->gun_info[gun_index].primaryMcuState.rotatory_switch == 0)
@@ -2334,6 +2347,8 @@ int main(void)
 						//ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current = (ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent > 0) ? ((ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent<ShmCharger->gun_info[gun_index].primaryMcuState.rating_current)?ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent:ShmCharger->gun_info[gun_index].primaryMcuState.rating_current) : ShmCharger->gun_info[gun_index].primaryMcuState.rating_current;
 						ShmCharger->gun_info[ShmOCPP16Data->UnlockConnector[gun_index].ConnectorId-1].isUnlockerConnetor = OFF;
 						ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].ReservationId = -1;
+						
+						ShmCharger->gun_info[gun_index].isDoEvReadyOnce = OFF;
 
 						// Response StopTransactionConf
 						if(ShmOCPP16Data->CpMsg.bits[gun_index].StopTransactionConf == ON)
@@ -2489,7 +2504,7 @@ int main(void)
 							case START_METHOD_RFID:
 								if((ShmOCPP16Data->SpMsg.bits.AuthorizeConf) ||
 								   (!ShmOCPP16Data->OcppConnStatus && (ShmSysConfigAndInfo->SysConfig.OfflinePolicy == OFF_POLICY_FREE)) ||
-								   (!ShmOCPP16Data->OcppConnStatus && (isValidLocalWhiteCard() == PASS) && (ShmSysConfigAndInfo->SysConfig.OfflinePolicy == OFF_POLICY_LOCALLIST)) ||
+								   (!ShmOCPP16Data->OcppConnStatus && (ShmSysConfigAndInfo->SysConfig.OfflinePolicy == OFF_POLICY_LOCALLIST)) ||
 								   (ShmSysConfigAndInfo->SysConfig.OfflinePolicy == OFF_POLICY_NOCHARGE))
 								{
 									if((strcmp((char*)ShmOCPP16Data->Authorize.ResponseIdTagInfo.Status, "Accepted")==0) ||
@@ -2646,7 +2661,9 @@ int main(void)
 								if(ShmCharger->gun_info[gun_index].mcuFlag.isSetCpPwmDuty == OFF)
 								{			
 									ShmCharger->gun_info[gun_index].ccsHandshakeState = HANDSHAKE_BS_MODE;
-									DEBUG_INFO("Enter BS Mode charging.\r\n");			
+									DEBUG_INFO("Enter BS Mode charging.\r\n");		
+									//for EV READY 30 secs didn't start charging to STATE E
+									ftime(&startTime[gun_index][TMR_IDX_HANDSHAKING]);
 								}						
 								break;	
 							case HANDSHAKE_BS_MODE:
@@ -2672,7 +2689,71 @@ int main(void)
 									ShmOCPP16Data->CpMsg.bits[gun_index].StartTransactionReq = ON;
 
 									setChargerMode(gun_index, SYS_MODE_CHARGING);
-								}						
+								}
+								//EV READY CHECK
+								if((DiffTimebWithNow(startTime[gun_index][TMR_IDX_BS_HLC_HANDSHAKE]) > TIMEOUT_SPEC_EV_READY) && (ShmCharger->gun_info[gun_index].isEvReady2StateE == OFF))
+								{
+									if(ShmCharger->gun_info[gun_index].isDoEvReadyOnce == OFF)
+									{
+										DEBUG_INFO("EV READY STATE E 4sec.\r\n");
+										ShmCharger->gun_info[gun_index].isEvReady2StateE = ON;
+										ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current = CCS_PWM_DUTY_CP_STATE_E;
+										ShmCharger->gun_info[gun_index].mcuFlag.isSetCpPwmDuty = ON;					
+										ShmCharger->gun_info[gun_index].evReadyState = EV_READY_STAT_E;
+									}
+								}
+								if(ShmCharger->gun_info[gun_index].isEvReady2StateE == ON)
+								{
+									switch(ShmCharger->gun_info[gun_index].evReadyState)
+									{
+										case EV_READY_STAT_E:
+											if(ShmCharger->gun_info[gun_index].mcuFlag.isSetCpPwmDuty == OFF)
+											{
+												sleep(4);	
+												ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current = CCS_PWM_DUTY_100;
+												ShmCharger->gun_info[gun_index].mcuFlag.isSetCpPwmDuty = ON;				
+												ShmCharger->gun_info[gun_index].evReadyState = EV_READY_STAT_C;			
+											}
+											break;
+										case EV_READY_STAT_C:
+											if(ShmCharger->gun_info[gun_index].mcuFlag.isSetCpPwmDuty == OFF)
+											{
+												usleep(500000);	
+												DEBUG_INFO("EV READY Determine max charging current to MCU.\r\n");										
+												if(ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent == 0)
+												{
+													ShmCharger->gun_info[gun_index].targetCurrent = ((ShmCharger->gun_info[gun_index].targetCurrent > ShmCharger->gun_info[gun_index].primaryMcuState.rating_current)?ShmCharger->gun_info[gun_index].primaryMcuState.rating_current:ShmCharger->gun_info[gun_index].targetCurrent);
+													if(ShmCharger->gun_info[gun_index].targetCurrent != ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current)
+													{
+														ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current = ((ShmCharger->gun_info[gun_index].targetCurrent > ShmCharger->gun_info[gun_index].primaryMcuState.rating_current)?ShmCharger->gun_info[gun_index].primaryMcuState.rating_current:ShmCharger->gun_info[gun_index].targetCurrent);
+														ShmCharger->gun_info[gun_index].mcuFlag.isSetCpPwmDuty = ON;
+													}
+												}
+												else
+												{
+													ShmCharger->gun_info[gun_index].targetCurrent = ((ShmCharger->gun_info[gun_index].targetCurrent > ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent)?ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent:ShmCharger->gun_info[gun_index].targetCurrent);
+													if(ShmCharger->gun_info[gun_index].targetCurrent != ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current)
+													{
+														ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current = ((ShmCharger->gun_info[gun_index].targetCurrent > ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent)?ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent:ShmCharger->gun_info[gun_index].targetCurrent);
+														ShmCharger->gun_info[gun_index].mcuFlag.isSetCpPwmDuty = ON;
+													}
+												}
+												ShmCharger->gun_info[gun_index].mcuFlag.isSetCpPwmDuty = ON;				
+												ShmCharger->gun_info[gun_index].evReadyState = EV_READY_SET_MAX_CURRENT;			
+											}										
+											break;
+										case EV_READY_SET_MAX_CURRENT:
+											if(ShmCharger->gun_info[gun_index].mcuFlag.isSetCpPwmDuty == OFF)
+											{
+												ShmCharger->gun_info[gun_index].isEvReady2StateE = OFF;
+												ShmCharger->gun_info[gun_index].isDoEvReadyOnce = ON;
+											}
+											break;											
+										default:
+											break;																														
+									}									
+								}
+								
 								break;		
 							case HANDSHAKE_HLC_MODE:	
 #ifdef	CCS_SIMULATION_DATA				
@@ -2825,7 +2906,131 @@ int main(void)
 							   (ShmOCPP16Data->MsMsg.bits.ResetReq) ||
 							   (ShmCharger->gun_info[ShmOCPP16Data->UnlockConnector[gun_index].ConnectorId-1].isUnlockerConnetor == ON))
 							{
-								setChargerMode(gun_index, SYS_MODE_TERMINATING);
+								if(ShmCharger->gun_info[gun_index].rfidReq)
+								{
+									// If RFID SN different with start user, it need to authorize ID
+									if((ShmCharger->gun_info[gun_index].rfidReq == ON) && !isMatchStartUser(gun_index))
+									{
+										if((DiffTimebWithNow(startTime[gun_index][TMR_IDX_AUTH]) > TIMEOUT_SPEC_AUTH) && !ShmOCPP16Data->SpMsg.bits.AuthorizeReq)
+										{
+											// Request authorization
+											ftime(&startTime[gun_index][TMR_IDX_AUTH]);
+											memset(ShmSysConfigAndInfo->SysConfig.UserId, 0x00, ARRAY_SIZE(ShmSysConfigAndInfo->SysConfig.UserId));
+											if(ShmSysConfigAndInfo->SysConfig.RfidCardNumEndian)
+											{
+												// Big endian
+												switch(rfid.snType)
+												{
+													case RFID_SN_TYPE_6BYTE:
+														sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X%02X%02X", rfid.currentCard[0], rfid.currentCard[1], rfid.currentCard[2], rfid.currentCard[3], rfid.currentCard[4], rfid.currentCard[5]);
+														break;
+													case RFID_SN_TYPE_7BYTE:
+														sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X%02X%02X%02X", rfid.currentCard[0], rfid.currentCard[1], rfid.currentCard[2], rfid.currentCard[3], rfid.currentCard[4], rfid.currentCard[5], rfid.currentCard[6]);
+														break;
+													case RFID_SN_TYPE_10BYTE:
+														sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", rfid.currentCard[0], rfid.currentCard[1], rfid.currentCard[2], rfid.currentCard[3], rfid.currentCard[4], rfid.currentCard[5], rfid.currentCard[6], rfid.currentCard[7], rfid.currentCard[8], rfid.currentCard[9]);
+														break;
+													case RFID_SN_TYPE_4BYTE:
+													default:
+														sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X", rfid.currentCard[0], rfid.currentCard[1], rfid.currentCard[2], rfid.currentCard[3]);
+														break;
+												}
+											}
+											else
+											{
+												// Little endian
+												switch(rfid.snType)
+												{
+													case RFID_SN_TYPE_6BYTE:
+														sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X%02X%02X", rfid.currentCard[5], rfid.currentCard[4], rfid.currentCard[3], rfid.currentCard[2], rfid.currentCard[1], rfid.currentCard[0]);
+														break;
+													case RFID_SN_TYPE_7BYTE:
+														sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X%02X%02X%02X", rfid.currentCard[6], rfid.currentCard[5], rfid.currentCard[4], rfid.currentCard[3], rfid.currentCard[2], rfid.currentCard[1], rfid.currentCard[0]);
+														break;
+													case RFID_SN_TYPE_10BYTE:
+														sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", rfid.currentCard[9], rfid.currentCard[8], rfid.currentCard[7], rfid.currentCard[6], rfid.currentCard[5], rfid.currentCard[4], rfid.currentCard[3], rfid.currentCard[2], rfid.currentCard[1], rfid.currentCard[0]);
+														break;
+													case RFID_SN_TYPE_4BYTE:
+													default:
+														sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X", rfid.currentCard[3], rfid.currentCard[2], rfid.currentCard[1], rfid.currentCard[0]);
+														break;
+												}
+											}
+											DEBUG_INFO("End request User Id : %s\r\n", ShmSysConfigAndInfo->SysConfig.UserId);
+											DEBUG_INFO("Start method : %d...\r\n ", ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].StartMethod);
+
+											if((ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].StartMethod == START_METHOD_RFID) ||
+											   (ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].StartMethod == START_METHOD_BACKEND) ||
+											   (ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].StartMethod == START_METHOD_BLE))
+											{
+												switch(ShmSysConfigAndInfo->SysConfig.AuthorisationMode)
+												{
+													case AUTH_MODE_ENABLE:
+														if(ShmOCPP16Data->OcppConnStatus)
+														{
+															// On line
+															ShmOCPP16Data->SpMsg.bits.AuthorizeReq = ON;
+														}
+														else
+														{
+															// Off line
+															switch(ShmSysConfigAndInfo->SysConfig.OfflinePolicy)
+															{
+																case OFF_POLICY_LOCALLIST:
+																	ShmOCPP16Data->SpMsg.bits.AuthorizeReq = ON;
+																	break;
+																case OFF_POLICY_PH_RFID:
+																	break;
+																case OFF_POLICY_FREE:
+																	break;
+																case OFF_POLICY_NOCHARGE:
+																default:
+																	break;
+															}
+														}
+														break;
+													case AUTH_MODE_DISABLE:
+													default:
+														break;
+												}
+											}
+										}
+										else
+										{
+											if(ShmOCPP16Data->SpMsg.bits.AuthorizeConf ||
+											  (ShmSysConfigAndInfo->SysConfig.AuthorisationMode == AUTH_MODE_DISABLE) ||
+											  (!ShmOCPP16Data->OcppConnStatus && (ShmSysConfigAndInfo->SysConfig.OfflinePolicy == OFF_POLICY_LOCALLIST)) ||
+											  (!ShmOCPP16Data->OcppConnStatus && (ShmSysConfigAndInfo->SysConfig.OfflinePolicy == OFF_POLICY_FREE)))
+											{
+												if((strcmp((char*)ShmOCPP16Data->Authorize.ResponseIdTagInfo.Status, "Accepted")==0) ||
+												   (ShmSysConfigAndInfo->SysConfig.AuthorisationMode == AUTH_MODE_DISABLE) ||
+												   (!ShmOCPP16Data->OcppConnStatus && (isValidLocalWhiteCard() == PASS) && (ShmSysConfigAndInfo->SysConfig.OfflinePolicy == OFF_POLICY_LOCALLIST)) ||
+												   (!ShmOCPP16Data->OcppConnStatus && (ShmSysConfigAndInfo->SysConfig.OfflinePolicy == OFF_POLICY_FREE)))
+												{
+													ShmCharger->gun_info[gun_index].isAuthPassEnd = ON;
+												}
+												else
+												{
+													ShmCharger->gun_info[gun_index].rfidReq = OFF;
+													ShmOCPP16Data->SpMsg.bits.AuthorizeReq = OFF;
+													DEBUG_INFO("Authorize fail.\r\n");
+													setSpeaker(ON,SPEAKER_INTERVAL_3COUNT);
+													setLedMotion(gun_index,LED_ACTION_RFID_FAIL);
+													sleep(3);
+												}
+
+												startTime[gun_index][TMR_IDX_AUTH].time -= TIMEOUT_SPEC_AUTH;
+												ShmOCPP16Data->SpMsg.bits.AuthorizeConf = OFF;
+											}
+										}
+									}
+
+									// If Authorize is accpted or Rfid card match with start User, The system should terminating to the end
+									if(ShmCharger->gun_info[gun_index].isAuthPassEnd || isMatchStartUser(gun_index))
+										setChargerMode(gun_index, SYS_MODE_TERMINATING);
+								}
+								else
+									setChargerMode(gun_index, SYS_MODE_TERMINATING);
 							}
 							else
 							{
@@ -3015,8 +3220,137 @@ int main(void)
 							   (ShmCharger->gun_info[gun_index].acCcsInfo.EVChargeProgress == HLC_RENEGOTIATE_MODE) ||
 							   (ShmCharger->gun_info[gun_index].acCcsInfo.EVChargeProgress == HLC_STANDBY_MODE))
 							{
-								setChargerMode(gun_index, SYS_MODE_TERMINATING);
-								setRelay(gun_index, OFF);
+								if(ShmCharger->gun_info[gun_index].rfidReq)
+								{
+									// If RFID SN different with start user, it need to authorize ID
+									if((ShmCharger->gun_info[gun_index].rfidReq == ON) && !isMatchStartUser(gun_index))
+									{
+										if((DiffTimebWithNow(startTime[gun_index][TMR_IDX_AUTH]) > TIMEOUT_SPEC_AUTH) && !ShmOCPP16Data->SpMsg.bits.AuthorizeReq)
+										{
+											// Request authorization
+											ftime(&startTime[gun_index][TMR_IDX_AUTH]);
+											memset(ShmSysConfigAndInfo->SysConfig.UserId, 0x00, ARRAY_SIZE(ShmSysConfigAndInfo->SysConfig.UserId));
+											if(ShmSysConfigAndInfo->SysConfig.RfidCardNumEndian)
+											{
+												// Big endian
+												switch(rfid.snType)
+												{
+													case RFID_SN_TYPE_6BYTE:
+														sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X%02X%02X", rfid.currentCard[0], rfid.currentCard[1], rfid.currentCard[2], rfid.currentCard[3], rfid.currentCard[4], rfid.currentCard[5]);
+														break;
+													case RFID_SN_TYPE_7BYTE:
+														sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X%02X%02X%02X", rfid.currentCard[0], rfid.currentCard[1], rfid.currentCard[2], rfid.currentCard[3], rfid.currentCard[4], rfid.currentCard[5], rfid.currentCard[6]);
+														break;
+													case RFID_SN_TYPE_10BYTE:
+														sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", rfid.currentCard[0], rfid.currentCard[1], rfid.currentCard[2], rfid.currentCard[3], rfid.currentCard[4], rfid.currentCard[5], rfid.currentCard[6], rfid.currentCard[7], rfid.currentCard[8], rfid.currentCard[9]);
+														break;
+													case RFID_SN_TYPE_4BYTE:
+													default:
+														sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X", rfid.currentCard[0], rfid.currentCard[1], rfid.currentCard[2], rfid.currentCard[3]);
+														break;
+												}
+											}
+											else
+											{
+												// Little endian
+												switch(rfid.snType)
+												{
+													case RFID_SN_TYPE_6BYTE:
+														sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X%02X%02X", rfid.currentCard[5], rfid.currentCard[4], rfid.currentCard[3], rfid.currentCard[2], rfid.currentCard[1], rfid.currentCard[0]);
+														break;
+													case RFID_SN_TYPE_7BYTE:
+														sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X%02X%02X%02X", rfid.currentCard[6], rfid.currentCard[5], rfid.currentCard[4], rfid.currentCard[3], rfid.currentCard[2], rfid.currentCard[1], rfid.currentCard[0]);
+														break;
+													case RFID_SN_TYPE_10BYTE:
+														sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", rfid.currentCard[9], rfid.currentCard[8], rfid.currentCard[7], rfid.currentCard[6], rfid.currentCard[5], rfid.currentCard[4], rfid.currentCard[3], rfid.currentCard[2], rfid.currentCard[1], rfid.currentCard[0]);
+														break;
+													case RFID_SN_TYPE_4BYTE:
+													default:
+														sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X", rfid.currentCard[3], rfid.currentCard[2], rfid.currentCard[1], rfid.currentCard[0]);
+														break;
+												}
+											}
+											DEBUG_INFO("End request User Id : %s\r\n", ShmSysConfigAndInfo->SysConfig.UserId);
+											DEBUG_INFO("Start method : %d...\r\n ", ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].StartMethod);
+
+											if((ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].StartMethod == START_METHOD_RFID) ||
+											   (ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].StartMethod == START_METHOD_BACKEND) ||
+											   (ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].StartMethod == START_METHOD_BLE))
+											{
+												switch(ShmSysConfigAndInfo->SysConfig.AuthorisationMode)
+												{
+													case AUTH_MODE_ENABLE:
+														if(ShmOCPP16Data->OcppConnStatus)
+														{
+															// On line
+															ShmOCPP16Data->SpMsg.bits.AuthorizeReq = ON;
+														}
+														else
+														{
+															// Off line
+															switch(ShmSysConfigAndInfo->SysConfig.OfflinePolicy)
+															{
+																case OFF_POLICY_LOCALLIST:
+																	ShmOCPP16Data->SpMsg.bits.AuthorizeReq = ON;
+																	break;
+																case OFF_POLICY_PH_RFID:
+																	break;
+																case OFF_POLICY_FREE:
+																	break;
+																case OFF_POLICY_NOCHARGE:
+																default:
+																	break;
+															}
+														}
+														break;
+													case AUTH_MODE_DISABLE:
+													default:
+														break;
+												}
+											}
+										}
+										else
+										{
+											if(ShmOCPP16Data->SpMsg.bits.AuthorizeConf ||
+											  (ShmSysConfigAndInfo->SysConfig.AuthorisationMode == AUTH_MODE_DISABLE) ||
+											  (!ShmOCPP16Data->OcppConnStatus && (ShmSysConfigAndInfo->SysConfig.OfflinePolicy == OFF_POLICY_LOCALLIST)) ||
+											  (!ShmOCPP16Data->OcppConnStatus && (ShmSysConfigAndInfo->SysConfig.OfflinePolicy == OFF_POLICY_FREE)))
+											{
+												if((strcmp((char*)ShmOCPP16Data->Authorize.ResponseIdTagInfo.Status, "Accepted")==0) ||
+												   (ShmSysConfigAndInfo->SysConfig.AuthorisationMode == AUTH_MODE_DISABLE) ||
+												   (!ShmOCPP16Data->OcppConnStatus && (isValidLocalWhiteCard() == PASS) && (ShmSysConfigAndInfo->SysConfig.OfflinePolicy == OFF_POLICY_LOCALLIST)) ||
+												   (!ShmOCPP16Data->OcppConnStatus && (ShmSysConfigAndInfo->SysConfig.OfflinePolicy == OFF_POLICY_FREE)))
+												{
+													ShmCharger->gun_info[gun_index].isAuthPassEnd = ON;
+												}
+												else
+												{
+													ShmCharger->gun_info[gun_index].rfidReq = OFF;
+													ShmOCPP16Data->SpMsg.bits.AuthorizeReq = OFF;
+													DEBUG_INFO("Authorize fail.\r\n");
+													setSpeaker(ON,SPEAKER_INTERVAL_3COUNT);
+													setLedMotion(gun_index,LED_ACTION_RFID_FAIL);
+													sleep(3);
+												}
+
+												startTime[gun_index][TMR_IDX_AUTH].time -= TIMEOUT_SPEC_AUTH;
+												ShmOCPP16Data->SpMsg.bits.AuthorizeConf = OFF;
+											}
+										}
+									}
+
+									// If Authorize is accpted or Rfid card match with start User, The system should terminating to the end
+									if(ShmCharger->gun_info[gun_index].isAuthPassEnd || isMatchStartUser(gun_index))
+									{
+										setChargerMode(gun_index, SYS_MODE_TERMINATING);
+										setRelay(gun_index, OFF);
+									}
+								}
+								else
+								{
+									setChargerMode(gun_index, SYS_MODE_TERMINATING);
+									setRelay(gun_index, OFF);
+								}
 							}
 							else
 							{
@@ -3205,134 +3539,6 @@ int main(void)
 					switch(ShmCharger->gun_info[gun_index].chargingMode)
 					{
 						case CHARGING_MODE_BS:
-								// If RFID SN different with start user, it need to authorize ID
-								if((ShmCharger->gun_info[gun_index].rfidReq == ON) && !isMatchStartUser(gun_index))
-								{
-									if((DiffTimebWithNow(startTime[gun_index][TMR_IDX_AUTH]) > TIMEOUT_SPEC_AUTH) && !ShmOCPP16Data->SpMsg.bits.AuthorizeReq)
-									{
-										// Request authorization
-										ftime(&startTime[gun_index][TMR_IDX_AUTH]);
-										memset(ShmSysConfigAndInfo->SysConfig.UserId, 0x00, ARRAY_SIZE(ShmSysConfigAndInfo->SysConfig.UserId));
-										if(ShmSysConfigAndInfo->SysConfig.RfidCardNumEndian)
-										{
-											// Big endian
-											switch(rfid.snType)
-											{
-												case RFID_SN_TYPE_6BYTE:
-													sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X%02X%02X", rfid.currentCard[0], rfid.currentCard[1], rfid.currentCard[2], rfid.currentCard[3], rfid.currentCard[4], rfid.currentCard[5]);
-													break;
-												case RFID_SN_TYPE_7BYTE:
-													sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X%02X%02X%02X", rfid.currentCard[0], rfid.currentCard[1], rfid.currentCard[2], rfid.currentCard[3], rfid.currentCard[4], rfid.currentCard[5], rfid.currentCard[6]);
-													break;
-												case RFID_SN_TYPE_10BYTE:
-													sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", rfid.currentCard[0], rfid.currentCard[1], rfid.currentCard[2], rfid.currentCard[3], rfid.currentCard[4], rfid.currentCard[5], rfid.currentCard[6], rfid.currentCard[7], rfid.currentCard[8], rfid.currentCard[9]);
-													break;
-												case RFID_SN_TYPE_4BYTE:
-												default:
-													sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X", rfid.currentCard[0], rfid.currentCard[1], rfid.currentCard[2], rfid.currentCard[3]);
-													break;
-											}
-										}
-										else
-										{
-											// Little endian
-											switch(rfid.snType)
-											{
-												case RFID_SN_TYPE_6BYTE:
-													sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X%02X%02X", rfid.currentCard[5], rfid.currentCard[4], rfid.currentCard[3], rfid.currentCard[2], rfid.currentCard[1], rfid.currentCard[0]);
-													break;
-												case RFID_SN_TYPE_7BYTE:
-													sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X%02X%02X%02X", rfid.currentCard[6], rfid.currentCard[5], rfid.currentCard[4], rfid.currentCard[3], rfid.currentCard[2], rfid.currentCard[1], rfid.currentCard[0]);
-													break;
-												case RFID_SN_TYPE_10BYTE:
-													sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", rfid.currentCard[9], rfid.currentCard[8], rfid.currentCard[7], rfid.currentCard[6], rfid.currentCard[5], rfid.currentCard[4], rfid.currentCard[3], rfid.currentCard[2], rfid.currentCard[1], rfid.currentCard[0]);
-													break;
-												case RFID_SN_TYPE_4BYTE:
-												default:
-													sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X", rfid.currentCard[3], rfid.currentCard[2], rfid.currentCard[1], rfid.currentCard[0]);
-													break;
-											}
-										}
-										DEBUG_INFO("End request User Id : %s\r\n", ShmSysConfigAndInfo->SysConfig.UserId);
-										DEBUG_INFO("Start method : %d...\r\n ", ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].StartMethod);
-
-
-										if(ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].StartMethod == START_METHOD_RFID)
-										{
-											switch(ShmSysConfigAndInfo->SysConfig.AuthorisationMode)
-											{
-												case AUTH_MODE_ENABLE:
-													if(ShmOCPP16Data->OcppConnStatus)
-													{
-														// On line
-														ShmOCPP16Data->SpMsg.bits.AuthorizeReq = ON;
-													}
-													else
-													{
-														// Off line
-														switch(ShmSysConfigAndInfo->SysConfig.OfflinePolicy)
-														{
-															case OFF_POLICY_LOCALLIST:
-																ShmOCPP16Data->SpMsg.bits.AuthorizeReq = ON;
-																break;
-															case OFF_POLICY_PH_RFID:
-																break;
-															case OFF_POLICY_FREE:
-																break;
-															case OFF_POLICY_NOCHARGE:
-															default:
-																break;
-														}
-													}
-													break;
-												case AUTH_MODE_DISABLE:
-												default:
-													break;
-											}
-										}
-										else if(ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].StartMethod == START_METHOD_BACKEND)
-										{
-											ShmCharger->gun_info[gun_index].rfidReq = OFF;
-											DEBUG_INFO("Need to match with start method : START_METHOD_BACKEND...\r\n");
-											setChargerMode(gun_index, SYS_MODE_CHARGING);
-										}
-										else if (ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].StartMethod == START_METHOD_BLE)
-										{
-											ShmCharger->gun_info[gun_index].rfidReq = OFF;
-											DEBUG_INFO("Need to match with start method : START_METHOD_BLE...\r\n");
-											setChargerMode(gun_index, SYS_MODE_CHARGING);
-										}
-										else
-										{}
-
-									}
-									else
-									{
-										if(ShmOCPP16Data->SpMsg.bits.AuthorizeConf ||
-										  (ShmSysConfigAndInfo->SysConfig.AuthorisationMode == AUTH_MODE_DISABLE) ||
-										  (!ShmOCPP16Data->OcppConnStatus&&(ShmSysConfigAndInfo->SysConfig.OfflinePolicy == OFF_POLICY_FREE)))
-										{
-											if((strcmp((char*)ShmOCPP16Data->Authorize.ResponseIdTagInfo.Status, "Accepted")==0) ||
-											   (ShmSysConfigAndInfo->SysConfig.AuthorisationMode == AUTH_MODE_DISABLE) ||
-											   (!ShmOCPP16Data->OcppConnStatus&&(ShmSysConfigAndInfo->SysConfig.OfflinePolicy == OFF_POLICY_FREE)))
-											{
-												ShmCharger->gun_info[gun_index].isAuthPassEnd = ON;
-											}
-											else
-											{
-												ShmCharger->gun_info[gun_index].rfidReq = OFF;
-
-												DEBUG_INFO("Authorize fail.\r\n");
-												setSpeaker(ON,SPEAKER_INTERVAL_3COUNT);
-												setLedMotion(gun_index,LED_ACTION_RFID_FAIL);
-												sleep(3);
-											}
-
-											ShmOCPP16Data->SpMsg.bits.AuthorizeConf = OFF;
-										}
-									}
-								}
-
 								// End authorize pass
 								if(((ShmCharger->gun_info[gun_index].rfidReq == ON) && isMatchStartUser(gun_index)) ||
 								   (ShmCharger->gun_info[gun_index].isAuthPassEnd) ||
@@ -3382,134 +3588,6 @@ int main(void)
 								}
 								break;
 						case CHARGING_MODE_HLC:
-								// If RFID SN different with start user, it need to authorize ID
-								if((ShmCharger->gun_info[gun_index].rfidReq == ON) && !isMatchStartUser(gun_index))
-								{
-									if((DiffTimebWithNow(startTime[gun_index][TMR_IDX_AUTH]) > TIMEOUT_SPEC_AUTH) && !ShmOCPP16Data->SpMsg.bits.AuthorizeReq)
-									{
-										// Request authorization
-										ftime(&startTime[gun_index][TMR_IDX_AUTH]);
-										memset(ShmSysConfigAndInfo->SysConfig.UserId, 0x00, ARRAY_SIZE(ShmSysConfigAndInfo->SysConfig.UserId));
-										if(ShmSysConfigAndInfo->SysConfig.RfidCardNumEndian)
-										{
-											// Big endian
-											switch(rfid.snType)
-											{
-												case RFID_SN_TYPE_6BYTE:
-													sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X%02X%02X", rfid.currentCard[0], rfid.currentCard[1], rfid.currentCard[2], rfid.currentCard[3], rfid.currentCard[4], rfid.currentCard[5]);
-													break;
-												case RFID_SN_TYPE_7BYTE:
-													sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X%02X%02X%02X", rfid.currentCard[0], rfid.currentCard[1], rfid.currentCard[2], rfid.currentCard[3], rfid.currentCard[4], rfid.currentCard[5], rfid.currentCard[6]);
-													break;
-												case RFID_SN_TYPE_10BYTE:
-													sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", rfid.currentCard[0], rfid.currentCard[1], rfid.currentCard[2], rfid.currentCard[3], rfid.currentCard[4], rfid.currentCard[5], rfid.currentCard[6], rfid.currentCard[7], rfid.currentCard[8], rfid.currentCard[9]);
-													break;
-												case RFID_SN_TYPE_4BYTE:
-												default:
-													sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X", rfid.currentCard[0], rfid.currentCard[1], rfid.currentCard[2], rfid.currentCard[3]);
-													break;
-											}
-										}
-										else
-										{
-											// Little endian
-											switch(rfid.snType)
-											{
-												case RFID_SN_TYPE_6BYTE:
-													sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X%02X%02X", rfid.currentCard[5], rfid.currentCard[4], rfid.currentCard[3], rfid.currentCard[2], rfid.currentCard[1], rfid.currentCard[0]);
-													break;
-												case RFID_SN_TYPE_7BYTE:
-													sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X%02X%02X%02X", rfid.currentCard[6], rfid.currentCard[5], rfid.currentCard[4], rfid.currentCard[3], rfid.currentCard[2], rfid.currentCard[1], rfid.currentCard[0]);
-													break;
-												case RFID_SN_TYPE_10BYTE:
-													sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", rfid.currentCard[9], rfid.currentCard[8], rfid.currentCard[7], rfid.currentCard[6], rfid.currentCard[5], rfid.currentCard[4], rfid.currentCard[3], rfid.currentCard[2], rfid.currentCard[1], rfid.currentCard[0]);
-													break;
-												case RFID_SN_TYPE_4BYTE:
-												default:
-													sprintf((char*)ShmSysConfigAndInfo->SysConfig.UserId, "%02X%02X%02X%02X", rfid.currentCard[3], rfid.currentCard[2], rfid.currentCard[1], rfid.currentCard[0]);
-													break;
-											}
-										}
-										DEBUG_INFO("End request User Id : %s\r\n", ShmSysConfigAndInfo->SysConfig.UserId);
-										DEBUG_INFO("Start method : %d...\r\n ", ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].StartMethod);
-
-
-										if(ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].StartMethod == START_METHOD_RFID)
-										{
-											switch(ShmSysConfigAndInfo->SysConfig.AuthorisationMode)
-											{
-												case AUTH_MODE_ENABLE:
-													if(ShmOCPP16Data->OcppConnStatus)
-													{
-														// On line
-														ShmOCPP16Data->SpMsg.bits.AuthorizeReq = ON;
-													}
-													else
-													{
-														// Off line
-														switch(ShmSysConfigAndInfo->SysConfig.OfflinePolicy)
-														{
-															case OFF_POLICY_LOCALLIST:
-																ShmOCPP16Data->SpMsg.bits.AuthorizeReq = ON;
-																break;
-															case OFF_POLICY_PH_RFID:
-																break;
-															case OFF_POLICY_FREE:
-																break;
-															case OFF_POLICY_NOCHARGE:
-															default:
-																break;
-														}
-													}
-													break;
-												case AUTH_MODE_DISABLE:
-												default:
-													break;
-											}
-										}
-										else if(ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].StartMethod == START_METHOD_BACKEND)
-										{
-											ShmCharger->gun_info[gun_index].rfidReq = OFF;
-											DEBUG_INFO("Need to match with start method : START_METHOD_BACKEND...\r\n");
-											setChargerMode(gun_index, SYS_MODE_CHARGING);
-										}
-										else if (ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].StartMethod == START_METHOD_BLE)
-										{
-											ShmCharger->gun_info[gun_index].rfidReq = OFF;
-											DEBUG_INFO("Need to match with start method : START_METHOD_BLE...\r\n");
-											setChargerMode(gun_index, SYS_MODE_CHARGING);
-										}
-										else
-										{}
-
-									}
-									else
-									{
-										if(ShmOCPP16Data->SpMsg.bits.AuthorizeConf ||
-										  (ShmSysConfigAndInfo->SysConfig.AuthorisationMode == AUTH_MODE_DISABLE) ||
-										  (!ShmOCPP16Data->OcppConnStatus&&(ShmSysConfigAndInfo->SysConfig.OfflinePolicy == OFF_POLICY_FREE)))
-										{
-											if((strcmp((char*)ShmOCPP16Data->Authorize.ResponseIdTagInfo.Status, "Accepted")==0) ||
-											   (ShmSysConfigAndInfo->SysConfig.AuthorisationMode == AUTH_MODE_DISABLE) ||
-											   (!ShmOCPP16Data->OcppConnStatus&&(ShmSysConfigAndInfo->SysConfig.OfflinePolicy == OFF_POLICY_FREE)))
-											{
-												ShmCharger->gun_info[gun_index].isAuthPassEnd = ON;
-											}
-											else
-											{
-												ShmCharger->gun_info[gun_index].rfidReq = OFF;
-
-												DEBUG_INFO("Authorize fail.\r\n");
-												setSpeaker(ON,SPEAKER_INTERVAL_3COUNT);
-												setLedMotion(gun_index,LED_ACTION_RFID_FAIL);
-												sleep(3);
-											}
-
-											ShmOCPP16Data->SpMsg.bits.AuthorizeConf = OFF;
-										}
-									}
-								}
-
 								// End authorize pass
 								if(((ShmCharger->gun_info[gun_index].rfidReq == ON) && isMatchStartUser(gun_index)) ||
 								   (ShmCharger->gun_info[gun_index].isAuthPassEnd) ||

+ 7 - 0
EVSE/Projects/AW-CCS/Apps/main.h

@@ -162,6 +162,10 @@
 #define HANDSHAKE_BS_MODE				6
 #define HANDSHAKE_HLC_MODE				7
 
+#define	EV_READY_STAT_E					1
+#define	EV_READY_STAT_C					2
+#define	EV_READY_SET_MAX_CURRENT		3
+
 #define	CHARGING_MODE_BS				0
 #define	CHARGING_MODE_HLC				1
 
@@ -610,6 +614,7 @@ typedef struct GUN_INFO
 	uint8_t											PreviousEVChargeProgress;	
 	uint8_t											chargingMode;
 	uint16_t										targetCurrent;
+	uint8_t											evReadyState;
 	
 	uint16_t										isAuthPassEnd:1;
 	uint16_t										rfidReq:1;
@@ -621,6 +626,8 @@ typedef struct GUN_INFO
 	uint16_t										isOperactive:1;
 	uint16_t										isCCSWaitChangeDuty:1;
 	uint16_t										isCCSStartTransation:1;
+	uint16_t										isEvReady2StateE:1;
+	uint16_t										isDoEvReadyOnce:1;
 }Gun_Info;
 
 struct Charger

二进制
EVSE/Projects/AW-CCS/Images/FactoryDefaultConfig.bin


二进制
EVSE/Projects/AW-CCS/Images/ramdisk.gz


二进制
EVSE/Projects/AW-Regular/Images/FactoryDefaultConfig.bin


二进制
EVSE/Projects/AW-Regular/Images/ramdisk.gz


二进制
EVSE/Projects/BYTON-GB/Images/FactoryDefaultConfig.bin


二进制
EVSE/Projects/BYTON-GB/Images/ramdisk.gz


二进制
EVSE/Projects/Noodoe/Images/FactoryDefaultConfig.bin


二进制
EVSE/Projects/Noodoe/Images/ramdisk.gz