Pārlūkot izejas kodu

[Improve][AX80][Module_LcmControl]

2022.03.02 / Folus Wen

Actions:
1. Synchronize Module_LcmControl from AW-CCS.
2. Steal power issue fix.

Files:
1. As follow commit history

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

Hardware PWB P/N : XXXXXXX
Hardware Version : XXXXXXX
FolusWen 3 gadi atpakaļ
vecāks
revīzija
0ca8604d84

+ 362 - 196
EVSE/Projects/AX80/Apps/LCM/Module_LcmControl.c

@@ -2,7 +2,7 @@
  * Module_LcmControl.c
  *
  * Created on : 2020-10-20
- * Update on : 2022-01-17
+ * Update on : 2022-03-01
  * Author : Folus Wen, Eason Yang
  * Version : V0.27
  *
@@ -42,6 +42,7 @@ void setQRCodeIcon();
 void setBackendIcon();
 void setQRCodeAlarm();
 void setEthernetIcon();
+void setCsuRootFsFwRev();
 uint8_t getCurrentPage();
 void setAlarmCodeAndIcon();
 void setPresentSessionFee();
@@ -49,9 +50,13 @@ void setPresentParkingFee();
 void setBillingFromWebsite();
 int isEthConnected(char *eth);
 void setUserPrice(uint8_t type);
+void setTimeTitle(uint8_t isOn);
+void setEnergyTitle(uint8_t isOn);
 void setCurrentPage(uint8_t page);
-void setDefaultPrice(uint8_t type);
 void setPresentFinalCost(float cost);
+void setFinalCostTitle(uint8_t isOn);
+void setSessionFeeTitle(uint8_t isOn);
+void setParkingFeeTitle(uint8_t isOn);
 void setTextToEmpty(uint8_t gun_index);
 void setWarningStatus(uint8_t gun_index);
 void setQRCodeReceipt(uint8_t gun_index);
@@ -67,6 +72,7 @@ void setPresentPowerConsumption(uint8_t gun_index);
 void setFinalCost(uint8_t gun_index, uint8_t type);
 void setPresentConnectionTimeout(uint8_t gun_index);
 void setRunningCost(uint8_t gun_index, uint8_t type);
+void setPressStartButtonAnimation(uint8_t gun_index);
 void setDisplayValue(uint16_t address, uint8_t value);
 void setDisplayValue2(uint16_t address, uint8_t value);
 void setDefaultValue(uint8_t gun_index, uint8_t system_mode);
@@ -75,7 +81,6 @@ void setBillingFromBackend(uint8_t gun_index, uint8_t system_mode);
 void setConnectionAnimation(uint8_t gun_index, uint8_t system_mode);
 void setPresentChargedEnergy(uint8_t gun_index, uint8_t system_mode);
 void setMarqueeControl(uint16_t address, uint8_t gun_index, uint8_t type);
-void setCurrencyAndUnitFromBackend(uint8_t type_price,uint8_t type_currency_unit, uint8_t gun_index);
 
 //=======================================
 // Declare Timer
@@ -88,7 +93,7 @@ enum TMR_IDX
 	TMR_IDX_ALARM,
 	TMR_IDX_PRICE,
 	TMR_IDX_REFRESH_INFO,
-	TMR_IDX_6,
+	TMR_IDX_STARTBUTTON,
 	TMR_IDX_7,
 	TMR_IDX_8,
 	TMR_IDX_SHOW_AUTH_RESULT
@@ -99,6 +104,7 @@ struct timespec					startTime[AC_QUANTITY][TMR_IDX_SHOW_AUTH_RESULT];
 #define TIME_ANIMATION_PLUGIN			1 // Unit: Second
 #define TIME_ANIMATION_BATTERY			1 // Unit: Second
 #define TIME_ANIMATION_CONNECTION		1 // Unit: Second
+#define TIME_ANIMATION_START_PRESS		1 // Unit: Second
 #define TIME_ANIMATION_ALARM			5 // Unit: Second
 #define TIME_REFRESH_TIME				5 // Unit: Second
 #define TIME_AUTH_RESULT_TIME			5 // Unit: Second
@@ -111,6 +117,7 @@ struct timespec					startTime[AC_QUANTITY][TMR_IDX_SHOW_AUTH_RESULT];
 //=======================================
 uint8_t CONNECTION_LEVEL_STATUS = CONNECTION_LEVEL_0;
 uint8_t GUN_PLUGING_LEVEL_STATUS = GUN_PLUGING_LEVEL_0;
+uint8_t START_PRESS_LEVEL_STATIS = PRESS_START_LEVEL_0;
 uint8_t WarningCount = 255;
 
 int Uart1Fd;
@@ -118,7 +125,7 @@ int Uart1Fd;
 //=======================================
 // Record version and date
 //=======================================
-char *FIRMWARE_UPDATE_IMAGE[3] = {"V0.27", "2022-01-17", "REV.03.00"};
+char *FIRMWARE_UPDATE_IMAGE[3] = {"V0.27", "2022-03-01", "REV.03.00"};
 
 //=======================================
 // Common routine
@@ -294,7 +301,12 @@ void getDateTimeString(char* result)
 
 	tmTarget = gmtime(&tbTarget.time);
 	//sprintf(result, "%04d/%02d/%02d %02d:%02d", tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min);
-	sprintf(result, "%04d/%02d/%02d %02d:%02d %s", tmTarget->tm_year+1900,tmTarget->tm_mon+1,tmTarget->tm_mday,(tmTarget->tm_hour%12),tmTarget->tm_min,((tmTarget->tm_hour/12)>0?"p.m":"a.m"));
+	//sprintf(result, "%04d/%02d/%02d %02d:%02d %s", tmTarget->tm_year+1900,tmTarget->tm_mon+1,tmTarget->tm_mday,(tmTarget->tm_hour%12),tmTarget->tm_min,((tmTarget->tm_hour/12)>0?"p.m":"a.m"));
+	
+	if((tmTarget->tm_hour%12) == 0)
+		sprintf(result, "%04d/%02d/%02d %02d:%02d %s", tmTarget->tm_year+1900,tmTarget->tm_mon+1,tmTarget->tm_mday,((tmTarget->tm_hour%12)==0?12:(tmTarget->tm_hour%12)),tmTarget->tm_min,((tmTarget->tm_hour/12)==1?"p.m.":"a.m."));
+	else
+		sprintf(result, "%04d/%02d/%02d %02d:%02d %s", tmTarget->tm_year+1900,tmTarget->tm_mon+1,tmTarget->tm_mday,(tmTarget->tm_hour%12),tmTarget->tm_min,((tmTarget->tm_hour/12)>0?"p.m.":"a.m."));
 }
 
 //======================================================
@@ -354,9 +366,13 @@ void page_idle(uint8_t gun_index, uint8_t system_mode)
 			if((getCurrentPage() != SYSTEM_SCREEN_SLEEP))
 			{
 				setCurrentPage(SYSTEM_SCREEN_SLEEP);
+				setPressStartButtonAnimation(gun_index);
+				START_PRESS_LEVEL_STATIS = PRESS_START_LEVEL_0;
 			}
 			else
-			{}
+			{
+				setPressStartButtonAnimation(gun_index);
+			}
 		}
 		else
 		{
@@ -365,6 +381,7 @@ void page_idle(uint8_t gun_index, uint8_t system_mode)
 				setCurrentPage(SYSTEM_SCREEN_POWER_CONSUMPTION);
 				setDisplayValue(ICON_POWER_CONSUMPTION, APPEAR);
 				setPresentPowerConsumption(gun_index);
+				setCsuRootFsFwRev();
 			}
 			else
 			{
@@ -480,6 +497,38 @@ void page_charging(uint8_t gun_index, uint8_t system_mode)
 		setPresentChargedDuration(gun_index);
 		setPresentChargedgPower(gun_index);
 
+		if((ShmSysConfigAndInfo->SysInfo.OcppConnStatus == ON))
+		{
+			if(ShmSysConfigAndInfo->SysInfo.OcppRunningVer == OCPP_RUNNING_VERSION_16)
+			{
+				// Title appear
+				setSessionFeeTitle(ON);
+				setParkingFeeTitle(ON);
+				setFinalCostTitle(ON);
+			}
+			else
+			{
+				// DISPLAY BY OCPP 2.0.1
+			}
+		}
+		else
+		{
+			if(ShmSysConfigAndInfo->SysConfig.BillingData.isBilling == ON)
+			{
+				// Title appear
+				setSessionFeeTitle(ON);
+				setParkingFeeTitle(ON);
+				setFinalCostTitle(ON);
+			}
+			else
+			{
+				// Title disappear
+				setSessionFeeTitle(OFF);
+				setParkingFeeTitle(OFF);
+				setFinalCostTitle(OFF);
+			}
+		}
+
 		if((getDiffSecNow(startTime[gun_index][TMR_IDX_REFRESH_INFO]) >= TIME_REFRESH_INFO) || (strcmp((char*)ShmOCPP16Data->Cost.RunningCost[gun_index].description, runningCost) != 0))
 		{
 			setPresentChargedEnergy(gun_index, system_mode);
@@ -572,7 +621,11 @@ void page_complete(uint8_t gun_index, uint8_t system_mode)
 			setFinalCost(gun_index, SESSION_FEE);
 			setFinalCost(gun_index, OCCUPANCY_FEE);
 			setFinalCost(gun_index, ACCOUNT_BALANCE);
-			//setCurrencyAndUnitFromBackend(FINAL_COST, ACCOUNT_BALANCE, gun_index);
+
+			// Title appear
+			setSessionFeeTitle(ON);
+			setParkingFeeTitle(ON);
+			setFinalCostTitle(ON);
 		}
 		else
 		{
@@ -593,6 +646,11 @@ void page_complete(uint8_t gun_index, uint8_t system_mode)
 
 			setDisplayValue(ICON_COMPLETE_WALLET, DISAPPEAR);
 			setDisplayValue(TEXT_REMAINING_ACCOUNT_BALANCE, DISAPPEAR);
+
+			// Title appear
+			setSessionFeeTitle(ON);
+			setParkingFeeTitle(ON);
+			setFinalCostTitle(ON);
 		}
 		else
 		{
@@ -611,6 +669,11 @@ void page_complete(uint8_t gun_index, uint8_t system_mode)
 			// User account balance disappear
 			setDisplayValue(ICON_COMPLETE_WALLET, DISAPPEAR);
 			setDisplayValue(TEXT_REMAINING_ACCOUNT_BALANCE, DISAPPEAR);
+
+			// Title disappear
+			setSessionFeeTitle(OFF);
+			setParkingFeeTitle(OFF);
+			setFinalCostTitle(OFF);
 		}
 	}
 }
@@ -636,6 +699,11 @@ void page_terminating(uint8_t gun_index, uint8_t system_mode)
 				setRunningCost(gun_index, TOTAL_COST);
 				setRunningCost(gun_index, SESSION_FEE);
 				setRunningCost(gun_index, OCCUPANCY_FEE);
+
+				// Title appear
+				setSessionFeeTitle(ON);
+				setParkingFeeTitle(ON);
+				setFinalCostTitle(ON);
 			}
 			else
 			{
@@ -653,6 +721,11 @@ void page_terminating(uint8_t gun_index, uint8_t system_mode)
 				setPresentFinalCost(getPresentFinalCost(gun_index));
 				//setPresentSessionFee();
 				setPresentParkingFee();
+
+				// Title appear
+				setSessionFeeTitle(ON);
+				setParkingFeeTitle(ON);
+				setFinalCostTitle(ON);
 			}
 			else
 			{
@@ -671,6 +744,11 @@ void page_terminating(uint8_t gun_index, uint8_t system_mode)
 				// User account balance disappear
 				setDisplayValue(ICON_COMPLETE_WALLET, DISAPPEAR);
 				setDisplayValue(TEXT_REMAINING_ACCOUNT_BALANCE, DISAPPEAR);
+
+				// Title disappear
+				setSessionFeeTitle(OFF);
+				setParkingFeeTitle(OFF);
+				setFinalCostTitle(OFF);
 			}
 		}
 	}
@@ -1165,7 +1243,7 @@ void setPresentFinalCost(float cost)
 	memset(data, 0x00, ARRAY_SIZE(data));
 	memset(finalCost, 0x00, ARRAY_SIZE(finalCost));
 
-	sprintf((char *)finalCost, "%.2f", cost);
+	sprintf((char *)finalCost, "$ %.2f", cost);
 	string2ByteArray(finalCost, data);
 
 	// Total Cost
@@ -1186,7 +1264,7 @@ void setPresentSessionFee()
 	memset(data, 0x00, ARRAY_SIZE(data));
 	memset(sessionFee, 0x00, ARRAY_SIZE(sessionFee));
 
-	strcpy((char*)sessionFee, "-----");
+	strcpy((char*)sessionFee, "$ -----");
 	string2ByteArray(sessionFee, data);
 	lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_CHARGING_SESSION_FEE, data, ARRAY_SIZE(data));
 }
@@ -1202,7 +1280,7 @@ void setPresentParkingFee()
 	memset(data, 0x00, ARRAY_SIZE(data));
 	memset(parkingFee, 0x00, ARRAY_SIZE(parkingFee));
 
-	strcpy((char*)parkingFee, "-----");
+	strcpy((char*)parkingFee, "$ -----");
 	string2ByteArray(parkingFee, data);
 	lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_CHARGING_PARKING_FEE, data, ARRAY_SIZE(data));
 }
@@ -1361,54 +1439,6 @@ void setUserPrice(uint8_t type)
 	}
 }
 
-//=======================================
-// Setting [ DefaultPrice ] ( BACKEND )
-//=======================================
-void setDefaultPrice(uint8_t type)
-{
-	uint8_t length;
-	uint8_t output_data[32];
-	char input_data[32];
-	char tmp[256];
-	char *splitString[10];
-	const char *Symbol = ";";
-
-	memset(tmp, 0, ARRAY_SIZE(tmp));
-	memset(input_data, 0x00, ARRAY_SIZE(input_data));
-	memset(output_data, 0x00, ARRAY_SIZE(output_data));
-
-	switch(type)
-	{
-		case CONNECTION_FEE:
-			break;
-		case CURRENT_RATE:
-			if(strstr((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[DefaultPrice].ItemData, "Current Rate:") > 0)
-			{
-				// APPEAR PRICE ICON
-				setDisplayValue(ICON_PRICE, APPEAR);
-
-				// APPEAR PRICE TEXT
-				strcpy((char*)tmp,(char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[DefaultPrice].ItemData);
-				split((char**)splitString, tmp, Symbol);
-				memcpy(input_data, splitString[1], strlen(splitString[1]));
-				length = strlen(input_data);
-				trim_string(input_data,length);
-				memcpy(output_data ,input_data, strlen(input_data));
-				lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_PRICE, output_data, ARRAY_SIZE(output_data));
-			}
-			else
-			{
-				setDisplayValue(TEXT_PRICE, DISAPPEAR);
-				setDisplayValue(ICON_PRICE, DISAPPEAR);
-			}
-			break;
-		case OCCUPANCY_FEE:
-			break;
-		default:
-			break;
-	}
-}
-
 //=======================================
 // Setting [ FinalCost ] ( BACKEND )
 //=======================================
@@ -1437,7 +1467,7 @@ void setFinalCost(uint8_t gun_index, uint8_t type)
 			{
 				setDisplayValue(ICON_CHARGING_SESSION_FEE, APPEAR);
 
-				strcpy((char*)session_empty, "-----");
+				strcpy((char*)session_empty, "$ -----");
 				string2ByteArray(session_empty, output_data);
 				lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_CHARGING_SESSION_FEE, output_data, ARRAY_SIZE(output_data));
 			}
@@ -1454,9 +1484,9 @@ void setFinalCost(uint8_t gun_index, uint8_t type)
 					}
 
 					if(chargingCost> 0)
-						sprintf((char*)output_data, "%.2f", chargingCost);
+						sprintf((char*)output_data, "$ %.2f", chargingCost);
 					else
-						sprintf((char*)output_data, "-----");
+						sprintf((char*)output_data, "$ -----");
 
 					// APPEAR COST ICON
 					setDisplayValue(ICON_CHARGING_SESSION_FEE, APPEAR);
@@ -1471,7 +1501,7 @@ void setFinalCost(uint8_t gun_index, uint8_t type)
 			{
 				setDisplayValue(ICON_CHARGING_PARKING_FEE, APPEAR);
 
-				strcpy((char*)occupancy_empty, "-----");
+				strcpy((char*)occupancy_empty, "$ -----");
 				string2ByteArray(occupancy_empty, output_data);
 				lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_CHARGING_PARKING_FEE, output_data, ARRAY_SIZE(output_data));
 			}
@@ -1488,9 +1518,9 @@ void setFinalCost(uint8_t gun_index, uint8_t type)
 					}
 
 					if(parkingCost > 0)
-						sprintf((char*)output_data, "%.2f", parkingCost);
+						sprintf((char*)output_data, "$ %.2f", parkingCost);
 					else
-						sprintf((char*)output_data, "-----");
+						sprintf((char*)output_data, "$ -----");
 
 					setDisplayValue(ICON_CHARGING_PARKING_FEE, APPEAR);
 					lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_CHARGING_PARKING_FEE, output_data, ARRAY_SIZE(output_data));
@@ -1503,7 +1533,7 @@ void setFinalCost(uint8_t gun_index, uint8_t type)
 			{
 				setDisplayValue(ICON_CHARGING_TOTAL_COST, APPEAR);
 
-				strcpy((char*)cost_empty, "-----");
+				strcpy((char*)cost_empty, "$ -----");
 				string2ByteArray(cost_empty, output_data);
 				lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_CHARGING_TOTAL_COST, output_data, ARRAY_SIZE(output_data));
 			}
@@ -1526,9 +1556,9 @@ void setFinalCost(uint8_t gun_index, uint8_t type)
 					}
 
 					if((chargingCost + parkingCost) > 0)
-						sprintf((char*)output_data, "%.2f", (chargingCost + parkingCost));
+						sprintf((char*)output_data, "$ %.2f", (chargingCost + parkingCost));
 					else
-						sprintf((char*)output_data, "-----");
+						sprintf((char*)output_data, "$ -----");
 
 					// APPEAR COST ICON
 					setDisplayValue(ICON_CHARGING_TOTAL_COST, APPEAR);
@@ -1542,7 +1572,7 @@ void setFinalCost(uint8_t gun_index, uint8_t type)
 			{
 				setDisplayValue(ICON_COMPLETE_WALLET, APPEAR);
 
-				strcpy((char*)balance_empty, "-----");
+				strcpy((char*)balance_empty, "$ -----");
 				string2ByteArray(balance_empty, output_data);
 
 				lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_REMAINING_ACCOUNT_BALANCE, output_data, ARRAY_SIZE(output_data));
@@ -1560,9 +1590,9 @@ void setFinalCost(uint8_t gun_index, uint8_t type)
 					}
 
 					if(accountBalance > 0)
-						sprintf((char*)output_data, "%.2f", accountBalance);
+						sprintf((char*)output_data, "$ %.2f", accountBalance);
 					else
-						sprintf((char*)output_data, "-----");
+						sprintf((char*)output_data, "$ -----");
 
 
 					// APPEAR COST ICON
@@ -1602,7 +1632,7 @@ void setRunningCost(uint8_t gun_index, uint8_t type)
 			{
 				setDisplayValue(ICON_CHARGING_SESSION_FEE, APPEAR);
 
-				strcpy((char*)session_empty, "-----");
+				strcpy((char*)session_empty, "$ -----");
 				string2ByteArray(session_empty, output_data);
 				lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_CHARGING_SESSION_FEE, output_data, ARRAY_SIZE(output_data));
 			}
@@ -1619,9 +1649,9 @@ void setRunningCost(uint8_t gun_index, uint8_t type)
 					}
 
 					if(chargingCost> 0)
-						sprintf((char*)output_data, "%.2f", chargingCost);
+						sprintf((char*)output_data, "$ %.2f", chargingCost);
 					else
-						sprintf((char*)output_data, "-----");
+						sprintf((char*)output_data, "$ -----");
 
 					// APPEAR COST ICON
 					setDisplayValue(ICON_CHARGING_SESSION_FEE, APPEAR);
@@ -1636,7 +1666,7 @@ void setRunningCost(uint8_t gun_index, uint8_t type)
 			{
 				setDisplayValue(ICON_CHARGING_PARKING_FEE, APPEAR);
 
-				strcpy((char*)occupancy_empty, "-----");
+				strcpy((char*)occupancy_empty, "$ -----");
 				string2ByteArray(occupancy_empty, output_data);
 				lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_CHARGING_PARKING_FEE, output_data, ARRAY_SIZE(output_data));
 			}
@@ -1653,9 +1683,9 @@ void setRunningCost(uint8_t gun_index, uint8_t type)
 					}
 
 					if(parkingCost > 0)
-						sprintf((char*)output_data, "%.2f", parkingCost);
+						sprintf((char*)output_data, "$ %.2f", parkingCost);
 					else
-						sprintf((char*)output_data, "-----");
+						sprintf((char*)output_data, "$ -----");
 
 					setDisplayValue(ICON_CHARGING_PARKING_FEE, APPEAR);
 					lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_CHARGING_PARKING_FEE, output_data, ARRAY_SIZE(output_data));
@@ -1669,7 +1699,7 @@ void setRunningCost(uint8_t gun_index, uint8_t type)
 			{
 				setDisplayValue(ICON_CHARGING_TOTAL_COST, APPEAR);
 
-				strcpy((char*)cost_empty, "-----");
+				strcpy((char*)cost_empty, "$ -----");
 				string2ByteArray(cost_empty, output_data);
 				lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_CHARGING_TOTAL_COST, output_data, ARRAY_SIZE(output_data));
 			}
@@ -1692,9 +1722,9 @@ void setRunningCost(uint8_t gun_index, uint8_t type)
 					}
 
 					if((chargingCost + parkingCost) > 0)
-						sprintf((char*)output_data, "%.2f", (chargingCost + parkingCost));
+						sprintf((char*)output_data, "$ %.2f", (chargingCost + parkingCost));
 					else
-						sprintf((char*)output_data, "-----");
+						sprintf((char*)output_data, "$ -----");
 
 					// APPEAR COST ICON
 					setDisplayValue(ICON_CHARGING_TOTAL_COST, APPEAR);
@@ -1711,120 +1741,6 @@ void setRunningCost(uint8_t gun_index, uint8_t type)
 	}
 }
 
-//=======================================
-// Setting [ Currency ] ( BACKEND )
-//=======================================
-void setCurrencyAndUnitFromBackend(uint8_t type_price ,uint8_t type_currency_unit,uint8_t gun_index)
-{
-	uint8_t length;
-	uint8_t output_data[32];
-	char input_data[32];
-	char tmp[256];
-	char *splitString[10];
-	const char *Symbol = ";";
-
-	memset(tmp, 0, ARRAY_SIZE(tmp));
-	memset(input_data, 0x00, ARRAY_SIZE(input_data));
-	memset(output_data, 0x00, ARRAY_SIZE(output_data));
-
-	if(type_price == DEFAULE_PRICE)
-	{
-		switch(type_currency_unit)
-		{
-			case CONNECTION_FEE:
-				break;
-			case CURRENT_RATE:
-				if(strstr((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[DefaultPrice].ItemData, "Current Rate:") > 0)
-				{
-					strcpy((char*)tmp,(char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[DefaultPrice].ItemData);
-					split((char**)splitString, tmp, Symbol);
-					memcpy(input_data, splitString[1], strlen(splitString[1]));
-					length = strlen(input_data);
-					memcpy(output_data , input_data+(length-7), 7);
-					lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_CURRENCY_UNIT, output_data, ARRAY_SIZE(output_data));
-				}
-				else
-				{
-					setDisplayValue(TEXT_CURRENCY_UNIT, DISAPPEAR);
-				}
-				break;
-			case OCCUPANCY_FEE:
-				break;
-			default:
-				break;
-		}
-	}
-	else if(type_price == SET_USER_PRICE)
-	{
-		switch(type_currency_unit)
-		{
-			case CONNECTION_FEE:
-				break;
-			case CURRENT_RATE:
-				if(strstr((char *)ShmOCPP16Data->Cost.SetUserPrice.price, "Current Rate:") > 0)
-				{
-					strcpy((char*)tmp,(char *)ShmOCPP16Data->Cost.SetUserPrice.price);
-					split((char**)splitString, tmp, Symbol);
-					memcpy(input_data, splitString[1], strlen(splitString[1]));
-					length = strlen(input_data);
-					memcpy(output_data , input_data+(length-7), 7);
-					lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_CURRENCY_UNIT, output_data, ARRAY_SIZE(output_data));
-				}
-				else
-				{
-					setDisplayValue(TEXT_CURRENCY_UNIT, DISAPPEAR);
-				}
-				break;
-			case OCCUPANCY_FEE:
-				break;
-			case ACCOUNT_BALANCE:
-				break;
-			default:
-				break;
-		}
-	}
-	else if(type_price == FINAL_COST)
-	{
-		switch(type_currency_unit)
-		{
-			case CONNECTION_FEE:
-				break;
-			case SESSION_FEE:
-				break;
-			case OCCUPANCY_FEE:
-				break;
-			case TOTAL_COST:
-				break;
-			case ACCOUNT_BALANCE:
-				if(ShmOCPP16Data->StopTransaction[gun_index].TransactionId != ShmOCPP16Data->Cost.FinalCost[gun_index].txId)
-				{
-					setDisplayValue(TEXT_USER_CURRENCY, DISAPPEAR);
-				}
-				else
-				{
-					if((strstr((char*)ShmOCPP16Data->Cost.FinalCost[gun_index].description, "Account Balance:") > 0))
-					{
-						strcpy((char*)tmp,(char*)ShmOCPP16Data->Cost.FinalCost[gun_index].description);
-						split((char**)splitString, tmp, Symbol);
-						memcpy(input_data, splitString[4], strlen(splitString[4]));
-						length = strlen(input_data);
-						memcpy(output_data , input_data+(length-3), 3);
-						lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_USER_CURRENCY, output_data, ARRAY_SIZE(output_data));
-					}
-					else
-					{
-						setDisplayValue(TEXT_USER_CURRENCY, DISAPPEAR);
-					}
-				}
-				break;
-			default:
-				break;
-		}
-	}
-	else
-	{}
-}
-
 //=======================================
 // Setting QRCODE icon status
 //=======================================
@@ -1953,7 +1869,7 @@ void setWarningStatus(uint8_t gun_index)
 
 		setAlarmCodeAndIcon();
 	}
-	else if(ShmSysConfigAndInfo->SysWarningInfo.WarningCount > 4 && (getDiffSecNow(startTime[gun_index][TMR_IDX_ALARM]) > (TIME_ANIMATION_ALARM)))
+	else if((ShmSysConfigAndInfo->SysWarningInfo.WarningCount > 4) && (getDiffSecNow(startTime[gun_index][TMR_IDX_ALARM]) > (TIME_ANIMATION_ALARM)))
 	{
 		refreshStartTimer(&startTime[gun_index][TMR_IDX_ALARM]);
 		if(ShmSysConfigAndInfo->SysWarningInfo.PageIndex == 0)
@@ -2139,6 +2055,24 @@ void setPlugAndChargeAnimation(uint8_t gun_index)
 	}
 }
 
+//=======================================
+// Setting [ Press Start ] Animation
+//=======================================
+void setPressStartButtonAnimation(uint8_t gun_index)
+{
+	if((START_PRESS_LEVEL_STATIS == PRESS_START_LEVEL_0) && ((getDiffSecNow(startTime[gun_index][TMR_IDX_STARTBUTTON]))> (TIME_ANIMATION_START_PRESS)))
+	{
+		setDisplayValue(ICON_PRESS_START_BUTTON, PRESS_START_1);
+		START_PRESS_LEVEL_STATIS = PRESS_START_LEVEL_1;
+	}
+	else if((START_PRESS_LEVEL_STATIS == PRESS_START_LEVEL_1) && ((getDiffSecNow(startTime[gun_index][TMR_IDX_STARTBUTTON]))> (TIME_ANIMATION_START_PRESS*2)))
+	{
+		setDisplayValue(ICON_PRESS_START_BUTTON, PRESS_START_2);
+		START_PRESS_LEVEL_STATIS = PRESS_START_LEVEL_0;
+		refreshStartTimer(&startTime[gun_index][TMR_IDX_STARTBUTTON]);
+	}
+}
+
 //=======================================
 // Setting Connection Timeout
 //=======================================
@@ -2226,7 +2160,7 @@ void setPresentChargedEnergy(uint8_t gun_index, uint8_t system_mode)
 		case SYS_MODE_TERMINATING:
 		case SYS_MODE_COMPLETE:
 		default:
-			sprintf((char *)energy, "%.3f0 kWh", ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].PresentChargedEnergy);
+			sprintf((char *)energy, "%.4f kWh", ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].PresentChargedEnergy);
 			string2ByteArray(energy, data);
 			lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_CHARGING_ENERGY, data, ARRAY_SIZE(data));
 			break;
@@ -2324,7 +2258,13 @@ void setDefaultValue(uint8_t gun_index, uint8_t system_mode)
 		case SYS_MODE_BOOTING:
 			break;
 		case SYS_MODE_IDLE:
+
 			setTextToEmpty(gun_index);
+			setTimeTitle(ON);
+			setEnergyTitle(ON);
+			setSessionFeeTitle(ON);
+			setParkingFeeTitle(ON);
+			setFinalCostTitle(ON);
 			if(ShmCharger->gun_info[gun_index].chargingMode == CHARGING_MODE_HLC)
 			{
 				setDisplayValue(ICON_PRECHARGING_ANIMATION, CONNECTION_FLASHING_1);
@@ -2337,10 +2277,24 @@ void setDefaultValue(uint8_t gun_index, uint8_t system_mode)
 				GUN_PLUGING_LEVEL_STATUS = GUN_PLUGING_LEVEL_0;
 				refreshStartTimer(&startTime[gun_index][TMR_IDX_PLUGIN]);
 			}
+
 			break;
 		case SYS_MODE_AUTHORIZING:
+
+			setTimeTitle(ON);
+			setEnergyTitle(ON);
+			setSessionFeeTitle(ON);
+			setParkingFeeTitle(ON);
+			setFinalCostTitle(ON);
+
 			break;
 		case SYS_MODE_PREPARING:
+
+			setTimeTitle(ON);
+			setEnergyTitle(ON);
+			setSessionFeeTitle(ON);
+			setParkingFeeTitle(ON);
+			setFinalCostTitle(ON);
 			if(ShmCharger->gun_info[gun_index].chargingMode == CHARGING_MODE_HLC)
 			{
 				setDisplayValue(ICON_PRECHARGING_ANIMATION, CONNECTION_FLASHING_1);
@@ -2355,6 +2309,7 @@ void setDefaultValue(uint8_t gun_index, uint8_t system_mode)
 				refreshStartTimer(&startTime[gun_index][TMR_IDX_PLUGIN]);
 				refreshStartTimer(&startTime[gun_index][TMR_IDX_REFRESH_INFO]);
 			}
+
 			break;
 		case SYS_MODE_CHARGING:
 			setDisplayValue(ICON_CHARGING_ANIMATION, CONNECTION_FLASHING_1);
@@ -2438,6 +2393,217 @@ void setMarqueeControl(uint16_t address, uint8_t gun_index, uint8_t type)
 	}
 }
 
+//=======================================
+// Checking model name for setting title
+//=======================================
+int isAmericaType()
+{
+	int result = NO;
+	
+	if(ShmSysConfigAndInfo->SysConfig.ModelName[3] == 'U')
+		result = YES;
+	else
+		result = NO;
+
+	return result;
+}
+
+//=======================================
+// Setting time title
+//=======================================
+void setTimeTitle(uint8_t isOn)
+{
+	uint8_t data[32];
+	uint8_t text[32];
+
+	memset(data, 0x00, ARRAY_SIZE(data));
+	memset(text, 0x00, ARRAY_SIZE(text));
+	
+	if(isAmericaType() == YES)
+	{
+		if(isOn == ON)
+		{
+			strcpy((char*)text, "(hrs: mins: secs)");
+			string2ByteArray(text, data);
+		}
+		else
+		{
+			strcpy((char*)text, "                ");
+			string2ByteArray(text, data);
+		}
+		
+		lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_CHARGING_TITLE_TIME, data, ARRAY_SIZE(data));
+		lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_PREPARING_TITLE_TIME, data, ARRAY_SIZE(data));
+		lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_PRECHARGING_TITLE_TIME, data, ARRAY_SIZE(data));
+	}
+	else
+	{
+		setDisplayValue(TEXT_CHARGING_TITLE_TIME, DISAPPEAR);
+		setDisplayValue(TEXT_PREPARING_TITLE_TIME, DISAPPEAR);
+		setDisplayValue(TEXT_PRECHARGING_TITLE_TIME, DISAPPEAR);
+	}
+}
+
+//=======================================
+// Setting Energy title
+//=======================================
+void setEnergyTitle(uint8_t isOn)
+{
+	uint8_t data[32];
+	uint8_t text[32];
+
+	memset(data, 0x00, ARRAY_SIZE(data));
+	memset(text, 0x00, ARRAY_SIZE(text));
+	
+	if(isAmericaType() == YES)
+	{
+		if(isOn == ON)
+		{
+			strcpy((char*)text, "(Energy)");
+			string2ByteArray(text, data);
+		}
+		else
+		{
+			strcpy((char*)text, "                ");
+			string2ByteArray(text, data);
+		}
+		
+		lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_CHARGING_TITLE_ENERGY, data, ARRAY_SIZE(data));
+		lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_PREPARING_TITLE_ENERGY, data, ARRAY_SIZE(data));
+		lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_PRECHARGING_TITLE_ENERGY, data, ARRAY_SIZE(data));
+	}
+	else
+	{
+		setDisplayValue(TEXT_CHARGING_TITLE_ENERGY, DISAPPEAR);
+		setDisplayValue(TEXT_PREPARING_TITLE_ENERGY, DISAPPEAR);
+		setDisplayValue(TEXT_PRECHARGING_TITLE_ENERGY, DISAPPEAR);
+	}
+}
+
+//=======================================
+// Setting session fee title
+//=======================================
+void setSessionFeeTitle(uint8_t isOn)
+{
+	uint8_t data[32];
+	uint8_t text[32];
+
+	memset(data, 0x00, ARRAY_SIZE(data));
+	memset(text, 0x00, ARRAY_SIZE(text));
+	
+	if(isAmericaType() == YES)
+	{
+		if(isOn == ON)
+		{
+			strcpy((char*)text, "(Energy Cost)");
+			string2ByteArray(text, data);
+		}
+		else
+		{
+			strcpy((char*)text, "                ");
+			string2ByteArray(text, data);
+		}
+		
+		lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_CHARGING_TITLE_SESSION_FEE, data, ARRAY_SIZE(data));
+		lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_PREPARING_TITLE_SESSION_FEE, data, ARRAY_SIZE(data));
+		lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_PRECHARGING_TITLE_SESSION_FEE, data, ARRAY_SIZE(data));
+	}
+	else
+	{
+		setDisplayValue(TEXT_CHARGING_TITLE_SESSION_FEE, DISAPPEAR);
+		setDisplayValue(TEXT_PREPARING_TITLE_SESSION_FEE, DISAPPEAR);
+		setDisplayValue(TEXT_PRECHARGING_TITLE_SESSION_FEE, DISAPPEAR);
+	}
+}
+
+//=======================================
+// Setting parking fee title
+//=======================================
+void setParkingFeeTitle(uint8_t isOn)
+{
+	uint8_t data[32];
+	uint8_t text[32];
+
+	memset(data, 0x00, ARRAY_SIZE(data));
+	memset(text, 0x00, ARRAY_SIZE(text));
+	
+	if(isAmericaType() == YES)
+	{
+		if(isOn == ON)
+		{
+			strcpy((char*)text, "(Parking Fee)");
+			string2ByteArray(text, data);
+		}
+		else
+		{
+			strcpy((char*)text, "                ");
+			string2ByteArray(text, data);
+		}
+		
+		lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_CHARGING_TITLE_PARKING_FEE, data, ARRAY_SIZE(data));
+		lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_PREPARING_TITLE_PARKING_FEE, data, ARRAY_SIZE(data));
+		lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_PRECHARGING_TITLE_PARKING_FEE, data, ARRAY_SIZE(data));
+	}
+	else
+	{
+		setDisplayValue(TEXT_CHARGING_TITLE_PARKING_FEE, DISAPPEAR);
+		setDisplayValue(TEXT_PREPARING_TITLE_PARKING_FEE, DISAPPEAR);
+		setDisplayValue(TEXT_PRECHARGING_TITLE_PARKING_FEE, DISAPPEAR);
+	}
+}
+
+//=======================================
+// Setting final cost title
+//=======================================
+void setFinalCostTitle(uint8_t isOn)
+{
+	uint8_t data[32];
+	uint8_t text[32];
+
+	memset(data, 0x00, ARRAY_SIZE(data));
+	memset(text, 0x00, ARRAY_SIZE(text));
+	
+	if(isAmericaType() == YES)
+	{
+		if(isOn == ON)
+		{
+			strcpy((char*)text, "(Total Cost)");
+			string2ByteArray(text, data);
+		}
+		else
+		{
+			strcpy((char*)text, "                ");
+			string2ByteArray(text, data);
+		}
+		
+		lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_CHARGING_TITLE_FINAL_COST, data, ARRAY_SIZE(data));
+		lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_PREPARING_TITLE_FINAL_COST, data, ARRAY_SIZE(data));
+		lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_PRECHARGING_TITLE_FINAL_COST, data, ARRAY_SIZE(data));
+	}
+	else
+	{
+		setDisplayValue(TEXT_CHARGING_TITLE_FINAL_COST, DISAPPEAR);
+		setDisplayValue(TEXT_PREPARING_TITLE_FINAL_COST, DISAPPEAR);
+		setDisplayValue(TEXT_PRECHARGING_TITLE_FINAL_COST, DISAPPEAR);
+	}
+}
+
+//=======================================
+// Setting CSU FIRMWARE VERSION
+//=======================================
+void setCsuRootFsFwRev()
+{
+	uint8_t data[64];
+	uint8_t text[64];
+
+	memset(data, 0x00, ARRAY_SIZE(data));
+	memset(text, 0x00, ARRAY_SIZE(text));
+
+	sprintf((char *)text, "%s%s", " CSU Software Version: ",(char*)ShmSysConfigAndInfo->SysInfo.CsuRootFsFwRev);
+	string2ByteArray(text, data);
+	lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_CSU_ROOT_FS_FW_REV, data, ARRAY_SIZE(data));
+}
+
 //=======================================
 // Initial all share memory
 //=======================================

+ 3 - 2
EVSE/Projects/AX80/Apps/LCM/lcmComm_dgus.c

@@ -2,9 +2,9 @@
  * lcmComm_dgus.c
  *
  * Created on : 2020-10-20
- * Update on : 2021-12-14
+ * Update on : 2022-03-01
  * Author : Folus Wen, Eason Yang
- * Version : V0.24
+ * Version : V0.27
  *
  */
 
@@ -74,6 +74,7 @@ int transceiverDgus(int32_t fd, uint8_t *tx, uint16_t tx_len, uint8_t *rx, uint1
 		}
 		else if(tx[3] == CMD_REG_READ_DATA)
 		{
+			usleep(100);
 			len = read(fd, rx, rx_len);
 			if(len > 0)
 			{

+ 42 - 17
EVSE/Projects/AX80/Apps/LCM/lcmComm_dgus.h

@@ -2,7 +2,7 @@
  * lcmComm_dwin.h
  *
  * Created on : 2020-10-20
- * Update on : 2022-01-17
+ * Update on : 2022-03-01
  * Author : Folus Wen, Eason Yang
  * Version : V0.27
  *
@@ -39,9 +39,9 @@
 #include	<ctype.h>
 #include 	<ifaddrs.h>
 
-#define DEBUG_INFO(format, args...) StoreLogMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_WARN(format, args...) StoreLogMsg("[%s:%d][%s][Warn] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
-#define DEBUG_ERROR(format, args...) StoreLogMsg("[%s:%d][%s][Error] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_INFO(format, args...) StoreLogMsg("[%s:%d][%s][Info] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_WARN(format, args...) StoreLogMsg("[%s:%d][%s][Warn] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
+#define DEBUG_ERROR(format, args...) StoreLogMsg("[%s:%d][%s][Error] "format, (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), __LINE__, __FUNCTION__, ##args)
 
 #define ARRAY_SIZE(A)			(sizeof(A) / sizeof(A[0]))
 #define PASS					1
@@ -128,6 +128,8 @@
 #define PLUGIN_ARROW_2							0x02
 #define CONNECTION_FLASHING_1					0x01
 #define CONNECTION_FLASHING_2					0x02
+#define PRESS_START_1							0x01
+#define PRESS_START_2							0x02
 
 //=======================================
 // Icon variable address start from 1000
@@ -149,24 +151,24 @@
 #define ICON_PREPARING_TOTAL_COST			0x100E
 #define ICON_PREPARING_POWER				0x100F
 #define ICON_PREPARING_ANIMATION			0x1010
-#define ICON_PREPARING_SESSION_FEE			0x1011 // NEW
-#define ICON_PREPARING_PARKING_FEE			0x1012 // NEW
+#define ICON_PREPARING_SESSION_FEE			0x1011
+#define ICON_PREPARING_PARKING_FEE			0x1012
 #define ICON_PRECHARGING_TIMER				0x1013
 #define ICON_PRECHARGING_ENERGY				0x1014
 #define ICON_PRECHARGING_TOTAL_COST			0x1015
 #define ICON_PRECHARGING_POWER				0x1016
 #define ICON_PRECHARGING_ANIMATION			0x1017
 #define ICON_PRECHARGING_FUNNEL				0x1018
-#define ICON_PRECHARGING_SESSION_FEE		0x1019 // NEW
-#define ICON_PRECHARGING_PARKING_FEE		0x101A // NEW
+#define ICON_PRECHARGING_SESSION_FEE		0x1019
+#define ICON_PRECHARGING_PARKING_FEE		0x101A
 #define ICON_CHARGING_TIMER					0x101B
 #define ICON_CHARGING_ENERGY				0x101C
 #define ICON_CHARGING_TOTAL_COST			0x101D
 #define ICON_CHARGING_POWER					0x101E
 #define ICON_CHARGING_ANIMATION				0x101F
 #define ICON_CHARGING_LIGHTNING				0x1020
-#define ICON_CHARGING_SESSION_FEE			0x1021	// NEW
-#define ICON_CHARGING_PARKING_FEE			0x1022	// NEW
+#define ICON_CHARGING_SESSION_FEE			0x1021
+#define ICON_CHARGING_PARKING_FEE			0x1022
 #define ICON_COMPLETE_TIMER					0x1023
 #define ICON_COMPLETE_ENERGY				0x1024
 #define ICON_COMPLETE_WALLET				0x1025
@@ -193,6 +195,7 @@
 #define Reserve_19							0x103A
 #define Reserve_20							0x103B
 #define ICON_PLUG_AND_CHARGE_ARROW			0x103C
+#define ICON_PRESS_START_BUTTON				0x103D
 
 #define ICON_LOGO							0x1500
 #define ICON_LOGO_CHARGING					0x1501
@@ -223,18 +226,34 @@
 #define TEXT_CHARGING_ENERGY				0x2118	// size 16
 #define TEXT_CHARGING_TOTAL_COST			0x2128	// size 16
 #define TEXT_CHARGING_POWER					0x2138	// size 16
-#define TEXT_CHARGING_SESSION_FEE			0x2148	// size 16	// NEW
-#define TEXT_CHARGING_PARKING_FEE			0x2158	// size 16	// NEW
+#define TEXT_CHARGING_SESSION_FEE			0x2148	// size 16
+#define TEXT_CHARGING_PARKING_FEE			0x2158	// size 16
 #define TEXT_REMAINING_ACCOUNT_BALANCE		0x2168	// size 16
 #define TEXT_USER_ACCOUNT_BALANCE			0x2178	// size 16
 #define TEXT_USER_CURRENCY					0x2188	// size 16
 #define Reserve8							0x2198	// size 16
-#define Reserve9							0x21A8	// siez 16
+#define Reserve9							0x21A8	// size 16
 #define TEXT_POWER_CONSUMPTION				0x21B8	// size 32
-#define TEXT_PREPARING_SESSION_FEE			0x21D8	// size 16 // NEW
-#define TEXT_PREPARING_PARKING_FEE			0x21E8	// size 16 // NEW
-#define TEXT_PRECHARGING_SESSION_FEE		0x21F8	// size 16 // NEW
-#define TEXT_PRECHARGING_PARKING_FEE		0x2208	// size 16 // NEW
+#define TEXT_PREPARING_SESSION_FEE			0x21D8	// size 16
+#define TEXT_PREPARING_PARKING_FEE			0x21E8	// size 16
+#define TEXT_PRECHARGING_SESSION_FEE		0x21F8	// size 16
+#define TEXT_PRECHARGING_PARKING_FEE		0x2208	// size 16
+#define TEXT_CHARGING_TITLE_TIME			0x2218	// size 32
+#define TEXT_CHARGING_TITLE_ENERGY			0x2238	// size 32
+#define TEXT_CHARGING_TITLE_SESSION_FEE		0x2258	// size 32
+#define TEXT_CHARGING_TITLE_PARKING_FEE		0x2278	// size 32
+#define TEXT_CHARGING_TITLE_FINAL_COST		0x2298	// size 32
+#define TEXT_PREPARING_TITLE_TIME			0x22B8	// size 32
+#define	TEXT_PREPARING_TITLE_ENERGY			0x22D8	// size 32
+#define	TEXT_PREPARING_TITLE_SESSION_FEE	0x22F8	// size 32
+#define	TEXT_PREPARING_TITLE_PARKING_FEE	0X2318	// size 32
+#define	TEXT_PREPARING_TITLE_FINAL_COST		0x2338	// size 32
+#define TEXT_PRECHARGING_TITLE_TIME			0x2358	// size 32
+#define TEXT_PRECHARGING_TITLE_ENERGY		0x2378	// size 32
+#define TEXT_PRECHARGING_TITLE_SESSION_FEE	0x2398	// size 32
+#define TEXT_PRECHARGING_TITLE_PARKING_FEE	0x23B8	// size 32
+#define TEXT_PRECHARGING_TITLE_FINAL_COST	0x23D8	// size 32
+#define TEXT_CSU_ROOT_FS_FW_REV				0x23F8	// size 64
 
 #define TEXT_RTC							0X2500	// size 32
 
@@ -278,6 +297,12 @@
 #define GUN_PLUGING_LEVEL_0					0x00
 #define GUN_PLUGING_LEVEL_1					0x01
 
+//=======================================
+// Press start button level
+//=======================================
+#define PRESS_START_LEVEL_0					0x00
+#define PRESS_START_LEVEL_1					0x01
+
 //=======================================
 // RFID authorization constant
 //=======================================

+ 3 - 7
EVSE/Projects/AX80/Apps/main.c

@@ -36,6 +36,7 @@
 #define TIMEOUT_SPEC_CEHCK_POWER_CONSUMPTION	15
 #define TIMEOUT_SPEC_UPGRADE					300
 #define TIMEOUT_SPEC_RESET_WIFI_MODULE			300
+#define TIMEOUT_SPEC_STOPSUM_DISP				15
 
 //==========================
 // GPIO constant define
@@ -4468,8 +4469,6 @@ void checkChargingProfileLimit(uint8_t gun_index)
 
 void checkStopReason(uint8_t gun_index)
 {
-	sleep(2);
-	
 	if(ShmSysConfigAndInfo->SysInfo.OcppRunningVer == OCPP_RUNNING_VERSION_16)
 	{
 		memset(ShmOCPP16Data->StopTransaction[gun_index].IdTag, 0x00, ARRAY_SIZE(ShmOCPP16Data->StopTransaction[gun_index].IdTag));
@@ -6004,7 +6003,6 @@ int main(void)
 
 							if(ShmCharger->gun_info[gun_index].chargingMode == CHARGING_MODE_BS)
 							{
-								sleep(1);
 								checkStopReason(gun_index);
 								setChargerMode(gun_index, SYS_MODE_COMPLETE);
 							}
@@ -6075,7 +6073,6 @@ int main(void)
 							DEBUG_INFO("Set PWM duty 100%% go to SYS_MODE_TERMINATING.\n");
 
 							ShmCharger->gun_info[gun_index].isCCSWaitChangeDuty = OFF;
-							sleep(1);
 							checkStopReason(gun_index);
 							setChargerMode(gun_index, SYS_MODE_COMPLETE);
 						}
@@ -6085,13 +6082,12 @@ int main(void)
 						if(isModeChange(gun_index))
 						{
 							setLedMotion(gun_index, LED_ACTION_STOP);
-							sleep(6);
 							setRelay(gun_index, OFF);
 							setRequest(gun_index, OFF);
-							sleep(13);
+							refreshStartTimer(&startTime[0][TMR_IDX_DISP_STOPSUM]);
 						}
 
-						if(((ShmCharger->gun_info[gun_index].chargingMode != CHARGING_MODE_SOCKETE) && (ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].PilotState == CP_STATE_A)) ||
+						if(((ShmCharger->gun_info[gun_index].chargingMode != CHARGING_MODE_SOCKETE) && (ShmSysConfigAndInfo->SysInfo.AcChargingData[gun_index].PilotState == CP_STATE_A) && (getDiffSecNow(startTime[0][TMR_IDX_DISP_STOPSUM]) >= TIMEOUT_SPEC_STOPSUM_DISP)) ||
 						   ((ShmCharger->gun_info[gun_index].chargingMode == CHARGING_MODE_SOCKETE) && (!ShmCharger->gun_info[gun_index].primaryMcuState.socket_e.isSocketEPinOn)) ||
 						   ocpp_get_reset_req())
 						{

+ 1 - 2
EVSE/Projects/AX80/Apps/main.h

@@ -235,7 +235,7 @@ enum TIMER_IDX
 	TMR_IDX_LCM_POWER_CONSUMPTION,
 	TMR_IDX_UPGRADE,
 	TMR_IDX_RESET_WIFI,
-	TMR_IDX_17,
+	TMR_IDX_DISP_STOPSUM,
 	TMR_IDX_18,
 	TMR_IDX_19,
 	TMR_IDX_GUN_DETECT,
@@ -773,7 +773,6 @@ typedef struct GUN_INFO
 	uint8_t											resultAuthorization;
 	MeterIcCorrection								meterIcCorrectionStatus;
 
-
 	uint32_t										isAuthPassEnd:1;
 	uint32_t										rfidReq:1;
 	uint32_t										isGunPlugged:1;

+ 0 - 13
build_rootfs_copy.sh

@@ -1,13 +0,0 @@
-#!/bin/bash
-sudo rm /dev/ram*
-sleep 3
-rm /mnt/e/Temp/IMAGE/*
-#sudo make DD360Audi-rootfs
-#cp /opt/ti-processor-sdk-linux-am335x-evm-04.02.00.09/EVSE/Projects/DD360Audi/Images/* /mnt/e/Image/DD360Audi/
-#sudo make DD360-rootfs
-#cp /opt/ti-processor-sdk-linux-am335x-evm-04.02.00.09/EVSE/Projects/DD360/Images/* /mnt/e/Image/DD360/
-#sudo make DD360ComBox-rootfs
-#cp /opt/ti-processor-sdk-linux-am335x-evm-04.02.00.09/EVSE/Projects/DD360ComBox/Images/* /mnt/e/Image/DD360ComBox/
-sudo make DD360UCar-rootfs
-cp /opt/ti-processor-sdk-linux-am335x-evm-04.02.00.09/EVSE/Projects/DD360UCar/Images/* /mnt/d/Image/DD360UCar/
-