Browse Source

[Add][Modularization][Module_OcppBackend / Module_OcppBackend20]

2021.10.14 / Folus Wen

Actions:
1. Add FreeVend configuration key for configure authtication mode.

Files:
1. As follow commit history

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

Hardware PWB P/N : XXXXXXX
Hardware Version : XXXXXXX
FolusWen 3 years ago
parent
commit
5c6b3c7543

+ 28 - 1
EVSE/Modularization/ocpp20/MessageHandler.c

@@ -788,7 +788,7 @@ static int localversion=0;
 //===============================
 // Variable Version
 //===============================
-static int variableVersion=2;
+static int variableVersion=3;
 
 //===============================
 // OCPP sign variable
@@ -1737,6 +1737,14 @@ int DB_cbVariableIsCreate(void *para, int columnCount, char **columnValue, char
 		sprintf((char*)ShmOCPP20Data->ControllerComponentVariable[ChargingStation_SystemUptimeSec].variableAttribute[0].value, "0");
 		DB_variableSaveToDb(&ShmOCPP20Data->ControllerComponentVariable[ChargingStation_SystemUptimeSec]);
 
+		sprintf((char*)ShmOCPP20Data->ControllerComponentVariable[ChargingStation_FreeVend].component.name, "ChargingStation");
+		sprintf((char*)ShmOCPP20Data->ControllerComponentVariable[ChargingStation_FreeVend].variable.name, "FreeVend");
+		sprintf((char*)ShmOCPP20Data->ControllerComponentVariable[ChargingStation_FreeVend].variableCharacteristics.dataType, "%s", DataEnumTypeStr[DataEnumType_boolean]);
+		sprintf((char*)ShmOCPP20Data->ControllerComponentVariable[ChargingStation_FreeVend].variableAttribute[0].type, "%s", AttributeEnumTypeStr[AttributeEnumType_Actual]);
+		sprintf((char*)ShmOCPP20Data->ControllerComponentVariable[ChargingStation_FreeVend].variableAttribute[0].mutability, "%s", MutabilityEnumTypeStr[MutabilityEnumType_ReadWrite]);
+		sprintf((char*)ShmOCPP20Data->ControllerComponentVariable[ChargingStation_FreeVend].variableAttribute[0].value, (ShmSysConfigAndInfo->SysConfig.AuthorisationMode?"TRUE":"FALSE"));
+		DB_variableSaveToDb(&ShmOCPP20Data->ControllerComponentVariable[ChargingStation_FreeVend]);
+
 		/* Connector Required item */
 		sprintf((char*)ShmOCPP20Data->ControllerComponentVariable[Connector_Available].component.name, "Connector");
 		sprintf((char*)ShmOCPP20Data->ControllerComponentVariable[Connector_Available].variable.name, "Available");
@@ -2676,6 +2684,9 @@ int DB_cbVariableIsCreate(void *para, int columnCount, char **columnValue, char
 		sprintf((char*)ShmOCPP20Data->ControllerComponentVariable[ChargingStation_SystemUptimeSec].component.name, "ChargingStation");
 		sprintf((char*)ShmOCPP20Data->ControllerComponentVariable[ChargingStation_SystemUptimeSec].variable.name, "SystemUptimeSec");
 
+		sprintf((char*)ShmOCPP20Data->ControllerComponentVariable[ChargingStation_FreeVend].component.name, "ChargingStation");
+		sprintf((char*)ShmOCPP20Data->ControllerComponentVariable[ChargingStation_FreeVend].variable.name, "FreeVend");
+
 		/* Connector Required item */
 		sprintf((char*)ShmOCPP20Data->ControllerComponentVariable[Connector_Available].component.name, "Connector");
 		sprintf((char*)ShmOCPP20Data->ControllerComponentVariable[Connector_Available].variable.name, "Available");
@@ -14396,6 +14407,11 @@ int handleGetVariablesRequest(char *uuid, char *payload)
 									sprintf((char*)ShmOCPP20Data->ControllerComponentVariable[idx_var].variableAttribute[0].value, "%ld", s_info.uptime);
 								}
 							}
+							else if((strcmp((char*)ShmOCPP20Data->GetVariables.getVariableData[idx].component.name, "ChargingStation") == 0) &&
+									(strcmp((char*)ShmOCPP20Data->GetVariables.getVariableData[idx].variable.name, "FreeVend") == 0))
+							{
+								sprintf((char*)ShmOCPP20Data->GetVariables.Response_getVariableResult[idx].attributeValue, "%s", (ShmSysConfigAndInfo->SysConfig.AuthorisationMode?"TRUE":"FALSE"));
+							}
 							else
 							{
 								strcpy((char*)ShmOCPP20Data->GetVariables.Response_getVariableResult[idx].attributeValue, (char*)ShmOCPP20Data->ControllerComponentVariable[idx_var].variableAttribute[0].value);
@@ -16628,6 +16644,17 @@ int handleSetVariablesRequest(char *uuid, char *payload)
 							{
 								HeartBeatWaitTime = (atoi((char*)ShmOCPP20Data->ControllerComponentVariable[idx_var].variableAttribute[0].value)<10) ? 10 : atoi((char*)ShmOCPP20Data->ControllerComponentVariable[idx_var].variableAttribute[0].value);
 							}
+
+							if((strstr((char*)ShmOCPP20Data->SetVariables.setVariableData[idx].component.name, "ChargingStation") != NULL) && (strstr((char*)ShmOCPP20Data->SetVariables.setVariableData[idx].variable.name, "FreeVend") != NULL))
+							{
+								char tmp[ARRAY_SIZE(ShmOCPP20Data->ControllerComponentVariable[idx_var].variableAttribute[0].value)];
+
+								for(int idx=0;idx<ARRAY_SIZE(tmp);idx++)
+									tmp[idx] = tolower(ShmOCPP20Data->ControllerComponentVariable[idx_var].variableAttribute[0].value[idx]);
+
+								ShmSysConfigAndInfo->SysConfig.AuthorisationMode =((strstr((char*)tmp, "true") != NULL)? 1 : 0);
+								StoreUsrConfigData(&ShmSysConfigAndInfo->SysConfig);
+							}
 						}
 					}
 				}

+ 75 - 2
EVSE/Modularization/ocppfiles/MessageHandler.c

@@ -9061,6 +9061,11 @@ int handleChangeConfigurationRequest(char *uuid, char *payload)
 		SetOcppConnStatus(FALSE);
 	}
 
+	if(((strcmp(keystr,"FreeVend")==0)) && (strcmp(comfirmstr,"Accepted")==0))
+	{
+		StoreUsrConfigData(&ShmSysConfigAndInfo->SysConfig);
+	}
+
 	return result;
 }
 
@@ -14016,7 +14021,7 @@ int initialConfigurationTable(void)
 	char sstr[256]={0};
 	int c = 0;
 	char *loc;
-	int	confVersion = 9;
+	int	confVersion = 10;
 
 	DEBUG_INFO("initialConfigurationTable...version: %d\n", confVersion);
 	//start_t = clock();
@@ -14390,6 +14395,13 @@ int initialConfigurationTable(void)
 
 		fprintf(outfile,"{\"key\":\"%s\",\"readonly\":%s,\"value\":\"%s\"}\n","SystemUptimeSec", "true", ShmOCPP16Data->ConfigurationTable.CoreProfile[SystemUptimeSec].ItemData);
 
+		// FreeVend
+		ShmOCPP16Data->ConfigurationTable.CoreProfile[FreeVend].ItemAccessibility = 1;
+		strcpy((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[FreeVend].ItemName, "Free-FreeVend");
+		strcpy((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[FreeVend].ItemData, (ShmSysConfigAndInfo->SysConfig.AuthorisationMode?"TRUE":"FALSE") );
+
+		fprintf(outfile,"{\"key\":\"%s\",\"readonly\":%s,\"value\":\"%s\"}\n","FreeVend", "false", ShmOCPP16Data->ConfigurationTable.CoreProfile[FreeVend].ItemData);
+
 		// Configuration Version
 		ShmOCPP16Data->ConfigurationTable.CoreProfile[ConfigurationVersion].ItemAccessibility = 0;
 		strcpy((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[ConfigurationVersion].ItemName, "ConfigurationVersion");
@@ -14818,6 +14830,12 @@ int initialConfigurationTable(void)
 					sprintf((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[SystemUptimeSec].ItemData, "%s", valuestr);
 				}
 
+				if(strcmp(keystr, "FreeVend") == 0)
+				{
+					ShmOCPP16Data->ConfigurationTable.CoreProfile[FreeVend].ItemAccessibility = (strcmp(readonlystr, "true")==0) ? 0 : 1;
+					sprintf((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[FreeVend].ItemData, "%s", (ShmSysConfigAndInfo->SysConfig.AuthorisationMode ? "TRUE" : "FALSE"));
+				}
+
 				if(strcmp(keystr, "ConfigurationVersion") == 0)
 				{
 					ShmOCPP16Data->ConfigurationTable.CoreProfile[ConfigurationVersion].ItemAccessibility = (strcmp(readonlystr, "true")==0) ? 0 : 1;
@@ -15314,6 +15332,15 @@ void StoreConfigurationTable(void)
 	fprintf(outfile,"{\"key\":\"%s\",\"readonly\":%s,\"value\":\"%s\"}\n","SystemUptimeSec", "true", (char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[SystemUptimeSec].ItemData);
 
 
+	// FreeVend
+	/*
+	ShmOCPP16Data->ConfigurationTable.CoreProfile[FreeVend].ItemAccessibility = 1;
+	strcpy((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[FreeVend].ItemName, "FreeVend");
+	strcpy((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[FreeVend].ItemData, "FALSE" );
+	*/
+
+	fprintf(outfile,"{\"key\":\"%s\",\"readonly\":%s,\"value\":\"%s\"}\n","FreeVend", "false", (char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[FreeVend].ItemData);
+
 	// ConfigurationVersion
 	/*
 	ShmOCPP16Data->ConfigurationTable.CoreProfile[ConfigurationVersion].ItemAccessibility = 1;
@@ -16231,6 +16258,24 @@ void getKeyValue(char *keyReq)
 			  isKnowKey = TRUE;
 		  }
 
+	      if(isEmpty ||  strcmp(keyReq, "FreeVend") == 0 )
+	      {
+	    	  strcpy((char *)ShmOCPP16Data->GetConfiguration.Key[GetConfiguration_FreeVend].Item, "FreeVend");
+	    	  strcpy((char *)ShmOCPP16Data->GetConfiguration.ResponseConfigurationKey[GetConfiguration_FreeVend].Key, "FreeVend");
+
+	    	  if(ShmOCPP16Data->ConfigurationTable.CoreProfile[FreeVend].ItemAccessibility == 1)
+	    	  {
+	    		  strcpy((char *)ShmOCPP16Data->GetConfiguration.ResponseConfigurationKey[GetConfiguration_FreeVend].ReadOnly, "0"/*"FALSE"*/);
+	    	  }
+	    	  else
+	    	  {
+	    		  strcpy((char *)ShmOCPP16Data->GetConfiguration.ResponseConfigurationKey[GetConfiguration_FreeVend].ReadOnly, "1"/*"TRUE"*/);
+	    	  }
+
+	    	  strcpy((char *)ShmOCPP16Data->GetConfiguration.ResponseConfigurationKey[GetConfiguration_FreeVend].Value, (ShmSysConfigAndInfo->SysConfig.AuthorisationMode?"TRUE":"FALSE"));
+	    	  isKnowKey = TRUE;
+	      }
+
 	      if(isEmpty ||  strcmp(keyReq, "ConfigurationVersion") == 0 )
 		  {
 			  strcpy((char *)ShmOCPP16Data->GetConfiguration.Key[GetConfiguration_ConfigurationVersion].Item, "ConfigurationVersion");
@@ -17372,13 +17417,41 @@ int setKeyValue(char *key, char *value)
     {
 		isSuccess = NotSupported;
     }
+
+    if(strcmp(key, "FreeVend") == 0)
+    {
+        if(ShmOCPP16Data->ConfigurationTable.CoreProfile[FreeVend].ItemAccessibility == 1)
+        {
+    		strcpy(str, (const char*)value);
+    		for(int i = 0; str[i]; i++)
+    		{
+    		  str[i] = tolower(str[i]);
+    		}
+
+        	ShmSysConfigAndInfo->SysConfig.AuthorisationMode = ((strcmp(str, "true")==0) ? 1 : 0 );
+        	sprintf((char *)ShmOCPP16Data->ConfigurationTable.CoreProfile[FreeVend].ItemData, "%s", (strcmp(str, "true")==0) ?"TRUE":"FALSE" );
+
+        	isSuccess = ConfigurationStatus_Accepted;
+        }
+        else
+        {
+            isSuccess = ConfigurationStatus_Rejected;
+        }
+
+    }
+
 #if 0
     //For OCPP Test Case
     if(strcmp(key, "LocalAuthorizationListEnabled") == 0)
     {
         if(ShmOCPP16Data->ConfigurationTable.LocalAuthListManagementProfile[LocalAuthListEnabled].ItemAccessibility == 1)
         {
-          sprintf((char *)ShmOCPP16Data->ConfigurationTable.LocalAuthListManagementProfile[LocalAuthListEnabled].ItemData, "%s", (strcmp(value, "true")==0) ?"TRUE":"FALSE" );
+    		strcpy(str, (const char*)value);
+    		for(int i = 0; str[i]; i++)
+    		{
+    		  str[i] = tolower(str[i]);
+    		}
+        	sprintf((char *)ShmOCPP16Data->ConfigurationTable.LocalAuthListManagementProfile[LocalAuthListEnabled].ItemData, "%s", (strcmp(str, "true")==0) ?"TRUE":"FALSE" );
         	isSuccess = ConfigurationStatus_Accepted;
         	//updateSetting("LocalAuthorizationListEnabled", (char *)ShmOCPP16Data->ConfigurationTable.LocalAuthListManagementProfile[LocalAuthListEnabled].ItemData);
         }

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

@@ -396,6 +396,7 @@ enum GetConfigurationKey {
 	GetConfiguration_NextTimeOffsetTransitionDateTime,
 	GetConfiguration_TimeOffsetNextTransition,
 	GetConfiguration_SystemUptimeSec,
+	GetConfiguration_FreeVend,
 	GetConfiguration_LocalAuthListEnabled,
 	GetConfiguration_LocalAuthListMaxLength,
 	GetConfiguration_SendLocalListMaxLength,

+ 75 - 2
EVSE/Modularization/ocppph/MessageHandler.c

@@ -8797,6 +8797,11 @@ int handleChangeConfigurationRequest(char *uuid, char *payload)
 		SetOcppConnStatus(FALSE);
 	}
 
+	if(((strcmp(keystr,"FreeVend")==0)) && (strcmp(comfirmstr,"Accepted")==0))
+	{
+		StoreUsrConfigData(&ShmSysConfigAndInfo->SysConfig);
+	}
+
 	return result;
 }
 
@@ -13749,7 +13754,7 @@ int initialConfigurationTable(void)
 	char sstr[256]={0};
 	int c = 0;
 	char *loc;
-	int	confVersion = 9;
+	int	confVersion = 10;
 
 	DEBUG_INFO("initialConfigurationTable...version: %d\n", confVersion);
 	//start_t = clock();
@@ -14102,6 +14107,13 @@ int initialConfigurationTable(void)
 
 		fprintf(outfile,"{\"key\":\"%s\",\"readonly\":%s,\"value\":\"%s\"}\n","SystemUptimeSec", "true", ShmOCPP16DataPH->ConfigurationTable.CoreProfile[SystemUptimeSec].ItemData);
 
+		// FreeVend
+		ShmOCPP16DataPH->ConfigurationTable.CoreProfile[FreeVend].ItemAccessibility = 1;
+		strcpy((char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[FreeVend].ItemName, "FreeVend");
+		strcpy((char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[FreeVend].ItemData, (ShmSysConfigAndInfo->SysConfig.AuthorisationMode?"TRUE":"FALSE") );
+
+		fprintf(outfile,"{\"key\":\"%s\",\"readonly\":%s,\"value\":\"%s\"}\n","FreeVend", "false", ShmOCPP16DataPH->ConfigurationTable.CoreProfile[FreeVend].ItemData);
+
 		// Configuration Version
 		ShmOCPP16DataPH->ConfigurationTable.CoreProfile[ConfigurationVersion].ItemAccessibility = 0;
 		strcpy((char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[ConfigurationVersion].ItemName, "ConfigurationVersion");
@@ -14513,6 +14525,12 @@ int initialConfigurationTable(void)
 					sprintf((char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[SystemUptimeSec].ItemData, "%d", atoi(valuestr));
 				}
 
+				if(strcmp(keystr, "FreeVend") == 0)
+				{
+					ShmOCPP16DataPH->ConfigurationTable.CoreProfile[FreeVend].ItemAccessibility = (strcmp(readonlystr, "true")==0) ? 0 : 1;
+					sprintf((char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[FreeVend].ItemData, "%s", (ShmSysConfigAndInfo->SysConfig.AuthorisationMode ? "TRUE" : "FALSE"));
+				}
+
 				if(strcmp(keystr, "ConfigurationVersion") == 0)
 				{
 					ShmOCPP16DataPH->ConfigurationTable.CoreProfile[ConfigurationVersion].ItemAccessibility = (strcmp(readonlystr, "true")==0) ? 0 : 1;
@@ -14981,6 +14999,15 @@ void StoreConfigurationTable(void)
 
 	fprintf(outfile,"{\"key\":\"%s\",\"readonly\":%s,\"value\":\"%s\"}\n","SystemUptimeSec", "true", (char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[SystemUptimeSec].ItemData);
 
+	// FreeVend
+	/*
+	ShmOCPP16DataPH->ConfigurationTable.CoreProfile[FreeVend].ItemAccessibility = 1;
+	strcpy((char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[FreeVend].ItemName, "FreeVend");
+	strcpy((char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[FreeVend].ItemData, "FALSE" );
+	*/
+
+	fprintf(outfile,"{\"key\":\"%s\",\"readonly\":%s,\"value\":\"%s\"}\n","FreeVend", "false", (char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[FreeVend].ItemData);
+
 	// ConfigurationVersion
 	/*
 	ShmOCPP16DataPH->ConfigurationTable.CoreProfile[ConfigurationVersion].ItemAccessibility = 1;
@@ -15844,6 +15871,24 @@ void getKeyValue(char *keyReq)
 			  isKnowKey = TRUE;
 		  }
 
+	      if(isEmpty ||  strcmp(keyReq, "FreeVend") == 0 )
+	      {
+	    	  strcpy((char *)ShmOCPP16DataPH->GetConfiguration.Key[GetConfiguration_FreeVend].Item, "FreeVend");
+	    	  strcpy((char *)ShmOCPP16DataPH->GetConfiguration.ResponseConfigurationKey[GetConfiguration_FreeVend].Key, "FreeVend");
+
+	    	  if(ShmOCPP16DataPH->ConfigurationTable.CoreProfile[FreeVend].ItemAccessibility == 1)
+	    	  {
+	    		  strcpy((char *)ShmOCPP16DataPH->GetConfiguration.ResponseConfigurationKey[GetConfiguration_FreeVend].ReadOnly, "0"/*"FALSE"*/);
+	    	  }
+	    	  else
+	    	  {
+	    		  strcpy((char *)ShmOCPP16DataPH->GetConfiguration.ResponseConfigurationKey[GetConfiguration_FreeVend].ReadOnly, "1"/*"TRUE"*/);
+	    	  }
+
+	    	  strcpy((char *)ShmOCPP16DataPH->GetConfiguration.ResponseConfigurationKey[GetConfiguration_FreeVend].Value, (ShmSysConfigAndInfo->SysConfig.AuthorisationMode?"TRUE":"FALSE") );
+	    	  isKnowKey = TRUE;
+	      }
+
 	      if(isEmpty ||  strcmp(keyReq, "ConfigurationVersion") == 0 )
 		  {
 			  strcpy((char *)ShmOCPP16DataPH->GetConfiguration.Key[GetConfiguration_ConfigurationVersion].Item, "ConfigurationVersion");
@@ -16952,13 +16997,41 @@ int setKeyValue(char *key, char *value)
     {
 		isSuccess = NotSupported;
     }
+
+    if(strcmp(key, "FreeVend") == 0)
+    {
+        if(ShmOCPP16DataPH->ConfigurationTable.CoreProfile[FreeVend].ItemAccessibility == 1)
+        {
+        	strcpy(str, (const char*)value);
+        	for(int i = 0; str[i]; i++)
+        	{
+        		str[i] = tolower(str[i]);
+        	}
+
+        	ShmSysConfigAndInfo->SysConfig.AuthorisationMode = ((strcmp(str, "true")==0) ? 1 : 0 );
+        	sprintf((char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[FreeVend].ItemData, "%s", (strcmp(str, "true")==0) ?"TRUE":"FALSE" );
+        	isSuccess = ConfigurationStatus_Accepted;
+        }
+        else
+        {
+            isSuccess = ConfigurationStatus_Rejected;
+        }
+
+    }
+
 #if 0
     //For OCPP Test Case
     if(strcmp(key, "LocalAuthorizationListEnabled") == 0)
     {
         if(ShmOCPP16DataPH->ConfigurationTable.LocalAuthListManagementProfile[LocalAuthListEnabled].ItemAccessibility == 1)
         {
-          sprintf((char *)ShmOCPP16DataPH->ConfigurationTable.LocalAuthListManagementProfile[LocalAuthListEnabled].ItemData, "%s", (strcmp(value, "true")==0) ?"TRUE":"FALSE" );
+        	strcpy(str, (const char*)value);
+        	for(int i = 0; str[i]; i++)
+        	{
+        		str[i] = tolower(str[i]);
+        	}
+
+        	sprintf((char *)ShmOCPP16DataPH->ConfigurationTable.LocalAuthListManagementProfile[LocalAuthListEnabled].ItemData, "%s", (strcmp(str, "true")==0) ?"TRUE":"FALSE" );
         	isSuccess = ConfigurationStatus_Accepted;
         	//updateSetting("LocalAuthorizationListEnabled", (char *)ShmOCPP16DataPH->ConfigurationTable.LocalAuthListManagementProfile[LocalAuthListEnabled].ItemData);
         }

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

@@ -393,6 +393,7 @@ enum GetConfigurationKey {
 	GetConfiguration_CustomDisplayCostAndPrice,
 	GetConfiguration_CustomIdleFeeAfterStop,
 	GetConfiguration_SystemUptimeSec,
+	GetConfiguration_FreeVend,
 	GetConfiguration_LocalAuthListEnabled,
 	GetConfiguration_LocalAuthListMaxLength,
 	GetConfiguration_SendLocalListMaxLength,

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

@@ -562,7 +562,7 @@ int Update_V2G_Status(unsigned int state_new)
         }
 
         //Updating the state formally.
-        DEBUG_INFO("%s(%02d) >> %s(%02d)\n", nameNow, state_now, nameNew, state_new);
+        DEBUG_INFO("%s(%02d) > %s(%02d)\n", nameNow, state_now, nameNew, state_new);
 
         V2gFlowStatus = state_new;
         state_now = state_new;
@@ -2199,7 +2199,7 @@ int MmeProcess(unsigned char *Buffer, int DataLength)
 	        DEBUG_PRINTF_EVCOMM_DETAIL("--- MMTYPE_CM_SET_KEY_CNF ---\n");
 	        DEBUG_PRINTF_EVCOMM_DETAIL("Result: 0x%02x\n", MmePacket->MMENTRY[0]);
 
-            DEBUG_INFO("CM_SET_KEY_CNF (SetKey: DONE)\n\n");
+            DEBUG_INFO("CM_SET_KEY_CNF (SetKey: DONE)\n");
             Update_V2G_Status(CM_SET_KEY_CNF);
 	        break;
 		}

+ 3 - 3
EVSE/Projects/AW-CCS/Apps/CCS/SystemLogMessage.c

@@ -52,8 +52,8 @@ int StoreLogMsg(const char *fmt, ...)
 	tm=localtime(&CurrentTime);
 	gettimeofday(&tv, NULL); // get microseconds, 10^-6
 
-	sprintf(Buf,"echo -n \"[%04d.%02d.%02d %02d:%02d:%02d.%06ld]%s\" >>  /Storage/SystemLog/[%04d.%02d]CCS_SystemLog",
-			tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,tv.tv_usec,
+	sprintf(Buf,"echo -n \"[%04d.%02d.%02d %02d:%02d:%02d.%03ld]%s\" >>  /Storage/SystemLog/[%04d.%02d]CCS_SystemLog",
+			tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,(tv.tv_usec/1000),
 			buffer,
 			tm->tm_year+1900,tm->tm_mon+1);
 
@@ -62,7 +62,7 @@ int StoreLogMsg(const char *fmt, ...)
 #endif
 
 #ifdef ConsloePrintLog
-	printf("[%04d.%02d.%02d %02d:%02d:%02d.%06ld]%s", tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,tv.tv_usec, buffer);
+	printf("[%04d.%02d.%02d %02d:%02d:%02d.%03ld]%s", tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,(tv.tv_usec/1000), buffer);
 #endif
 
 	return rc;

+ 238 - 196
EVSE/Projects/AW-CCS/Apps/CCS/v2g/api/api.c

@@ -83,7 +83,7 @@ unsigned char V2GTP_Tx_buf[V2GTP_MSG_TX_BUFFER_SIZE];		//(64*1024)   //65,536 =
 bitstream_t iStream;	//for V2GTP Message
 struct appHandEXIDocument exiDoc;	//for decoded V2GTP messages, i.e. EXI DOC (XML)
 
-unsigned char buf_log_exi_api[256];
+
 
 /**
  *
@@ -108,10 +108,10 @@ int StoreLogV2GMsg(const char *fmt, ...)
 	tm=localtime(&CurrentTime);
 	gettimeofday(&tv, NULL); // get microseconds, 10^-6
 
-	sprintf(Buf,"echo -n \"[%04d.%02d.%02d %02d:%02d:%02d.%06ld]%s\" >>  /Storage/SystemLog/[%04d.%02d]CCS_V2G",
-			tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,tv.tv_usec,
-			buffer,
-			tm->tm_year+1900,tm->tm_mon+1);
+	sprintf(Buf,"echo -n \"[%04d.%02d.%02d %02d:%02d:%02d.%03ld]%s\" >>  /Storage/SystemLog/[%04d.%02d]CCS_V2G",
+				tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,(tv.tv_usec/1000),
+				buffer,
+				tm->tm_year+1900,tm->tm_mon+1);
 
 
 	system((const char*)Buf);
@@ -251,7 +251,7 @@ int Check_V2G_Rx_Msg_Name_din(struct dinEXIDocument *exi_doc_DIN)
 	}
 	else
 	{
-		DEBUG_PRINTF_EXI_ENGINE_DETAIL("[ERROR] unidentified V2G_Rx_Msg\n");
+		DEBUG_PRINTF_EXI_ENGINE_DETAIL("[Error]unidentified V2G_Rx_Msg\n");
 		errn = -1;
 	}
 
@@ -377,7 +377,7 @@ int Check_V2G_Rx_Msg_Name_iso1(struct iso1EXIDocument *exi_doc_ISO1)
 		}
 		else
 		{
-			DEBUG_PRINTF_EXI_ENGINE_DETAIL("[ERROR] unexpected CCS_ENERGY_TRANSFER_MODE(%d)\n", CCS_ENERGY_TRANSFER_MODE);
+			DEBUG_PRINTF_EXI_ENGINE_DETAIL("[Error]unexpected CCS_ENERGY_TRANSFER_MODE(%d)\n", CCS_ENERGY_TRANSFER_MODE);
 			errn = -2;
 		}
 	}
@@ -413,7 +413,7 @@ int Check_V2G_Rx_Msg_Name_iso1(struct iso1EXIDocument *exi_doc_ISO1)
 	}
 	else
 	{
-		DEBUG_PRINTF_EXI_ENGINE_DETAIL("[ERROR] unidentified V2G_Rx_Msg\n");
+		DEBUG_PRINTF_EXI_ENGINE_DETAIL("[Error]unidentified V2G_Rx_Msg\n");
 		errn = -1;
 	}
 
@@ -617,7 +617,7 @@ int Check_V2G_Rx_Msg_Name_iso2(struct iso2EXIDocument *exi_doc_ISO2)
 		}
 		else
 		{
-			DEBUG_PRINTF_EXI_ENGINE_DETAIL("[ERROR] unexpected CCS_ENERGY_TRANSFER_MODE(%d)\n", CCS_ENERGY_TRANSFER_MODE);
+			DEBUG_PRINTF_EXI_ENGINE_DETAIL("[Error]unexpected CCS_ENERGY_TRANSFER_MODE(%d)\n", CCS_ENERGY_TRANSFER_MODE);
 			errn = -2;
 		}
 	}
@@ -653,7 +653,7 @@ int Check_V2G_Rx_Msg_Name_iso2(struct iso2EXIDocument *exi_doc_ISO2)
 	}
 	else
 	{
-		DEBUG_PRINTF_EXI_ENGINE_DETAIL("[ERROR] unidentified V2G_Rx_Msg\n");
+		DEBUG_PRINTF_EXI_ENGINE_DETAIL("[Error]unidentified V2G_Rx_Msg\n");
 		errn = -1;
 	}
 
@@ -3206,8 +3206,8 @@ void PRINT_XML_DOC_supportedAppProtocolReq(struct appHandEXIDocument *exi_doc)
 						 exi_doc->supportedAppProtocolReq.AppProtocol.array[i].ProtocolNamespace.charactersLen);
 
 		DEBUG_PRINTF_EXI_ENGINE_DETAIL("Version= %d.%d\n",
-			exi_doc->supportedAppProtocolReq.AppProtocol.array[i].VersionNumberMajor,
-			exi_doc->supportedAppProtocolReq.AppProtocol.array[i].VersionNumberMinor);
+										exi_doc->supportedAppProtocolReq.AppProtocol.array[i].VersionNumberMajor,
+										exi_doc->supportedAppProtocolReq.AppProtocol.array[i].VersionNumberMinor);
 
 		DEBUG_PRINTF_EXI_ENGINE_DETAIL("SchemaID: %d\n", exi_doc->supportedAppProtocolReq.AppProtocol.array[i].SchemaID);
 		DEBUG_PRINTF_EXI_ENGINE_DETAIL("Priority: %d\n", exi_doc->supportedAppProtocolReq.AppProtocol.array[i].Priority);
@@ -3226,7 +3226,7 @@ void PRINT_XML_DOC_DIN_SessionSetupReq(struct dinEXIDocument *exi_doc_DIN)
 {
     int i = 0;
     unsigned char buffer[1024]={0};
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL(" [START] Parsing SessionSetupReq\n");
+    DEBUG_PRINTF_EXI_ENGINE_DETAIL("[START] Parsing SessionSetupReq\n");
 
     //===== [Header] SessionID =====
     PRINT_V2G_MSG_din_Header(exi_doc_DIN);
@@ -3251,7 +3251,7 @@ void PRINT_XML_DOC_ISO1_SessionSetupReq(struct iso1EXIDocument *exi_doc_ISO1)
 {
     int i = 0;
     unsigned char buffer[1024]={0};
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL(" [START] Parsing SessionSetupReq\n");
+    DEBUG_PRINTF_EXI_ENGINE_DETAIL("[START] Parsing SessionSetupReq\n");
 
     //===== [Header] SessionID =====
     PRINT_V2G_MSG_iso1_Header(exi_doc_ISO1);
@@ -3276,11 +3276,10 @@ void PRINT_XML_DOC_ISO2_SessionSetupReq(struct iso2EXIDocument *exi_doc_ISO2)
 {
     int i = 0;
     unsigned char buffer[1024]={0};
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL(" [START] Parsing SessionSetupReq\n");
+    DEBUG_PRINTF_EXI_ENGINE_DETAIL("[START] Parsing SessionSetupReq\n");
 
     //===== [Header] SessionID =====
     PRINT_V2G_MSG_iso2_Header(exi_doc_ISO2);
-	DEBUG_PRINTF_EXI_ENGINE_DETAIL("\n\t\tEVCCID (%d Bytes) = ", exi_doc_ISO2->V2G_Message.Body.SessionSetupReq.EVCCID.bytesLen);
     for (i = 0; i < exi_doc_ISO2->V2G_Message.Body.SessionSetupReq.EVCCID.bytesLen; i++)
     {
         sprintf((char*)buffer, "%s%02X ", buffer, exi_doc_ISO2->V2G_Message.Body.SessionSetupReq.EVCCID.bytes[i]);
@@ -3448,7 +3447,7 @@ void PRINT_XML_DOC_DIN_ServiceAndPaymentSelectionReq(struct dinEXIDocument *exi_
         }
         default:
         {
-            DEBUG_PRINTF_EXI_ENGINE_DETAIL("SelectedPaymentOption: %d ([ERROR] Unexpected SelectedPaymentOption)\n", opt);
+            DEBUG_PRINTF_EXI_ENGINE_DETAIL("SelectedPaymentOption: %d ([Error]Unexpected SelectedPaymentOption)\n", opt);
             break;
         }
     }
@@ -3458,11 +3457,11 @@ void PRINT_XML_DOC_DIN_ServiceAndPaymentSelectionReq(struct dinEXIDocument *exi_
     for (i = 0; i< leng; i++)
     {
         DEBUG_PRINTF_EXI_ENGINE_DETAIL("SelectedServiceList (%d items): [%d-th](ServiceID, ParameterSetID, ParameterSetID_isUsed) = {%d, %d, %d}\n",
-        	leng,
-            (i+1),
-            exi_doc_DIN->V2G_Message.Body.ServicePaymentSelectionReq.SelectedServiceList.SelectedService.array[i].ServiceID,
-            exi_doc_DIN->V2G_Message.Body.ServicePaymentSelectionReq.SelectedServiceList.SelectedService.array[i].ParameterSetID,
-            exi_doc_DIN->V2G_Message.Body.ServicePaymentSelectionReq.SelectedServiceList.SelectedService.array[i].ParameterSetID_isUsed);
+										leng,
+										(i+1),
+										exi_doc_DIN->V2G_Message.Body.ServicePaymentSelectionReq.SelectedServiceList.SelectedService.array[i].ServiceID,
+										exi_doc_DIN->V2G_Message.Body.ServicePaymentSelectionReq.SelectedServiceList.SelectedService.array[i].ParameterSetID,
+										exi_doc_DIN->V2G_Message.Body.ServicePaymentSelectionReq.SelectedServiceList.SelectedService.array[i].ParameterSetID_isUsed);
     }
     DEBUG_PRINTF_EXI_ENGINE_DETAIL("[END] Parsing ServicePaymentSelectionReq\n");
 }
@@ -3513,13 +3512,13 @@ void PRINT_XML_DOC_ISO1_ServiceAndPaymentSelectionReq(struct iso1EXIDocument *ex
     for (i = 0; i< leng; i++)
     {
         DEBUG_PRINTF_EXI_ENGINE_DETAIL("SelectedServiceList (%d items): [%d-th](ServiceID, ParameterSetID, ParameterSetID_isUsed) = {%d, %d, %d}\n",
-        	leng,
-            (i+1),
-            exi_doc_ISO1->V2G_Message.Body.PaymentServiceSelectionReq.SelectedServiceList.SelectedService.array[i].ServiceID,
-            exi_doc_ISO1->V2G_Message.Body.PaymentServiceSelectionReq.SelectedServiceList.SelectedService.array[i].ParameterSetID,
-            exi_doc_ISO1->V2G_Message.Body.PaymentServiceSelectionReq.SelectedServiceList.SelectedService.array[i].ParameterSetID_isUsed);
+										leng,
+										(i+1),
+										exi_doc_ISO1->V2G_Message.Body.PaymentServiceSelectionReq.SelectedServiceList.SelectedService.array[i].ServiceID,
+										exi_doc_ISO1->V2G_Message.Body.PaymentServiceSelectionReq.SelectedServiceList.SelectedService.array[i].ParameterSetID,
+										exi_doc_ISO1->V2G_Message.Body.PaymentServiceSelectionReq.SelectedServiceList.SelectedService.array[i].ParameterSetID_isUsed);
     }
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL(" [END] Parsing PaymentServiceSelectionReq\n");
+    DEBUG_PRINTF_EXI_ENGINE_DETAIL("[END] Parsing PaymentServiceSelectionReq\n");
 }
 
 /*===========================================================================
@@ -3535,7 +3534,7 @@ void PRINT_XML_DOC_DIN_ContractAuthenticationReq(struct dinEXIDocument *exi_doc_
     //int i = 0;
     static int cnt = 0;
     cnt++;
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL(" [START] Parsing ContractAuthenticationReq (%d-th)\n", cnt);
+    DEBUG_PRINTF_EXI_ENGINE_DETAIL("[START] Parsing ContractAuthenticationReq (%d-th)\n", cnt);
 
     //===== [Header] SessionID =====
     PRINT_V2G_MSG_din_Header(exi_doc_DIN);
@@ -3543,14 +3542,12 @@ void PRINT_XML_DOC_DIN_ContractAuthenticationReq(struct dinEXIDocument *exi_doc_
 
     //[BODY(1/2)] Id
     //[Joseph, To-Do, not full implemented, yet]
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("Id_isUsed: %d\n",
-        exi_doc_DIN->V2G_Message.Body.ContractAuthenticationReq.Id_isUsed);
+    DEBUG_PRINTF_EXI_ENGINE_DETAIL("Id_isUsed: %d\n", exi_doc_DIN->V2G_Message.Body.ContractAuthenticationReq.Id_isUsed);
 
 
     //[BODY(2/2)] GenChallenge
     //[Joseph, To-Do, not full implemented, yet]
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("GenChallenge_isUsed: %d\n",
-        exi_doc_DIN->V2G_Message.Body.ContractAuthenticationReq.GenChallenge_isUsed);
+    DEBUG_PRINTF_EXI_ENGINE_DETAIL("GenChallenge_isUsed: %d\n", exi_doc_DIN->V2G_Message.Body.ContractAuthenticationReq.GenChallenge_isUsed);
 
     DEBUG_PRINTF_EXI_ENGINE_DETAIL("[END] Parsing ContractAuthenticationReq (%d-th)\n", cnt);
 }
@@ -3576,14 +3573,12 @@ void PRINT_XML_DOC_ISO1_AuthorizationReq(struct iso1EXIDocument *exi_doc_ISO1)
 
     //[BODY(1/2)] Id
     //[Joseph, To-Do, not full implemented, yet]
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("Id_isUsed: %d\n",
-        exi_doc_ISO1->V2G_Message.Body.AuthorizationReq.Id_isUsed);
+    DEBUG_PRINTF_EXI_ENGINE_DETAIL("Id_isUsed: %d\n", exi_doc_ISO1->V2G_Message.Body.AuthorizationReq.Id_isUsed);
 
 
     //[BODY(2/2)] GenChallenge
     //[Joseph, To-Do, not full implemented, yet]
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("GenChallenge_isUsed: %d\n",
-        exi_doc_ISO1->V2G_Message.Body.AuthorizationReq.GenChallenge_isUsed);
+    DEBUG_PRINTF_EXI_ENGINE_DETAIL("GenChallenge_isUsed: %d\n", exi_doc_ISO1->V2G_Message.Body.AuthorizationReq.GenChallenge_isUsed);
 
     DEBUG_PRINTF_EXI_ENGINE_DETAIL("[END] Parsing AuthorizationReq (%d-th)\n", cnt);
 }
@@ -3655,41 +3650,67 @@ void PRINT_XML_DOC_DIN_ChargeParameterDiscoveryReq(struct dinEXIDocument *exi_do
     struct dinPhysicalValueType *obj;
     DEBUG_PRINTF_EXI_ENGINE_DETAIL("DC_EVChargeParameter_isUsed: %d\n", exi_doc_DIN->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter_isUsed);
 
-    //DC_EVStatus
-    struct dinDC_EVStatusType *status;
-    status = &exi_doc_DIN->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.DC_EVStatus;
-    PRINT_dinDC_EVStatusType(status);
-
-    //EVMaximumCurrentLimit
-    obj = &exi_doc_DIN->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.EVMaximumCurrentLimit;
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVMaximumCurrentLimit: %d (DEC)\n",  GetValue_dinPhysicalValueType(obj));
-    PRINT_dinPhysicalValueType_UNIT(obj);
-
-    //EVMaximumPowerLimit
-    obj = &exi_doc_DIN->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.EVMaximumPowerLimit;
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVMaximumPowerLimit: %d (DEC)\n", GetValue_dinPhysicalValueType(obj));
-    PRINT_dinPhysicalValueType_UNIT(obj);
-
-    //EVMaximumVoltageLimit
-    obj = &exi_doc_DIN->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.EVMaximumVoltageLimit;
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVMaximumVoltageLimit: %d (DEC)\n", GetValue_dinPhysicalValueType(obj));
-    PRINT_dinPhysicalValueType_UNIT(obj);
-
-    //EVEnergyCapacity
-    obj = &exi_doc_DIN->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.EVEnergyCapacity;
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVEnergyCapacity: %d (DEC)\n", GetValue_dinPhysicalValueType(obj));
-    PRINT_dinPhysicalValueType_UNIT(obj);
-
-    //EVEnergyRequest
-    obj = &exi_doc_DIN->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.EVEnergyRequest;
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVEnergyRequest: %d (DEC)\n", GetValue_dinPhysicalValueType(obj));
-    PRINT_dinPhysicalValueType_UNIT(obj);
-
-    //FullSOC
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("FullSOC: %d \% (DEC)\n", exi_doc_DIN->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.FullSOC);
+    if(exi_doc_DIN->V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVChargeParameter_isUsed)
+    {
+    	//EVMaxCurrent
+		obj = &exi_doc_DIN->V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVChargeParameter.EVMaxCurrent;
+		DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVMaxCurrent: %d (DEC)\n", GetValue_dinPhysicalValueType(obj));
+		PRINT_dinPhysicalValueType_UNIT(obj);
+
+    	//EVMinCurrent
+		obj = &exi_doc_DIN->V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVChargeParameter.EVMinCurrent;
+		DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVMinCurrent: %d (DEC)\n", GetValue_dinPhysicalValueType(obj));
+		PRINT_dinPhysicalValueType_UNIT(obj);
+
+    	//EVMaxVoltage
+		obj = &exi_doc_DIN->V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVChargeParameter.EVMaxVoltage;
+		DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVMaxVoltage: %d (DEC)\n", GetValue_dinPhysicalValueType(obj));
+		PRINT_dinPhysicalValueType_UNIT(obj);
+
+    	//EAmount
+		obj = &exi_doc_DIN->V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVChargeParameter.EAmount;
+		DEBUG_PRINTF_EXI_ENGINE_DETAIL("EAmount: %d (DEC)\n", GetValue_dinPhysicalValueType(obj));
+		PRINT_dinPhysicalValueType_UNIT(obj);
+    }
 
-    //BulkSOC
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("BulkSOC: %d \% (DEC)\n", exi_doc_DIN->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.BulkSOC);
+    if(exi_doc_DIN->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter_isUsed)
+    {
+        //DC_EVStatus
+        struct dinDC_EVStatusType *status;
+        status = &exi_doc_DIN->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.DC_EVStatus;
+        PRINT_dinDC_EVStatusType(status);
+
+        //EVMaximumCurrentLimit
+        obj = &exi_doc_DIN->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.EVMaximumCurrentLimit;
+        DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVMaximumCurrentLimit: %d (DEC)\n",  GetValue_dinPhysicalValueType(obj));
+        PRINT_dinPhysicalValueType_UNIT(obj);
+
+        //EVMaximumPowerLimit
+        obj = &exi_doc_DIN->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.EVMaximumPowerLimit;
+        DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVMaximumPowerLimit: %d (DEC)\n", GetValue_dinPhysicalValueType(obj));
+        PRINT_dinPhysicalValueType_UNIT(obj);
+
+        //EVMaximumVoltageLimit
+        obj = &exi_doc_DIN->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.EVMaximumVoltageLimit;
+        DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVMaximumVoltageLimit: %d (DEC)\n", GetValue_dinPhysicalValueType(obj));
+        PRINT_dinPhysicalValueType_UNIT(obj);
+
+        //EVEnergyCapacity
+        obj = &exi_doc_DIN->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.EVEnergyCapacity;
+        DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVEnergyCapacity: %d (DEC)\n", GetValue_dinPhysicalValueType(obj));
+        PRINT_dinPhysicalValueType_UNIT(obj);
+
+        //EVEnergyRequest
+        obj = &exi_doc_DIN->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.EVEnergyRequest;
+        DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVEnergyRequest: %d (DEC)\n", GetValue_dinPhysicalValueType(obj));
+        PRINT_dinPhysicalValueType_UNIT(obj);
+
+        //FullSOC
+        DEBUG_PRINTF_EXI_ENGINE_DETAIL("FullSOC: %d \% (DEC)\n", exi_doc_DIN->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.FullSOC);
+
+        //BulkSOC
+        DEBUG_PRINTF_EXI_ENGINE_DETAIL("BulkSOC: %d \% (DEC)\n", exi_doc_DIN->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.BulkSOC);
+    }
 
     DEBUG_PRINTF_EXI_ENGINE_DETAIL("[END] Parsing ChargeParameterDiscoveryReq (%d-th)\n", cnt);
 }
@@ -3760,41 +3781,68 @@ void PRINT_XML_DOC_ISO1_ChargeParameterDiscoveryReq(struct iso1EXIDocument *exi_
     struct iso1PhysicalValueType *obj;
     DEBUG_PRINTF_EXI_ENGINE_DETAIL("DC_EVChargeParameter_isUsed: %d\n", exi_doc_ISO1->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter_isUsed);
 
-    //DC_EVStatus
-    struct iso1DC_EVStatusType *status;
-    status = &exi_doc_ISO1->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.DC_EVStatus;
-    if(exi_doc_ISO1->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter_isUsed)PRINT_iso1DC_EVStatusType(status);
-
-    //EVMaximumCurrentLimit
-    obj = &exi_doc_ISO1->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.EVMaximumCurrentLimit;
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVMaximumCurrentLimit: %d (DEC)\n", GetValue_iso1PhysicalValueType(obj));
-    PRINT_iso1PhysicalValueType_UNIT(obj);
-
-    //EVMaximumPowerLimit
-    obj = &exi_doc_ISO1->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.EVMaximumPowerLimit;
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVMaximumPowerLimit: %d (DEC)\n", GetValue_iso1PhysicalValueType(obj));
-    PRINT_iso1PhysicalValueType_UNIT(obj);
-
-    //EVMaximumVoltageLimit
-    obj = &exi_doc_ISO1->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.EVMaximumVoltageLimit;
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVMaximumVoltageLimit: %d (DEC)\n", GetValue_iso1PhysicalValueType(obj));
-    PRINT_iso1PhysicalValueType_UNIT(obj);
 
-    //EVEnergyCapacity
-    obj = &exi_doc_ISO1->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.EVEnergyCapacity;
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVEnergyCapacity: %d (DEC)\n", GetValue_iso1PhysicalValueType(obj));
-    PRINT_iso1PhysicalValueType_UNIT(obj);
-
-    //EVEnergyRequest
-    obj = &exi_doc_ISO1->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.EVEnergyRequest;
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVEnergyRequest: %d (DEC)\n", GetValue_iso1PhysicalValueType(obj));
-    PRINT_iso1PhysicalValueType_UNIT(obj);
-
-    //FullSOC
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("FullSOC: %d \% (DEC)\n", exi_doc_ISO1->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.FullSOC);
+    if(exi_doc_ISO1->V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVChargeParameter_isUsed)
+    {
+    	//EVMaxCurrent
+		obj = &exi_doc_ISO1->V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVChargeParameter.EVMaxCurrent;
+		DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVMaxCurrent: %d (DEC)\n", GetValue_iso1PhysicalValueType(obj));
+		PRINT_iso1PhysicalValueType_UNIT(obj);
+
+    	//EVMinCurrent
+		obj = &exi_doc_ISO1->V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVChargeParameter.EVMinCurrent;
+		DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVMinCurrent: %d (DEC)\n", GetValue_iso1PhysicalValueType(obj));
+		PRINT_iso1PhysicalValueType_UNIT(obj);
+
+    	//EVMaxVoltage
+		obj = &exi_doc_ISO1->V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVChargeParameter.EVMaxVoltage;
+		DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVMaxVoltage: %d (DEC)\n", GetValue_iso1PhysicalValueType(obj));
+		PRINT_iso1PhysicalValueType_UNIT(obj);
+
+    	//EAmount
+		obj = &exi_doc_ISO1->V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVChargeParameter.EAmount;
+		DEBUG_PRINTF_EXI_ENGINE_DETAIL("EAmount: %d (DEC)\n", GetValue_iso1PhysicalValueType(obj));
+		PRINT_iso1PhysicalValueType_UNIT(obj);
+    }
 
-    //BulkSOC
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("BulkSOC: %d \% (DEC)\n", exi_doc_ISO1->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.BulkSOC);
+    if(exi_doc_ISO1->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter_isUsed)
+    {
+        //DC_EVStatus
+        struct iso1DC_EVStatusType *status;
+        status = &exi_doc_ISO1->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.DC_EVStatus;
+        if(exi_doc_ISO1->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter_isUsed)PRINT_iso1DC_EVStatusType(status);
+
+        //EVMaximumCurrentLimit
+        obj = &exi_doc_ISO1->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.EVMaximumCurrentLimit;
+        DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVMaximumCurrentLimit: %d (DEC)\n", GetValue_iso1PhysicalValueType(obj));
+        PRINT_iso1PhysicalValueType_UNIT(obj);
+
+        //EVMaximumPowerLimit
+        obj = &exi_doc_ISO1->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.EVMaximumPowerLimit;
+        DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVMaximumPowerLimit: %d (DEC)\n", GetValue_iso1PhysicalValueType(obj));
+        PRINT_iso1PhysicalValueType_UNIT(obj);
+
+        //EVMaximumVoltageLimit
+        obj = &exi_doc_ISO1->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.EVMaximumVoltageLimit;
+        DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVMaximumVoltageLimit: %d (DEC)\n", GetValue_iso1PhysicalValueType(obj));
+        PRINT_iso1PhysicalValueType_UNIT(obj);
+
+        //EVEnergyCapacity
+        obj = &exi_doc_ISO1->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.EVEnergyCapacity;
+        DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVEnergyCapacity: %d (DEC)\n", GetValue_iso1PhysicalValueType(obj));
+        PRINT_iso1PhysicalValueType_UNIT(obj);
+
+        //EVEnergyRequest
+        obj = &exi_doc_ISO1->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.EVEnergyRequest;
+        DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVEnergyRequest: %d (DEC)\n", GetValue_iso1PhysicalValueType(obj));
+        PRINT_iso1PhysicalValueType_UNIT(obj);
+
+        //FullSOC
+        DEBUG_PRINTF_EXI_ENGINE_DETAIL("FullSOC: %d \% (DEC)\n", exi_doc_ISO1->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.FullSOC);
+
+        //BulkSOC
+        DEBUG_PRINTF_EXI_ENGINE_DETAIL("BulkSOC: %d \% (DEC)\n", exi_doc_ISO1->V2G_Message.Body.ChargeParameterDiscoveryReq.DC_EVChargeParameter.BulkSOC);
+    }
 
     DEBUG_PRINTF_EXI_ENGINE_DETAIL("[END] Parsing ChargeParameterDiscoveryReq (%d-th)\n", cnt);
 }
@@ -3901,7 +3949,7 @@ void PRINT_XML_DOC_ISO1_PreChargeReq(struct iso1EXIDocument *exi_doc_ISO1)
     //int i = 0;
     static int cnt = 0;
     cnt++;
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL(" [START] Parsing PreChargeReq (%d-th)\n", cnt);
+    DEBUG_PRINTF_EXI_ENGINE_DETAIL("[START] Parsing PreChargeReq (%d-th)\n", cnt);
 
     //===== [Header] SessionID =====
     PRINT_V2G_MSG_iso1_Header(exi_doc_ISO1);
@@ -3944,36 +3992,32 @@ void PRINT_XML_DOC_DIN_PowerDeliveryReq(struct dinEXIDocument *exi_doc_DIN)
     PRINT_V2G_MSG_din_Header(exi_doc_DIN);
 
     //===== [BODY (1/3)] ReadyToChargeState =====
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("ReadyToChargeState: %d (DEC)\n",
-            exi_doc_DIN->V2G_Message.Body.PowerDeliveryReq.ReadyToChargeState);
+    DEBUG_PRINTF_EXI_ENGINE_DETAIL("ReadyToChargeState: %d (DEC)\n", exi_doc_DIN->V2G_Message.Body.PowerDeliveryReq.ReadyToChargeState);
 
 
     //===== [BODY (2/3)] ChargingProfile =====
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("ChargingProfile_isUsed: %d (DEC)\n",
-            exi_doc_DIN->V2G_Message.Body.PowerDeliveryReq.ChargingProfile_isUsed);
+    DEBUG_PRINTF_EXI_ENGINE_DETAIL("ChargingProfile_isUsed: %d (DEC)\n", exi_doc_DIN->V2G_Message.Body.PowerDeliveryReq.ChargingProfile_isUsed);
 
 
     //===== [BODY (3/3)] DC_EVPowerDeliveryParameter =====
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("DC_EVPowerDeliveryParameter_isUsed: %d (DEC)\n",
-            exi_doc_DIN->V2G_Message.Body.PowerDeliveryReq.DC_EVPowerDeliveryParameter_isUsed);
+    DEBUG_PRINTF_EXI_ENGINE_DETAIL("DC_EVPowerDeliveryParameter_isUsed: %d (DEC)\n", exi_doc_DIN->V2G_Message.Body.PowerDeliveryReq.DC_EVPowerDeliveryParameter_isUsed);
 
-    //DC_EVStatus
-    struct dinDC_EVStatusType *status;
-    status = &exi_doc_DIN->V2G_Message.Body.PowerDeliveryReq.DC_EVPowerDeliveryParameter.DC_EVStatus;
-    PRINT_dinDC_EVStatusType(status);
-
-    //BulkChargingComplete
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("BulkChargingComplete: %d (DEC)\n",
-            exi_doc_DIN->V2G_Message.Body.PowerDeliveryReq.DC_EVPowerDeliveryParameter.BulkChargingComplete);
+    if(exi_doc_DIN->V2G_Message.Body.PowerDeliveryReq.DC_EVPowerDeliveryParameter_isUsed)
+    {
+        //DC_EVStatus
+        struct dinDC_EVStatusType *status;
+        status = &exi_doc_DIN->V2G_Message.Body.PowerDeliveryReq.DC_EVPowerDeliveryParameter.DC_EVStatus;
+        PRINT_dinDC_EVStatusType(status);
 
-    //BulkChargingComplete_isUsed
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("BulkChargingComplete_isUsed: %d (DEC)\n",
-            exi_doc_DIN->V2G_Message.Body.PowerDeliveryReq.DC_EVPowerDeliveryParameter.BulkChargingComplete_isUsed);
+        //BulkChargingComplete
+        DEBUG_PRINTF_EXI_ENGINE_DETAIL("BulkChargingComplete: %d (DEC)\n", exi_doc_DIN->V2G_Message.Body.PowerDeliveryReq.DC_EVPowerDeliveryParameter.BulkChargingComplete);
 
-    //ChargingComplete
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("ChargingComplete: %d (DEC)\n",
-            exi_doc_DIN->V2G_Message.Body.PowerDeliveryReq.DC_EVPowerDeliveryParameter.ChargingComplete);
+        //BulkChargingComplete_isUsed
+        DEBUG_PRINTF_EXI_ENGINE_DETAIL("BulkChargingComplete_isUsed: %d (DEC)\n", exi_doc_DIN->V2G_Message.Body.PowerDeliveryReq.DC_EVPowerDeliveryParameter.BulkChargingComplete_isUsed);
 
+        //ChargingComplete
+        DEBUG_PRINTF_EXI_ENGINE_DETAIL("ChargingComplete: %d (DEC)\n", exi_doc_DIN->V2G_Message.Body.PowerDeliveryReq.DC_EVPowerDeliveryParameter.ChargingComplete);
+    }
 
     DEBUG_PRINTF_EXI_ENGINE_DETAIL("[END] Parsing PowerDeliveryReq (%d-th)\n", cnt);
 }
@@ -3991,45 +4035,42 @@ void PRINT_XML_DOC_ISO1_PowerDeliveryReq(struct iso1EXIDocument *exi_doc_ISO1)
     //int i = 0;
     static int cnt = 0;
     cnt++;
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL(" [START] Parsing PowerDeliveryReq (%d-th)\n", cnt);
+    DEBUG_PRINTF_EXI_ENGINE_DETAIL("[START] Parsing PowerDeliveryReq (%d-th)\n", cnt);
 
     //===== [Header] SessionID =====
     PRINT_V2G_MSG_iso1_Header(exi_doc_ISO1);
 
 
     //===== [BODY (1/3)] ChargeProgress =====
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("ChargeProgress: %d (DEC, 0:start, 1:stop, 2:re-negotiate)\n",
-            exi_doc_ISO1->V2G_Message.Body.PowerDeliveryReq.ChargeProgress);
+    DEBUG_PRINTF_EXI_ENGINE_DETAIL("ChargeProgress: %d (DEC, 0:start, 1:stop, 2:re-negotiate)\n", exi_doc_ISO1->V2G_Message.Body.PowerDeliveryReq.ChargeProgress);
 	//iso1chargeProgressType_Start = 0,
 	//iso1chargeProgressType_Stop = 1,
 	//iso1chargeProgressType_Renegotiate = 2
 
 
     //===== [BODY (2/3)] ChargingProfile =====
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("ChargingProfile_isUsed = %d (DEC)\n",
-            exi_doc_ISO1->V2G_Message.Body.PowerDeliveryReq.ChargingProfile_isUsed);
+    DEBUG_PRINTF_EXI_ENGINE_DETAIL("ChargingProfile_isUsed = %d (DEC)\n", exi_doc_ISO1->V2G_Message.Body.PowerDeliveryReq.ChargingProfile_isUsed);
 
 
     //===== [BODY (3/3)] DC_EVPowerDeliveryParameter =====
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("DC_EVPowerDeliveryParameter_isUsed = %d (DEC)\n",
-            exi_doc_ISO1->V2G_Message.Body.PowerDeliveryReq.DC_EVPowerDeliveryParameter_isUsed);
+    DEBUG_PRINTF_EXI_ENGINE_DETAIL("DC_EVPowerDeliveryParameter_isUsed = %d (DEC)\n", exi_doc_ISO1->V2G_Message.Body.PowerDeliveryReq.DC_EVPowerDeliveryParameter_isUsed);
 
-    //DC_EVStatus
-    struct iso1DC_EVStatusType *status;
-    status = &exi_doc_ISO1->V2G_Message.Body.PowerDeliveryReq.DC_EVPowerDeliveryParameter.DC_EVStatus;
-    if(exi_doc_ISO1->V2G_Message.Body.PowerDeliveryReq.DC_EVPowerDeliveryParameter_isUsed)PRINT_iso1DC_EVStatusType(status);
+    if(exi_doc_ISO1->V2G_Message.Body.PowerDeliveryReq.DC_EVPowerDeliveryParameter_isUsed)
+    {
+        //DC_EVStatus
+        struct iso1DC_EVStatusType *status;
+        status = &exi_doc_ISO1->V2G_Message.Body.PowerDeliveryReq.DC_EVPowerDeliveryParameter.DC_EVStatus;
+        PRINT_iso1DC_EVStatusType(status);
 
-    //BulkChargingComplete
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("BulkChargingComplete = %d (DEC)\n",
-            exi_doc_ISO1->V2G_Message.Body.PowerDeliveryReq.DC_EVPowerDeliveryParameter.BulkChargingComplete);
+        //BulkChargingComplete
+        DEBUG_PRINTF_EXI_ENGINE_DETAIL("BulkChargingComplete = %d (DEC)\n", exi_doc_ISO1->V2G_Message.Body.PowerDeliveryReq.DC_EVPowerDeliveryParameter.BulkChargingComplete);
 
-    //BulkChargingComplete_isUsed
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("BulkChargingComplete_isUsed = %d (DEC)\n",
-            exi_doc_ISO1->V2G_Message.Body.PowerDeliveryReq.DC_EVPowerDeliveryParameter.BulkChargingComplete_isUsed);
+        //BulkChargingComplete_isUsed
+        DEBUG_PRINTF_EXI_ENGINE_DETAIL("BulkChargingComplete_isUsed = %d (DEC)\n", exi_doc_ISO1->V2G_Message.Body.PowerDeliveryReq.DC_EVPowerDeliveryParameter.BulkChargingComplete_isUsed);
 
-    //ChargingComplete
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("ChargingComplete = %d (DEC)\n",
-            exi_doc_ISO1->V2G_Message.Body.PowerDeliveryReq.DC_EVPowerDeliveryParameter.ChargingComplete);
+        //ChargingComplete
+        DEBUG_PRINTF_EXI_ENGINE_DETAIL("ChargingComplete = %d (DEC)\n", exi_doc_ISO1->V2G_Message.Body.PowerDeliveryReq.DC_EVPowerDeliveryParameter.ChargingComplete);
+    }
 
 
     DEBUG_PRINTF_EXI_ENGINE_DETAIL("[END] Parsing PowerDeliveryReq (%d-th)\n", cnt);
@@ -4151,36 +4192,37 @@ void PRINT_XML_DOC_ISO1_CurrentDemandReq(struct iso1EXIDocument *exi_doc_ISO1)
     DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVTargetCurrent: %d (DEC)\n", GetValue_iso1PhysicalValueType(obj));
     PRINT_iso1PhysicalValueType_UNIT(obj);
 
-
     //===== [BODY (3/10)] EVMaximumVoltageLimit =====
     DEBUG_PRINTF_EXI_ENGINE_DETAIL("DC_EVChargeParameter_isUsed: %d\n", exi_doc_ISO1->V2G_Message.Body.CurrentDemandReq.EVMaximumVoltageLimit_isUsed);
-
-    obj = &exi_doc_ISO1->V2G_Message.Body.CurrentDemandReq.EVMaximumVoltageLimit;
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVMaximumVoltageLimit: %d (DEC)\n", GetValue_iso1PhysicalValueType(obj));
-    PRINT_iso1PhysicalValueType_UNIT(obj);
-
-
+    if(exi_doc_ISO1->V2G_Message.Body.CurrentDemandReq.EVMaximumVoltageLimit_isUsed)
+    {
+    	obj = &exi_doc_ISO1->V2G_Message.Body.CurrentDemandReq.EVMaximumVoltageLimit;
+		DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVMaximumVoltageLimit: %d (DEC)\n", GetValue_iso1PhysicalValueType(obj));
+		PRINT_iso1PhysicalValueType_UNIT(obj);
+    }
 
     //===== [BODY (4/10)] EVMaximumCurrentLimit =====
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("DC_EVChargeParameter_isUsed: %d\n",
-            exi_doc_ISO1->V2G_Message.Body.CurrentDemandReq.EVMaximumCurrentLimit_isUsed);
-
-    obj = &exi_doc_ISO1->V2G_Message.Body.CurrentDemandReq.EVMaximumCurrentLimit;
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVMaximumCurrentLimit: %d (DEC)\n", GetValue_iso1PhysicalValueType(obj));
-    PRINT_iso1PhysicalValueType_UNIT(obj);
-
+    DEBUG_PRINTF_EXI_ENGINE_DETAIL("DC_EVChargeParameter_isUsed: %d\n", exi_doc_ISO1->V2G_Message.Body.CurrentDemandReq.EVMaximumCurrentLimit_isUsed);
+    if(exi_doc_ISO1->V2G_Message.Body.CurrentDemandReq.EVMaximumCurrentLimit_isUsed)
+    {
+        obj = &exi_doc_ISO1->V2G_Message.Body.CurrentDemandReq.EVMaximumCurrentLimit;
+        DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVMaximumCurrentLimit: %d (DEC)\n", GetValue_iso1PhysicalValueType(obj));
+        PRINT_iso1PhysicalValueType_UNIT(obj);
+    }
 
     //===== [BODY (5/10)] EVMaximumPowerLimit =====
     DEBUG_PRINTF_EXI_ENGINE_DETAIL("DC_EVChargeParameter_isUsed: %d\n", exi_doc_ISO1->V2G_Message.Body.CurrentDemandReq.EVMaximumPowerLimit_isUsed);
-
-    obj = &exi_doc_ISO1->V2G_Message.Body.CurrentDemandReq.EVMaximumPowerLimit;
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVMaximumPowerLimit: %d (DEC)\n", GetValue_iso1PhysicalValueType(obj));
-    PRINT_iso1PhysicalValueType_UNIT(obj);
-
+    if(exi_doc_ISO1->V2G_Message.Body.CurrentDemandReq.EVMaximumPowerLimit_isUsed)
+    {
+        obj = &exi_doc_ISO1->V2G_Message.Body.CurrentDemandReq.EVMaximumPowerLimit;
+        DEBUG_PRINTF_EXI_ENGINE_DETAIL("EVMaximumPowerLimit: %d (DEC)\n", GetValue_iso1PhysicalValueType(obj));
+        PRINT_iso1PhysicalValueType_UNIT(obj);
+    }
 
     //===== [BODY (6/10)] BulkChargingComplete =====
     DEBUG_PRINTF_EXI_ENGINE_DETAIL("BulkChargingComplete_isUsed: %d\n", exi_doc_ISO1->V2G_Message.Body.CurrentDemandReq.BulkChargingComplete_isUsed);
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("BulkChargingComplete: %d\n", exi_doc_ISO1->V2G_Message.Body.CurrentDemandReq.BulkChargingComplete);
+    if(exi_doc_ISO1->V2G_Message.Body.CurrentDemandReq.BulkChargingComplete_isUsed)
+    	DEBUG_PRINTF_EXI_ENGINE_DETAIL("BulkChargingComplete: %d\n", exi_doc_ISO1->V2G_Message.Body.CurrentDemandReq.BulkChargingComplete);
 
 
     //===== [BODY (7/10)] ChargingComplete =====
@@ -4189,19 +4231,22 @@ void PRINT_XML_DOC_ISO1_CurrentDemandReq(struct iso1EXIDocument *exi_doc_ISO1)
 
     //===== [BODY (8/10)] RemainingTimeToFullSoC =====
     DEBUG_PRINTF_EXI_ENGINE_DETAIL("DC_EVChargeParameter_isUsed: %d\n", exi_doc_ISO1->V2G_Message.Body.CurrentDemandReq.RemainingTimeToFullSoC_isUsed);
-
-    obj = &exi_doc_ISO1->V2G_Message.Body.CurrentDemandReq.RemainingTimeToFullSoC;
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("RemainingTimeToFullSoC: %d (DEC)\n", GetValue_iso1PhysicalValueType(obj));
-    PRINT_iso1PhysicalValueType_UNIT(obj);
+    if(exi_doc_ISO1->V2G_Message.Body.CurrentDemandReq.RemainingTimeToFullSoC_isUsed)
+    {
+        obj = &exi_doc_ISO1->V2G_Message.Body.CurrentDemandReq.RemainingTimeToFullSoC;
+        DEBUG_PRINTF_EXI_ENGINE_DETAIL("RemainingTimeToFullSoC: %d (DEC)\n", GetValue_iso1PhysicalValueType(obj));
+        PRINT_iso1PhysicalValueType_UNIT(obj);
+    }
 
 
     //===== [BODY (9/10)] RemainingTimeToBulkSoC =====
     DEBUG_PRINTF_EXI_ENGINE_DETAIL("DC_EVChargeParameter_isUsed: %d\n", exi_doc_ISO1->V2G_Message.Body.CurrentDemandReq.RemainingTimeToBulkSoC_isUsed);
-
-    obj = &exi_doc_ISO1->V2G_Message.Body.CurrentDemandReq.RemainingTimeToBulkSoC;
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL("RemainingTimeToBulkSoC: %d (DEC)\n", GetValue_iso1PhysicalValueType(obj));
-    PRINT_iso1PhysicalValueType_UNIT(obj);
-
+    if(exi_doc_ISO1->V2G_Message.Body.CurrentDemandReq.RemainingTimeToBulkSoC_isUsed)
+    {
+    	obj = &exi_doc_ISO1->V2G_Message.Body.CurrentDemandReq.RemainingTimeToBulkSoC;
+		DEBUG_PRINTF_EXI_ENGINE_DETAIL("RemainingTimeToBulkSoC: %d (DEC)\n", GetValue_iso1PhysicalValueType(obj));
+		PRINT_iso1PhysicalValueType_UNIT(obj);
+    }
 
     //===== [BODY (10/10)] EVTargetVoltage =====
     obj = &exi_doc_ISO1->V2G_Message.Body.CurrentDemandReq.EVTargetVoltage;
@@ -4223,14 +4268,13 @@ void PRINT_XML_DOC_ISO1_ChargingStatusReq(struct iso1EXIDocument *exi_doc_ISO1)
 {
     static int cnt = 0;
     cnt++;
-    DEBUG_PRINTF_EXI_ENGINE_DETAIL(" [START] Parsing ChargingStatusReq (%d-th)\n", cnt);
+    DEBUG_PRINTF_EXI_ENGINE_DETAIL("[START] Parsing ChargingStatusReq (%d-th)\n", cnt);
 
     //===== [Header] SessionID =====
     PRINT_V2G_MSG_iso1_Header(exi_doc_ISO1);
 
     //===== [BODY (0/0)] =====
 	//ISO1: no content
-	DEBUG_PRINTF_EXI_ENGINE_DETAIL("no content (ISO1)\n");
 
     DEBUG_PRINTF_EXI_ENGINE_DETAIL("[END] Parsing ChargingStatusReq (%d-th)\n", cnt);
 }
@@ -4346,7 +4390,7 @@ GLOBAL VARIABLES:
 =============================================================================*/
 void PRINT_V2GTP_STREAM(bitstream_t *stream)
 {
-	#if (DEBUG_PRINTF_EXI_ENGINE_SHOW == ENABLE)
+#if (DEBUG_PRINTF_EXI_ENGINE_SHOW == ENABLE)
 	int i = 0;
 	unsigned char buffer[1024] = {0};
 
@@ -4356,10 +4400,9 @@ void PRINT_V2GTP_STREAM(bitstream_t *stream)
 	{
 		sprintf((char*)buffer, "%s%02x ", buffer, stream->data[i]);
 	}
-	DEBUG_PRINTF_EXI_ENGINE_DETAIL("HEADER (HEX): %s\n", buffer);
-	//DEBUG_PRINTF_EXI_ENGINE_DETAIL("EXI (HEX): \n");
+	DEBUG_PRINTF_EXI_ENGINE_DETAIL("DATA (HEX): %s\n", buffer);
 
-	#endif
+#endif
 }
 
 
@@ -4404,7 +4447,7 @@ int API_V2GMSG_EXI_Decoder_AppProtocol(unsigned char *V2GTP_msg, unsigned int V2
 	//TC_SECC_VTB_V2GTPSessionSetup_004
 	if (payloadLengthDec == 0)
 	{
-		DEBUG_PRINTF_EXI_ENGINE_DETAIL("[ERROR][API_V2GMSG_EXI_Decoder_AppProtocol]payloadLengthDec = 0\n");
+		DEBUG_PRINTF_EXI_ENGINE_DETAIL("[ERROR]payloadLengthDec = 0\n");
 		errn = -1;
 	}
 
@@ -4423,7 +4466,7 @@ int API_V2GMSG_EXI_Decoder_AppProtocol(unsigned char *V2GTP_msg, unsigned int V2
 		else
 		{
 			/* an error occured */
-			DEBUG_PRINTF_EXI_ENGINE_DETAIL("[ERROR][API_V2GMSG_EXI_Decoder_AppProtocol]decode_appHandExiDocument()\n");
+			DEBUG_PRINTF_EXI_ENGINE_DETAIL("[ERROR]decode_appHandExiDocument() fail\n");
 			errn = -1;
 		}
 	}
@@ -4458,8 +4501,7 @@ int API_V2GMSG_EXI_Encoder_AppProtocol(struct appHandEXIDocument *exi_doc, bitst
 	{
 		sprintf((char*)buffer, "%s%02x ", buffer, exi_packet->data[i]);
 	}
-	DEBUG_PRINTF_EXI_ENGINE_DETAIL("HEADER (HEX): %s\n", buffer);
-	DEBUG_PRINTF_EXI_ENGINE_DETAIL("EXI (HEX): \n");
+	DEBUG_PRINTF_EXI_ENGINE_DETAIL("DATA (HEX): %s\n", buffer);
 	DEBUG_PRINTF_EXI_ENGINE_DETAIL("-----  supportedAppProtocolRes [END] -----\n");
 
 	return errn;
@@ -4497,7 +4539,7 @@ int API_V2GMSG_EXI_Decoder_DIN(unsigned char *V2GTP_msg, unsigned int V2GTP_msg_
 	//TC_SECC_VTB_V2GTPSessionSetup_004
 	if (payloadLengthDec == 0)
 	{
-		DEBUG_PRINTF_EXI_ENGINE_DETAIL("[Error] payloadLengthDec = 0\n");
+		DEBUG_PRINTF_EXI_ENGINE_DETAIL("[Error]payloadLengthDec = 0\n");
 		errn = -1;
 	}
 
@@ -4515,18 +4557,18 @@ int API_V2GMSG_EXI_Decoder_DIN(unsigned char *V2GTP_msg, unsigned int V2GTP_msg_
 			errn = Check_V2G_Rx_Msg_Name_din(exi_doc_DIN);
 			if (errn < 0)
 			{
-				DEBUG_PRINTF_EXI_ENGINE_DETAIL("[ERROR] Check_V2G_Rx_Msg_Name_din: fail\n");
+				DEBUG_PRINTF_EXI_ENGINE_DETAIL("[ERROR]Check_V2G_Rx_Msg_Name_din: fail\n");
 			}
 		}
 		else
 		{
-			DEBUG_PRINTF_EXI_ENGINE_DETAIL("[ERROR] decode_dinExiDocument: %d (DEC)\n", errn);
+			DEBUG_PRINTF_EXI_ENGINE_DETAIL("[ERROR]decode_dinExiDocument: %d (DEC)\n", errn);
 			errn = -1;
 		}
 	}
 	else
 	{
-		DEBUG_PRINTF_EXI_ENGINE_DETAIL("[ERROR][API_V2GMSG_EXI_Decoder_DIN] read_v2gtpHeader: %d (DEC)\n", errn);
+		DEBUG_PRINTF_EXI_ENGINE_DETAIL("[ERROR]read_v2gtpHeader: %d (DEC)\n", errn);
 	}
 	return errn;
 }
@@ -4562,7 +4604,7 @@ int API_V2GMSG_EXI_Decoder_ISO1(unsigned char *V2GTP_msg, unsigned int V2GTP_msg
 	//TC_SECC_VTB_V2GTPSessionSetup_004
 	if (payloadLengthDec == 0)
 	{
-		DEBUG_PRINTF_EXI_ENGINE_DETAIL("[Error] payloadLengthDec = 0\n");
+		DEBUG_PRINTF_EXI_ENGINE_DETAIL("[Error]payloadLengthDec = 0\n");
 		errn = -1;
 	}
 
@@ -4580,18 +4622,18 @@ int API_V2GMSG_EXI_Decoder_ISO1(unsigned char *V2GTP_msg, unsigned int V2GTP_msg
 			errn = Check_V2G_Rx_Msg_Name_iso1(exi_doc_ISO1);
 			if (errn < 0)
 			{
-				DEBUG_PRINTF_EXI_ENGINE_DETAIL("[ERROR] Check_V2G_Rx_Msg_Name_din: fail\n");
+				DEBUG_PRINTF_EXI_ENGINE_DETAIL("[ERROR]Check_V2G_Rx_Msg_Name_din: fail\n");
 			}
 		}
 		else
 		{
-			DEBUG_PRINTF_EXI_ENGINE_DETAIL("[ERROR] decode_iso1ExiDocument: %d (DEC)\n", errn);
+			DEBUG_PRINTF_EXI_ENGINE_DETAIL("[ERROR]decode_iso1ExiDocument: %d (DEC)\n", errn);
 			errn = -1;
 		}
 	}
 	else
 	{
-		DEBUG_PRINTF_EXI_ENGINE_DETAIL("[ERROR] read_v2gtpHeader: %d (DEC)\n", errn);
+		DEBUG_PRINTF_EXI_ENGINE_DETAIL("[ERROR]read_v2gtpHeader: %d (DEC)\n", errn);
 	}
 	return errn;
 }
@@ -4627,7 +4669,7 @@ int API_V2GMSG_EXI_Decoder_ISO2(unsigned char *V2GTP_msg, unsigned int V2GTP_msg
 	//TC_SECC_VTB_V2GTPSessionSetup_004
 	if (payloadLengthDec == 0)
 	{
-		DEBUG_PRINTF_EXI_ENGINE_DETAIL("[Error] payloadLengthDec = 0\n");
+		DEBUG_PRINTF_EXI_ENGINE_DETAIL("[Error]payloadLengthDec = 0\n");
 		errn = -1;
 	}
 
@@ -4645,17 +4687,17 @@ int API_V2GMSG_EXI_Decoder_ISO2(unsigned char *V2GTP_msg, unsigned int V2GTP_msg
 			errn = Check_V2G_Rx_Msg_Name_iso2(exi_doc_ISO2);
 			if (errn < 0)
 			{
-				DEBUG_PRINTF_EXI_ENGINE_DETAIL("[ERROR] Check_V2G_Rx_Msg_Name_din: fail\n");
+				DEBUG_PRINTF_EXI_ENGINE_DETAIL("[Error]Check_V2G_Rx_Msg_Name_din: fail\n");
 			}
 		}
 		else
 		{
-			DEBUG_PRINTF_EXI_ENGINE_DETAIL("[ERROR] decode_iso2ExiDocument: %d (DEC)\n", errn);
+			DEBUG_PRINTF_EXI_ENGINE_DETAIL("[Error]decode_iso2ExiDocument: %d (DEC)\n", errn);
 		}
 	}
 	else
 	{
-		DEBUG_PRINTF_EXI_ENGINE_DETAIL("[ERROR] read_v2gtpHeader: %d (DEC)\n", errn);
+		DEBUG_PRINTF_EXI_ENGINE_DETAIL("[Error]read_v2gtpHeader: %d (DEC)\n", errn);
 	}
 	return errn;
 }

+ 2 - 2
EVSE/Projects/AW-CCS/Apps/CCS/v2g/api/api.h

@@ -164,13 +164,13 @@ float ISO151182014PhyValDecode(struct PhysicalValueType_ISO15118_2014 PhysicalDa
 
 #if DEBUG_PRINTF_EXI_ENGINE_SHOW == ENABLE
     #if DEBUG_PRINTF_EXI_ENGINE_BRIEF_SHOW == ENABLE
-        #define DEBUG_PRINTF_EXI_ENGINE_BRIEF(format, args...) StoreLogV2GMsg("[%s:%d][%s] "format, __FILE__, __LINE__, __FUNCTION__, ##args)
+        #define DEBUG_PRINTF_EXI_ENGINE_BRIEF(format, args...) StoreLogV2GMsg("[%s:%d][%s] "format, (strrchr((strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__), '/') ? strrchr((strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__), '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
     #else
         #define DEBUG_PRINTF_EXI_ENGINE_BRIEF(...)
     #endif
 
     #if DEBUG_PRINTF_EXI_ENGINE_DETAIL_SHOW == ENABLE
-        #define DEBUG_PRINTF_EXI_ENGINE_DETAIL(format, args...) StoreLogV2GMsg("[%s:%d][%s] "format, __FILE__, __LINE__, __FUNCTION__, ##args)
+        #define DEBUG_PRINTF_EXI_ENGINE_DETAIL(format, args...) StoreLogV2GMsg("[%s:%d][%s] "format, (strrchr((strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__), '/') ? strrchr((strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__), '/') + 1 : (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)), __LINE__, __FUNCTION__, ##args)
     #else
         #define DEBUG_PRINTF_EXI_ENGINE_DETAIL(...)
     #endif

+ 4 - 2
EVSE/Projects/define.h

@@ -300,9 +300,10 @@ enum CoreProfile {
      CustomIdleFeeAfterStop,
      TimeOffset,
      NextTimeOffsetTransitionDateTime,
-     TimeOffsetNextTransition,
+	 TimeOffsetNextTransition,
 	 SystemUptimeSec,
-     ConfigurationVersion,
+	 FreeVend,
+	 ConfigurationVersion,
 	 _CoreProfile_CNT
 };
 
@@ -4760,6 +4761,7 @@ enum OCPP20CtrlrVariable
 	ChargingStation_AvailabilityState,
 	ChargingStation_SupplyPhases,
 	ChargingStation_SystemUptimeSec,
+	ChargingStation_FreeVend,
 	Connector_Available,
 	Connector_ConnectorType,
 	Connector_SupplyPhases,