Quellcode durchsuchen

2021-11-17 / Eason Yang
Action:
1. Added : Set LED motion to connection timeout, when EVSE & EV handshake timeout.
2. Added : SysConfig.Authorization is equal to AUTH_MODE_DISABLE and the user is not allowed to tap RFID.
3. Added : The charger should accept Remote Start Transaction without connector Id logic.
4. Added : 4G/WIFI module power reset gpio. GPIO1_27.
5. Bugfix : The charger should be blocked unqualified target current.
6. Bugfix : checkRfidAuthrize function. Remove sleep(1) for offline policy at no charge.
7. Improve : checkChargingProfileLimit function. Integrated minimum and maximum target current protection.
8. Replace : Ethernet reset gpio89 changed to gpio56. GPIO2_25 -> GPIO1_24.
9. Replace : Version number.

File:
1. main.c
Action 1
Action 2
Action 3
Action 4
Action 5
Action 6
Action 7
Action 8
Action 9

Firmware version : D0.56.XX.XXXX.XX

8009 vor 3 Jahren
Ursprung
Commit
cade176ebc

+ 67 - 23
EVSE/Projects/AW-CCS/Apps/LCM/Module_LcmControl.c

@@ -2,9 +2,9 @@
  * Module_LcmControl.c
  *
  * Created on : 2020-10-20
- * Update on : 2021-06-23
+ * Update on : 2021-11-17
  * Author : Folus Wen, Eason Yang
- * Version : D0.01
+ * Version : V0.22
  *
  */
 
@@ -118,7 +118,7 @@ uint8_t isCharging	= YES;
 //=======================================
 // Record version and date
 //=======================================
-char *FIRMWARE_UPDATE_IMAGE[3] = {"V0.21", "2021-10-22", "REV.01.00"};
+char *FIRMWARE_UPDATE_IMAGE[3] = {"V0.22", "2021-11-17", "REV.01.00"};
 
 //=======================================
 // Common routine
@@ -260,6 +260,25 @@ void getDateTimeString(char* result)
 	sprintf(result, "%04d/%02d/%02d %02d:%02d", tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min);
 }
 
+//======================================================
+// OCPP routine
+//======================================================
+uint8_t ocpp_get_isRemoteStartWait()
+{
+	uint8_t result = OFF;
+
+	if(ShmSysConfigAndInfo->SysInfo.OcppRunningVer == OCPP_RUNNING_VERSION_16)
+	{
+		result = ShmOCPP16Data->MsMsg.bits.isRemoteStartWaitReq;
+	}
+	else if(ShmSysConfigAndInfo->SysInfo.OcppRunningVer == OCPP_RUNNING_VERSION_20)
+	{
+		result = ShmOCPP20Data->MsMsg.bits.isRemoteStartWaitReq;
+	}
+
+	return result;
+}
+
 //=======================================
 // Function to page routine
 //=======================================
@@ -276,42 +295,56 @@ void page_booting()
 
 void page_idle(uint8_t gun_index, uint8_t system_mode)
 {
-	if(ShmCharger->gun_info[gun_index].isSleepOn == YES)
+	if(ocpp_get_isRemoteStartWait())
 	{
-		if((getCurrentPage() != SYSTEM_SCREEN_SLEEP))
+		if((getCurrentPage() != SYSTEM_SCREEN_PREPARING))
 		{
-			setCurrentPage(SYSTEM_SCREEN_SLEEP);
+			setCurrentPage(SYSTEM_SCREEN_PREPARING);
+			DEBUG_INFO("Setting page to preparing.\n");
+			DEBUG_INFO("Remote Start Transaction without connector Id.\n");
 		}
 		else
 		{}
 	}
 	else
 	{
-		if(ShmCharger->gun_info[gun_index].isCheckPowerConsumption == YES)
+		if(ShmCharger->gun_info[gun_index].isSleepOn == YES)
 		{
-			setCurrentPage(SYSTEM_SCREEN_POWER_CONSUMPTION);
-			setDisplayValue(ICON_POWER_CONSUMPTION, APPEAR);
-			setPresentPowerConsumption(gun_index);
+			if((getCurrentPage() != SYSTEM_SCREEN_SLEEP))
+			{
+				setCurrentPage(SYSTEM_SCREEN_SLEEP);
+			}
+			else
+			{}
 		}
 		else
 		{
-			if((getCurrentPage() != SYSTEM_SCREEN_IDLE) && (ShmCharger->gun_info[gun_index].resultAuthorization != VALIDATED_RFID))
+			if(ShmCharger->gun_info[gun_index].isCheckPowerConsumption == YES)
 			{
-				setCurrentPage(SYSTEM_SCREEN_IDLE);
-				setDefaultValue(gun_index, system_mode);
-				DEBUG_INFO("Setting page to idle.\n");
+				setCurrentPage(SYSTEM_SCREEN_POWER_CONSUMPTION);
+				setDisplayValue(ICON_POWER_CONSUMPTION, APPEAR);
+				setPresentPowerConsumption(gun_index);
 			}
 			else
 			{
-				setRfidIcon();
-				setQRCodeIcon();
-
-				if(isEmulator == YES)
+				if((getCurrentPage() != SYSTEM_SCREEN_IDLE) && (ShmCharger->gun_info[gun_index].resultAuthorization != VALIDATED_RFID))
 				{
-					//if(isCharging == YES)
-						//PERCENTAGE = 0;
-					//else
-						//PERCENTAGE = 100;
+					setCurrentPage(SYSTEM_SCREEN_IDLE);
+					setDefaultValue(gun_index, system_mode);
+					DEBUG_INFO("Setting page to idle.\n");
+				}
+				else
+				{
+					setRfidIcon();
+					setQRCodeIcon();
+
+					if(isEmulator == YES)
+					{
+						//if(isCharging == YES)
+							//PERCENTAGE = 0;
+						//else
+							//PERCENTAGE = 100;
+					}
 				}
 			}
 		}
@@ -661,9 +694,20 @@ void setCurrentPage(uint8_t page)
 	uint8_t settingPage[2] = {0x00, page};
 
 	if(lcdRegisterWrite(Uart1Fd, REG_TYPE_CONTROL, REG_ADDRESS_SET_PAGE_ID, settingPage, ARRAY_SIZE(settingPage)))
-		DEBUG_INFO("Setting current page to : [%d] \n", page);
+	{
+		if((ShmCharger->gun_info[0].isSleepOn == YES) || (ShmCharger->gun_info[1].isSleepOn == YES))
+		{
+
+		}
+		else
+		{
+			DEBUG_INFO("Setting current page to : [%d] \n", page);
+		}
+	}
 	else
+	{
 		DEBUG_INFO("Setting current page fail! \n");
+	}
 }
 
 //=======================================

+ 191 - 249
EVSE/Projects/AW-CCS/Apps/main.c

@@ -41,8 +41,9 @@
 #define GPIO_OUT_RST_RFID				62
 #define GPIO_OUT_RST_4G					114
 #define GPIO_OUT_RST_QCA				115
-#define GPIO_OUT_RST_ETH				89
+#define GPIO_OUT_RST_ETH				56
 #define GPIO_IN_WAKEUP					63
+#define GPIO_OUT_RST_PWR				59
 
 #define MtdBlockSize 					0x300000
 
@@ -440,6 +441,22 @@ void ocpp_process_start()
 		system("/root/OcppBackend20 &");
 }
 
+uint8_t ocpp_get_isRemoteStartWait()
+{
+	uint8_t result = OFF;
+
+	if(ShmSysConfigAndInfo->SysInfo.OcppRunningVer == OCPP_RUNNING_VERSION_16)
+	{
+		result = ShmOCPP16Data->MsMsg.bits.isRemoteStartWaitReq;
+	}
+	else if(ShmSysConfigAndInfo->SysInfo.OcppRunningVer == OCPP_RUNNING_VERSION_20)
+	{
+		result = ShmOCPP20Data->MsMsg.bits.isRemoteStartWaitReq;
+	}
+
+	return result;
+}
+
 uint8_t ocpp_get_connection_status()
 {
 	uint8_t result = OFF;
@@ -1966,20 +1983,27 @@ void InitGPIO()
 	system("echo \"out\" > /sys/class/gpio/gpio65/direction");
 	system("echo 0 > /sys/class/gpio/gpio65/value");
 
-	/*Ethernet RST:GPIO2_25 => H:ON; L:OFF*/
-	system("echo 89 > /sys/class/gpio/export");
-	system("echo \"out\" > /sys/class/gpio/gpio89/direction");
-	system("echo 0 > /sys/class/gpio/gpio89/value");
+	/*Ethernet RST:GPIO1_24 => H:ON; L:OFF*/
+	system("echo 56 > /sys/class/gpio/export");
+	system("echo \"out\" > /sys/class/gpio/gpio56/direction");
+	system("echo 0 > /sys/class/gpio/gpio56/value");
 	sleep(3);
-	system("echo 1 > /sys/class/gpio/gpio89/value");
+	system("echo 1 > /sys/class/gpio/gpio56/value");
 
-	/*4G/Wifi RST:GPIO3_18 => H:ON; L:OFF*/
+	/*4G POWER RST:GPIO3_18 => H:ON; L:OFF*/
 	system("echo 114 > /sys/class/gpio/export");
 	system("echo \"out\" > /sys/class/gpio/gpio114/direction");
 	system("echo 1 > /sys/class/gpio/gpio114/value");
 	sleep(3);
 	system("echo 0 > /sys/class/gpio/gpio114/value");
 
+	/*4G/WIFI POWER RST:GPIO1_27 => H:OFF L:ON*/
+	system("echo 59 > /sys/class/gpio/export");
+	system("echo \"out\" > /sys/class/gpio/gpio59/direction");
+	system("echo 1 > /sys/class/gpio/gpio59/value");
+	sleep(3);
+	system("echo 0 > /sys/class/gpio/gpio59/value");
+
 	/*RFID ICC:GPIO0_20 => H:ON; L:OFF*/
 	system("echo 20 > /sys/class/gpio/export");
 	system("echo \"in\" > /sys/class/gpio/gpio20/direction");
@@ -2857,7 +2881,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.55.00.0000.00");
+	sprintf((char*)ShmSysConfigAndInfo->SysInfo.CsuRootFsFwRev, "D0.56.00.0000.00");
 
 	// Get AC connector type from model name
 	for(uint8_t idx=0;idx<3;idx++)
@@ -4118,7 +4142,7 @@ void checkAvailability(uint8_t gun_index)
 	}
 }
 
-void checkChargingProfileLimit(uint8_t gun_index)
+void checkChargingProfileLimit(uint8_t gun_index, uint8_t system_mode)
 {
 	if(ShmSysConfigAndInfo->SysInfo.OcppRunningVer == OCPP_RUNNING_VERSION_16)
 	{
@@ -4127,7 +4151,7 @@ void checkChargingProfileLimit(uint8_t gun_index)
 		   (((strlen((char*)ShmOCPP16Data->SmartChargingProfile[gun_index].ValidFrom)>0) && (strlen((char*)ShmOCPP16Data->SmartChargingProfile[gun_index].ValidTo)>0)) ? isProfileValid(gun_index) : ON))
 		{
 			// Debug information
-			if(DiffTimebWithNow(startTime[gun_index][TMR_IDX_LOGPPRINTOUT]) > TIMEOUT_SPEC_LOGPPRINTOUT)
+			if(DiffTimebWithNow(startTime[gun_index][TMR_IDX_REFRESH_CHARGING_INFO]) > TIMEOUT_SPEC_LOGPPRINTOUT)
 			{
 				DEBUG_INFO("===============================================================\n");
 				DEBUG_INFO("Profile ID found: %d\n", ShmOCPP16Data->SmartChargingProfile[gun_index].ChargingProfileId);
@@ -4177,7 +4201,7 @@ void checkChargingProfileLimit(uint8_t gun_index)
 		   (((strlen((char*)ShmOCPP20Data->SmartChargingProfile[gun_index].validFrom)>0) && (strlen((char*)ShmOCPP20Data->SmartChargingProfile[gun_index].validTo)>0)) ? isProfileValid(gun_index) : ON))
 		{
 			// Debug information
-			if(DiffTimebWithNow(startTime[gun_index][TMR_IDX_LOGPPRINTOUT]) > TIMEOUT_SPEC_LOGPPRINTOUT)
+			if(DiffTimebWithNow(startTime[gun_index][TMR_IDX_REFRESH_CHARGING_INFO]) > TIMEOUT_SPEC_LOGPPRINTOUT)
 			{
 				DEBUG_INFO("===============================================================\n");
 				DEBUG_INFO("Profile ID found: %d\n", ShmOCPP20Data->SmartChargingProfile[gun_index].id);
@@ -4220,6 +4244,106 @@ void checkChargingProfileLimit(uint8_t gun_index)
 			ShmCharger->gun_info[gun_index].targetCurrent = ShmCharger->gun_info[gun_index].primaryMcuState.rating_current;
 		}
 	}
+
+	switch(system_mode)
+	{
+		case SYS_MODE_IDLE:
+			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->isCcsEnable)
+				{
+					ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current = CCS_PWM_DUTY_5;
+				}
+				else
+				{
+					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].primaryMcuCp_Pwn_Duty.max_current = ((1 <= ShmCharger->gun_info[gun_index].targetCurrent) && (ShmCharger->gun_info[gun_index].targetCurrent <= 5)? 6:((ShmCharger->gun_info[gun_index].targetCurrent == 0)? 100:ShmCharger->gun_info[gun_index].targetCurrent));
+				}
+			}
+			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->isCcsEnable)
+				{
+					ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current = CCS_PWM_DUTY_5;
+				}
+				else
+				{
+					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].primaryMcuCp_Pwn_Duty.max_current = ((1 <= ShmCharger->gun_info[gun_index].targetCurrent) && (ShmCharger->gun_info[gun_index].targetCurrent <= 5)? 6:((ShmCharger->gun_info[gun_index].targetCurrent == 0)? 100:ShmCharger->gun_info[gun_index].targetCurrent));
+				}
+			}
+			ShmCharger->gun_info[gun_index].mcuFlag.isSetCpPwmDuty = YES;
+
+			break;
+		case SYS_MODE_PREPARING:
+			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);
+				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].primaryMcuCp_Pwn_Duty.max_current = ((1 <= ShmCharger->gun_info[gun_index].targetCurrent) && (ShmCharger->gun_info[gun_index].targetCurrent <= 5)? 6:((ShmCharger->gun_info[gun_index].targetCurrent == 0)? 100:ShmCharger->gun_info[gun_index].targetCurrent));
+
+			}
+			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);
+				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].primaryMcuCp_Pwn_Duty.max_current = ((1 <= ShmCharger->gun_info[gun_index].targetCurrent) && (ShmCharger->gun_info[gun_index].targetCurrent <= 5)? 6:((ShmCharger->gun_info[gun_index].targetCurrent == 0)? 100:ShmCharger->gun_info[gun_index].targetCurrent));
+
+			}
+			ShmCharger->gun_info[gun_index].mcuFlag.isSetCpPwmDuty = YES;
+
+			break;
+		case SYS_MODE_CHARGING:
+		case SYS_MODE_TERMINATING:
+			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].primaryMcuState.current_limit != ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current))
+				{
+					if(ShmCharger->gun_info[gun_index].chargingMode == CHARGING_MODE_BS)
+					{
+						if(DiffTimebWithNow(startTime[gun_index][TMR_IDX_PWN_CHANGE]) > TIMEOUT_SPEC_PWN_CHANGE)
+						{
+							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].primaryMcuCp_Pwn_Duty.max_current = ((1 <= ShmCharger->gun_info[gun_index].targetCurrent) && (ShmCharger->gun_info[gun_index].targetCurrent <= 5)? 6:((ShmCharger->gun_info[gun_index].targetCurrent == 0)? 100:ShmCharger->gun_info[gun_index].targetCurrent));
+							ShmCharger->gun_info[gun_index].mcuFlag.isSetCpPwmDuty = YES;
+							ftime(&startTime[gun_index][TMR_IDX_PWN_CHANGE]);
+						}
+					}
+					else if(ShmCharger->gun_info[gun_index].chargingMode == CHARGING_MODE_HLC)
+					{
+						ShmCharger->gun_info[gun_index].acCcsInfo.EVSEMaxCurrent = (float)((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);
+					}
+				}
+			}
+			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].primaryMcuState.current_limit != ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current))
+				{
+					if(ShmCharger->gun_info[gun_index].chargingMode == CHARGING_MODE_BS)
+					{
+						if(DiffTimebWithNow(startTime[gun_index][TMR_IDX_PWN_CHANGE]) > TIMEOUT_SPEC_PWN_CHANGE)
+						{
+							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].primaryMcuCp_Pwn_Duty.max_current = ((1 <= ShmCharger->gun_info[gun_index].targetCurrent) && (ShmCharger->gun_info[gun_index].targetCurrent <= 5)? 6:((ShmCharger->gun_info[gun_index].targetCurrent == 0)? 100:ShmCharger->gun_info[gun_index].targetCurrent));
+							ShmCharger->gun_info[gun_index].mcuFlag.isSetCpPwmDuty = YES;
+							ftime(&startTime[gun_index][TMR_IDX_PWN_CHANGE]);
+						}
+					}
+					else if(ShmCharger->gun_info[gun_index].chargingMode == CHARGING_MODE_HLC)
+					{
+						ShmCharger->gun_info[gun_index].acCcsInfo.EVSEMaxCurrent = (float)((ShmCharger->gun_info[gun_index].targetCurrent > ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent)?ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent:ShmCharger->gun_info[gun_index].targetCurrent);
+					}
+				}
+			}
+
+			break;
+	}
 }
 
 void checkStopReason(uint8_t gun_index)
@@ -4260,8 +4384,7 @@ void checkStopReason(uint8_t gun_index)
 			{
 				memcpy((char*)ShmOCPP16Data->StopTransaction[gun_index].IdTag, (char*)ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].StartUserId, ARRAY_SIZE(ShmOCPP16Data->StopTransaction[gun_index].IdTag));
 			}
-
-			DEBUG_INFO("Gun-%d [ IdTag ] : %s \n", gun_index, ShmOCPP16Data->StopTransaction[gun_index].IdTag);
+			DEBUG_INFO("Gun-[%d] : IdTag [ %s ].\n", gun_index, ShmOCPP16Data->StopTransaction[gun_index].IdTag);
 		}
 		else if(ShmOCPP16Data->CsMsg.bits[gun_index].RemoteStopTransactionReq)
 		{
@@ -4275,11 +4398,11 @@ void checkStopReason(uint8_t gun_index)
 		{
 			sprintf((char*)ShmOCPP16Data->StopTransaction[gun_index].StopReason, "Other");
 		}
-		DEBUG_INFO("Gun-%d : StopReason [ %s ]...\n",gun_index,ShmOCPP16Data->StopTransaction[gun_index].StopReason);
+		DEBUG_INFO("Gun-[%d] : StopReason [ %s ].\n",gun_index,ShmOCPP16Data->StopTransaction[gun_index].StopReason);
 
 		ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].PowerConsumption = (ShmCharger->gun_info[gun_index].powerConsumptionTotal.power_consumption/10000.0);
 		presentChargedEnergyUpdate(gun_index);
-		DEBUG_INFO("PresentChargedEnergy Gun-[%d] : %.4f \n",gun_index ,ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].PresentChargedEnergy);
+		DEBUG_INFO("Gun-[%d] : PresentChargedEnergy [ %.4f ].\n",gun_index ,ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].PresentChargedEnergy);
 		
 		ShmOCPP16Data->CpMsg.bits[gun_index].StopTransactionReq = ON;
 	}
@@ -4321,8 +4444,7 @@ void checkStopReason(uint8_t gun_index)
 			{
 				memcpy((char*)ShmOCPP20Data->TransactionEvent[gun_index].idToken.idToken, (char*)ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].StartUserId, ARRAY_SIZE(ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].StartUserId));
 			}
-
-			DEBUG_INFO("Gun-%d [ idToken ] : %s \n", gun_index, ShmOCPP20Data->TransactionEvent[gun_index].idToken.idToken);
+			DEBUG_INFO("Gun-[%d] : idToken [ %s ].\n", gun_index, ShmOCPP20Data->TransactionEvent[gun_index].idToken.idToken);
 		}
 		else if((ShmCharger->gun_info[gun_index].systemAlarmCode.SystemAlarmCode & ALARM_L1_OVER_CURRENT) ||
 				(ShmCharger->gun_info[gun_index].systemAlarmCode.SystemAlarmCode & ALARM_L2_OVER_CURRENT) ||
@@ -4342,11 +4464,11 @@ void checkStopReason(uint8_t gun_index)
 		{
 			sprintf((char*)ShmOCPP20Data->TransactionEvent[gun_index].transactionInfo.stoppedReason, "Other");
 		}
-		DEBUG_INFO("Gun-%d : StopReason [ %s ]...\n", gun_index, ShmOCPP20Data->TransactionEvent[gun_index].transactionInfo.stoppedReason);
+		DEBUG_INFO("Gun-[%d] : StopReason [ %s ].\n", gun_index, ShmOCPP20Data->TransactionEvent[gun_index].transactionInfo.stoppedReason);
 
 		ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].PowerConsumption = (ShmCharger->gun_info[gun_index].powerConsumptionTotal.power_consumption/10000.0);
 		presentChargedEnergyUpdate(gun_index);
-		DEBUG_INFO("PresentChargedEnergy Gun-[%d] : %.4f \n",gun_index ,ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].PresentChargedEnergy);
+		DEBUG_INFO("Gun-[%d] : PresentChargedEnergy [ %.4f ].\n",gun_index ,ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].PresentChargedEnergy);
 		
 		ShmOCPP20Data->CpMsg.bits[gun_index].TransactionEventReq = ON;
 	}
@@ -4517,7 +4639,6 @@ void checkRfidAuthrize()
 				ShmCharger->isAuthrizing = TRUE;
 				ShmCharger->isGetAuthResult = FALSE;
 				isCheckdResult = FALSE;
-				sleep(1);
 			}
 		}
 	}
@@ -4614,6 +4735,8 @@ void checkRfidAuthrize()
 
 						for(int gun_index = 0;gun_index<AC_QUANTITY;gun_index++)
 						{
+							setLedMotion(gun_index,LED_ACTION_HANDSHAKE_FAIL);
+							sleep(6);
 							setLedMotion(gun_index,LED_ACTION_IDLE);
 							ShmCharger->gun_info[gun_index].resultAuthorization = DEFAULT_RFID;
 						}
@@ -4769,7 +4892,8 @@ int main(void)
 			   (ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].SystemStatus == SYS_MODE_UPDATE) ||
 			   (ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].SystemStatus == SYS_MODE_BOOTING) ||
 			   (ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].SystemStatus == SYS_MODE_COMPLETE) ||
-			   (ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].SystemStatus == SYS_MODE_MAINTAIN))
+			   (ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].SystemStatus == SYS_MODE_MAINTAIN) ||
+			   (ShmSysConfigAndInfo->SysConfig.AuthorisationMode == AUTH_MODE_DISABLE))
 			{
 
 			}
@@ -4845,7 +4969,6 @@ int main(void)
 			{
 				if(ShmCharger->isLcdOn == ON)
 				{
-					//if(DiffTimebWithNow(startTime[gun_index][TMR_IDX_POWERSAVING_LCD]) < (TIMEOUT_SPEC_POWERSAVING_LCD+600))
 					DEBUG_INFO("LCD into power saving...%d\n", DiffTimebWithNow(startTime[gun_index][TMR_IDX_POWERSAVING_LCD]));
 					ShmCharger->isLcdOn = OFF;
 				}
@@ -4854,7 +4977,6 @@ int main(void)
 			{
 				if(ShmCharger->isLcdOn == OFF)
 				{
-					//if((0 < DiffTimebWithNow(startTime[gun_index][TMR_IDX_POWERSAVING_LCD])) && (DiffTimebWithNow(startTime[gun_index][TMR_IDX_POWERSAVING_LCD]) < 600))
 					DEBUG_INFO("LCD exit power saving...%d\n", DiffTimebWithNow(startTime[gun_index][TMR_IDX_POWERSAVING_LCD]));
 					ShmCharger->isLcdOn = ON;
 				}
@@ -5144,24 +5266,34 @@ int main(void)
 					// LED status in Idle mode
 					if(!ShmCharger->isAuthrizing)
 					{
-						if(ShmSysConfigAndInfo->SysInfo.OcppConnStatus == ON)
+						if(ocpp_get_isRemoteStartWait())
 						{
-							if(ShmCharger->gun_info[gun_index].rfidReq == OFF)
-							{
-								if(ShmCharger->gun_info[gun_index].isSleepOn == NO)
-									setLedMotion(gun_index,LED_ACTION_IDLE_BACKEND_CONNECTED);
-								else
-									setLedMotion(gun_index,LED_ACTION_IDLE_BACKEND_CONNECTED_SLEEP);
-							}
+							ShmCharger->gun_info[gun_index].isSleepOn = OFF;
+							setLedMotion(gun_index, LED_ACTION_AUTHED);
+							ftime(&startTime[gun_index][TMR_IDX_POWERSAVING_LCD]);
+							DEBUG_INFO("Remote Start Transaction without connector Id.\n");
 						}
 						else
 						{
-							if(ShmCharger->gun_info[gun_index].rfidReq == OFF)
+							if(ShmSysConfigAndInfo->SysInfo.OcppConnStatus == ON)
 							{
-								if(ShmCharger->gun_info[gun_index].isSleepOn == NO)
-									setLedMotion(gun_index,LED_ACTION_IDLE_BACKEND_DISCONNECTED);
-								else
-									setLedMotion(gun_index,LED_ACTION_IDLE_BACKEND_DISCONNECTED_SLEEP);
+								if(ShmCharger->gun_info[gun_index].rfidReq == OFF)
+								{
+									if(ShmCharger->gun_info[gun_index].isSleepOn == NO)
+										setLedMotion(gun_index,LED_ACTION_IDLE_BACKEND_CONNECTED);
+									else
+										setLedMotion(gun_index,LED_ACTION_IDLE_BACKEND_CONNECTED_SLEEP);
+								}
+							}
+							else
+							{
+								if(ShmCharger->gun_info[gun_index].rfidReq == OFF)
+								{
+									if(ShmCharger->gun_info[gun_index].isSleepOn == NO)
+										setLedMotion(gun_index,LED_ACTION_IDLE_BACKEND_DISCONNECTED);
+									else
+										setLedMotion(gun_index,LED_ACTION_IDLE_BACKEND_DISCONNECTED_SLEEP);
+								}
 							}
 						}
 					}
@@ -5214,57 +5346,7 @@ int main(void)
 						// Get target current
 						ocpp_set_profile_req(gun_index, ON);
 						sleep(1);
-						checkChargingProfileLimit(gun_index);
-						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->isCcsEnable)
-							{
-								ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current = CCS_PWM_DUTY_5;
-							}
-							else
-							{
-								if((6 <= ShmCharger->gun_info[gun_index].targetCurrent))
-								{
-									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);
-								}
-								else if((1 <= ShmCharger->gun_info[gun_index].targetCurrent) && (ShmCharger->gun_info[gun_index].targetCurrent < 6))
-								{
-									ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current = 6;
-								}
-								else
-								{
-									ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current = 100;
-								}
-							}
-						}
-						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->isCcsEnable)
-							{
-								ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current = CCS_PWM_DUTY_5;
-							}
-							else
-							{
-								if((6 <= ShmCharger->gun_info[gun_index].targetCurrent))
-								{
-									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);
-								}
-								else if((1 <= ShmCharger->gun_info[gun_index].targetCurrent) && (ShmCharger->gun_info[gun_index].targetCurrent < 6))
-								{
-									ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current = 6;
-								}
-								else
-								{
-									ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current = 100;
-								}
-							}
-						}
-						ShmCharger->gun_info[gun_index].mcuFlag.isSetCpPwmDuty = YES;
-
+						checkChargingProfileLimit(gun_index, ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].SystemStatus);
 						setChargerMode(gun_index, SYS_MODE_AUTHORIZING);
 					}
 					else
@@ -5467,18 +5549,9 @@ int main(void)
 									DEBUG_INFO("Determine max charging current to MCU.\n");
 									ocpp_set_profile_req(gun_index, ON);
 									sleep(1);
-									checkChargingProfileLimit(gun_index);
-									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);
-										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);
-									}
-									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);
-										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 = YES;
+
+									checkChargingProfileLimit(gun_index, ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].SystemStatus);
+
 									ShmCharger->gun_info[gun_index].ccsHandshakeState = HANDSHAKE_SET_MAX_CURRENT;
 									ftime(&startTime[gun_index][TMR_IDX_BS_HLC_HANDSHAKE]);
 								}
@@ -5494,10 +5567,14 @@ int main(void)
 								break;
 							case HANDSHAKE_BS_MODE:
 								ftime(&startTime[gun_index][TMR_IDX_HANDSHAKING]);
-								if(ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].PilotState == CP_STATE_C)
+								checkChargingProfileLimit(gun_index, ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].SystemStatus);
+
+								if((ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].PilotState == CP_STATE_C) && ((ShmCharger->gun_info[gun_index].targetCurrent != 0)))
+								{									
 									setRelay(gun_index,ON);
+								}
 
-								if((ShmCharger->gun_info[gun_index].primaryMcuState.relay_state == ON))
+								if((ShmCharger->gun_info[gun_index].primaryMcuState.relay_state == ON) || (ShmCharger->gun_info[gun_index].targetCurrent == 0))
 								{
 									ocpp_set_unlocker_req(gun_index, OFF);
 									presentChargedEnergyClear(gun_index);
@@ -5722,7 +5799,7 @@ int main(void)
 					{
 						ShmCharger->gun_info[gun_index].rfidReq = OFF;
 						//ftime(&startChargingTime[gun_index]);
-						ftime(&startTime[gun_index][TMR_IDX_LOGPPRINTOUT]);
+						ftime(&startTime[gun_index][TMR_IDX_REFRESH_CHARGING_INFO]);
 						ftime(&startTime[gun_index][TMR_IDX_PROFILE_PREPARE]);
 						ftime(&startTime[gun_index][TMR_IDX_PWN_CHANGE]);
 						ocpp_set_auth_req(OFF);
@@ -5764,7 +5841,6 @@ int main(void)
 					   ((ShmCharger->gun_info[gun_index].chargingMode == CHARGING_MODE_HLC) && ShmCharger->gun_info[gun_index].acCcsInfo.EVChargeProgress == HLC_STANDBY_MODE))
 					{
 						setChargerMode(gun_index, SYS_MODE_TERMINATING);
-						//setRelay(gun_index, OFF);
 					}
 					else
 					{
@@ -5801,7 +5877,7 @@ int main(void)
 						}
 
 						// Checking profile id > 0 and current time is between charging profile validFrom & validTo
-						checkChargingProfileLimit(gun_index);
+						checkChargingProfileLimit(gun_index, ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].SystemStatus);
 
 						// Charging session target current check if OCPP disconnect and power sharing server connected
 						if(!ocpp_get_connection_status() && ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharging)
@@ -5817,74 +5893,6 @@ int main(void)
 							}
 						}
 
-						// Determine max charging current to MCU
-						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].primaryMcuState.current_limit != ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current))
-							{
-								if(ShmCharger->gun_info[gun_index].chargingMode == CHARGING_MODE_BS)
-								{
-									if(DiffTimebWithNow(startTime[gun_index][TMR_IDX_PWN_CHANGE]) > TIMEOUT_SPEC_PWN_CHANGE)
-									{
-										if((6 <= ShmCharger->gun_info[gun_index].targetCurrent))
-										{
-											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);
-										}
-										else if((1 <= ShmCharger->gun_info[gun_index].targetCurrent) && (ShmCharger->gun_info[gun_index].targetCurrent < 6))
-										{
-											ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current = 6;
-										}
-										else
-										{
-											ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current = 100;
-										}
-
-										ShmCharger->gun_info[gun_index].mcuFlag.isSetCpPwmDuty = YES;
-										ftime(&startTime[gun_index][TMR_IDX_PWN_CHANGE]);
-									}
-								}
-								else if(ShmCharger->gun_info[gun_index].chargingMode == CHARGING_MODE_HLC)
-								{
-									ShmCharger->gun_info[gun_index].acCcsInfo.EVSEMaxCurrent = (float)((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);
-								}
-							}
-						}
-						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].primaryMcuState.current_limit != ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current))
-							{
-								if(ShmCharger->gun_info[gun_index].chargingMode == CHARGING_MODE_BS)
-								{
-									if(DiffTimebWithNow(startTime[gun_index][TMR_IDX_PWN_CHANGE]) > TIMEOUT_SPEC_PWN_CHANGE)
-									{
-										if((6 <= ShmCharger->gun_info[gun_index].targetCurrent))
-										{
-											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);
-										}
-										else if((1 <= ShmCharger->gun_info[gun_index].targetCurrent) && (ShmCharger->gun_info[gun_index].targetCurrent < 6))
-										{
-											ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current = 6;
-										}
-										else
-										{
-											ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current = 100;
-										}
-
-										ShmCharger->gun_info[gun_index].mcuFlag.isSetCpPwmDuty = YES;
-										ftime(&startTime[gun_index][TMR_IDX_PWN_CHANGE]);
-									}
-								}
-								else if(ShmCharger->gun_info[gun_index].chargingMode == CHARGING_MODE_HLC)
-								{
-									ShmCharger->gun_info[gun_index].acCcsInfo.EVSEMaxCurrent = (float)((ShmCharger->gun_info[gun_index].targetCurrent > ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent)?ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent:ShmCharger->gun_info[gun_index].targetCurrent);
-								}
-							}
-						}
-
 						// Charging session local limit condition check
 						if(ocpp_get_connection_status())
 						{
@@ -5995,14 +6003,14 @@ int main(void)
 						}
 
 						// Debug information
-						if((DiffTimebWithNow(startTime[gun_index][TMR_IDX_LOGPPRINTOUT]) > TIMEOUT_SPEC_LOGPPRINTOUT) || (DiffTimebWithNow(startTime[gun_index][TMR_IDX_LOGPPRINTOUT]) < 0))
+						if((DiffTimebWithNow(startTime[gun_index][TMR_IDX_REFRESH_CHARGING_INFO]) > TIMEOUT_SPEC_LOGPPRINTOUT) || (DiffTimebWithNow(startTime[gun_index][TMR_IDX_REFRESH_CHARGING_INFO]) < 0))
 						{
 							DEBUG_INFO("==============================================================\n");
 							DEBUG_INFO("ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent: %d \n", ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent);
 							DEBUG_INFO("ShmCharger->gun_info[%d].primaryMcuCp_Pwn_Duty.max_current: %d\n", gun_index, ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current);
 							DEBUG_INFO("ShmCharger->gun_info[%d].targetCurrent: %d\n", gun_index, ShmCharger->gun_info[gun_index].targetCurrent);
 							DEBUG_INFO("==============================================================\n");
-							ftime(&startTime[gun_index][TMR_IDX_LOGPPRINTOUT]);
+							ftime(&startTime[gun_index][TMR_IDX_REFRESH_CHARGING_INFO]);
 							
 							getDateTimeString((char*)ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].StopDateTime);
 							DB_Update_Record_Buf(localDb, gun_index);
@@ -6025,13 +6033,13 @@ int main(void)
 					}
 
 					ftime(&endChargingTime[gun_index]);
-					if(ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].PresentChargedDuration != 0)
-					{
+					//if(ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].PresentChargedDuration != 0)
+					//{
 						ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].PresentChargedDuration = DiffTimeb(startChargingTime[gun_index], endChargingTime[gun_index])/1000;
-					}
+					//}
 
 					// End authorize pass
-					if(((ShmCharger->gun_info[gun_index].rfidReq == ON) &&isMatchStartUser(gun_index)) ||
+					if(((ShmCharger->gun_info[gun_index].rfidReq == ON) && isMatchStartUser(gun_index)) ||
 					   ((ShmCharger->gun_info[gun_index].rfidReq == ON) && ocpp_get_auth_result(YES, gun_index)) ||
 					   (!ocpp_get_connection_status() && (ShmSysConfigAndInfo->SysConfig.OfflinePolicy == OFF_POLICY_FREE) && (ShmCharger->gun_info[gun_index].rfidReq == ON)) ||
 					   (!ocpp_get_connection_status() && (isValidLocalWhiteCard() == PASS) && (ShmSysConfigAndInfo->SysConfig.OfflinePolicy == OFF_POLICY_LOCALLIST) && (ShmCharger->gun_info[gun_index].rfidReq == ON)) ||
@@ -6045,7 +6053,6 @@ int main(void)
 					   (ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].schedule.isTriggerStop == ON) ||
 					   ((ShmCharger->gun_info[gun_index].chargingMode == CHARGING_MODE_HLC) && (ShmCharger->gun_info[gun_index].acCcsInfo.EVChargeProgress == HLC_STOP_MODE)))
 					{
-						//setRelay(gun_index, OFF);
 						setLedMotion(gun_index, LED_ACTION_STOP);
 
 						if(ShmCharger->gun_info[gun_index].chargingMode == CHARGING_MODE_BS)
@@ -6093,85 +6100,19 @@ int main(void)
 						}
 
 						// Checking profile id > 0 and current time is between charging profile validFrom & validTo
-						checkChargingProfileLimit(gun_index);
-
-						// Determine max charging current to MCU
-						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].primaryMcuState.current_limit != ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current))
-							{
-								if(ShmCharger->gun_info[gun_index].chargingMode == CHARGING_MODE_BS)
-								{
-									if(DiffTimebWithNow(startTime[gun_index][TMR_IDX_PWN_CHANGE]) > TIMEOUT_SPEC_PWN_CHANGE)
-									{
-										if((6 <= ShmCharger->gun_info[gun_index].targetCurrent))
-										{
-											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);
-										}
-										else if((1 <= ShmCharger->gun_info[gun_index].targetCurrent) && (ShmCharger->gun_info[gun_index].targetCurrent < 6))
-										{
-											ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current = 6;
-										}
-										else
-										{
-											ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current = 100;
-										}
-
-										ShmCharger->gun_info[gun_index].mcuFlag.isSetCpPwmDuty = YES;
-										ftime(&startTime[gun_index][TMR_IDX_PWN_CHANGE]);
-									}
-								}
-								else if(ShmCharger->gun_info[gun_index].chargingMode == CHARGING_MODE_HLC)
-								{
-									ShmCharger->gun_info[gun_index].acCcsInfo.EVSEMaxCurrent = (float)((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);
-								}
-							}
-						}
-						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].primaryMcuState.current_limit != ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current))
-							{
-								if(ShmCharger->gun_info[gun_index].chargingMode == CHARGING_MODE_BS)
-								{
-									if(DiffTimebWithNow(startTime[gun_index][TMR_IDX_PWN_CHANGE]) > TIMEOUT_SPEC_PWN_CHANGE)
-									{
-										if((6 <= ShmCharger->gun_info[gun_index].targetCurrent))
-										{
-											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);
-										}
-										else if((1 <= ShmCharger->gun_info[gun_index].targetCurrent) && (ShmCharger->gun_info[gun_index].targetCurrent < 6))
-										{
-											ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current = 6;
-										}
-										else
-										{
-											ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current = 100;
-										}
+						checkChargingProfileLimit(gun_index, ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].SystemStatus);
 
-										ShmCharger->gun_info[gun_index].mcuFlag.isSetCpPwmDuty = YES;
-										ftime(&startTime[gun_index][TMR_IDX_PWN_CHANGE]);
-									}
-								}
-								else if(ShmCharger->gun_info[gun_index].chargingMode == CHARGING_MODE_HLC)
-								{
-									ShmCharger->gun_info[gun_index].acCcsInfo.EVSEMaxCurrent = (float)((ShmCharger->gun_info[gun_index].targetCurrent > ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent)?ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent:ShmCharger->gun_info[gun_index].targetCurrent);
-								}
-							}
-						}
+						setRelay(gun_index, OFF);
 
 						// Debug information
-						if((DiffTimebWithNow(startTime[gun_index][TMR_IDX_LOGPPRINTOUT]) > TIMEOUT_SPEC_LOGPPRINTOUT) || (DiffTimebWithNow(startTime[gun_index][TMR_IDX_LOGPPRINTOUT]) < 0))
+						if((DiffTimebWithNow(startTime[gun_index][TMR_IDX_REFRESH_CHARGING_INFO]) > TIMEOUT_SPEC_LOGPPRINTOUT) || (DiffTimebWithNow(startTime[gun_index][TMR_IDX_REFRESH_CHARGING_INFO]) < 0))
 						{
 							DEBUG_INFO("=============================================================\n");
 							DEBUG_INFO("ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent: %d\n", ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent);
 							DEBUG_INFO("ShmCharger->gun_info[%d].primaryMcuCp_Pwn_Duty.max_current: %d\n", gun_index, ShmCharger->gun_info[gun_index].primaryMcuCp_Pwn_Duty.max_current);
 							DEBUG_INFO("ShmCharger->gun_info[%d].targetCurrent: %d\n", gun_index, ShmCharger->gun_info[gun_index].targetCurrent);
 							DEBUG_INFO("=============================================================\n");
-							ftime(&startTime[gun_index][TMR_IDX_LOGPPRINTOUT]);
+							ftime(&startTime[gun_index][TMR_IDX_REFRESH_CHARGING_INFO]);
 						}
 
 						if(!ocpp_get_auth_result(YES, gun_index))
@@ -6191,6 +6132,7 @@ int main(void)
 						   (((ShmCharger->gun_info[gun_index].chargingMode == CHARGING_MODE_HLC) && (ShmCharger->gun_info[gun_index].acCcsInfo.EVChargeProgress == HLC_START_MODE)) || (ShmCharger->gun_info[gun_index].chargingMode == CHARGING_MODE_BS))
 						  )
 						{
+							sleep(1);
 							setChargerMode(gun_index, SYS_MODE_CHARGING);
 						}
 					}

+ 1 - 1
EVSE/Projects/AW-CCS/Apps/main.h

@@ -219,7 +219,7 @@ enum TIMER_IDX
 {
 	TMR_IDX_HANDSHAKING=0,
 	TMR_IDX_AUTH,
-	TMR_IDX_LOGPPRINTOUT,
+	TMR_IDX_REFRESH_CHARGING_INFO,
 	TMR_IDX_PROFILE_PREPARE,
 	TMR_IDX_BS_HLC_HANDSHAKE,
 	TMR_IDX_CCS_HEARTBEAT_COUNT_RESET,

BIN
EVSE/Projects/AW-CCS/Images/FactoryDefaultConfig.bin


BIN
EVSE/Projects/AW-CCS/Images/ramdisk.gz