Browse Source

Merge branch 'master' into DD360Tcci

Simon Xue 2 years ago
parent
commit
b7d652e59e
34 changed files with 688 additions and 174 deletions
  1. 2 2
      EVSE/Modularization/Module_PowerSharing.c
  2. 10 2
      EVSE/Modularization/WebService.c
  3. 186 11
      EVSE/Modularization/ocppfiles/MessageHandler.c
  4. 3 0
      EVSE/Modularization/ocppfiles/MessageHandler.h
  5. 185 10
      EVSE/Modularization/ocppph/MessageHandler.c
  6. 3 0
      EVSE/Modularization/ocppph/MessageHandler.h
  7. 2 2
      EVSE/Projects/AX80/Apps/Module_ConfigTools.c
  8. 20 8
      EVSE/Projects/AX80/Apps/main.c
  9. 12 1
      EVSE/Projects/DD360UCar/Apps/CSU/RFID.c
  10. 1 1
      EVSE/Projects/DD360UCar/Apps/CSU/main.c
  11. 1 0
      EVSE/Projects/DD360UCar/Apps/Config.h
  12. 25 5
      EVSE/Projects/DD360UCar/Apps/ModuleEvComm/Module_EvRxComm.c
  13. 31 0
      EVSE/Projects/DD360UCar/Apps/ModuleInternalComm/RelayBoard.c
  14. 145 84
      EVSE/Projects/DD360UCar/Apps/ModuleLcmCtrl/Module_LcmControl.c
  15. 33 0
      EVSE/Projects/DD360UCar/Apps/ModuleLcmCtrl/Module_LcmControl.h
  16. BIN
      EVSE/Projects/DD360UCar/Images/ramdisk.gz
  17. BIN
      EVSE/Projects/DD360UCar/output/FactoryConfig
  18. BIN
      EVSE/Projects/DD360UCar/output/Module_ChkSysTask
  19. BIN
      EVSE/Projects/DD360UCar/output/Module_DoComm
  20. BIN
      EVSE/Projects/DD360UCar/output/Module_EvComm
  21. BIN
      EVSE/Projects/DD360UCar/output/Module_EventLogging
  22. BIN
      EVSE/Projects/DD360UCar/output/Module_InternalComm
  23. BIN
      EVSE/Projects/DD360UCar/output/Module_LcmControl
  24. BIN
      EVSE/Projects/DD360UCar/output/Module_PrimaryComm
  25. BIN
      EVSE/Projects/DD360UCar/output/Module_UpdateFW
  26. BIN
      EVSE/Projects/DD360UCar/output/ReadCmdline
  27. BIN
      EVSE/Projects/DD360UCar/output/main
  28. BIN
      EVSE/Projects/DD360UCar/output/simulation
  29. 8 4
      EVSE/Projects/define.h
  30. 14 2
      EVSE/rootfs/var/www/set_backend.php
  31. 3 0
      EVSE/rootfs/var/www/set_backend_action.php
  32. 4 4
      EVSE/rootfs/var/www/set_system.php
  33. 0 1
      board-support/linux-4.9.59+gitAUTOINC+a75d8e9305-ga75d8e9305/lib/.crc7.ko.cmd
  34. 0 37
      board-support/linux-4.9.59+gitAUTOINC+a75d8e9305-ga75d8e9305/lib/.gen_crc32table.cmd

+ 2 - 2
EVSE/Modularization/Module_PowerSharing.c

@@ -957,7 +957,7 @@ int tcpSocketClient(void)
 	struct Message		output;
 
 	bzero(&info,sizeof(info));
-	if(ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharging == 1)
+	if(ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharing == 1)
 	{
 		ghbn = gethostbyname((char*)"127.0.0.1");
 	}
@@ -1329,7 +1329,7 @@ int main(void)
 	}
 
 	// Enable server if rotary switch not slave mode
-	if(ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharging == 1)
+	if(ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharing == 1)
 	{
 		// TCP socket server start
 		if(fork() == 0)

+ 10 - 2
EVSE/Modularization/WebService.c

@@ -1063,6 +1063,7 @@ int main(int argc, char *argv[]) {
 			char *OcppSecurityPassword=NULL;
 			char *MaintainServerSecurityPassword=NULL;
 			int isEnableLocalPowerSharging=0;
+			char *PowerSharingServerIP=NULL;
 			char *OcppReceiptrURL=NULL;
 			char *MaintainServerURL=NULL;
 			/*for TTIA*/
@@ -1121,7 +1122,11 @@ int main(int argc, char *argv[]) {
 			}
 			if( json_object_object_get_ex(jobj, "isEnableLocalPowerSharging", &val_obj) ) {
 				isEnableLocalPowerSharging = json_object_get_int(val_obj);
-				ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharging = isEnableLocalPowerSharging;
+				ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharing = isEnableLocalPowerSharging;
+			}
+			if( json_object_object_get_ex(jobj, "PowerSharingServerIP", &val_obj) ) {
+				PowerSharingServerIP = (char*)json_object_get_string(val_obj);
+				strcpy((char *)&ShmSysConfigAndInfo->SysConfig.PowerSharingServerIP,PowerSharingServerIP);
 			}
 			if( json_object_object_get_ex(jobj, "OcppReceiptrURL", &val_obj) ) {
 				OcppReceiptrURL = (char*)json_object_get_string(val_obj);
@@ -1857,6 +1862,7 @@ int main(int argc, char *argv[]) {
 		struct json_object *MaintainServerSecurityProfile;
 		struct json_object *MaintainServerSecurityPassword;
 		struct json_object *isEnableLocalPowerSharging;
+		struct json_object *PowerSharingServerIP;
 		struct json_object *OcppReceiptrURL;
 		struct json_object *MaintainServerURL;
 		/*for TTIA*/
@@ -2541,7 +2547,8 @@ int main(int argc, char *argv[]) {
 		chargePointVendor = json_object_new_string((char *)&ShmSysConfigAndInfo->SysConfig.chargePointVendor);
 		MaintainServerURL = json_object_new_string((char *)&ShmSysConfigAndInfo->SysConfig.MaintainServerURL);
 		if(strcmp(IsDO, "AX") == 0 ){
-			isEnableLocalPowerSharging = json_object_new_int(ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharging);
+			isEnableLocalPowerSharging = json_object_new_int(ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharing);
+			PowerSharingServerIP = json_object_new_string((char *)&ShmSysConfigAndInfo->SysConfig.PowerSharingServerIP);
 		}
 		if(strcmp(IsDO, "AX") == 0|| strcmp(IsAcDc, "D") == 0){
 			OcppReceiptrURL = json_object_new_string((char *)&ShmSysConfigAndInfo->SysConfig.OcppReceiptrURL);
@@ -2971,6 +2978,7 @@ int main(int argc, char *argv[]) {
 		json_object_object_add(jobj4,"MaintainServerURL",MaintainServerURL);
 		if(strcmp(IsDO, "AX") == 0){
 			json_object_object_add(jobj4,"isEnableLocalPowerSharging",isEnableLocalPowerSharging);
+			json_object_object_add(jobj4,"PowerSharingServerIP",PowerSharingServerIP);
 		}
 		if(strcmp(IsDO, "AX") == 0 || strcmp(IsAcDc, "D") == 0){
 			json_object_object_add(jobj4,"OcppReceiptrURL",OcppReceiptrURL);

+ 186 - 11
EVSE/Modularization/ocppfiles/MessageHandler.c

@@ -8807,7 +8807,7 @@ int sendGetCompositeScheduleConfirmation(char *uuid, char *payload, int connecto
 		}
 		else
 		{
-			sprintf(message,"[%d,\"%s\",{\"status\":\"%s\",\"connectorId\":%d,\"scheduleStart\":\"%s\",\"chargingSchedule\":{\"duration\":%d,\"startSchedule\":\"%s\",\"chargingRateUnit\":\"%s\",\"chargingSchedulePeriod\":[{\"startPeriod\":0,\"limit\":%d,\"numberPhases\":3}]}}]"
+			sprintf(message,"[%d,\"%s\",{\"status\":\"%s\",\"connectorId\":%d,\"scheduleStart\":\"%s\",\"chargingSchedule\":{\"duration\":%d,\"startSchedule\":\"%s\",\"chargingRateUnit\":\"%s\",\"chargingSchedulePeriod\":[{\"startPeriod\":0,\"limit\":%d}]}}]"
 										,MESSAGE_TYPE_CALLRESULT
 										,uuid
 										,payload
@@ -8816,7 +8816,7 @@ int sendGetCompositeScheduleConfirmation(char *uuid, char *payload, int connecto
 										,ShmOCPP16Data->GetCompositeSchedule[CompositeScheduleIndex].ResponseChargingSchedule.Duration
 										,ShmOCPP16Data->GetCompositeSchedule[CompositeScheduleIndex].ResponseChargingSchedule.StartSchedule
 										,ShmOCPP16Data->GetCompositeSchedule[CompositeScheduleIndex].ResponseChargingSchedule.ChargingRateUnit
-										,(ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent==0?ShmSysConfigAndInfo->SysConfig.RatingCurrent:ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent));
+										,ShmOCPP16Data->GetCompositeSchedule[CompositeScheduleIndex].ResponseChargingSchedule.ChargingRateUnit[0]=='W'?modelnameInfo.ratedPower:(ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent==0?ShmSysConfigAndInfo->SysConfig.RatingCurrent:ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent));
 		}
 	}
 	else
@@ -9996,7 +9996,7 @@ int handleChangeConfigurationRequest(char *uuid, char *payload)
 		SetOcppConnStatus(FALSE);
 	}
 
-	if(((strcmp(keystr,"FreeVend")==0)) && (strcmp(comfirmstr,"Accepted")==0))
+	if(((strcmp(keystr,"FreeVend")==0) || (strcmp(keystr,"isEnableLocalPowerSharing")==0) || (strcmp(keystr,"PowerSharingServerIP")==0)) && (strcmp(comfirmstr,"Accepted")==0))
 	{
 		StoreUsrConfigData(&ShmSysConfigAndInfo->SysConfig);
 	}
@@ -13058,7 +13058,7 @@ int handleReserveNowTransactionRequest(char *uuid, char *payload)
 	int result = FAIL;
 	int connectorIdInt=0, reservationIdInt=0;
 	int tempIndex = 0;
-	char expiryDatestr[30]={0}, idTagstr[20]={0},parentIdTagstr[20]={0};
+	char expiryDatestr[30]={0}, idTagstr[21]={0},parentIdTagstr[21]={0};
 	char comfirmstr[20]={0};
 	char sstr[180]={ 0 },sstrtemp[200]={ 0 };
 	int c = 0;
@@ -13739,23 +13739,22 @@ int handleSendLocalListRequest(char *uuid, char *payload)
 			{
 				//Local list full update
 				DEBUG_INFO("Local list full update.\n");
-
+				locallistVersion = 0;
 				OCPP_getListVerion();
 
-				if(ShmOCPP16Data->SendLocalList.ListVersion < locallistVersion)
+				/*if(ShmOCPP16Data->SendLocalList.ListVersion < locallistVersion)
 				{
 					strcpy(comfirmstr, UpdateStatusStr[UpdateStatus_Failed]);
 					goto end;
-				}
+				}*/
 
 				OCPP_cleanLocalList();
-
 			}
 			else if(strcmp((char*)ShmOCPP16Data->SendLocalList.UpdateType, UpdateTypeStr[Differential]) == 0)
 			{
 				//Local list different update
 				DEBUG_INFO("Local list different update.\n");
-
+				locallistVersion = 0;
 				OCPP_getListVerion();
 
 				if(ShmOCPP16Data->SendLocalList.ListVersion < locallistVersion)
@@ -14365,7 +14364,7 @@ int handleSetChargingProfileRequest(char *uuid, char *payload)
 		goto end;
 	}
 
-	//------------------------------Satrt: Check Configuration Key "MaxChargingProfilesInstalled" Logic---------------------------------------//
+	//------------------------------Start: Check Configuration Key "MaxChargingProfilesInstalled" Logic---------------------------------------//
 	{
 		FILE *fp;
 		char dataLine[4096]={0};
@@ -15844,7 +15843,7 @@ int initialConfigurationTable(void)
 	char sstr[256]={0};
 	int c = 0;
 	char *loc;
-	int	confVersion = 14;
+	int	confVersion = 15;
 
 	DEBUG_INFO("initialConfigurationTable...version: %d\n", confVersion);
 	//start_t = clock();
@@ -16267,6 +16266,27 @@ int initialConfigurationTable(void)
 
 		fprintf(outfile,"{\"key\":\"%s\",\"readonly\":%s,\"value\":\"%s\"}\n","PreAuthAmount", "false", ShmOCPP16Data->ConfigurationTable.CoreProfile[PreAuthAmount].ItemData);
 
+		// isEnableLocalPowerSharing
+		ShmOCPP16Data->ConfigurationTable.CoreProfile[isEnableLocalPowerSharing].ItemAccessibility = 1;
+		strcpy((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[isEnableLocalPowerSharing].ItemName, "isEnableLocalPowerSharing");
+		sprintf((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[isEnableLocalPowerSharing].ItemData, "%d", ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharing);
+
+		fprintf(outfile,"{\"key\":\"%s\",\"readonly\":%s,\"value\":\"%s\"}\n","isEnableLocalPowerSharing", "false", ShmOCPP16Data->ConfigurationTable.CoreProfile[isEnableLocalPowerSharing].ItemData);
+
+		// PowerSharingServerIP
+		ShmOCPP16Data->ConfigurationTable.CoreProfile[PowerSharingServerIP].ItemAccessibility = 1;
+		strcpy((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[PowerSharingServerIP].ItemName, "PowerSharingServerIP");
+		memcpy((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[PowerSharingServerIP].ItemData, (char*)ShmSysConfigAndInfo->SysConfig.PowerSharingServerIP, 500);
+
+		fprintf(outfile,"{\"key\":\"%s\",\"readonly\":%s,\"value\":\"%s\"}\n","PowerSharingServerIP", "false", ShmOCPP16Data->ConfigurationTable.CoreProfile[PowerSharingServerIP].ItemData);
+
+		// EVCCID_PREFIX
+		ShmOCPP16Data->ConfigurationTable.CoreProfile[EVCCID_PREFIX].ItemAccessibility = 1;
+		strcpy((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[EVCCID_PREFIX].ItemName, "EVCCID_PREFIX");
+		strcpy((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[EVCCID_PREFIX].ItemData, "" );
+
+		fprintf(outfile,"{\"key\":\"%s\",\"readonly\":%s,\"value\":\"%s\"}\n","EVCCID_PREFIX", "false", ShmOCPP16Data->ConfigurationTable.CoreProfile[EVCCID_PREFIX].ItemData);
+
 		// Configuration Version
 		ShmOCPP16Data->ConfigurationTable.CoreProfile[ConfigurationVersion].ItemAccessibility = 0;
 		strcpy((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[ConfigurationVersion].ItemName, "ConfigurationVersion");
@@ -16737,6 +16757,24 @@ int initialConfigurationTable(void)
 					sprintf((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[PreAuthAmount].ItemData, "%.2f", atof(valuestr));
 				}
 
+				if(strcmp(keystr, "isEnableLocalPowerSharing") == 0)
+				{
+					ShmOCPP16Data->ConfigurationTable.CoreProfile[isEnableLocalPowerSharing].ItemAccessibility = (strcmp(readonlystr, "true")==0) ? 0 : 1;
+					sprintf((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[isEnableLocalPowerSharing].ItemData, "%d", ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharing);
+				}
+
+				if(strcmp(keystr, "PowerSharingServerIP") == 0)
+				{
+					ShmOCPP16Data->ConfigurationTable.CoreProfile[PowerSharingServerIP].ItemAccessibility = (strcmp(readonlystr, "true")==0) ? 0 : 1;
+					memcpy((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[PowerSharingServerIP].ItemData, (char *)ShmSysConfigAndInfo->SysConfig.PowerSharingServerIP,500);
+				}
+
+				if(strcmp(keystr, "EVCCID_PREFIX") == 0)
+				{
+					ShmOCPP16Data->ConfigurationTable.CoreProfile[EVCCID_PREFIX].ItemAccessibility = (strcmp(readonlystr, "true")==0) ? 0 : 1;
+					sprintf((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[EVCCID_PREFIX].ItemData, "%s", valuestr);
+				}
+
 				if(strcmp(keystr, "ConfigurationVersion") == 0)
 				{
 					ShmOCPP16Data->ConfigurationTable.CoreProfile[ConfigurationVersion].ItemAccessibility = (strcmp(readonlystr, "true")==0) ? 0 : 1;
@@ -17296,6 +17334,33 @@ void StoreConfigurationTable(void)
 
 	fprintf(outfile,"{\"key\":\"%s\",\"readonly\":%s,\"value\":\"%s\"}\n","PreAuthAmount", "false", (char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[PreAuthAmount].ItemData);
 
+	// isEnableLocalPowerSharing
+	/*
+	ShmOCPP16Data->ConfigurationTable.CoreProfile[isEnableLocalPowerSharing].ItemAccessibility = 1;
+	strcpy((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[isEnableLocalPowerSharing].ItemName, "isEnableLocalPowerSharing");
+	strcpy((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[isEnableLocalPowerSharing].ItemData, "0" );
+	*/
+
+	fprintf(outfile,"{\"key\":\"%s\",\"readonly\":%s,\"value\":\"%s\"}\n","isEnableLocalPowerSharing", "false", (char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[isEnableLocalPowerSharing].ItemData);
+
+	// PowerSharingServerIP
+	/*
+	ShmOCPP16Data->ConfigurationTable.CoreProfile[PowerSharingServerIP].ItemAccessibility = 1;
+	strcpy((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[PowerSharingServerIP].ItemName, "PowerSharingServerIP");
+	strcpy((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[PowerSharingServerIP].ItemData, "" );
+	*/
+
+	fprintf(outfile,"{\"key\":\"%s\",\"readonly\":%s,\"value\":\"%s\"}\n","PowerSharingServerIP", "false", (char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[PowerSharingServerIP].ItemData);
+
+	// EVCCID_PREFIX
+	/*
+	ShmOCPP16Data->ConfigurationTable.CoreProfile[EVCCID_PREFIX].ItemAccessibility = 1;
+	strcpy((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[EVCCID_PREFIX].ItemName, "EVCCID_PREFIX");
+	strcpy((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[EVCCID_PREFIX].ItemData, "" );
+	*/
+
+	fprintf(outfile,"{\"key\":\"%s\",\"readonly\":%s,\"value\":\"%s\"}\n","EVCCID_PREFIX", "false", (char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[EVCCID_PREFIX].ItemData);
+
 	// ConfigurationVersion
 	/*
 	ShmOCPP16Data->ConfigurationTable.CoreProfile[ConfigurationVersion].ItemAccessibility = 1;
@@ -18339,6 +18404,60 @@ void getKeyValue(char *keyReq)
 			  isKnowKey = TRUE;
 		  }
 
+		  if(isEmpty ||  strcmp(keyReq, "isEnableLocalPowerSharing") == 0 )
+		  {
+			  strcpy((char *)ShmOCPP16Data->GetConfiguration.Key[GetConfiguration_isEnableLocalPowerSharing].Item, "isEnableLocalPowerSharing");
+			  strcpy((char *)ShmOCPP16Data->GetConfiguration.ResponseConfigurationKey[GetConfiguration_isEnableLocalPowerSharing].Key, "isEnableLocalPowerSharing");
+
+			  if(ShmOCPP16Data->ConfigurationTable.CoreProfile[isEnableLocalPowerSharing].ItemAccessibility == 1)
+			  {
+				  strcpy((char *)ShmOCPP16Data->GetConfiguration.ResponseConfigurationKey[GetConfiguration_isEnableLocalPowerSharing].ReadOnly, "0"/*"FALSE"*/);
+			  }
+			  else
+			  {
+				  strcpy((char *)ShmOCPP16Data->GetConfiguration.ResponseConfigurationKey[GetConfiguration_isEnableLocalPowerSharing].ReadOnly, "1"/*"TRUE"*/);
+			  }
+
+			  strcpy((char *)ShmOCPP16Data->GetConfiguration.ResponseConfigurationKey[GetConfiguration_isEnableLocalPowerSharing].Value, (const char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[isEnableLocalPowerSharing].ItemData );
+			  isKnowKey = TRUE;
+		  }
+
+		  if(isEmpty ||  strcmp(keyReq, "PowerSharingServerIP") == 0 )
+		  {
+			  strcpy((char *)ShmOCPP16Data->GetConfiguration.Key[GetConfiguration_PowerSharingServerIP].Item, "PowerSharingServerIP");
+			  strcpy((char *)ShmOCPP16Data->GetConfiguration.ResponseConfigurationKey[GetConfiguration_PowerSharingServerIP].Key, "PowerSharingServerIP");
+
+			  if(ShmOCPP16Data->ConfigurationTable.CoreProfile[PowerSharingServerIP].ItemAccessibility == 1)
+			  {
+				  strcpy((char *)ShmOCPP16Data->GetConfiguration.ResponseConfigurationKey[GetConfiguration_PowerSharingServerIP].ReadOnly, "0"/*"FALSE"*/);
+			  }
+			  else
+			  {
+				  strcpy((char *)ShmOCPP16Data->GetConfiguration.ResponseConfigurationKey[GetConfiguration_PowerSharingServerIP].ReadOnly, "1"/*"TRUE"*/);
+			  }
+
+			  strcpy((char *)ShmOCPP16Data->GetConfiguration.ResponseConfigurationKey[GetConfiguration_PowerSharingServerIP].Value, (const char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[PowerSharingServerIP].ItemData );
+			  isKnowKey = TRUE;
+		  }
+
+		  if(isEmpty ||  strcmp(keyReq, "EVCCID_PREFIX") == 0 )
+		  {
+			  strcpy((char *)ShmOCPP16Data->GetConfiguration.Key[GetConfiguration_EVCCID_PREFIX].Item, "EVCCID_PREFIX");
+			  strcpy((char *)ShmOCPP16Data->GetConfiguration.ResponseConfigurationKey[GetConfiguration_EVCCID_PREFIX].Key, "EVCCID_PREFIX");
+
+			  if(ShmOCPP16Data->ConfigurationTable.CoreProfile[EVCCID_PREFIX].ItemAccessibility == 1)
+			  {
+				  strcpy((char *)ShmOCPP16Data->GetConfiguration.ResponseConfigurationKey[GetConfiguration_EVCCID_PREFIX].ReadOnly, "0"/*"FALSE"*/);
+			  }
+			  else
+			  {
+				  strcpy((char *)ShmOCPP16Data->GetConfiguration.ResponseConfigurationKey[GetConfiguration_EVCCID_PREFIX].ReadOnly, "1"/*"TRUE"*/);
+			  }
+
+			  strcpy((char *)ShmOCPP16Data->GetConfiguration.ResponseConfigurationKey[GetConfiguration_EVCCID_PREFIX].Value, (const char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[EVCCID_PREFIX].ItemData );
+			  isKnowKey = TRUE;
+		  }
+
 	      if(isEmpty ||  strcmp(keyReq, "ConfigurationVersion") == 0 )
 		  {
 			  strcpy((char *)ShmOCPP16Data->GetConfiguration.Key[GetConfiguration_ConfigurationVersion].Item, "ConfigurationVersion");
@@ -19634,6 +19753,62 @@ int setKeyValue(char *key, char *value)
 		}
 	}
 
+	if(strcmp(key, "isEnableLocalPowerSharing") == 0)
+	{
+		if(ShmOCPP16Data->ConfigurationTable.CoreProfile[isEnableLocalPowerSharing].ItemAccessibility == 1)
+		{
+			check_ascii = value[0];
+			if( (check_ascii < 48) || (check_ascii > 57) )
+			{
+				isSuccess = ConfigurationStatus_Rejected;
+			}
+			else
+			{
+				if(atoi(value) >= 0)
+				{
+					sprintf((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[isEnableLocalPowerSharing].ItemData, "%d", atoi(value));
+					ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharing = (unsigned char)atoi(value);
+					isSuccess = ConfigurationStatus_Accepted;
+				}
+				else
+					isSuccess = ConfigurationStatus_Rejected;
+			}
+		}
+		else
+		{
+			isSuccess = ConfigurationStatus_Rejected;
+		}
+	}
+
+	if(strcmp(key, "PowerSharingServerIP") == 0)
+	{
+		if(ShmOCPP16Data->ConfigurationTable.CoreProfile[PowerSharingServerIP].ItemAccessibility == 1)
+		{
+			strcpy(str, (const char*)value);
+			sprintf((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[PowerSharingServerIP].ItemData, "%s", str );
+			sprintf((char *)ShmSysConfigAndInfo->SysConfig.PowerSharingServerIP, "%s", str );
+			isSuccess = ConfigurationStatus_Accepted;
+		}
+		else
+		{
+			isSuccess = ConfigurationStatus_Rejected;
+		}
+	}
+
+	if(strcmp(key, "EVCCID_PREFIX") == 0)
+	{
+		if(ShmOCPP16Data->ConfigurationTable.CoreProfile[EVCCID_PREFIX].ItemAccessibility == 1)
+		{
+			strcpy(str, (const char*)value);
+			sprintf((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[EVCCID_PREFIX].ItemData, "%s", str );
+			isSuccess = ConfigurationStatus_Accepted;
+		}
+		else
+		{
+			isSuccess = ConfigurationStatus_Rejected;
+		}
+	}
+
 #if 0
     //For OCPP Test Case
     if(strcmp(key, "LocalAuthorizationListEnabled") == 0)

+ 3 - 0
EVSE/Modularization/ocppfiles/MessageHandler.h

@@ -403,6 +403,9 @@ enum GetConfigurationKey {
 	GetConfiguration_StatusNotificationPeriodically,
 	GetConfiguration_StatusNotificationInterval,
 	GetConfiguration_PreAuthAmount,
+	GetConfiguration_isEnableLocalPowerSharing,
+	GetConfiguration_PowerSharingServerIP,
+	GetConfiguration_EVCCID_PREFIX,
 	GetConfiguration_LocalAuthListEnabled,
 	GetConfiguration_LocalAuthListMaxLength,
 	GetConfiguration_SendLocalListMaxLength,

+ 185 - 10
EVSE/Modularization/ocppph/MessageHandler.c

@@ -8340,7 +8340,7 @@ int sendGetCompositeScheduleConfirmation(char *uuid, char *payload, int connecto
 		}
 		else
 		{
-			sprintf(message,"[%d,\"%s\",{\"status\":\"%s\",\"connectorId\":%d,\"scheduleStart\":\"%s\",\"chargingSchedule\":{\"duration\":%d,\"startSchedule\":\"%s\",\"chargingRateUnit\":\"%s\",\"chargingSchedulePeriod\":[{\"startPeriod\":0,\"limit\":%d,\"numberPhases\":3}]}}]"
+			sprintf(message,"[%d,\"%s\",{\"status\":\"%s\",\"connectorId\":%d,\"scheduleStart\":\"%s\",\"chargingSchedule\":{\"duration\":%d,\"startSchedule\":\"%s\",\"chargingRateUnit\":\"%s\",\"chargingSchedulePeriod\":[{\"startPeriod\":0,\"limit\":%d}]}}]"
 										,MESSAGE_TYPE_CALLRESULT
 										,uuid
 										,payload
@@ -8349,7 +8349,7 @@ int sendGetCompositeScheduleConfirmation(char *uuid, char *payload, int connecto
 										,ShmOCPP16DataPH->GetCompositeSchedule[CompositeScheduleIndex].ResponseChargingSchedule.Duration
 										,ShmOCPP16DataPH->GetCompositeSchedule[CompositeScheduleIndex].ResponseChargingSchedule.StartSchedule
 										,ShmOCPP16DataPH->GetCompositeSchedule[CompositeScheduleIndex].ResponseChargingSchedule.ChargingRateUnit
-										,(ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent==0?ShmSysConfigAndInfo->SysConfig.RatingCurrent:ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent));
+										,ShmOCPP16DataPH->GetCompositeSchedule[CompositeScheduleIndex].ResponseChargingSchedule.ChargingRateUnit[0]=='W'?modelnameInfo.ratedPower:(ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent==0?ShmSysConfigAndInfo->SysConfig.RatingCurrent:ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent));
 		}
 	}
 	else
@@ -9534,7 +9534,7 @@ int handleChangeConfigurationRequest(char *uuid, char *payload)
 		SetOcppConnStatus(FALSE);
 	}
 
-	if(((strcmp(keystr,"FreeVend")==0)) && (strcmp(comfirmstr,"Accepted")==0))
+	if(((strcmp(keystr,"FreeVend")==0) || (strcmp(keystr,"isEnableLocalPowerSharing")==0) || (strcmp(keystr,"PowerSharingServerIP")==0)) && (strcmp(comfirmstr,"Accepted")==0))
 	{
 		StoreUsrConfigData(&ShmSysConfigAndInfo->SysConfig);
 	}
@@ -12564,7 +12564,7 @@ int handleReserveNowTransactionRequest(char *uuid, char *payload)
 	int result = FAIL;
 	int connectorIdInt=0, reservationIdInt=0;
 	int tempIndex = 0;
-	char expiryDatestr[30]={0}, idTagstr[20]={0},parentIdTagstr[20]={0};
+	char expiryDatestr[30]={0}, idTagstr[21]={0},parentIdTagstr[21]={0};
 	char comfirmstr[20]={0};
 	char sstr[180]={ 0 },sstrtemp[200]={ 0 };
 	int c = 0;
@@ -13245,23 +13245,22 @@ int handleSendLocalListRequest(char *uuid, char *payload)
 			{
 				//Local list full update
 				DEBUG_INFO("Local list full update.\n");
-
+				locallistVersion = 0;
 				OCPP_getListVerion();
 
-				if(ShmOCPP16DataPH->SendLocalList.ListVersion < locallistVersion)
+				/*if(ShmOCPP16DataPH->SendLocalList.ListVersion < locallistVersion)
 				{
 					strcpy(comfirmstr, UpdateStatusStr[UpdateStatus_Failed]);
 					goto end;
-				}
+				}*/
 
 				OCPP_cleanLocalList();
-
 			}
 			else if(strcmp((char*)ShmOCPP16DataPH->SendLocalList.UpdateType, UpdateTypeStr[Differential]) == 0)
 			{
 				//Local list different update
 				DEBUG_INFO("Local list different update.\n");
-
+				locallistVersion = 0;
 				OCPP_getListVerion();
 
 				if(ShmOCPP16DataPH->SendLocalList.ListVersion < locallistVersion)
@@ -15339,7 +15338,7 @@ int initialConfigurationTable(void)
 	char sstr[256]={0};
 	int c = 0;
 	char *loc;
-	int	confVersion = 13;
+	int	confVersion = 14;
 
 	DEBUG_INFO("initialConfigurationTable...version: %d\n", confVersion);
 	//start_t = clock();
@@ -15734,6 +15733,27 @@ int initialConfigurationTable(void)
 
 		fprintf(outfile,"{\"key\":\"%s\",\"readonly\":%s,\"value\":\"%s\"}\n","StatusNotificationInterval", "false", ShmOCPP16DataPH->ConfigurationTable.CoreProfile[StatusNotificationInterval].ItemData);
 
+		// isEnableLocalPowerSharing
+		ShmOCPP16DataPH->ConfigurationTable.CoreProfile[isEnableLocalPowerSharing].ItemAccessibility = 1;
+		strcpy((char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[isEnableLocalPowerSharing].ItemName, "isEnableLocalPowerSharing");
+		sprintf((char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[isEnableLocalPowerSharing].ItemData, "%d", ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharing);
+
+		fprintf(outfile,"{\"key\":\"%s\",\"readonly\":%s,\"value\":\"%s\"}\n","isEnableLocalPowerSharing", "false", ShmOCPP16DataPH->ConfigurationTable.CoreProfile[isEnableLocalPowerSharing].ItemData);
+
+		// PowerSharingServerIP
+		ShmOCPP16DataPH->ConfigurationTable.CoreProfile[PowerSharingServerIP].ItemAccessibility = 1;
+		strcpy((char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[PowerSharingServerIP].ItemName, "PowerSharingServerIP");
+		memcpy((char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[PowerSharingServerIP].ItemData, (char*)ShmSysConfigAndInfo->SysConfig.PowerSharingServerIP, 500);
+
+		fprintf(outfile,"{\"key\":\"%s\",\"readonly\":%s,\"value\":\"%s\"}\n","PowerSharingServerIP", "false", ShmOCPP16DataPH->ConfigurationTable.CoreProfile[PowerSharingServerIP].ItemData);
+
+		// EVCCID_PREFIX
+		ShmOCPP16DataPH->ConfigurationTable.CoreProfile[EVCCID_PREFIX].ItemAccessibility = 1;
+		strcpy((char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[EVCCID_PREFIX].ItemName, "EVCCID_PREFIX");
+		strcpy((char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[EVCCID_PREFIX].ItemData, "" );
+
+		fprintf(outfile,"{\"key\":\"%s\",\"readonly\":%s,\"value\":\"%s\"}\n","EVCCID_PREFIX", "false", ShmOCPP16DataPH->ConfigurationTable.CoreProfile[EVCCID_PREFIX].ItemData);
+
 		// Configuration Version
 		ShmOCPP16DataPH->ConfigurationTable.CoreProfile[ConfigurationVersion].ItemAccessibility = 0;
 		strcpy((char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[ConfigurationVersion].ItemName, "ConfigurationVersion");
@@ -16181,6 +16201,24 @@ int initialConfigurationTable(void)
 					sprintf((char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[StatusNotificationInterval].ItemData, "%d", atoi(valuestr));
 				}
 
+				if(strcmp(keystr, "isEnableLocalPowerSharing") == 0)
+				{
+					ShmOCPP16DataPH->ConfigurationTable.CoreProfile[isEnableLocalPowerSharing].ItemAccessibility = (strcmp(readonlystr, "true")==0) ? 0 : 1;
+					sprintf((char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[isEnableLocalPowerSharing].ItemData, "%d", ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharing);
+				}
+
+				if(strcmp(keystr, "PowerSharingServerIP") == 0)
+				{
+					ShmOCPP16DataPH->ConfigurationTable.CoreProfile[PowerSharingServerIP].ItemAccessibility = (strcmp(readonlystr, "true")==0) ? 0 : 1;
+					memcpy((char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[PowerSharingServerIP].ItemData, (char *)ShmSysConfigAndInfo->SysConfig.PowerSharingServerIP,500);
+				}
+
+				if(strcmp(keystr, "EVCCID_PREFIX") == 0)
+				{
+					ShmOCPP16DataPH->ConfigurationTable.CoreProfile[EVCCID_PREFIX].ItemAccessibility = (strcmp(readonlystr, "true")==0) ? 0 : 1;
+					sprintf((char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[EVCCID_PREFIX].ItemData, "%s", valuestr);
+				}
+
 				if(strcmp(keystr, "ConfigurationVersion") == 0)
 				{
 					ShmOCPP16DataPH->ConfigurationTable.CoreProfile[ConfigurationVersion].ItemAccessibility = (strcmp(readonlystr, "true")==0) ? 0 : 1;
@@ -16703,6 +16741,33 @@ void StoreConfigurationTable(void)
 
 	fprintf(outfile,"{\"key\":\"%s\",\"readonly\":%s,\"value\":\"%s\"}\n","StatusNotificationInterval", "false", (char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[StatusNotificationInterval].ItemData);
 
+	// isEnableLocalPowerSharing
+	/*
+	ShmOCPP16Data->ConfigurationTable.CoreProfile[isEnableLocalPowerSharing].ItemAccessibility = 1;
+	strcpy((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[isEnableLocalPowerSharing].ItemName, "isEnableLocalPowerSharing");
+	strcpy((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[isEnableLocalPowerSharing].ItemData, "0" );
+	*/
+
+	fprintf(outfile,"{\"key\":\"%s\",\"readonly\":%s,\"value\":\"%s\"}\n","isEnableLocalPowerSharing", "false", (char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[isEnableLocalPowerSharing].ItemData);
+
+	// PowerSharingServerIP
+	/*
+	ShmOCPP16Data->ConfigurationTable.CoreProfile[PowerSharingServerIP].ItemAccessibility = 1;
+	strcpy((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[PowerSharingServerIP].ItemName, "PowerSharingServerIP");
+	strcpy((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[PowerSharingServerIP].ItemData, "" );
+	*/
+
+	fprintf(outfile,"{\"key\":\"%s\",\"readonly\":%s,\"value\":\"%s\"}\n","PowerSharingServerIP", "false", (char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[PowerSharingServerIP].ItemData);
+
+	// EVCCID_PREFIX
+	/*
+	ShmOCPP16Data->ConfigurationTable.CoreProfile[EVCCID_PREFIX].ItemAccessibility = 1;
+	strcpy((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[EVCCID_PREFIX].ItemName, "EVCCID_PREFIX");
+	strcpy((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[EVCCID_PREFIX].ItemData, "" );
+	*/
+
+	fprintf(outfile,"{\"key\":\"%s\",\"readonly\":%s,\"value\":\"%s\"}\n","EVCCID_PREFIX", "false", (char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[EVCCID_PREFIX].ItemData);
+
 	// ConfigurationVersion
 	/*
 	ShmOCPP16DataPH->ConfigurationTable.CoreProfile[ConfigurationVersion].ItemAccessibility = 1;
@@ -17674,6 +17739,60 @@ void getKeyValue(char *keyReq)
 			  isKnowKey = TRUE;
 		  }
 
+		  if(isEmpty ||  strcmp(keyReq, "isEnableLocalPowerSharing") == 0 )
+		  {
+			  strcpy((char *)ShmOCPP16DataPH->GetConfiguration.Key[GetConfiguration_isEnableLocalPowerSharing].Item, "isEnableLocalPowerSharing");
+			  strcpy((char *)ShmOCPP16DataPH->GetConfiguration.ResponseConfigurationKey[GetConfiguration_isEnableLocalPowerSharing].Key, "isEnableLocalPowerSharing");
+
+			  if(ShmOCPP16DataPH->ConfigurationTable.CoreProfile[isEnableLocalPowerSharing].ItemAccessibility == 1)
+			  {
+				  strcpy((char *)ShmOCPP16DataPH->GetConfiguration.ResponseConfigurationKey[GetConfiguration_isEnableLocalPowerSharing].ReadOnly, "0"/*"FALSE"*/);
+			  }
+			  else
+			  {
+				  strcpy((char *)ShmOCPP16DataPH->GetConfiguration.ResponseConfigurationKey[GetConfiguration_isEnableLocalPowerSharing].ReadOnly, "1"/*"TRUE"*/);
+			  }
+
+			  strcpy((char *)ShmOCPP16DataPH->GetConfiguration.ResponseConfigurationKey[GetConfiguration_isEnableLocalPowerSharing].Value, (const char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[isEnableLocalPowerSharing].ItemData );
+			  isKnowKey = TRUE;
+		  }
+
+		  if(isEmpty ||  strcmp(keyReq, "PowerSharingServerIP") == 0 )
+		  {
+			  strcpy((char *)ShmOCPP16DataPH->GetConfiguration.Key[GetConfiguration_PowerSharingServerIP].Item, "PowerSharingServerIP");
+			  strcpy((char *)ShmOCPP16DataPH->GetConfiguration.ResponseConfigurationKey[GetConfiguration_PowerSharingServerIP].Key, "PowerSharingServerIP");
+
+			  if(ShmOCPP16DataPH->ConfigurationTable.CoreProfile[PowerSharingServerIP].ItemAccessibility == 1)
+			  {
+				  strcpy((char *)ShmOCPP16DataPH->GetConfiguration.ResponseConfigurationKey[GetConfiguration_PowerSharingServerIP].ReadOnly, "0"/*"FALSE"*/);
+			  }
+			  else
+			  {
+				  strcpy((char *)ShmOCPP16DataPH->GetConfiguration.ResponseConfigurationKey[GetConfiguration_PowerSharingServerIP].ReadOnly, "1"/*"TRUE"*/);
+			  }
+
+			  strcpy((char *)ShmOCPP16DataPH->GetConfiguration.ResponseConfigurationKey[GetConfiguration_PowerSharingServerIP].Value, (const char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[PowerSharingServerIP].ItemData );
+			  isKnowKey = TRUE;
+		  }
+
+		  if(isEmpty ||  strcmp(keyReq, "EVCCID_PREFIX") == 0 )
+		  {
+			  strcpy((char *)ShmOCPP16DataPH->GetConfiguration.Key[GetConfiguration_EVCCID_PREFIX].Item, "EVCCID_PREFIX");
+			  strcpy((char *)ShmOCPP16DataPH->GetConfiguration.ResponseConfigurationKey[GetConfiguration_EVCCID_PREFIX].Key, "EVCCID_PREFIX");
+
+			  if(ShmOCPP16DataPH->ConfigurationTable.CoreProfile[EVCCID_PREFIX].ItemAccessibility == 1)
+			  {
+				  strcpy((char *)ShmOCPP16DataPH->GetConfiguration.ResponseConfigurationKey[GetConfiguration_EVCCID_PREFIX].ReadOnly, "0"/*"FALSE"*/);
+			  }
+			  else
+			  {
+				  strcpy((char *)ShmOCPP16DataPH->GetConfiguration.ResponseConfigurationKey[GetConfiguration_EVCCID_PREFIX].ReadOnly, "1"/*"TRUE"*/);
+			  }
+
+			  strcpy((char *)ShmOCPP16DataPH->GetConfiguration.ResponseConfigurationKey[GetConfiguration_EVCCID_PREFIX].Value, (const char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[EVCCID_PREFIX].ItemData );
+			  isKnowKey = TRUE;
+		  }
+
 	      if(isEmpty ||  strcmp(keyReq, "ConfigurationVersion") == 0 )
 		  {
 			  strcpy((char *)ShmOCPP16DataPH->GetConfiguration.Key[GetConfiguration_ConfigurationVersion].Item, "ConfigurationVersion");
@@ -18912,6 +19031,62 @@ int setKeyValue(char *key, char *value)
 		}
 	}
 
+	if(strcmp(key, "isEnableLocalPowerSharing") == 0)
+	{
+		if(ShmOCPP16DataPH->ConfigurationTable.CoreProfile[isEnableLocalPowerSharing].ItemAccessibility == 1)
+		{
+			check_ascii = value[0];
+			if( (check_ascii < 48) || (check_ascii > 57) )
+			{
+				isSuccess = ConfigurationStatus_Rejected;
+			}
+			else
+			{
+				if(atoi(value) >= 0)
+				{
+					sprintf((char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[isEnableLocalPowerSharing].ItemData, "%d", atoi(value) );
+					ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharing = (unsigned char)atoi(value);
+					isSuccess = ConfigurationStatus_Accepted;
+				}
+				else
+					isSuccess = ConfigurationStatus_Rejected;
+			}
+		}
+		else
+		{
+			isSuccess = ConfigurationStatus_Rejected;
+		}
+	}
+
+	if(strcmp(key, "PowerSharingServerIP") == 0)
+	{
+		if(ShmOCPP16DataPH->ConfigurationTable.CoreProfile[PowerSharingServerIP].ItemAccessibility == 1)
+		{
+			strcpy(str, (const char*)value);
+			sprintf((char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[PowerSharingServerIP].ItemData, "%s", str );
+			sprintf((char *)ShmSysConfigAndInfo->SysConfig.PowerSharingServerIP, "%s", str );
+			isSuccess = ConfigurationStatus_Accepted;
+		}
+		else
+		{
+			isSuccess = ConfigurationStatus_Rejected;
+		}
+	}
+
+	if(strcmp(key, "EVCCID_PREFIX") == 0)
+	{
+		if(ShmOCPP16DataPH->ConfigurationTable.CoreProfile[EVCCID_PREFIX].ItemAccessibility == 1)
+		{
+			strcpy(str, (const char*)value);
+			sprintf((char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[EVCCID_PREFIX].ItemData, "%s", str );
+			isSuccess = ConfigurationStatus_Accepted;
+		}
+		else
+		{
+			isSuccess = ConfigurationStatus_Rejected;
+		}
+	}
+
 #if 0
     //For OCPP Test Case
     if(strcmp(key, "LocalAuthorizationListEnabled") == 0)

+ 3 - 0
EVSE/Modularization/ocppph/MessageHandler.h

@@ -399,6 +399,9 @@ enum GetConfigurationKey {
 	GetConfiguration_MaintainServer,
 	GetConfiguration_StatusNotificationPeriodically,
 	GetConfiguration_StatusNotificationInterval,
+	GetConfiguration_isEnableLocalPowerSharing,
+	GetConfiguration_PowerSharingServerIP,
+	GetConfiguration_EVCCID_PREFIX,
 	GetConfiguration_LocalAuthListEnabled,
 	GetConfiguration_LocalAuthListMaxLength,
 	GetConfiguration_SendLocalListMaxLength,

+ 2 - 2
EVSE/Projects/AX80/Apps/Module_ConfigTools.c

@@ -517,14 +517,14 @@ int main(void)
 			{
 				memset(cmd, 0x00, ARRAY_SIZE(cmd));
 				printf("\n ***** localloadbalance ***************************");
-				printf("\n  Current local loading balance: %d", ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharging);
+				printf("\n  Current local loading balance: %d", ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharing);
 				printf("\n  0: Disable.");
 				printf("\n  1: Enable.");
 				printf("\n **************************************************");
 				printf("\n  Please input local load balance mode: ");
 				scanf("%s", &cmd[0]);
 
-				ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharging = ((0<=atoi(cmd))&&(atoi(cmd)<=1)?atoi(cmd):0);
+				ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharing = ((0<=atoi(cmd))&&(atoi(cmd)<=1)?atoi(cmd):0);
 				if(ShmSysConfigAndInfo->SysConfig.RfidCardNumEndian)
 					DEBUG_INFO("Local loading balance: Enable\n");
 				else

+ 20 - 8
EVSE/Projects/AX80/Apps/main.c

@@ -2844,15 +2844,27 @@ void InitEthernet()
 					}
 				}
 
+				// Check is need to reset WIFI/4G module power
 				if(!ShmSysConfigAndInfo->SysInfo.OcppConnStatus &&
-				   (((ShmSysConfigAndInfo->SysConfig.AthInterface.WifiMode == 1) && (ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaWiFi == ON)) || (((ShmSysConfigAndInfo->SysConfig.AthInterface.WifiMode == 2) && (ShmStatusCodeData->InfoCode.InfoEvents.bits.ApDisconnectViaWiFi == ON)))))
+
+				   ((ShmSysConfigAndInfo->SysConfig.AthInterface.WifiMode == 0) ||
+					((ShmSysConfigAndInfo->SysConfig.AthInterface.WifiMode == 1) && (ShmStatusCodeData->InfoCode.InfoEvents.bits.InternetDisconnectViaWiFi == ON)) ||
+					((ShmSysConfigAndInfo->SysConfig.AthInterface.WifiMode == 2) && (ShmStatusCodeData->InfoCode.InfoEvents.bits.ApDisconnectViaWiFi == ON))) &&
+
+				   ((ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomEnabled == 0) ||
+				    ((ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomEnabled == 1) && (ShmStatusCodeData->InfoCode.InfoEvents.bits.ApnDisconnectVia4Gi == ON))))
 				{
 					if(getDiffSecNow(startTime[0][TMR_IDX_RESET_WIFI]) > TIMEOUT_SPEC_RESET_WIFI_MODULE)
 					{
-						DEBUG_WARN("WIFI/4G module reset.\n");
-						gpio_set_value(GPIO_OUT_RST_4G_WIFI, ON);
-						sleep(1);
-						gpio_set_value(GPIO_OUT_RST_4G_WIFI, OFF);
+						if((ShmSysConfigAndInfo->SysConfig.AthInterface.WifiMode != 0) || (ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomEnabled != 0))
+						{
+							DEBUG_WARN("WIFI/4G module reset.\n");
+							gpio_set_value(GPIO_OUT_RST_4G_WIFI, ON);
+							sleep(1);
+							gpio_set_value(GPIO_OUT_RST_4G_WIFI, OFF);
+						}
+
+						refreshStartTimer(&startTime[0][TMR_IDX_RESET_WIFI]);
 					}
 				}
 				else
@@ -2873,7 +2885,7 @@ void InitEthernet()
 			}
 
 			// Bridge ethernet to uap0 to get dynamic ip address
-			if(ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharging &&
+			if(ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharing &&
 			  (ShmSysConfigAndInfo->SysConfig.AthInterface.WifiMode == 2) &&
 			  (isUap0up() == PASS) &&
 			  (access("/sys/class/net/br0/address", F_OK) == -1))
@@ -4236,7 +4248,7 @@ void checkTask()
 		}
 
 		if((system("pidof -s Module_PowerSharing > /dev/null") != 0) &&
-			ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharging)
+			ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharing)
 		{
 			DEBUG_INFO("Module_PowerSharing not running, restart it.\n");
 			system ("/root/Module_PowerSharing &");
@@ -4640,7 +4652,7 @@ void checkChargingProfileLimit(uint8_t gun_index)
 	}
 
 	// Charging session target current check if OCPP disconnect and power sharing server connected
-	if(ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharging > 0)
+	if(ShmSysConfigAndInfo->SysConfig.isEnableLocalPowerSharing > 0)
 	{
 		if(ShmSysConfigAndInfo->SysInfo.localSharingInfo.isConnectedSharingServer)
 		   ShmCharger->gun_info[gun_index].targetCurrent = ShmSysConfigAndInfo->SysInfo.localSharingInfo.AvailableShargingCurrent[gun_index]>ShmCharger->gun_info[gun_index].primaryMcuState.rating_current?ShmCharger->gun_info[gun_index].primaryMcuState.rating_current:ShmSysConfigAndInfo->SysInfo.localSharingInfo.AvailableShargingCurrent[gun_index];

+ 12 - 1
EVSE/Projects/DD360UCar/Apps/CSU/RFID.c

@@ -346,6 +346,9 @@ void CreateRfidFork(void)
         int isContinue = 1;
         RFID rfid = {0};
         fd = InitialRfidPort();
+
+        int module_type = MODULE_EWT;
+
         struct SysConfigData *pSysConfig = (struct SysConfigData *)GetShmSysConfigData();
 
         //log_info("RFID fork Child's PID is %d", getpid());
@@ -359,7 +362,7 @@ void CreateRfidFork(void)
                 continue;
             }
 
-            if (getRequestCardSN(fd, 0, &rfid) == false) {
+            if (getRequestCardSN(fd, module_type, &rfid) == false) {
                 continue;
             }
 
@@ -436,6 +439,14 @@ void CreateRfidFork(void)
                 }
             }
             log_info("card number = %s", pSysConfig->UserId);
+            if (rfid.cardType == ISO14443A) {
+                sethaltCard(fd, module_type);
+            } else if (rfid.cardType == IS014443B) {
+
+            } else if (rfid.cardType == FELICA) {
+
+            }
+
         }
     }
 }

+ 1 - 1
EVSE/Projects/DD360UCar/Apps/CSU/main.c

@@ -83,7 +83,7 @@ uint8_t bd1_1_status = 0;
 uint8_t bd1_2_status = 0;
 
 char *fwVersion = "V2.05.00.0000.00"; // Phihong version
-char* DebugVersion = "v2.05.00";      // Software debug version
+char* DebugVersion = "V2.05.01";      // Software debug version
 //sqlite3 *localDb;
 bool isDb_ready;
 

+ 1 - 0
EVSE/Projects/DD360UCar/Apps/Config.h

@@ -514,6 +514,7 @@ typedef struct StDcCommonInfo {
     time_t RelayDisconnectTime;
     time_t LedDisconnectTime;
     time_t FanDisconnectTime;
+    int DemoCount;
 } DcCommonInfo;
 
 #endif /* CONFIG_H_ */

+ 25 - 5
EVSE/Projects/DD360UCar/Apps/ModuleEvComm/Module_EvRxComm.c

@@ -301,6 +301,7 @@ void CANReceiver(int fd)
         uint8_t lastConnTemp[2] = {0, 0};
         struct can_frame frame;
         ChillerTemp chiilerTemp = {0};
+        time_t CCS_PlugoutTimer[2] = { 0 };
         struct ChargingInfoData *pDcChargingInfo = NULL;
 
         pSysConfig = (struct SysConfigData *)GetShmSysConfigData();
@@ -318,6 +319,8 @@ void CANReceiver(int fd)
         ShmDcCommonData->EVDisconnectTime[0] = time((time_t*)NULL);
         ShmDcCommonData->EVDisconnectTime[1] = time((time_t*)NULL);
         //log_info("Module_EvRXComm Child's PID is %d", getpid());
+        CCS_PlugoutTimer[0] = time((time_t*)NULL);
+        CCS_PlugoutTimer[1] = time((time_t*)NULL);
 
         while (isContinue) {
             memset(&frame, 0, sizeof(struct can_frame));
@@ -409,7 +412,8 @@ void CANReceiver(int fd)
                             pSysInfo->CurGunSelected = targetGun;
 #endif                        
                     } else if (frame.data[0] == UNPLUG) {
-                        log_info("Conn %d, Unplug. ", targetGun);
+                        if (pDcChargingInfo->Type != _Type_CCS_2)
+                            log_info("Conn %d, Unplug. ", targetGun);
                         strcpy( (char *) pDcChargingInfo->EVCCID, "");
                     } else {
                         log_info("Conn %d, None Check. (%d) ", targetGun, frame.data[0]);
@@ -418,7 +422,20 @@ void CANReceiver(int fd)
                         pSysInfo->CurGunSelected = targetGun;
                     }
                 }
-
+                // CCS 小板確認拔除三秒
+                if (pDcChargingInfo->Type == _Type_CCS_2) {
+                    if (frame.data[0] == UNPLUG) {
+                        if ((time((time_t*)NULL) - CCS_PlugoutTimer[targetGun]) > 3) {
+                            if (pDcChargingInfo->ConnectorPlugIn != frame.data[0])
+                                log_info("CCS Conn %d, Unplug. ", targetGun);
+                        } else {
+                            frame.data[0] = PLUG;
+                        }
+                    } else {
+                        CCS_PlugoutTimer[targetGun] = time((time_t*)NULL);
+                        frame.data[0] = PLUG;
+                    }
+                }
                 pDcChargingInfo->ConnectorPlugIn = frame.data[0];
                 pDcChargingInfo->PilotVoltage = frame.data[1];           
 
@@ -495,6 +512,7 @@ void CANReceiver(int fd)
 
                     if (frame.data[1] > pDcChargingInfo->EvBatterySoc) {
                         pDcChargingInfo->EvBatterySoc = frame.data[1];
+                        log_info("Gun%d SOC:%d", targetGun, pDcChargingInfo->EvBatterySoc);
                     }
                 }
                 //pDcChargingInfo->EvBatterySoc = frame.data[1]; //DS60-120 remove
@@ -648,11 +666,13 @@ void CANReceiver(int fd)
                         //  (pDcChargingInfo->ChillerTemp != UNDEFINED_TEMP)))
                    ) {
                     ShmDcCommonData->SystemModeChange[targetGun] = NO;
-                    log_info("Conn %d max head temp = %d, max chiller = %d, max chiller2 = %d",
+                    log_info("Gun%d max head temp = %d, chiller1 = [%d,%d], chiller2 = [%d,%d]",
                              targetGun,
                              maxConnTemp,
-                             chillerTemp[0],
-                             chillerTemp[1]);
+                             chiilerTemp.Temp[0],
+                             chiilerTemp.Temp[1],
+                             chiilerTemp.Temp[2],
+                             chiilerTemp.Temp[3]);
                 }
 
                 if (((ShmDcCommonData->ChillerValve.MultiChillerGun & 0x80) >> 7) == YES) {

+ 31 - 0
EVSE/Projects/DD360UCar/Apps/ModuleInternalComm/RelayBoard.c

@@ -1624,6 +1624,37 @@ static void SetLedColor(void)
 
         }
     }
+    /*
+    if (ShmDcCommonData->DemoCount < 1) {
+        led_color.Connect_1_Red = COLOR_MIN_LV;
+        led_color.Connect_1_Green = COLOR_MIN_LV;
+        led_color.Connect_1_Blue = _colorBuf;
+        led_color.Connect_2_Red = COLOR_MIN_LV;
+        led_color.Connect_2_Green = COLOR_MIN_LV;
+        led_color.Connect_2_Blue = _colorBuf;
+    } else if (ShmDcCommonData->DemoCount < 8) {
+        led_color.Connect_1_Red = COLOR_MIN_LV;
+        led_color.Connect_1_Green = _colorBuf;
+        led_color.Connect_1_Blue = COLOR_MIN_LV;
+        led_color.Connect_2_Red = COLOR_MIN_LV;
+        led_color.Connect_2_Green = COLOR_MIN_LV;
+        led_color.Connect_2_Blue = _colorBuf;
+    } else if (ShmDcCommonData->DemoCount < 18) {
+        led_color.Connect_1_Red = COLOR_MIN_LV;
+        led_color.Connect_1_Green = _colorBuf;
+        led_color.Connect_1_Blue = COLOR_MIN_LV;
+        led_color.Connect_2_Red = COLOR_MIN_LV;
+        led_color.Connect_2_Green = _colorBuf;
+        led_color.Connect_2_Blue = COLOR_MIN_LV;
+    } else {
+        led_color.Connect_1_Red = COLOR_MIN_LV;
+        led_color.Connect_1_Green = COLOR_MIN_LV;
+        led_color.Connect_1_Blue = _colorBuf;
+        led_color.Connect_2_Red = COLOR_MIN_LV;
+        led_color.Connect_2_Green = _colorBuf;
+        led_color.Connect_2_Blue = COLOR_MIN_LV;
+    }
+    //*/
     if (_checkLedChanged > 0) {
         if (Config_Led_Color(Uart5Fd, ADDR_LED, &led_color) == PASS) {
             _checkLedChanged--;

+ 145 - 84
EVSE/Projects/DD360UCar/Apps/ModuleLcmCtrl/Module_LcmControl.c

@@ -254,6 +254,22 @@ void ChangeDisplay2Value(short address, short value)
     DisplayValueToLcm(address, data, sizeof(data));
 }
 
+void ChangeDisplay2LongValue(short address, long value)
+{
+    uint8_t data[4];
+    data[0] = (value >> 24) & 0xFF;
+    data[1] = (value >> 16 ) & 0xFF;
+    data[2] = (value >> 8) & 0xFF;
+    data[3] = value & 0x000000FF;
+    /*
+    log_info("long Addr:0x%x, value:%d",address,value);
+    for (int i = 0; i < 4; i++) {
+        log_info("data[%d]:%d",i,data[i]);
+    }
+    */
+    DisplayValueToLcm(address, data, sizeof(data));
+}
+
 //================================================
 // Warning process
 //================================================
@@ -517,12 +533,15 @@ void ShowViewChargingPower(uint8_t gunIndex,float power)
 }
 void ShowConnectId()
 {
+    ChangeDisplay2Value(_LeftGun_ConnectorId, _ICON_CONNECTOR_1);
+    ChangeDisplay2Value(_RightGun_ConnectorId, _ICON_CONNECTOR_1);
+    
     if (ShmDcCommonData->ConnectorId[0] <= 2) {
-        ChangeDisplay2Value(_LeftGun_ConnectorId, _ICON_CONNECTOR_1);
-        ChangeDisplay2Value(_RightGun_ConnectorId, _ICON_CONNECTOR_1);
+        ChangeDisplay2Value(_LeftGun_Symbol_Icon, _ICON_CONNECTOR_A);
+        ChangeDisplay2Value(_RightGun_Symol_Icon, _ICON_CONNECTOR_B);
     } else {
-        ChangeDisplay2Value(_LeftGun_ConnectorId, _ICON_CONNECTOR_2);
-        ChangeDisplay2Value(_RightGun_ConnectorId, _ICON_CONNECTOR_2);
+        ChangeDisplay2Value(_LeftGun_Symbol_Icon, _ICON_CONNECTOR_C);
+        ChangeDisplay2Value(_RightGun_Symol_Icon, _ICON_CONNECTOR_D);
     }
     
 }
@@ -557,9 +576,6 @@ void ShowViewLeftGunInfo()
             default:
                 log_error("CCS Gun Type Error! Not Show in LCM!!");
         }
-        memset(value, 0x00, sizeof(value));
-        sprintf((char *)value,"1 A");
-        DisplayValueToLcm(_LeftGun_location, (uint8_t *)value, sizeof(value));
     } else if (pDcChargingInfo->SystemStatus == S_CHARGING ) {
         ShowViewChargingSoc(LEFT_GUN_NUM,pDcChargingInfo->EvBatterySoc);
         ShowViewChargingTime(LEFT_GUN_NUM,pDcChargingInfo->PresentChargedDuration);
@@ -751,6 +767,7 @@ void ShowSummaryPage()
     uint8_t value[10] = {0};
     char start_hr[3],start_min[3],end_hr[3],end_min[3];
     int t_hr;
+    long eng = 0;
     pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(pSysInfo->CurGunSelected);
     // Show Money
     data = pDcChargingInfo->ChargingFee;
@@ -760,7 +777,7 @@ void ShowSummaryPage()
     discount = ShmSelectGunInfo->PricesInfo[pSysInfo->CurGunSelected].Discount;
     ChangeDisplay2Value(_Summary_cal_discount, discount*(-1));
     settlement = (int)pDcChargingInfo->ChargingFee - discount;
-    ChangeDisplay2Value(_Summary_total_money, (int)settlement);
+    ChangeDisplay2Value(_Summary_total_money, (int)pDcChargingInfo->ChargingFee);
     ChangeDisplay2Value(_Summary_cal_Total_money, (int)pDcChargingInfo->ChargingFee);
     /*
     log_info("start time:%s",pDcChargingInfo->StartDateTime);
@@ -805,13 +822,13 @@ void ShowSummaryPage()
     ChangeDisplay2Value(_Summary_duration_min, (int)_min);
     ChangeDisplay2Value(_Summary_duration_sec, (int)_sec);
 
-    if (pDcChargingInfo->PresentChargedEnergy >= 0.1 &&
+    if (pDcChargingInfo->PresentChargedEnergy > 0.001 &&
             pDcChargingInfo->PresentChargedEnergy <= ENERGY_MAX_KWH) {
-        data = pDcChargingInfo->PresentChargedEnergy*10;
+        data = pDcChargingInfo->PresentChargedEnergy*1000;
     } else
         data = 0;
     //sprintf((char *)value,"%.1f",data);
-    ChangeDisplay2Value(_Summary_cap, data);
+    ChangeDisplay2LongValue(_Summary_cap, data);
 
     if (pSysInfo->CurGunSelected == LEFT_GUN_NUM) {
         ChangeDisplay2Value(_Summary_max_power, (int)ChargeMaxPower_0);
@@ -889,67 +906,108 @@ void DemoFunction()
     uint8_t value[10];
     struct timeb  SeqEndTime;
     struct tm *tm;
+    ChangeDisplay2Value(_Animation_Running, 1);
+    ChangeDisplay2Value(_Animation_Communcation, 1);
+    ChangeDisplay2Value(_Animation_GFD, 1);
+    ChangeDisplay2Value(_Animation_Precharge, 1);
+    ChangeDisplay2Value(_LeftGun_Symbol_Icon, _ICON_CONNECTOR_A);
+    ChangeDisplay2Value(_RightGun_Symol_Icon, _ICON_CONNECTOR_B);
+    ChangeDisplay2Value(_LeftGun_ConnectorId, _ICON_CONNECTOR_1);
+    ChangeDisplay2Value(_RightGun_ConnectorId, _ICON_CONNECTOR_1);
     switch (pSysInfo->PageIndex) {
         case __VIEW_ALL_IDLE_:
-            memset(value, 0x00, sizeof(value));
-            sprintf((char *)value,"1 A");
-            DisplayValueToLcm(_LeftGun_location, (uint8_t *)value, sizeof(value));
-            sprintf((char *)value,"1 B");
-            DisplayValueToLcm(_RightGun_location, (uint8_t *)value, sizeof(value));
-            sleep(1);
+            pDcChargingInfo = (struct ChargingInfoData*)GetDcChargingInfoData(LEFT_GUN_NUM);
+            switch (pDcChargingInfo->CCSGunType) {
+            case _TYPE_CCS1_Liquid:
+            case _TYPE_CCS1_Natural:
+                ChangeDisplay2Value(_LeftGun_type_pic_U, _ICON_CCS1_GUN_U);
+                ChangeDisplay2Value(_LeftGun_type_pic_L, _ICON_CCS1_GUN_L);
+                ChangeDisplay2Value(_LeftGun_type_name, _ICON_CCS1_Name);
+                if (pDcChargingInfo->CCSGunType == _TYPE_CCS1_Liquid) {
+                    ChangeDisplay2Value(_LeftGun_type_speed, _ICON_High_Speed);
+                    ChangeDisplay2Value(_LeftGun_Symbol_Icon, _ICON_CONNECTOR_B);
+                } else {
+                    ChangeDisplay2Value(_LeftGun_Symbol_Icon, _ICON_CONNECTOR_A);
+                    ChangeDisplay2Value(_LeftGun_type_speed, _ICON_Speed);
+                }
+                break;
+            case _TYPE_CCS2_Liquid:
+            case _TYPE_CCS2_Natural:
+                ChangeDisplay2Value(_LeftGun_type_pic_U, _ICON_CCS2_GUN_U);
+                ChangeDisplay2Value(_LeftGun_type_pic_L, _ICON_CCS2_GUN_L);
+                ChangeDisplay2Value(_LeftGun_type_name, _ICON_CCS2_Name);
+                ChangeDisplay2Value(_LeftGun_Symbol_Icon, _ICON_CONNECTOR_C);
+                if (pDcChargingInfo->CCSGunType == _TYPE_CCS2_Liquid) {
+                    ChangeDisplay2Value(_LeftGun_type_speed, _ICON_High_Speed);
+                } else {
+                    ChangeDisplay2Value(_LeftGun_type_speed, _ICON_Speed);
+                }
+                break;
+            }
 
-            ChangeDisplay2Value(_LeftGun_type_pic_U,_ICON_CCS2_GUN_U);
-            ChangeDisplay2Value(_LeftGun_type_pic_L,_ICON_CCS2_GUN_L);
-            ChangeDisplay2Value(_LeftGun_type_name,_ICON_CCS2_Name);
-            ChangeDisplay2Value(_LeftGun_type_speed,_ICON_High_Speed);
-            ChangeDisplay2Value(_RightGun_type_pic_U,_ICON_CCS2_GUN_U);
-            ChangeDisplay2Value(_RightGun_type_pic_L,_ICON_CCS2_GUN_L);
-            ChangeDisplay2Value(_RightGun_type_name,_ICON_CCS2_Name);
-            ChangeDisplay2Value(_RightGun_type_speed,_ICON_High_Speed);
-            sleep(1);
-            ChangeDisplay2Value(_LeftGun_type_pic_U,_ICON_CCS1_GUN_U);
-            ChangeDisplay2Value(_LeftGun_type_pic_L,_ICON_CCS1_GUN_L);
-            ChangeDisplay2Value(_LeftGun_type_name,_ICON_CCS1_Name);
-            ChangeDisplay2Value(_LeftGun_type_speed,_ICON_Speed);
-
-            ChangeDisplay2Value(_RightGun_type_pic_U,_ICON_CCS1_GUN_U);
-            ChangeDisplay2Value(_RightGun_type_pic_L,_ICON_CCS1_GUN_L);
-            ChangeDisplay2Value(_RightGun_type_name,_ICON_CCS1_Name);
-            ChangeDisplay2Value(_RightGun_type_speed,_ICON_Speed);
+            pDcChargingInfo = (struct ChargingInfoData*)GetDcChargingInfoData(RIGHT_GUN_NUM);
+            switch (pDcChargingInfo->CCSGunType) {
+            case _TYPE_CCS1_Liquid:
+            case _TYPE_CCS1_Natural:
+                ChangeDisplay2Value(_RightGun_type_pic_U, _ICON_CCS1_GUN_U);
+                ChangeDisplay2Value(_RightGun_type_pic_L, _ICON_CCS1_GUN_L);
+                ChangeDisplay2Value(_RightGun_type_name, _ICON_CCS1_Name);
+                if (pDcChargingInfo->CCSGunType == _TYPE_CCS1_Liquid) {
+                    ChangeDisplay2Value(_RightGun_type_speed, _ICON_High_Speed);
+                    ChangeDisplay2Value(_RightGun_Symol_Icon, _ICON_CONNECTOR_B);
+                } else {
+                    ChangeDisplay2Value(_RightGun_Symol_Icon, _ICON_CONNECTOR_A);
+                    ChangeDisplay2Value(_RightGun_type_speed, _ICON_Speed);
+                }
+                break;
+            case _TYPE_CCS2_Liquid:
+            case _TYPE_CCS2_Natural:
+                ChangeDisplay2Value(_RightGun_type_pic_U, _ICON_CCS2_GUN_U);
+                ChangeDisplay2Value(_RightGun_type_pic_L, _ICON_CCS2_GUN_L);
+                ChangeDisplay2Value(_RightGun_type_name, _ICON_CCS2_Name);
+                ChangeDisplay2Value(_RightGun_Symol_Icon, _ICON_CONNECTOR_D);
+                if (pDcChargingInfo->CCSGunType == _TYPE_CCS2_Liquid) {
+                    ChangeDisplay2Value(_RightGun_type_speed, _ICON_High_Speed);
+                } else {
+                    ChangeDisplay2Value(_RightGun_type_speed, _ICON_Speed);
+                }
+                break;
+            }
+            sleep(5);
             break;
         case __VIEW_LEFT_CHARGE_:
-            for(i=0;i<=100;i++) {
-                ShowViewChargingSoc(LEFT_GUN_NUM,i);
+            for (i = 0; i <= 100; i++) {
+                ShowViewChargingSoc(LEFT_GUN_NUM,66+i/20);
                 ShowViewChargingTime(LEFT_GUN_NUM,i);
                 ShowViewCharingMoney(LEFT_GUN_NUM,i);
-                ShowViewChargingPower(LEFT_GUN_NUM,i);
-                ShowViewChargingEngery(LEFT_GUN_NUM,i);
+                ShowViewChargingPower(LEFT_GUN_NUM, (float)(66 + i *0.1));
+                ShowViewChargingEngery(LEFT_GUN_NUM,50+i/30);
                 usleep(100000);
             }
             break;
         case __VIEW_RIGHT_CHARGE_:
-            for(i=0;i<=100;i++) {
-                ShowViewChargingSoc(RIGHT_GUN_NUM,i);
+            for (i = 0; i <= 100; i++) {
+                ShowViewChargingSoc(RIGHT_GUN_NUM,88+i/25);
                 ShowViewChargingTime(RIGHT_GUN_NUM,i);
                 ShowViewCharingMoney(RIGHT_GUN_NUM,i);
-                ShowViewChargingPower(RIGHT_GUN_NUM,i);
-                ShowViewChargingEngery(RIGHT_GUN_NUM, i);
+                ShowViewChargingPower(RIGHT_GUN_NUM, (float)(88 + i*0.1));
+                ShowViewChargingEngery(RIGHT_GUN_NUM, 30+i/30);
                 usleep(100000);
             }
             break;
         case __VIEW_ALL_CHARGE_:
             for(i=0;i<=100;i++) {
-                ShowViewChargingSoc(LEFT_GUN_NUM,i);
-                ShowViewChargingTime(LEFT_GUN_NUM,i);
-                ShowViewCharingMoney(LEFT_GUN_NUM,i);
-                ShowViewChargingPower(LEFT_GUN_NUM,i);
-                ShowViewChargingEngery(LEFT_GUN_NUM, i/10);
-
-                ShowViewChargingSoc(RIGHT_GUN_NUM,i);
-                ShowViewChargingTime(RIGHT_GUN_NUM,i);
-                ShowViewCharingMoney(RIGHT_GUN_NUM,i);
-                ShowViewChargingPower(RIGHT_GUN_NUM,i);
-                ShowViewChargingEngery(RIGHT_GUN_NUM, i/10);
+                ShowViewChargingSoc(LEFT_GUN_NUM, 66 + i / 20);
+                ShowViewChargingTime(LEFT_GUN_NUM, i);
+                ShowViewCharingMoney(LEFT_GUN_NUM, i);
+                ShowViewChargingPower(LEFT_GUN_NUM, (float)(66 + i*0.1));
+                ShowViewChargingEngery(LEFT_GUN_NUM, 50 + i / 30);
+
+                ShowViewChargingSoc(RIGHT_GUN_NUM, 88 + i / 25);
+                ShowViewChargingTime(RIGHT_GUN_NUM, i);
+                ShowViewCharingMoney(RIGHT_GUN_NUM, i);
+                ShowViewChargingPower(RIGHT_GUN_NUM, (float)(88 + i *0.1));
+                ShowViewChargingEngery(RIGHT_GUN_NUM, 30 + i / 30);
                 usleep(100000);
             }
             break;
@@ -1007,23 +1065,23 @@ void DemoFunction()
 
             DisplayValueToLcm(_Count_Down_Time, (uint8_t *)value, sizeof(value));
             if (pSysInfo->PageIndex == 17 || pSysInfo->PageIndex == 28) {
-                for (i = 0; i <= 100; i++) {
-                    ChangeDisplay2Value(_Summary_total_money, i);
-                    ChangeDisplay2Value(_Summary_cal_Total_money, i);
-                    ChangeDisplay2Value(_Summary_Start_time_hr, i);
-                    ChangeDisplay2Value(_Summary_Start_time_min, i);
-                    ChangeDisplay2Value(_Summary_end_time_hr, i);
-                    ChangeDisplay2Value(_Summary_end_time_min, i);
-                    ChangeDisplay2Value(_Summary_duration_min, i);
-                    ChangeDisplay2Value(_Summary_duration_sec, i);
-
-                    ChangeDisplay2Value(_Summary_cap, i);
-                    ChangeDisplay2Value(_Summary_cal_discount,i);
-                    ChangeDisplay2Value(_Summary_cal_Settlement,i);
-                    ChangeDisplay2Value(_Summary_max_power, i);
-                    ChangeDisplay2Value(_Summary_average_power, i);
-                    usleep(100000);
-                }
+                //for (i = 0; i <= 100; i++) {
+                    ChangeDisplay2Value(_Summary_total_money, 888);
+                    ChangeDisplay2Value(_Summary_cal_Total_money, 888);
+                    ChangeDisplay2Value(_Summary_Start_time_hr, 6);
+                    ChangeDisplay2Value(_Summary_Start_time_min, 6);
+                    ChangeDisplay2Value(_Summary_end_time_hr, 8);
+                    ChangeDisplay2Value(_Summary_end_time_min, 8);
+                    ChangeDisplay2Value(_Summary_duration_min, 88);
+                    ChangeDisplay2Value(_Summary_duration_sec, 88);
+
+                    ChangeDisplay2LongValue(_Summary_cap, 88888);
+                    ChangeDisplay2Value(_Summary_cal_discount,88);
+                    ChangeDisplay2Value(_Summary_cal_Settlement,888);
+                    ChangeDisplay2Value(_Summary_max_power, 888);
+                    ChangeDisplay2Value(_Summary_average_power, 888);
+                    sleep(5);
+                //}
             }
             break;
         case __START_AUTHORIZE_:
@@ -1038,14 +1096,7 @@ void DemoFunction()
                 usleep(100000);
             }
             break;
-        case 8:
-        case 16:
-        case 27:
-        case 18:
-        case 19:
-        case 20:
         case 29:
-        case 30:
             break;
         case 21:
             ShowCabientVersion();
@@ -1053,9 +1104,6 @@ void DemoFunction()
         case 22:
             ShowDispenserVersion();
             break;
-        case 25:
-        case 26:
-            break;
         case 5:
             pSysInfo->CurGunSelected = 0;
             ChangeQrCode();
@@ -1066,6 +1114,19 @@ void DemoFunction()
             ChangeQrCode();
             sleep(5);
             break;
+        case 8:
+        case 16:
+        case 18:
+        case 19:
+        case 25:
+        case 26:
+        case 27:
+        case 30:
+        case 32:
+        case 33:
+        case 34:
+            sleep(5);
+            break;
     }
 }
 void ShowCabientVersionDefaultText()
@@ -1346,12 +1407,12 @@ int main(void)
             }
             */
             /*
-            pSysInfo->PageIndex = index;
+            pSysInfo->PageIndex = DemoPage[ShmDcCommonData->DemoCount];
             GetCurrentPage();
-            ChangeToOtherPage(index);
+            ChangeToOtherPage(DemoPage[ShmDcCommonData->DemoCount]);
             GetCurrentPage();
             DemoFunction();
-            index >= 36 ? index = 1 : index++;
+            ShmDcCommonData->DemoCount >= 21 ? ShmDcCommonData->DemoCount = 0 : ShmDcCommonData->DemoCount++;
             //*/
             usleep(100000);
 

+ 33 - 0
EVSE/Projects/DD360UCar/Apps/ModuleLcmCtrl/Module_LcmControl.h

@@ -85,6 +85,8 @@
 #define _Confirm_Gun_Left_symbol    0x0021
 #define _Confirm_Gun_Right_symbol   0x0023
 #define _ProgressBar_LEVEL          0x0025
+#define _LeftGun_Symbol_Icon        0x0027
+#define _RightGun_Symol_Icon        0x0029
 #define _Percent_Number_Digits      0x0031
 #define _Percent_Number_Tens        0x0033
 #define _Percent_Number_Hundreds    0x0035
@@ -143,6 +145,31 @@
 #define _Text_Warming3              0x1130
 #define _Text_Warming4              0x1140
 
+int DemoPage[22] = {
+    1, // All Idle
+    5, // Left Gun authorize
+    6, // Authorizing
+    8, // Left gun plugin Gun
+    32, // preparing
+    33, // Prepare for EVSE
+    34, // Precharging
+    2,  // Left Gun Charging
+    31, // Right Gun authorize
+    6,  // Authorizing
+    30, // Right Gun plug in
+    32, // preparing
+    33, // Prepare for EVSE
+    34, // Precharging
+    04, // All Gun charging
+    25, // Stop Left Gun
+    16, // Left Gun plug out
+    17, // Left Gun summary
+    03, // Right gun charging
+    26, // Right Gun stop
+    27, // Right Gun Plug out
+    28, // Right Gun summary
+};
+
 enum _ICON_LIST_ {
     _ICON_Empty,
     _ICON_CCS1_GUN_U = 1,
@@ -185,6 +212,12 @@ enum _ICON_LIST_ {
     _ICON_Card_Money,
     _ICON_CONNECTOR_1,
     _ICON_CONNECTOR_2,
+    _ICON_CONNECTOR_A = 73,
+    _ICON_CONNECTOR_B,
+    _ICON_CONNECTOR_C,
+    _ICON_CONNECTOR_D,
+    _ICON_CONNECTOR_E,
+    _ICON_CONNECTOR_F,
     /*
     _ICON_ProgressBar_10 = 60,
     _ICON_ProgressBar_10_cantrary,

BIN
EVSE/Projects/DD360UCar/Images/ramdisk.gz


BIN
EVSE/Projects/DD360UCar/output/FactoryConfig


BIN
EVSE/Projects/DD360UCar/output/Module_ChkSysTask


BIN
EVSE/Projects/DD360UCar/output/Module_DoComm


BIN
EVSE/Projects/DD360UCar/output/Module_EvComm


BIN
EVSE/Projects/DD360UCar/output/Module_EventLogging


BIN
EVSE/Projects/DD360UCar/output/Module_InternalComm


BIN
EVSE/Projects/DD360UCar/output/Module_LcmControl


BIN
EVSE/Projects/DD360UCar/output/Module_PrimaryComm


BIN
EVSE/Projects/DD360UCar/output/Module_UpdateFW


BIN
EVSE/Projects/DD360UCar/output/ReadCmdline


BIN
EVSE/Projects/DD360UCar/output/main


BIN
EVSE/Projects/DD360UCar/output/simulation


+ 8 - 4
EVSE/Projects/define.h

@@ -329,6 +329,9 @@ enum CoreProfile {
      StatusNotificationPeriodically,
      StatusNotificationInterval,
 	 PreAuthAmount,
+	 isEnableLocalPowerSharing,
+	 PowerSharingServerIP,
+	 EVCCID_PREFIX,
      ConfigurationVersion,
 	 _CoreProfile_CNT
 };
@@ -342,10 +345,11 @@ enum OCPP_START_ID_TYPE {
     IdTokenType_Central=0,
     IdTokenType_eMAID,
     IdTokenType_ISO14443,
+	IdTokenType_ISO15693,
     IdTokenType_KeyCode,
     IdTokenType_Local,
-    IdTokenType_NoAuthorization,
-    IdTokenType_ISO15693
+	IdTokenType_MacAddress,
+    IdTokenType_NoAuthorization
 };
 /**************************************************************************************/
 /****structure SysConfigData => shall store the data to NAND flash****************/
@@ -573,7 +577,7 @@ struct SysConfigData
 	struct LED				LedInfo;					// LED configuration info
 	unsigned char			ShowInformation;
 	unsigned char           isReqFirstUpgrade;          //EVSE is request first upgrade from PH server
-	unsigned char           isEnableLocalPowerSharging; //0: Disable power sharing  1: Master	2: Slave
+	unsigned char           isEnableLocalPowerSharing; //0: Disable power sharing  1: Master	2: Slave
 	unsigned char           StopChargingByButton;       //0: Disable  1: Enable
     struct LCD_NOUSE        Legacy_LcdOveride;          // LCD override info (no use anymore)
     struct TTIA             TTIA_Info;                  // TTIA configuration struct
@@ -626,7 +630,7 @@ struct ChargingInfoData
 	unsigned char PilotState;//1:state A, 2:State B1, 3:State B2, 4:State C, 5:State D, 6:State E, 7:State F, 8: Pilot error
 	unsigned char PilotDuty;					// 0~100%
 	unsigned char			StartUserId[32];			// This ID is trigger start charging event user by RFID, back-end, BLE.
-	unsigned char           StartIdType;                // 0: Central   1: eMAID    2: ISO14443 3: ISO15693 4: KeyCode  5: Local    6: MaxAddress   7: NoAuthorization
+	unsigned char           StartIdType;                // 0: Central   1: eMAID    2: ISO14443 3: ISO15693 4: KeyCode  5: Local    6: MacAddress   7: NoAuthorization
 	unsigned char			StartDateTime[32];			// Charging cycle start date time
 	unsigned char			StopDateTime[32];			// Charging cycle stop date time
 	unsigned char			StartMethod;

+ 14 - 2
EVSE/rootfs/var/www/set_backend.php

@@ -267,9 +267,14 @@ CORE STYLES ABOVE - NO TOUCHY
 											<label>Local Loading Balance</label>
 											<select class="form-control" id="isEnableLocalPowerSharging" name="isEnableLocalPowerSharging" onChange="isEnableLocalPowerSharging_changed()">
 												<option value="0" <?php echo $obj->{'isEnableLocalPowerSharging'}=="0"?"selected":""?>>disable</option>
-												<option value="1" <?php echo $obj->{'isEnableLocalPowerSharging'}=="1"?"selected":""?>>enable</option>
+												<option value="1" <?php echo $obj->{'isEnableLocalPowerSharging'}=="1"?"selected":""?>>master</option>
+												<option value="2" <?php echo $obj->{'isEnableLocalPowerSharging'}=="2"?"selected":""?>>slave</option>
 											</select>
 										</div>
+										<div id="PowerSharingServerIPDiv" class="form-group" style="display:<?php echo $am101;?>">
+											<label>Power Sharing Server Ip</label>
+											<input type="text" name="PowerSharingServerIP" id="PowerSharingServerIP" class="form-control" value="<?php echo $obj->{'PowerSharingServerIP'};?>">
+										</div>
 <?php } ?>
 										<div class="form-group" style="display:<?php echo $am101;?>">
 											<label>Maintain Server Connection Status</label>
@@ -393,6 +398,7 @@ CORE STYLES ABOVE - NO TOUCHY
 						"&MaintainServerSecurityPassword=" + escape(document.getElementById("MaintainServerSecurityPassword").value);
 <?php if(substr($ModelName,0,2)=="AX"){?>
 				data += "&isEnableLocalPowerSharging=" + document.getElementById("isEnableLocalPowerSharging").value;
+				data += "&PowerSharingServerIP=" + document.getElementById("PowerSharingServerIP").value;
 <?php } if(substr($ModelName,0,2)=="AX" || substr($ModelName,0,1)=="D"){?>
 				data += "&OcppReceiptrURL=" + document.getElementById("OcppReceiptrURL").value;
 <?php } ?>
@@ -533,7 +539,7 @@ CORE STYLES ABOVE - NO TOUCHY
 
 <?php if(substr($ModelName,0,2)=="AX"){?>
 	function isEnableLocalPowerSharging_changed(){
-		if(document.getElementById("isEnableLocalPowerSharging").selectedIndex==1){
+		if(document.getElementById("isEnableLocalPowerSharging").selectedIndex!=0){
 			document.getElementById("OcppServerURL").setAttribute("readOnly","true");
 			document.getElementById("MaintainServerURL").setAttribute("readOnly","true");
 			document.getElementById("ChargeBoxId").setAttribute("readOnly","true");
@@ -545,6 +551,12 @@ CORE STYLES ABOVE - NO TOUCHY
 			document.getElementById("ChargeBoxId").removeAttribute("readOnly");
 			document.getElementById("chargePointVendor").removeAttribute("readOnly");
 		}
+		if(document.getElementById("isEnableLocalPowerSharging").selectedIndex==2){
+			document.getElementById("PowerSharingServerIPDiv").style.display="block";
+		}
+		else{
+			document.getElementById("PowerSharingServerIPDiv").style.display="none";
+		}
 	}
 <?php } ?>
 <?php if(substr($ModelName,0,1)=="D" && substr($ModelName,3,1)=="C"){?>

+ 3 - 0
EVSE/rootfs/var/www/set_backend_action.php

@@ -74,6 +74,9 @@
 			checkValue("isEnableLocalPowerSharging");
 			$json['isEnableLocalPowerSharging']	= (int)$_REQUEST['isEnableLocalPowerSharging'];
 		}
+		if(isset($_REQUEST['PowerSharingServerIP'])){
+			$json['PowerSharingServerIP']	= str_replace("&amp;","&",str_replace("&quot;",'"',str_replace("&#039;","'",str_replace("&lt;","<",str_replace("&gt;",">",$_REQUEST['PowerSharingServerIP'])))));
+		}
 		if(isset($_REQUEST['OcppReceiptrURL'])){
 			$json['OcppReceiptrURL']			= str_replace("&amp;","&",str_replace("&quot;",'"',str_replace("&#039;","'",str_replace("&lt;","<",str_replace("&gt;",">",$_REQUEST['OcppReceiptrURL'])))));
 		}

+ 4 - 4
EVSE/rootfs/var/www/set_system.php

@@ -510,7 +510,7 @@ img {
 				document.getElementById("startMode").style.display="block";
 				isQRCode_clicked();
 			}
-			if((document.getElementById("ModelName").value.substr(0,1) == "D" || document.getElementById("ModelName").value.substr(0,2) == "AX") && document.getElementById("AuthorisationMode").value == "0" && !document.getElementById("isAPP").checked && !document.getElementById("isRFID").checked && !document.getElementById("isQRCode").checked){
+			if((document.getElementById("ModelName").value.substr(0,1) == "D" || document.getElementById("ModelName").value.substr(0,2) == "AX") && document.getElementById("AuthorisationMode").value == "0" && !document.getElementById("isAPP").checked && !document.getElementById("isRFID").checked && !document.getElementById("isQRCode").checked && (document.getElementById("ModelName").value.substr(12,2) != "N0" && document.getElementById("ModelName").value.substr(12,2) != "N1")){
 				alert("Please choose one of 'APP、QR code、RFID'");
 				document.getElementById("isAPP").checked=true;
 				document.getElementById("isQRCode").checked=true;
@@ -538,7 +538,7 @@ img {
 		else{
 			document.getElementById("QRCodeMadeModeDiv").style.display="none";
 			document.getElementById("QRCodeContentDiv").style.display="none";
-			if((document.getElementById("ModelName").value.substr(0,1) == "D" ||document.getElementById("ModelName").value.substr(0,2) == "AX") && document.getElementById("AuthorisationMode").value == "0" && !document.getElementById("isAPP").checked && !document.getElementById("isRFID").checked){
+			if((document.getElementById("ModelName").value.substr(0,1) == "D" ||document.getElementById("ModelName").value.substr(0,2) == "AX") && document.getElementById("AuthorisationMode").value == "0" && !document.getElementById("isAPP").checked && !document.getElementById("isRFID").checked && (document.getElementById("ModelName").value.substr(12,2) != "N0" && document.getElementById("ModelName").value.substr(12,2) != "N1")){
 				alert("Please choose one of 'APP、QR code、RFID'");
 				document.getElementById("isQRCode").checked=true;
 			}
@@ -546,14 +546,14 @@ img {
 	}
 
 	function isAPP_clicked(){
-		if((document.getElementById("ModelName").value.substr(0,1) == "D" || document.getElementById("ModelName").value.substr(0,2) == "AX") && document.getElementById("AuthorisationMode").value == "0" && !document.getElementById("isQRCode").checked && !document.getElementById("isAPP").checked && !document.getElementById("isRFID").checked){
+		if((document.getElementById("ModelName").value.substr(0,1) == "D" || document.getElementById("ModelName").value.substr(0,2) == "AX") && document.getElementById("AuthorisationMode").value == "0" && !document.getElementById("isQRCode").checked && !document.getElementById("isAPP").checked && !document.getElementById("isRFID").checked && (document.getElementById("ModelName").value.substr(12,2) != "N0" && document.getElementById("ModelName").value.substr(12,2) != "N1")){
 			alert("Please choose one of 'APP、QR code、RFID'");
 			document.getElementById("isAPP").checked=true;
 		}
 	}
 
 	function isRFID_clicked(){
-		if((document.getElementById("ModelName").value.substr(0,1) == "D" || document.getElementById("ModelName").value.substr(0,2) == "AX") && document.getElementById("AuthorisationMode").value == "0" && !document.getElementById("isQRCode").checked && !document.getElementById("isAPP").checked && !document.getElementById("isRFID").checked){
+		if((document.getElementById("ModelName").value.substr(0,1) == "D" || document.getElementById("ModelName").value.substr(0,2) == "AX") && document.getElementById("AuthorisationMode").value == "0" && !document.getElementById("isQRCode").checked && !document.getElementById("isAPP").checked && !document.getElementById("isRFID").checked && (document.getElementById("ModelName").value.substr(12,2) != "N0" && document.getElementById("ModelName").value.substr(12,2) != "N1")){
 			alert("Please choose one of 'APP、QR code、RFID'");
 			document.getElementById("isRFID").checked=true;
 		}

+ 0 - 1
board-support/linux-4.9.59+gitAUTOINC+a75d8e9305-ga75d8e9305/lib/.crc7.ko.cmd

@@ -1 +0,0 @@
-cmd_lib/crc7.ko := /opt/ti-processor-sdk-linux-am335x-evm-04.02.00.09/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/arm-linux-gnueabihf-ld -EL -r  -T ./scripts/module-common.lds --build-id  -o lib/crc7.ko lib/crc7.o lib/crc7.mod.o ;  true

+ 0 - 37
board-support/linux-4.9.59+gitAUTOINC+a75d8e9305-ga75d8e9305/lib/.gen_crc32table.cmd

@@ -1,37 +0,0 @@
-cmd_lib/gen_crc32table := gcc -Wp,-MD,lib/.gen_crc32table.d -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu89     -o lib/gen_crc32table lib/gen_crc32table.c  
-
-source_lib/gen_crc32table := lib/gen_crc32table.c
-
-deps_lib/gen_crc32table := \
-  /usr/include/stdc-predef.h \
-  /usr/include/stdio.h \
-  /usr/include/features.h \
-  /usr/include/x86_64-linux-gnu/sys/cdefs.h \
-  /usr/include/x86_64-linux-gnu/bits/wordsize.h \
-  /usr/include/x86_64-linux-gnu/gnu/stubs.h \
-  /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
-  /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
-  /usr/include/x86_64-linux-gnu/bits/types.h \
-  /usr/include/x86_64-linux-gnu/bits/typesizes.h \
-  /usr/include/libio.h \
-  /usr/include/_G_config.h \
-  /usr/include/wchar.h \
-  /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
-  /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
-  /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
-  /usr/include/x86_64-linux-gnu/bits/stdio.h \
-  /usr/include/x86_64-linux-gnu/bits/stdio2.h \
-  lib/crc32defs.h \
-    $(wildcard include/config/crc32/sliceby8.h) \
-    $(wildcard include/config/crc32/sliceby4.h) \
-    $(wildcard include/config/crc32/sarwate.h) \
-    $(wildcard include/config/crc32/bit.h) \
-    $(wildcard include/config/64bit.h) \
-  /usr/include/inttypes.h \
-  /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h \
-  /usr/include/stdint.h \
-  /usr/include/x86_64-linux-gnu/bits/wchar.h \
-
-lib/gen_crc32table: $(deps_lib/gen_crc32table)
-
-$(deps_lib/gen_crc32table):