浏览代码

2019-08-19 / Joseph D. Anderson

Actions:
1. Enhancing SLAC process to against high signal attenuation
2. Adding "exi_engine" (encode/decode)
3. Updating the Linux Images to SHA: 0805bf64e454aeac7ef511eb4798565b44e9de7e (v2019-07-18)
4. Beautifying all the source code
5. Adding the rule file for beautifying code.
6. Adding Log of debug messages and .pcap content.

Files:
1. EVSE/Projects/CCS/Apps/EvComm.c
2. EVSE/Projects/CCS/Apps/exi_engine/*
3. EVSE/Projects/CCS/Images/boot/*
4. EVSE/Projects/CCS/*
5. EVSE/Projects/CCS/uncrustify.cfg
6. EVSE/Projects/CCS/Log/*

Image version: aa.bb.cc.dd
Image checksum: -

Hardware PWB P/N : -
Hardware Version : CSU-03-RW CCS Board REV:2.0
Joseph 5 年之前
父节点
当前提交
50bbaeb731
共有 97 个文件被更改,包括 172440 次插入5851 次删除
  1. 二进制
      EVSE/Projects/CCS/Apps/CsuComm
  2. 739 659
      EVSE/Projects/CCS/Apps/CsuComm.c
  3. 7 0
      EVSE/Projects/CCS/Apps/CsuComm.h
  4. 二进制
      EVSE/Projects/CCS/Apps/EvComm
  5. 1668 1552
      EVSE/Projects/CCS/Apps/EvComm.c
  6. 109 100
      EVSE/Projects/CCS/Apps/EvComm.h
  7. 二进制
      EVSE/Projects/CCS/Apps/EventLogging
  8. 281 253
      EVSE/Projects/CCS/Apps/EventLogging.c
  9. 7 0
      EVSE/Projects/CCS/Apps/EventLogging.h
  10. 二进制
      EVSE/Projects/CCS/Apps/FWMaker
  11. 140 109
      EVSE/Projects/CCS/Apps/FWMaker.c
  12. 7 0
      EVSE/Projects/CCS/Apps/FWMaker.h
  13. 二进制
      EVSE/Projects/CCS/Apps/FactoryConfig
  14. 195 173
      EVSE/Projects/CCS/Apps/FactoryConfig.c
  15. 7 0
      EVSE/Projects/CCS/Apps/FactoryConfig.h
  16. 89 41
      EVSE/Projects/CCS/Apps/Makefile
  17. 292 264
      EVSE/Projects/CCS/Apps/NidNmk.c
  18. 39 35
      EVSE/Projects/CCS/Apps/NidNmk.h
  19. 二进制
      EVSE/Projects/CCS/Apps/UpdateRootfs
  20. 86 69
      EVSE/Projects/CCS/Apps/UpdateRootfs.c
  21. 7 0
      EVSE/Projects/CCS/Apps/UpdateRootfs.h
  22. 2118 2116
      EVSE/Projects/CCS/Apps/define.h
  23. 8 0
      EVSE/Projects/CCS/Apps/exi_engine/api/api.c
  24. 7 0
      EVSE/Projects/CCS/Apps/exi_engine/api/api.h
  25. 64 0
      EVSE/Projects/CCS/Apps/exi_engine/appHandshake/appHandEXIDatatypes.c
  26. 133 0
      EVSE/Projects/CCS/Apps/exi_engine/appHandshake/appHandEXIDatatypes.h
  27. 896 0
      EVSE/Projects/CCS/Apps/exi_engine/appHandshake/appHandEXIDatatypesDecoder.c
  28. 57 0
      EVSE/Projects/CCS/Apps/exi_engine/appHandshake/appHandEXIDatatypesDecoder.h
  29. 671 0
      EVSE/Projects/CCS/Apps/exi_engine/appHandshake/appHandEXIDatatypesEncoder.c
  30. 58 0
      EVSE/Projects/CCS/Apps/exi_engine/appHandshake/appHandEXIDatatypesEncoder.h
  31. 105 0
      EVSE/Projects/CCS/Apps/exi_engine/codec/BitInputStream.c
  32. 67 0
      EVSE/Projects/CCS/Apps/exi_engine/codec/BitInputStream.h
  33. 124 0
      EVSE/Projects/CCS/Apps/exi_engine/codec/BitOutputStream.c
  34. 85 0
      EVSE/Projects/CCS/Apps/exi_engine/codec/BitOutputStream.h
  35. 88 0
      EVSE/Projects/CCS/Apps/exi_engine/codec/ByteStream.c
  36. 75 0
      EVSE/Projects/CCS/Apps/exi_engine/codec/ByteStream.h
  37. 930 0
      EVSE/Projects/CCS/Apps/exi_engine/codec/DecoderChannel.c
  38. 441 0
      EVSE/Projects/CCS/Apps/exi_engine/codec/DecoderChannel.h
  39. 106 0
      EVSE/Projects/CCS/Apps/exi_engine/codec/EXIConfig.h
  40. 68 0
      EVSE/Projects/CCS/Apps/exi_engine/codec/EXIHeaderDecoder.c
  41. 60 0
      EVSE/Projects/CCS/Apps/exi_engine/codec/EXIHeaderDecoder.h
  42. 50 0
      EVSE/Projects/CCS/Apps/exi_engine/codec/EXIHeaderEncoder.c
  43. 61 0
      EVSE/Projects/CCS/Apps/exi_engine/codec/EXIHeaderEncoder.h
  44. 93 0
      EVSE/Projects/CCS/Apps/exi_engine/codec/EXIOptions.h
  45. 591 0
      EVSE/Projects/CCS/Apps/exi_engine/codec/EXITypes.h
  46. 704 0
      EVSE/Projects/CCS/Apps/exi_engine/codec/EncoderChannel.c
  47. 423 0
      EVSE/Projects/CCS/Apps/exi_engine/codec/EncoderChannel.h
  48. 120 0
      EVSE/Projects/CCS/Apps/exi_engine/codec/ErrorCodes.h
  49. 117 0
      EVSE/Projects/CCS/Apps/exi_engine/codec/MethodsBag.c
  50. 70 0
      EVSE/Projects/CCS/Apps/exi_engine/codec/MethodsBag.h
  51. 969 0
      EVSE/Projects/CCS/Apps/exi_engine/din/dinEXIDatatypes.c
  52. 2934 0
      EVSE/Projects/CCS/Apps/exi_engine/din/dinEXIDatatypes.h
  53. 345 0
      EVSE/Projects/CCS/Apps/exi_engine/din/dinEXIDatatypesDecoder.c
  54. 65 0
      EVSE/Projects/CCS/Apps/exi_engine/din/dinEXIDatatypesDecoder.h
  55. 281 0
      EVSE/Projects/CCS/Apps/exi_engine/din/dinEXIDatatypesEncoder.c
  56. 68 0
      EVSE/Projects/CCS/Apps/exi_engine/din/dinEXIDatatypesEncoder.h
  57. 992 0
      EVSE/Projects/CCS/Apps/exi_engine/iso1/iso1EXIDatatypes.c
  58. 2992 0
      EVSE/Projects/CCS/Apps/exi_engine/iso1/iso1EXIDatatypes.h
  59. 9847 0
      EVSE/Projects/CCS/Apps/exi_engine/iso1/iso1EXIDatatypesDecoder.c
  60. 65 0
      EVSE/Projects/CCS/Apps/exi_engine/iso1/iso1EXIDatatypesDecoder.h
  61. 7011 0
      EVSE/Projects/CCS/Apps/exi_engine/iso1/iso1EXIDatatypesEncoder.c
  62. 68 0
      EVSE/Projects/CCS/Apps/exi_engine/iso1/iso1EXIDatatypesEncoder.h
  63. 1496 0
      EVSE/Projects/CCS/Apps/exi_engine/iso2/iso2EXIDatatypes.c
  64. 4189 0
      EVSE/Projects/CCS/Apps/exi_engine/iso2/iso2EXIDatatypes.h
  65. 63551 0
      EVSE/Projects/CCS/Apps/exi_engine/iso2/iso2EXIDatatypesDecoder.c
  66. 65 0
      EVSE/Projects/CCS/Apps/exi_engine/iso2/iso2EXIDatatypesDecoder.h
  67. 44215 0
      EVSE/Projects/CCS/Apps/exi_engine/iso2/iso2EXIDatatypesEncoder.c
  68. 68 0
      EVSE/Projects/CCS/Apps/exi_engine/iso2/iso2EXIDatatypesEncoder.h
  69. 47 0
      EVSE/Projects/CCS/Apps/exi_engine/test/main.c
  70. 42 0
      EVSE/Projects/CCS/Apps/exi_engine/test/main.h
  71. 178 0
      EVSE/Projects/CCS/Apps/exi_engine/test/main_databinder.c
  72. 2584 0
      EVSE/Projects/CCS/Apps/exi_engine/test/main_example.c
  73. 92 0
      EVSE/Projects/CCS/Apps/exi_engine/transport/v2gtp.c
  74. 55 0
      EVSE/Projects/CCS/Apps/exi_engine/transport/v2gtp.h
  75. 255 0
      EVSE/Projects/CCS/Apps/exi_engine/xmldsig/xmldsigEXIDatatypes.c
  76. 935 0
      EVSE/Projects/CCS/Apps/exi_engine/xmldsig/xmldsigEXIDatatypes.h
  77. 4331 0
      EVSE/Projects/CCS/Apps/exi_engine/xmldsig/xmldsigEXIDatatypesDecoder.c
  78. 65 0
      EVSE/Projects/CCS/Apps/exi_engine/xmldsig/xmldsigEXIDatatypesDecoder.h
  79. 3100 0
      EVSE/Projects/CCS/Apps/exi_engine/xmldsig/xmldsigEXIDatatypesEncoder.c
  80. 66 0
      EVSE/Projects/CCS/Apps/exi_engine/xmldsig/xmldsigEXIDatatypesEncoder.h
  81. 二进制
      EVSE/Projects/CCS/Apps/main
  82. 747 480
      EVSE/Projects/CCS/Apps/main.c
  83. 7 0
      EVSE/Projects/CCS/Apps/main.h
  84. 二进制
      EVSE/Projects/CCS/Images/boot/MLO
  85. 73 0
      EVSE/Projects/CCS/Images/boot/OI.txt
  86. 二进制
      EVSE/Projects/CCS/Images/boot/am335x-evm.dtb
  87. 二进制
      EVSE/Projects/CCS/Images/boot/ramdisk.gz
  88. 0 0
      EVSE/Projects/CCS/Images/boot/u-boot-spl.bin
  89. 二进制
      EVSE/Projects/CCS/Images/boot/u-boot.img
  90. 二进制
      EVSE/Projects/CCS/Images/boot/zImage
  91. 二进制
      EVSE/Projects/CCS/Images/root/EvComm
  92. 二进制
      EVSE/Projects/CCS/Images/root/main
  93. 二进制
      EVSE/Projects/CCS/Images/zImage
  94. 6955 0
      EVSE/Projects/CCS/Log/Debug_Log.txt
  95. 二进制
      EVSE/Projects/CCS/Log/packets.pcap
  96. 46 0
      EVSE/Projects/CCS/Rules.make
  97. 1578 0
      EVSE/Projects/CCS/uncrustify.cfg

二进制
EVSE/Projects/CCS/Apps/CsuComm


+ 739 - 659
EVSE/Projects/CCS/Apps/CsuComm.c

@@ -1,659 +1,739 @@
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <linux/termios.h>
-#include <stdio.h>
-#include <string.h>
-#include <time.h>
-#include <stdlib.h>
-#include <sys/ipc.h>
-#include <sys/shm.h>
-#include <sys/mman.h>
-#include <linux/sockios.h> 
-#include <linux/socket.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <sys/time.h> 
-#include <sys/timeb.h> 
-#include <math.h>//for pow
-#include <net/if.h>
-#include <linux/can.h>
-#include <linux/can/raw.h>
-#include <unistd.h>
-#include "define.h"
-
-//#define Debug
-
-//Protocol format : Dir
-#define SendDirection				0x08000000
-#define RecvDirection				0x00000000
-//Protocol format : Message ID
-#define MsgAddressRequest			0x00000100
-#define MsgAddressAssign			0x00000200
-#define MsgStatusNotification		0x00000300
-#define MsgGetFwVersion			0x00000400
-#define MsgGetHwVersion			0x00000500
-#define MsgChargingPermission		0x00000600
-#define MsgPresentOutputPower		0x00000700
-#define MsgPresentOutputCapacity	0x00000800
-#define MsgGetOutputRequirement	0x00000900
-#define MsgGetEvBatteryInfo			0x00000A00
-#define MsgEvStopEvent				0x00000B00
-#define MsgEvseStopEvent			0x00000C00
-#define MsgGetMiscInfo				0x00000D00
-#define MsgDownloadRequest		0x00000E00
-#define MsgStartBlockTransfer			0x00000F00
-#define MsgDataTransfer				0x00001000
-#define MsgDownloadFinish			0x00001100
-
-struct SysConfigAndInfo			*ShmSysConfigAndInfo;
-struct StatusCodeData 			*ShmStatusCodeData;
-struct CcsData				*ShmCcsData;
-struct InternalComm			*ShmInternalComm;
-pid_t						CANReceiverPid;
-int 							CanFd;
-
-#ifdef SystemLogMessage
-int StoreLogMsg(unsigned char *DataString)
-{
-	unsigned char Buf[256];
-	time_t CurrentTime;
-	struct tm *tm;
-			
-	memset(Buf,0,sizeof(Buf));
-	CurrentTime = time(NULL);
-	tm=localtime(&CurrentTime);
-	sprintf(Buf,"echo \"%04d.%02d.%02d %02d:%02d:%02d - %s\" >> /Storage/SystemLog/[%04d.%02d]SystemLog",
-			tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,
-			DataString,
-			tm->tm_year+1900,tm->tm_mon+1);
-	system(Buf);
-	#ifdef Debug
-	printf("%s \n",DataString);
-	#endif
-}		
-#endif
-
-int DiffTimeb(struct timeb ST, struct timeb ET)
-{
-	//return milli-second
-	unsigned int StartTime,StopTime;
-	
-	StartTime=(unsigned int)ST.time;
-	StopTime=(unsigned int)ET.time;
-	return (StopTime-StartTime)*1000+ET.millitm-ST.millitm;
-}	
-	
-/**************************************************************************************/
-/**************************Init all share memory *********************************/
-/**************************************************************************************/
-int InitShareMemory()
-{
-	int MeterSMId;
-	
-	//creat ShmSysConfigAndInfo
-	if ((MeterSMId = shmget(ShmSysConfigAndInfoKey, sizeof(struct SysConfigAndInfo),  0777)) < 0) 
-    	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[CsuComm]InitShareMemory:shmget ShmSysConfigAndInfo NG");
-		#endif			
-		return 0;
-	}
-    	else if ((ShmSysConfigAndInfo = shmat(MeterSMId, NULL, 0)) == (void *) -1) 
-    	{
-    		#ifdef SystemLogMessage	
-		StoreLogMsg("[CsuComm]InitShareMemory:shmat ShmSysConfigAndInfo NG");
-		#endif		
-		return 0;
-   	 }
-   	 //creat ShmStatusCodeData
-   	 if ((MeterSMId = shmget(ShmStatusCodeKey, sizeof(struct StatusCodeData),  0777)) < 0) 
-    	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[CsuComm]InitShareMemory:shmget ShmStatusCodeData NG");
-		#endif		
-		return 0;	
-	}
-    	else if ((ShmStatusCodeData = shmat(MeterSMId, NULL, 0)) == (void *) -1) 
-    	{
-    		#ifdef SystemLogMessage	
-		StoreLogMsg("[CsuComm]InitShareMemory:shmat ShmStatusCodeData NG");
-		#endif		
-		return 0;
-   	 }
-
-   	 //creat ShmCcsData
-   	 if ((MeterSMId = shmget(ShmCcsCommKey, sizeof(struct CcsData),  0777)) < 0) 
-    	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[CsuComm]InitShareMemory:shmget ShmCcsData NG");
-		#endif			
-		return 0;
-	}
-    	else if ((ShmCcsData = shmat(MeterSMId, NULL, 0)) == (void *) -1) 
-    	{
-    		#ifdef SystemLogMessage	
-		StoreLogMsg("[CsuComm]InitShareMemory:shmat ShmCcsData NG");
-		#endif		
-		return 0;
-   	 }
-   	 
-   	  //creat ShmInternalComm
-   	 if ((MeterSMId = shmget(ShmInternalCommKey, sizeof(struct InternalComm),  IPC_CREAT | 0777)) < 0) 
-    	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[CsuComm]InitShareMemory:shmget ShmInternalComm NG");
-		#endif			
-		return 0;
-	}
-    	else if ((ShmInternalComm = shmat(MeterSMId, NULL, 0)) == (void *) -1) 
-    	{
-    		#ifdef SystemLogMessage	
-		StoreLogMsg("[CsuComm]InitShareMemory:shmat ShmInternalComm NG");
-		#endif		
-		return 0;
-   	 }
-   	 memset(ShmInternalComm,0,sizeof(struct InternalComm));
-    	return 1;
-}
-
-int InitCanBus()
-{
-	int 					s0,nbytes;
-	struct timeval			tv;
-	struct ifreq 			ifr0;
-	struct sockaddr_can	addr0;
-	
-	system("/sbin/ip link set can0 type can bitrate 500000 restart-ms 100");				  
-	system("/sbin/ip link set can0 up");
-	
-	s0 = socket(PF_CAN, SOCK_RAW, CAN_RAW);
-	
-	tv.tv_sec = 0; 
-    	tv.tv_usec = 10000; 
-   	 if (setsockopt(s0, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof(struct	timeval)) < 0) 
-    	{
-	       	#ifdef SystemLogMessage	
-		StoreLogMsg("[CsuComm]InitCanBus:Set SO_RCVTIMEO NG");
-		#endif		
-    	}
-    	nbytes=40960;
-    	if (setsockopt(s0, SOL_SOCKET,  SO_RCVBUF, &nbytes, sizeof(int)) < 0) 
-	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[CsuComm]InitCanBus:Set SO_RCVBUF NG");
-		#endif	
-	}
-    	nbytes=40960;
-    	if (setsockopt(s0, SOL_SOCKET, SO_SNDBUF, &nbytes, sizeof(int)) < 0) 
-    	{
-       		#ifdef SystemLogMessage	
-		StoreLogMsg("[CsuComm]InitCanBus:Set SO_SNDBUF NG");
-		#endif	
-    	}
-    
-   	strcpy(ifr0.ifr_name, "can0" );
-	ioctl(s0, SIOCGIFINDEX, &ifr0); /* ifr.ifr_ifindex gets filled with that device's index */
-	addr0.can_family = AF_CAN;
-	addr0.can_ifindex = ifr0.ifr_ifindex;
-	bind(s0, (struct sockaddr *)&addr0, sizeof(addr0));
-	return s0;
-}
-
-int SendMsg(int Fd, unsigned int MsgId, unsigned char SlaveAddress, unsigned char DataLength, unsigned char *SendData)
-{	
-	struct can_frame frame;
-	struct timeb StartTime,EndTime;
-	unsigned int tmp=0;
-	int nbytes;
-		
-	memset(&frame,0,sizeof(struct can_frame));
-	frame.can_id = 0x80000000|SendDirection|MsgId|SlaveAddress;
-	frame.can_dlc = DataLength;
-	memcpy(frame.data,SendData,DataLength);
-	nbytes = write(Fd, &frame, sizeof(struct can_frame));
-	#ifdef Debug
-	printf("[CsuComm]SendMsg => Send to ID=0x%x, nbytes=0x%x, DataLength=0x%x, Data=0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x\n",
-	frame.can_id,nbytes,frame.can_dlc,
-	frame.data[0],frame.data[1],frame.data[2],frame.data[3],frame.data[4],frame.data[5],frame.data[6],frame.data[7]);
-	#endif
-	return nbytes;	
-}
-
-int SendFwVersion(int Fd)
-{	
-	int nbytes; 
-	unsigned char Buffer[4];
-	
-	memset(Buffer,0,sizeof(Buffer));
-	nbytes=FirmwareVersion;
-	memcpy(Buffer,&nbytes,sizeof(int));
-	nbytes=SendMsg(Fd, MsgGetFwVersion, ShmInternalComm->SlaveAddress, sizeof(int), Buffer);
-	return nbytes;	
-}
-
-int SendHwVersion(int Fd)
-{	
-	int nbytes; 
-	unsigned char Buffer[4];
-	
-	memset(Buffer,0,sizeof(Buffer));
-	nbytes=FirmwareVersion;
-	memcpy(Buffer,&nbytes,sizeof(int));
-	nbytes=SendMsg(Fd, MsgGetFwVersion, ShmInternalComm->SlaveAddress, sizeof(int), Buffer);
-	return nbytes;	
-}
-
-int SendStatusNotification(int Fd)
-{	
-	int nbytes; 
-	unsigned char Buffer[8];
-	
-	memset(Buffer,0,sizeof(Buffer));
-	Buffer[0]=ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].ConnectorPlugIn;
-	Buffer[1]=ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState;
-	if(strlen(ShmStatusCodeData->PresentStatusCode[0])>0)
-	{
-		memcpy(Buffer+2,ShmStatusCodeData->PresentStatusCode[0],6);
-	}	
-	nbytes=SendMsg(Fd, MsgStatusNotification, ShmInternalComm->SlaveAddress, 8, Buffer);
-	return nbytes;	
-}
-
-float DIN70121PhyValDecode(struct PhysicalValueType_DIN70121 PhysicalData)
-{
-	short DataValue;
-	int 	DataMultiplier;
-	float Rtn;
-	
-	DataValue=PhysicalData.Value;
-	DataMultiplier=PhysicalData.Multiplier;
-	switch(PhysicalData.Unit)
-	{
-		case h_DIN70121:
-			Rtn=(DataValue*(10^DataMultiplier)*60*60);
-			return Rtn;
-		case m_DIN70121:
-			Rtn=(DataValue*(10^DataMultiplier)*60);
-			return Rtn;	
-		case s_DIN70121:
-		case A_DIN70121:
-		case V_DIN70121:
-			Rtn=(DataValue*(10^DataMultiplier));
-			return Rtn;		
-		case Ah_DIN70121:
-			Rtn=(DataValue*(10^DataMultiplier));
-			return Rtn;	
-		case VA_DIN70121:
-		case W_DIN70121:	
-			Rtn=(DataValue*(10^DataMultiplier)/1000);
-			return Rtn;//kW
-		case Wh_DIN70121:
-			Rtn=(DataValue*(10^DataMultiplier)/1000);
-			return Rtn;//kWh						
-	}
-}
-
-float ISO151182014PhyValDecode(struct PhysicalValueType_ISO15118_2014 PhysicalData)
-{
-	short DataValue;
-	int 	DataMultiplier;
-	float Rtn;
-	
-	DataValue=PhysicalData.Value;
-	DataMultiplier=PhysicalData.Multiplier;
-	switch(PhysicalData.Unit)
-	{
-		case h_ISO15118_2014:
-			Rtn=(DataValue*(10^DataMultiplier)*60*60);
-			return Rtn;
-		case m_ISO15118_2014:
-			Rtn=(DataValue*(10^DataMultiplier)*60);
-			return Rtn;	
-		case s_ISO15118_2014:
-		case A_ISO15118_2014:
-		case V_ISO15118_2014:
-			Rtn=(DataValue*(10^DataMultiplier));
-			return Rtn;		
-		case W_ISO15118_2014:	
-			Rtn=(DataValue*(10^DataMultiplier)/1000);
-			return Rtn;//kW
-		case Wh_ISO15118_2014:
-			Rtn=(DataValue*(10^DataMultiplier)/1000);
-			return Rtn;//kWh						
-	}
-}
-
-int SendOutputReq(int Fd)
-{	
-	int nbytes; 
-	unsigned char Buffer[8];
-	unsigned short TmpValue;
-	
-	memset(Buffer,0,sizeof(Buffer));
-	if(ShmCcsData->CommProtocol==1)
-	{
-		//DIN70121
-		Buffer[0]=ShmCcsData->V2GMessage_DIN70121.PresentMsgFlowStatus;
-		Buffer[1]=ShmCcsData->V2GMessage_DIN70121.CurrentDemandRequest.DC_EVStatus.EVRESSSOC;
-		
-		TmpValue=DIN70121PhyValDecode(ShmCcsData->V2GMessage_DIN70121.CurrentDemandRequest.EVTargetVoltage)*10;
-		memcpy(Buffer+2,&TmpValue,2);
-		TmpValue=DIN70121PhyValDecode(ShmCcsData->V2GMessage_DIN70121.CurrentDemandRequest.EVTargetCurrent)*10;
-		memcpy(Buffer+4,&TmpValue,2);
-		TmpValue=DIN70121PhyValDecode(ShmCcsData->V2GMessage_DIN70121.CurrentDemandRequest.RemainingTimeToFullSoC);
-		memcpy(Buffer+6,&TmpValue,2);
-	}	
-	else if(ShmCcsData->CommProtocol==2)
-	{
-		//ISO15118_2014
-		Buffer[0]=ShmCcsData->V2GMessage_ISO15118_2014.PresentMsgFlowStatus;
-		Buffer[1]=ShmCcsData->V2GMessage_ISO15118_2014.CurrentDemandRequest.DC_EVStatus.EVRESSSOC;
-		
-		TmpValue=ISO151182014PhyValDecode(ShmCcsData->V2GMessage_ISO15118_2014.CurrentDemandRequest.EVTargetVoltage)*10;
-		memcpy(Buffer+2,&TmpValue,2);
-		TmpValue=ISO151182014PhyValDecode(ShmCcsData->V2GMessage_ISO15118_2014.CurrentDemandRequest.EVTargetCurrent)*10;
-		memcpy(Buffer+4,&TmpValue,2);
-		TmpValue=ISO151182014PhyValDecode(ShmCcsData->V2GMessage_ISO15118_2014.CurrentDemandRequest.RemainingTimeToFullSoC);
-		memcpy(Buffer+6,&TmpValue,2);
-	}	
-	nbytes=SendMsg(Fd, MsgStatusNotification, ShmInternalComm->SlaveAddress, 8, Buffer);
-	return nbytes;	
-}
-
-int SendBatteryInfo(int Fd)
-{	
-	int nbytes; 
-	unsigned char Buffer[8];
-	unsigned short TmpValue;
-	
-	memset(Buffer,0,sizeof(Buffer));
-	if((ShmCcsData->CommProtocol==2)&&(ShmCcsData->V2GMessage_ISO15118_2014.ChargeParameterDiscoveryRequest.RequestedEnergyTransferMode<=1))
-		Buffer[0]=1;//AC
-	else
-		Buffer[0]=0;//DC	
-	if(ShmCcsData->CommProtocol==1)
-	{
-		//DIN70121
-		TmpValue=DIN70121PhyValDecode(ShmCcsData->V2GMessage_DIN70121.ChargeParameterDiscoveryRequest.DC_EVChargeParameter.EVEnergyCapacity)*10;
-		memcpy(Buffer+1,&TmpValue,2);
-		TmpValue=DIN70121PhyValDecode(ShmCcsData->V2GMessage_DIN70121.ChargeParameterDiscoveryRequest.DC_EVChargeParameter.EVMaximumVoltageLimit)*10;
-		memcpy(Buffer+3,&TmpValue,2);
-		TmpValue=DIN70121PhyValDecode(ShmCcsData->V2GMessage_DIN70121.ChargeParameterDiscoveryRequest.DC_EVChargeParameter.EVMaximumCurrentLimit)*10;
-		memcpy(Buffer+5,&TmpValue,2);
-	}	
-	else if(ShmCcsData->CommProtocol==2)
-	{
-		//ISO15118_2014
-		if(Buffer[0]==0)
-		{		
-			//DC
-			TmpValue=ISO151182014PhyValDecode(ShmCcsData->V2GMessage_ISO15118_2014.ChargeParameterDiscoveryRequest.DC_EVChargeParameter.EVEnergyCapacity)*10;
-			memcpy(Buffer+1,&TmpValue,2);
-			TmpValue=ISO151182014PhyValDecode(ShmCcsData->V2GMessage_ISO15118_2014.ChargeParameterDiscoveryRequest.DC_EVChargeParameter.EVMaximumVoltageLimit)*10;
-			memcpy(Buffer+3,&TmpValue,2);
-			TmpValue=ISO151182014PhyValDecode(ShmCcsData->V2GMessage_ISO15118_2014.ChargeParameterDiscoveryRequest.DC_EVChargeParameter.EVMaximumCurrentLimit)*10;
-			memcpy(Buffer+5,&TmpValue,2);
-		}
-		else
-		{
-			//AC
-			TmpValue=ISO151182014PhyValDecode(ShmCcsData->V2GMessage_ISO15118_2014.ChargeParameterDiscoveryRequest.AC_EVChargeParameter.EAmount)*10;
-			memcpy(Buffer+1,&TmpValue,2);
-			TmpValue=ISO151182014PhyValDecode(ShmCcsData->V2GMessage_ISO15118_2014.ChargeParameterDiscoveryRequest.AC_EVChargeParameter.EVMaxVoltage)*10;
-			memcpy(Buffer+3,&TmpValue,2);
-			TmpValue=ISO151182014PhyValDecode(ShmCcsData->V2GMessage_ISO15118_2014.ChargeParameterDiscoveryRequest.AC_EVChargeParameter.EVMaxCurrent)*10;
-			memcpy(Buffer+5,&TmpValue,2);
-		}	
-	}	
-	nbytes=SendMsg(Fd, MsgStatusNotification, ShmInternalComm->SlaveAddress, 7, Buffer);
-	return nbytes;	
-}
-
-int SendStopEvent(int Fd)
-{	
-	int nbytes; 
-	unsigned char Buffer[8];
-	
-	memset(Buffer,0,sizeof(Buffer));
-	Buffer[0]=0x01;
-	if(strlen(ShmStatusCodeData->PresentStatusCode[0])>0)
-	{
-		memcpy(Buffer+2,ShmStatusCodeData->PresentStatusCode[0],6);
-	}	
-	nbytes=SendMsg(Fd, MsgStatusNotification, ShmInternalComm->SlaveAddress, 7, Buffer);
-	return nbytes;	
-}
-
-int SendMiscInfo(int Fd)
-{	
-	int nbytes; 
-	unsigned char Buffer[8];
-	unsigned short TmpValue;
-	
-	memset(Buffer,0,sizeof(Buffer));
-	Buffer[0]=ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].ConnectorPlugIn;
-	TmpValue=ShmSysConfigAndInfo->SysInfo.CcsConnectorTemp;
-	memcpy(Buffer+1,&TmpValue,2);
-	Buffer[3]=(unsigned char)(ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotVoltage*10);
-	Buffer[4]=ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState;
-	nbytes=SendMsg(Fd, MsgStatusNotification, ShmInternalComm->SlaveAddress, 7, Buffer);
-	return nbytes;	
-}
-
-/**************************************************************/
-/************** Receiving Task*******************************/
-/*************************************************************/
-void CANReceiver(int fd)
-{
-	pid_t tmp=0;
-	struct can_frame frame;
-	int nbytes;
-	unsigned char FanspeedGetTime=0;
-		
-	if(CANReceiverPid==0)
-	{
-		tmp=fork();
-		if(tmp>0)
-		{
-			CANReceiverPid=tmp;	
-			{
-				unsigned char buf[64];
-				memset(buf,0,sizeof(buf));
-				sprintf(buf,"renice -20 -p %d",tmp);
-				system(buf);
-			}
-			return;
-		}
-	}
-	while(1)
-	{
-		memset(&frame,0,sizeof(struct can_frame));
-		nbytes = read(fd, &frame, sizeof(struct can_frame));
-		if((frame.can_id==0)||(frame.can_id&0x08000000)||(((frame.can_id&0x000000FF)!=ShmInternalComm->SlaveAddress)&&((frame.can_id&0x000000FF)!=0)))
-			continue;
-		switch(frame.can_id&0x0000FF00)//Message ID
-		{
-			case MsgGetFwVersion:
-				ShmInternalComm->InternalCommUnion.bits.FwVersion=1;
-				break;
-			case MsgGetHwVersion:
-				ShmInternalComm->InternalCommUnion.bits.HwVersion=1;
-				break;	
-			case MsgChargingPermission:
-				ShmInternalComm->ChargingPermission=frame.data[0];
-				ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].AvailableChargingPower=(float)((unsigned int)frame.data[2]<<8|frame.data[1])/10;
-				ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].AvailableChargingCurrent=(float)((unsigned int)frame.data[4]<<8|frame.data[3])/10;
-				ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].MaximumChargingVoltage=(float)((unsigned int)frame.data[6]<<8|frame.data[5])/10;
-				break;	
-			case MsgPresentOutputPower:
-				if( ShmInternalComm->SlaveAddress==1)
-				{
-					ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PresentChargingVoltage=(float)((unsigned int)frame.data[1]<<8|frame.data[0])/10;
-					ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PresentChargingCurrent=(float)((unsigned int)frame.data[3]<<8|frame.data[2])/10;
-				}	
-				else
-				{
-					ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PresentChargingVoltage=(float)((unsigned int)frame.data[5]<<8|frame.data[4])/10;
-					ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PresentChargingCurrent=(float)((unsigned int)frame.data[7]<<8|frame.data[6])/10;
-				}
-				break;	
-			case MsgPresentOutputCapacity:
-				if( ShmInternalComm->SlaveAddress==1)
-				{
-					ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].AvailableChargingPower=(float)((unsigned int)frame.data[1]<<8|frame.data[0])/10;
-					ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].AvailableChargingCurrent=(float)((unsigned int)frame.data[3]<<8|frame.data[2])/10;
-				}
-				else
-				{
-					ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].AvailableChargingPower=(float)((unsigned int)frame.data[5]<<8|frame.data[4])/10;
-					ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].AvailableChargingCurrent=(float)((unsigned int)frame.data[7]<<8|frame.data[6])/10;
-				}
-				break;
-			case MsgGetOutputRequirement:
-				ShmInternalComm->InternalCommUnion.bits.OutputRequirement=1;
-				break;
-			case MsgGetEvBatteryInfo:
-				ShmInternalComm->InternalCommUnion.bits.EvBatteryInfo=1;
-				break;
-			case MsgEvseStopEvent:
-				break;
-			case MsgGetMiscInfo:
-				ShmInternalComm->InternalCommUnion.bits.MiscInfo=1;
-				break;
-			case MsgDownloadRequest:
-				break;
-			case MsgStartBlockTransfer:
-				break;
-			case MsgDataTransfer:
-				break;
-			case MsgDownloadFinish:
-				break;											
-		}		
-	}
-}
-
-/**************************************************************/
-/************** main function***********************************/
-/*************************************************************/
-int main(int argc,char *argv[])
-{
-	int CanFd;
-	struct can_frame frame;
-	struct timeb StartTime,EndTime;
-	unsigned int TmpValue;
-	unsigned char	Buffer[8];
-
-	//Initialization
-	if(InitShareMemory()==0)
-	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[CsuComm]main:InitShareMemory NG");
-		#endif		
-		if(ShmStatusCodeData!=NULL)
-		{
-			ShmStatusCodeData->AlarmCode.AlarmEvents.bits.FailToCreateShareMemory=1;
-		}	
-		sleep(5);
-		return 0;
-	}	
-	
-	CanFd=InitCanBus();
-	CANReceiverPid=0;
-
-	ShmInternalComm->SlaveAddress=0xFF;
-	//Address Request
-	while(ShmInternalComm->SlaveAddress==0xFF)
-	{
-		ftime(&StartTime);	
-		ftime(&EndTime);	
-		srandom(StartTime.millitm);
-		TmpValue=random();
-		#ifdef Debug
-		printf("[CsuComm]main => TmpValue=%d\n",TmpValue);
-		#endif
-		memset(Buffer,0,sizeof(Buffer));
-		memcpy(Buffer,&TmpValue,sizeof(int));
-		SendMsg(CanFd, MsgAddressRequest, ShmInternalComm->SlaveAddress, 4, Buffer);
-		while(DiffTimeb(StartTime, EndTime)<100)//resend interval: 100ms 
-		{
-			unsigned int TmpValue2=0;
-			ftime(&EndTime);	
-			memset(&frame,0,sizeof(struct can_frame));
-			read(CanFd, &frame, sizeof(struct can_frame));
-			if((frame.can_id==0)||(frame.can_id&0x08000000)||((frame.can_id&0x0000FF00)!=MsgAddressAssign)||(frame.can_dlc!=4))
-				continue;
-			memcpy(&TmpValue2,frame.data,sizeof(int));
-			if(TmpValue2==TmpValue)
-			{
-				ShmInternalComm->SlaveAddress=frame.can_id&0x000000FF;
-				#ifdef SystemLogMessage	
-				{
-					unsigned char Buffer[128];
-					memset(Buffer,0,sizeof(Buffer));
-					sprintf(Buffer,"[CsuComm]main: ShmCcsData->SlaveAddres=%d",ShmInternalComm->SlaveAddress);
-					StoreLogMsg(Buffer);
-				}
-				#endif		
-				#ifdef Debug
-				printf("[CsuComm]main => ShmCcsData->SlaveAddres=0x%x\n",ShmCcsData->SlaveAddres);
-				#endif
-				break;
-			}		
-		}
-	}
-
-	CANReceiver(CanFd);
-	//main loop
-	ftime(&StartTime);	
-	while(1)
-	{
-		ftime(&EndTime);	
-		if(DiffTimeb(StartTime, EndTime)>=1000)
-		{
-			SendStatusNotification(CanFd);
-			ftime(&StartTime);	
-		}	
-		if(ShmInternalComm->InternalCommUnion.bits.FwVersion==1)
-		{
-			SendFwVersion(CanFd);
-			ShmInternalComm->InternalCommUnion.bits.FwVersion=0;
-		}		
-		if(ShmInternalComm->InternalCommUnion.bits.HwVersion==1)
-		{
-			SendHwVersion(CanFd);
-			ShmInternalComm->InternalCommUnion.bits.HwVersion=0;
-		}		
-		if(ShmInternalComm->InternalCommUnion.bits.OutputRequirement==1)
-		{
-			SendOutputReq(CanFd);
-			ShmInternalComm->InternalCommUnion.bits.OutputRequirement=0;
-		}		
-		if(ShmInternalComm->InternalCommUnion.bits.EvBatteryInfo==1)
-		{
-			SendBatteryInfo(CanFd);
-			ShmInternalComm->InternalCommUnion.bits.EvBatteryInfo=0;
-		}		
-		if(ShmInternalComm->InternalCommUnion.bits.MiscInfo==1)
-		{
-			SendMiscInfo(CanFd);
-			ShmInternalComm->InternalCommUnion.bits.MiscInfo=0;
-		}		
-		
-	}
-	
-EndProcess:	
-	if(CANReceiverPid>0)
-	{
-		char Buf[32];
-		memset(Buf,0,32);
-		sprintf(Buf,"kill %d",CANReceiverPid);
-		system(Buf);
-	}
-	close(CanFd); 
-	system("/sbin/ip link set can0 down");
-	system("/sbin/ip link set can0 type can bitrate 500000 restart-ms 100");
-	system("/sbin/ip link set can0 up");
-	system("/sbin/ip link set can0 down");
-	system("killall CsuComm");
-}
+/*===========================================================================
+                    Combined Charging System (CCS): SECC
+                                 CsuComm.c
+
+                        initiated by Vern, Joseph
+                           (since 2019/07/19)
+=============================================================================*/
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <linux/termios.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+#include <stdlib.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#include <sys/mman.h>
+#include <linux/sockios.h>
+#include <linux/socket.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <sys/time.h>
+#include <sys/timeb.h>
+#include <math.h>//for pow
+#include <net/if.h>
+#include <linux/can.h>
+#include <linux/can/raw.h>
+#include <unistd.h>
+#include "define.h"
+#include "CsuComm.h"
+
+//#define Debug
+
+//Protocol format : Dir
+#define SendDirection               0x08000000
+#define RecvDirection               0x00000000
+//Protocol format : Message ID
+#define MsgAddressRequest           0x00000100
+#define MsgAddressAssign            0x00000200
+#define MsgStatusNotification       0x00000300
+#define MsgGetFwVersion             0x00000400
+#define MsgGetHwVersion             0x00000500
+#define MsgChargingPermission       0x00000600
+#define MsgPresentOutputPower       0x00000700
+#define MsgPresentOutputCapacity    0x00000800
+#define MsgGetOutputRequirement     0x00000900
+#define MsgGetEvBatteryInfo         0x00000A00
+#define MsgEvStopEvent              0x00000B00
+#define MsgEvseStopEvent            0x00000C00
+#define MsgGetMiscInfo              0x00000D00
+#define MsgDownloadRequest          0x00000E00
+#define MsgStartBlockTransfer       0x00000F00
+#define MsgDataTransfer             0x00001000
+#define MsgDownloadFinish           0x00001100
+
+struct SysConfigAndInfo     *ShmSysConfigAndInfo;
+struct StatusCodeData       *ShmStatusCodeData;
+struct CcsData              *ShmCcsData;
+struct InternalComm         *ShmInternalComm;
+pid_t CANReceiverPid;
+int CanFd;
+
+#ifdef SystemLogMessage
+    int StoreLogMsg(unsigned char *DataString)
+    {
+        unsigned char Buf[256];
+        time_t CurrentTime;
+        struct tm *tm;
+
+        memset(Buf, 0, sizeof(Buf));
+        CurrentTime = time(NULL);
+        tm = localtime(&CurrentTime);
+        sprintf(Buf, "echo \"%04d.%02d.%02d %02d:%02d:%02d - %s\" >> /Storage/SystemLog/[%04d.%02d]SystemLog",
+                tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec,
+                DataString,
+                tm->tm_year + 1900, tm->tm_mon + 1);
+        system(Buf);
+
+        #ifdef Debug
+            printf("%s \n", DataString);
+        #endif
+    }
+#endif
+
+int DiffTimeb(struct timeb ST, struct timeb ET)
+{
+    //return milli-second
+    unsigned int StartTime, StopTime;
+
+    StartTime = (unsigned int)ST.time;
+    StopTime = (unsigned int)ET.time;
+    return (StopTime - StartTime) * 1000 + ET.millitm - ST.millitm;
+}
+
+/**************************************************************************************/
+/**************************Init all share memory *********************************/
+/**************************************************************************************/
+int InitShareMemory()
+{
+    int MeterSMId;
+
+    //creat ShmSysConfigAndInfo
+    if((MeterSMId = shmget(ShmSysConfigAndInfoKey, sizeof(struct SysConfigAndInfo),  0777)) < 0)
+    {
+        #ifdef SystemLogMessage
+            StoreLogMsg("[CsuComm]InitShareMemory:shmget ShmSysConfigAndInfo NG");
+        #endif
+        return 0;
+    }
+    else if((ShmSysConfigAndInfo = shmat(MeterSMId, NULL, 0)) == (void *)-1)
+    {
+        #ifdef SystemLogMessage
+            StoreLogMsg("[CsuComm]InitShareMemory:shmat ShmSysConfigAndInfo NG");
+        #endif
+        return 0;
+    }
+
+    //creat ShmStatusCodeData
+    if((MeterSMId = shmget(ShmStatusCodeKey, sizeof(struct StatusCodeData),  0777)) < 0)
+    {
+        #ifdef SystemLogMessage
+            StoreLogMsg("[CsuComm]InitShareMemory:shmget ShmStatusCodeData NG");
+        #endif
+        return 0;
+    }
+    else if((ShmStatusCodeData = shmat(MeterSMId, NULL, 0)) == (void *)-1)
+    {
+        #ifdef SystemLogMessage
+            StoreLogMsg("[CsuComm]InitShareMemory:shmat ShmStatusCodeData NG");
+        #endif
+        return 0;
+    }
+
+    //creat ShmCcsData
+    if((MeterSMId = shmget(ShmCcsCommKey, sizeof(struct CcsData),  0777)) < 0)
+    {
+        #ifdef SystemLogMessage
+            StoreLogMsg("[CsuComm]InitShareMemory:shmget ShmCcsData NG");
+        #endif
+        return 0;
+    }
+    else if((ShmCcsData = shmat(MeterSMId, NULL, 0)) == (void *)-1)
+    {
+        #ifdef SystemLogMessage
+            StoreLogMsg("[CsuComm]InitShareMemory:shmat ShmCcsData NG");
+        #endif
+        return 0;
+    }
+
+    //creat ShmInternalComm
+    if((MeterSMId = shmget(ShmInternalCommKey, sizeof(struct InternalComm),  IPC_CREAT | 0777)) < 0)
+    {
+        #ifdef SystemLogMessage
+            StoreLogMsg("[CsuComm]InitShareMemory:shmget ShmInternalComm NG");
+        #endif
+        return 0;
+    }
+    else if((ShmInternalComm = shmat(MeterSMId, NULL, 0)) == (void *)-1)
+    {
+        #ifdef SystemLogMessage
+            StoreLogMsg("[CsuComm]InitShareMemory:shmat ShmInternalComm NG");
+        #endif
+        return 0;
+    }
+
+    memset(ShmInternalComm, 0, sizeof(struct InternalComm));
+    return 1;
+}
+
+int InitCanBus()
+{
+    int s0, nbytes;
+    struct timeval tv;
+    struct ifreq ifr0;
+    struct sockaddr_can addr0;
+
+    system("/sbin/ip link set can0 type can bitrate 500000 restart-ms 100");
+    system("/sbin/ip link set can0 up");
+
+    s0 = socket(PF_CAN, SOCK_RAW, CAN_RAW);
+
+    tv.tv_sec = 0;
+    tv.tv_usec = 10000;
+
+    if(setsockopt(s0, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof(struct timeval)) < 0)
+    {
+        #ifdef SystemLogMessage
+            StoreLogMsg("[CsuComm]InitCanBus:Set SO_RCVTIMEO NG");
+        #endif
+    }
+
+    nbytes = 40960;
+
+    if(setsockopt(s0, SOL_SOCKET,  SO_RCVBUF, &nbytes, sizeof(int)) < 0)
+    {
+        #ifdef SystemLogMessage
+            StoreLogMsg("[CsuComm]InitCanBus:Set SO_RCVBUF NG");
+        #endif
+    }
+
+    nbytes = 40960;
+
+    if(setsockopt(s0, SOL_SOCKET, SO_SNDBUF, &nbytes, sizeof(int)) < 0)
+    {
+        #ifdef SystemLogMessage
+            StoreLogMsg("[CsuComm]InitCanBus:Set SO_SNDBUF NG");
+        #endif
+    }
+
+    strcpy(ifr0.ifr_name, "can0" );
+    ioctl(s0, SIOCGIFINDEX, &ifr0); /* ifr.ifr_ifindex gets filled with that device's index */
+    addr0.can_family = AF_CAN;
+    addr0.can_ifindex = ifr0.ifr_ifindex;
+    bind(s0, (struct sockaddr *)&addr0, sizeof(addr0));
+    return s0;
+}
+
+int SendMsg(int Fd, unsigned int MsgId, unsigned char SlaveAddress, unsigned char DataLength, unsigned char *SendData)
+{
+    struct can_frame frame;
+    struct timeb StartTime, EndTime;
+    unsigned int tmp = 0;
+    int nbytes;
+
+    memset(&frame, 0, sizeof(struct can_frame));
+    frame.can_id = 0x80000000 | SendDirection | MsgId | SlaveAddress;
+    frame.can_dlc = DataLength;
+    memcpy(frame.data, SendData, DataLength);
+    nbytes = write(Fd, &frame, sizeof(struct can_frame));
+    #ifdef Debug
+        printf("[CsuComm]SendMsg => Send to ID=0x%x, nbytes=0x%x, DataLength=0x%x, Data=0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x\n",
+               frame.can_id, nbytes, frame.can_dlc,
+               frame.data[0], frame.data[1], frame.data[2], frame.data[3], frame.data[4], frame.data[5], frame.data[6], frame.data[7]);
+    #endif
+    return nbytes;
+}
+
+int SendFwVersion(int Fd)
+{
+    int nbytes;
+    unsigned char Buffer[4];
+
+    memset(Buffer, 0, sizeof(Buffer));
+    nbytes = FirmwareVersion;
+    memcpy(Buffer, &nbytes, sizeof(int));
+    nbytes = SendMsg(Fd, MsgGetFwVersion, ShmInternalComm->SlaveAddress, sizeof(int), Buffer);
+    return nbytes;
+}
+
+int SendHwVersion(int Fd)
+{
+    int nbytes;
+    unsigned char Buffer[4];
+
+    memset(Buffer, 0, sizeof(Buffer));
+    nbytes = FirmwareVersion;
+    memcpy(Buffer, &nbytes, sizeof(int));
+    nbytes = SendMsg(Fd, MsgGetFwVersion, ShmInternalComm->SlaveAddress, sizeof(int), Buffer);
+    return nbytes;
+}
+
+int SendStatusNotification(int Fd)
+{
+    int nbytes;
+    unsigned char Buffer[8];
+
+    memset(Buffer, 0, sizeof(Buffer));
+    Buffer[0] = ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].ConnectorPlugIn;
+    Buffer[1] = ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState;
+
+    if(strlen(ShmStatusCodeData->PresentStatusCode[0]) > 0)
+    {
+        memcpy(Buffer + 2, ShmStatusCodeData->PresentStatusCode[0], 6);
+    }
+
+    nbytes = SendMsg(Fd, MsgStatusNotification, ShmInternalComm->SlaveAddress, 8, Buffer);
+    return nbytes;
+}
+
+float DIN70121PhyValDecode(struct PhysicalValueType_DIN70121 PhysicalData)
+{
+    short DataValue;
+    int DataMultiplier;
+    float Rtn;
+
+    DataValue = PhysicalData.Value;
+    DataMultiplier = PhysicalData.Multiplier;
+
+    switch(PhysicalData.Unit)
+    {
+    case h_DIN70121:
+        Rtn = (DataValue * (10 ^ DataMultiplier) * 60 * 60);
+        return Rtn;
+
+    case m_DIN70121:
+        Rtn = (DataValue * (10 ^ DataMultiplier) * 60);
+        return Rtn;
+
+    case s_DIN70121:
+    case A_DIN70121:
+    case V_DIN70121:
+        Rtn = (DataValue * (10 ^ DataMultiplier));
+        return Rtn;
+
+    case Ah_DIN70121:
+        Rtn = (DataValue * (10 ^ DataMultiplier));
+        return Rtn;
+
+    case VA_DIN70121:
+    case W_DIN70121:
+        Rtn = (DataValue * (10 ^ DataMultiplier) / 1000);
+        return Rtn;    //kW
+
+    case Wh_DIN70121:
+        Rtn = (DataValue * (10 ^ DataMultiplier) / 1000);
+        return Rtn;    //kWh
+    }
+}
+
+float ISO151182014PhyValDecode(struct PhysicalValueType_ISO15118_2014 PhysicalData)
+{
+    short DataValue;
+    int DataMultiplier;
+    float Rtn;
+
+    DataValue = PhysicalData.Value;
+    DataMultiplier = PhysicalData.Multiplier;
+
+    switch(PhysicalData.Unit)
+    {
+    case h_ISO15118_2014:
+        Rtn = (DataValue * (10 ^ DataMultiplier) * 60 * 60);
+        return Rtn;
+
+    case m_ISO15118_2014:
+        Rtn = (DataValue * (10 ^ DataMultiplier) * 60);
+        return Rtn;
+
+    case s_ISO15118_2014:
+    case A_ISO15118_2014:
+    case V_ISO15118_2014:
+        Rtn = (DataValue * (10 ^ DataMultiplier));
+        return Rtn;
+
+    case W_ISO15118_2014:
+        Rtn = (DataValue * (10 ^ DataMultiplier) / 1000);
+        return Rtn;    //kW
+
+    case Wh_ISO15118_2014:
+        Rtn = (DataValue * (10 ^ DataMultiplier) / 1000);
+        return Rtn;    //kWh
+    }
+}
+
+int SendOutputReq(int Fd)
+{
+    int nbytes;
+    unsigned char Buffer[8];
+    unsigned short TmpValue;
+
+    memset(Buffer, 0, sizeof(Buffer));
+
+    if(ShmCcsData->CommProtocol == 1)
+    {
+        //DIN70121
+        Buffer[0] = ShmCcsData->V2GMessage_DIN70121.PresentMsgFlowStatus;
+        Buffer[1] = ShmCcsData->V2GMessage_DIN70121.CurrentDemandRequest.DC_EVStatus.EVRESSSOC;
+
+        TmpValue = DIN70121PhyValDecode(ShmCcsData->V2GMessage_DIN70121.CurrentDemandRequest.EVTargetVoltage) * 10;
+        memcpy(Buffer + 2, &TmpValue, 2);
+        TmpValue = DIN70121PhyValDecode(ShmCcsData->V2GMessage_DIN70121.CurrentDemandRequest.EVTargetCurrent) * 10;
+        memcpy(Buffer + 4, &TmpValue, 2);
+        TmpValue = DIN70121PhyValDecode(ShmCcsData->V2GMessage_DIN70121.CurrentDemandRequest.RemainingTimeToFullSoC);
+        memcpy(Buffer + 6, &TmpValue, 2);
+    }
+    else if(ShmCcsData->CommProtocol == 2)
+    {
+        //ISO15118_2014
+        Buffer[0] = ShmCcsData->V2GMessage_ISO15118_2014.PresentMsgFlowStatus;
+        Buffer[1] = ShmCcsData->V2GMessage_ISO15118_2014.CurrentDemandRequest.DC_EVStatus.EVRESSSOC;
+
+        TmpValue = ISO151182014PhyValDecode(ShmCcsData->V2GMessage_ISO15118_2014.CurrentDemandRequest.EVTargetVoltage) * 10;
+        memcpy(Buffer + 2, &TmpValue, 2);
+        TmpValue = ISO151182014PhyValDecode(ShmCcsData->V2GMessage_ISO15118_2014.CurrentDemandRequest.EVTargetCurrent) * 10;
+        memcpy(Buffer + 4, &TmpValue, 2);
+        TmpValue = ISO151182014PhyValDecode(ShmCcsData->V2GMessage_ISO15118_2014.CurrentDemandRequest.RemainingTimeToFullSoC);
+        memcpy(Buffer + 6, &TmpValue, 2);
+    }
+
+    nbytes = SendMsg(Fd, MsgStatusNotification, ShmInternalComm->SlaveAddress, 8, Buffer);
+    return nbytes;
+}
+
+int SendBatteryInfo(int Fd)
+{
+    int nbytes;
+    unsigned char Buffer[8];
+    unsigned short TmpValue;
+
+    memset(Buffer, 0, sizeof(Buffer));
+
+    if((ShmCcsData->CommProtocol == 2) && (ShmCcsData->V2GMessage_ISO15118_2014.ChargeParameterDiscoveryRequest.RequestedEnergyTransferMode <= 1))
+    {
+        Buffer[0] = 1;//AC
+    }
+    else
+    {
+        Buffer[0] = 0;//DC
+    }
+
+    if(ShmCcsData->CommProtocol == 1)
+    {
+        //DIN70121
+        TmpValue = DIN70121PhyValDecode(ShmCcsData->V2GMessage_DIN70121.ChargeParameterDiscoveryRequest.DC_EVChargeParameter.EVEnergyCapacity) * 10;
+        memcpy(Buffer + 1, &TmpValue, 2);
+        TmpValue = DIN70121PhyValDecode(ShmCcsData->V2GMessage_DIN70121.ChargeParameterDiscoveryRequest.DC_EVChargeParameter.EVMaximumVoltageLimit) * 10;
+        memcpy(Buffer + 3, &TmpValue, 2);
+        TmpValue = DIN70121PhyValDecode(ShmCcsData->V2GMessage_DIN70121.ChargeParameterDiscoveryRequest.DC_EVChargeParameter.EVMaximumCurrentLimit) * 10;
+        memcpy(Buffer + 5, &TmpValue, 2);
+    }
+    else if(ShmCcsData->CommProtocol == 2)
+    {
+        //ISO15118_2014
+        if(Buffer[0] == 0)
+        {
+            //DC
+            TmpValue = ISO151182014PhyValDecode(ShmCcsData->V2GMessage_ISO15118_2014.ChargeParameterDiscoveryRequest.DC_EVChargeParameter.EVEnergyCapacity) * 10;
+            memcpy(Buffer + 1, &TmpValue, 2);
+            TmpValue = ISO151182014PhyValDecode(ShmCcsData->V2GMessage_ISO15118_2014.ChargeParameterDiscoveryRequest.DC_EVChargeParameter.EVMaximumVoltageLimit) * 10;
+            memcpy(Buffer + 3, &TmpValue, 2);
+            TmpValue = ISO151182014PhyValDecode(ShmCcsData->V2GMessage_ISO15118_2014.ChargeParameterDiscoveryRequest.DC_EVChargeParameter.EVMaximumCurrentLimit) * 10;
+            memcpy(Buffer + 5, &TmpValue, 2);
+        }
+        else
+        {
+            //AC
+            TmpValue = ISO151182014PhyValDecode(ShmCcsData->V2GMessage_ISO15118_2014.ChargeParameterDiscoveryRequest.AC_EVChargeParameter.EAmount) * 10;
+            memcpy(Buffer + 1, &TmpValue, 2);
+            TmpValue = ISO151182014PhyValDecode(ShmCcsData->V2GMessage_ISO15118_2014.ChargeParameterDiscoveryRequest.AC_EVChargeParameter.EVMaxVoltage) * 10;
+            memcpy(Buffer + 3, &TmpValue, 2);
+            TmpValue = ISO151182014PhyValDecode(ShmCcsData->V2GMessage_ISO15118_2014.ChargeParameterDiscoveryRequest.AC_EVChargeParameter.EVMaxCurrent) * 10;
+            memcpy(Buffer + 5, &TmpValue, 2);
+        }
+    }
+
+    nbytes = SendMsg(Fd, MsgStatusNotification, ShmInternalComm->SlaveAddress, 7, Buffer);
+    return nbytes;
+}
+
+int SendStopEvent(int Fd)
+{
+    int nbytes;
+    unsigned char Buffer[8];
+
+    memset(Buffer, 0, sizeof(Buffer));
+    Buffer[0] = 0x01;
+
+    if(strlen(ShmStatusCodeData->PresentStatusCode[0]) > 0)
+    {
+        memcpy(Buffer + 2, ShmStatusCodeData->PresentStatusCode[0], 6);
+    }
+
+    nbytes = SendMsg(Fd, MsgStatusNotification, ShmInternalComm->SlaveAddress, 7, Buffer);
+    return nbytes;
+}
+
+int SendMiscInfo(int Fd)
+{
+    int nbytes;
+    unsigned char Buffer[8];
+    unsigned short TmpValue;
+
+    memset(Buffer, 0, sizeof(Buffer));
+    Buffer[0] = ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].ConnectorPlugIn;
+    TmpValue = ShmSysConfigAndInfo->SysInfo.CcsConnectorTemp;
+    memcpy(Buffer + 1, &TmpValue, 2);
+    Buffer[3] = (unsigned char)(ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotVoltage * 10);
+    Buffer[4] = ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState;
+    nbytes = SendMsg(Fd, MsgStatusNotification, ShmInternalComm->SlaveAddress, 7, Buffer);
+    return nbytes;
+}
+
+/**************************************************************/
+/************** Receiving Task*******************************/
+/*************************************************************/
+void CANReceiver(int fd)
+{
+    pid_t tmp = 0;
+    struct can_frame frame;
+    int nbytes;
+    unsigned char FanspeedGetTime = 0;
+
+    if(CANReceiverPid == 0)
+    {
+        tmp = fork();
+
+        if(tmp > 0)
+        {
+            CANReceiverPid = tmp;
+            {
+                unsigned char buf[64];
+                memset(buf, 0, sizeof(buf));
+                sprintf(buf, "renice -20 -p %d", tmp);
+                system(buf);
+            }
+            return;
+        }
+    }
+
+    while(1)
+    {
+        memset(&frame, 0, sizeof(struct can_frame));
+        nbytes = read(fd, &frame, sizeof(struct can_frame));
+
+        if((frame.can_id == 0) || (frame.can_id & 0x08000000) || (((frame.can_id & 0x000000FF) != ShmInternalComm->SlaveAddress) && ((frame.can_id & 0x000000FF) != 0)))
+        {
+            continue;
+        }
+
+        switch(frame.can_id & 0x0000FF00)//Message ID
+        {
+        case MsgGetFwVersion:
+            ShmInternalComm->InternalCommUnion.bits.FwVersion = 1;
+            break;
+
+        case MsgGetHwVersion:
+            ShmInternalComm->InternalCommUnion.bits.HwVersion = 1;
+            break;
+
+        case MsgChargingPermission:
+            ShmInternalComm->ChargingPermission = frame.data[0];
+            ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].AvailableChargingPower = (float)((unsigned int)frame.data[2] << 8 | frame.data[1]) / 10;
+            ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].AvailableChargingCurrent = (float)((unsigned int)frame.data[4] << 8 | frame.data[3]) / 10;
+            ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].MaximumChargingVoltage = (float)((unsigned int)frame.data[6] << 8 | frame.data[5]) / 10;
+            break;
+
+        case MsgPresentOutputPower:
+
+            if(ShmInternalComm->SlaveAddress == 1)
+            {
+                ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PresentChargingVoltage = (float)((unsigned int)frame.data[1] << 8 | frame.data[0]) / 10;
+                ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PresentChargingCurrent = (float)((unsigned int)frame.data[3] << 8 | frame.data[2]) / 10;
+            }
+            else
+            {
+                ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PresentChargingVoltage = (float)((unsigned int)frame.data[5] << 8 | frame.data[4]) / 10;
+                ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PresentChargingCurrent = (float)((unsigned int)frame.data[7] << 8 | frame.data[6]) / 10;
+            }
+
+            break;
+
+        case MsgPresentOutputCapacity:
+
+            if(ShmInternalComm->SlaveAddress == 1)
+            {
+                ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].AvailableChargingPower = (float)((unsigned int)frame.data[1] << 8 | frame.data[0]) / 10;
+                ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].AvailableChargingCurrent = (float)((unsigned int)frame.data[3] << 8 | frame.data[2]) / 10;
+            }
+            else
+            {
+                ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].AvailableChargingPower = (float)((unsigned int)frame.data[5] << 8 | frame.data[4]) / 10;
+                ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].AvailableChargingCurrent = (float)((unsigned int)frame.data[7] << 8 | frame.data[6]) / 10;
+            }
+
+            break;
+
+        case MsgGetOutputRequirement:
+            ShmInternalComm->InternalCommUnion.bits.OutputRequirement = 1;
+            break;
+
+        case MsgGetEvBatteryInfo:
+            ShmInternalComm->InternalCommUnion.bits.EvBatteryInfo = 1;
+            break;
+
+        case MsgEvseStopEvent:
+            break;
+
+        case MsgGetMiscInfo:
+            ShmInternalComm->InternalCommUnion.bits.MiscInfo = 1;
+            break;
+
+        case MsgDownloadRequest:
+            break;
+
+        case MsgStartBlockTransfer:
+            break;
+
+        case MsgDataTransfer:
+            break;
+
+        case MsgDownloadFinish:
+            break;
+        }
+    }
+}
+
+/**************************************************************/
+/************** main function***********************************/
+/*************************************************************/
+int main(int argc, char *argv[])
+{
+    int CanFd;
+    struct can_frame frame;
+    struct timeb StartTime, EndTime;
+    unsigned int TmpValue;
+    unsigned char Buffer[8];
+
+    //Initialization
+    if(InitShareMemory() == 0)
+    {
+        #ifdef SystemLogMessage
+            StoreLogMsg("[CsuComm]main:InitShareMemory NG");
+        #endif
+
+        if(ShmStatusCodeData != NULL)
+        {
+            ShmStatusCodeData->AlarmCode.AlarmEvents.bits.FailToCreateShareMemory = 1;
+        }
+
+        sleep(5);
+        return 0;
+    }
+
+    CanFd = InitCanBus();
+    CANReceiverPid = 0;
+
+    ShmInternalComm->SlaveAddress = 0xFF;
+
+    //Address Request
+    while(ShmInternalComm->SlaveAddress == 0xFF)
+    {
+        ftime(&StartTime);
+        ftime(&EndTime);
+        srandom(StartTime.millitm);
+        TmpValue = random();
+        #ifdef Debug
+            printf("[CsuComm]main => TmpValue=%d\n", TmpValue);
+        #endif
+        memset(Buffer, 0, sizeof(Buffer));
+        memcpy(Buffer, &TmpValue, sizeof(int));
+        SendMsg(CanFd, MsgAddressRequest, ShmInternalComm->SlaveAddress, 4, Buffer);
+
+        while(DiffTimeb(StartTime, EndTime) < 100)//resend interval: 100ms
+        {
+            unsigned int TmpValue2 = 0;
+            ftime(&EndTime);
+            memset(&frame, 0, sizeof(struct can_frame));
+            read(CanFd, &frame, sizeof(struct can_frame));
+
+            if((frame.can_id == 0) || (frame.can_id & 0x08000000) || ((frame.can_id & 0x0000FF00) != MsgAddressAssign) || (frame.can_dlc != 4))
+            {
+                continue;
+            }
+
+            memcpy(&TmpValue2, frame.data, sizeof(int));
+
+            if(TmpValue2 == TmpValue)
+            {
+                ShmInternalComm->SlaveAddress = frame.can_id & 0x000000FF;
+                #ifdef SystemLogMessage
+                    {
+                        unsigned char Buffer[128];
+                        memset(Buffer, 0, sizeof(Buffer));
+                        sprintf(Buffer, "[CsuComm]main: ShmCcsData->SlaveAddres=%d", ShmInternalComm->SlaveAddress);
+                        StoreLogMsg(Buffer);
+                    }
+                #endif
+                #ifdef Debug
+                    printf("[CsuComm]main => ShmCcsData->SlaveAddres=0x%x\n", ShmCcsData->SlaveAddres);
+                #endif
+                break;
+            }
+        }
+    }
+
+    CANReceiver(CanFd);
+    //main loop
+    ftime(&StartTime);
+
+    while(1)
+    {
+        ftime(&EndTime);
+
+        if(DiffTimeb(StartTime, EndTime) >= 1000)
+        {
+            SendStatusNotification(CanFd);
+            ftime(&StartTime);
+        }
+
+        if(ShmInternalComm->InternalCommUnion.bits.FwVersion == 1)
+        {
+            SendFwVersion(CanFd);
+            ShmInternalComm->InternalCommUnion.bits.FwVersion = 0;
+        }
+
+        if(ShmInternalComm->InternalCommUnion.bits.HwVersion == 1)
+        {
+            SendHwVersion(CanFd);
+            ShmInternalComm->InternalCommUnion.bits.HwVersion = 0;
+        }
+
+        if(ShmInternalComm->InternalCommUnion.bits.OutputRequirement == 1)
+        {
+            SendOutputReq(CanFd);
+            ShmInternalComm->InternalCommUnion.bits.OutputRequirement = 0;
+        }
+
+        if(ShmInternalComm->InternalCommUnion.bits.EvBatteryInfo == 1)
+        {
+            SendBatteryInfo(CanFd);
+            ShmInternalComm->InternalCommUnion.bits.EvBatteryInfo = 0;
+        }
+
+        if(ShmInternalComm->InternalCommUnion.bits.MiscInfo == 1)
+        {
+            SendMiscInfo(CanFd);
+            ShmInternalComm->InternalCommUnion.bits.MiscInfo = 0;
+        }
+
+    }
+
+EndProcess:
+
+    if(CANReceiverPid > 0)
+    {
+        char Buf[32];
+        memset(Buf, 0, 32);
+        sprintf(Buf, "kill %d", CANReceiverPid);
+        system(Buf);
+    }
+
+    close(CanFd);
+    system("/sbin/ip link set can0 down");
+    system("/sbin/ip link set can0 type can bitrate 500000 restart-ms 100");
+    system("/sbin/ip link set can0 up");
+    system("/sbin/ip link set can0 down");
+    system("killall CsuComm");
+}

+ 7 - 0
EVSE/Projects/CCS/Apps/CsuComm.h

@@ -0,0 +1,7 @@
+/*===========================================================================
+                    Combined Charging System (CCS): SECC
+                                 CsuComm.h
+
+                        initiated by Vern, Joseph
+                           (since 2019/07/19)
+=============================================================================*/

二进制
EVSE/Projects/CCS/Apps/EvComm


+ 1668 - 1552
EVSE/Projects/CCS/Apps/EvComm.c

@@ -1,1552 +1,1668 @@
-#include<netinet/ip.h>
-#include<arpa/inet.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <linux/termios.h>
-#include <stdio.h>
-#include <string.h>
-#include <time.h>
-#include <stdlib.h>
-#include <sys/ipc.h>
-#include <sys/shm.h>
-#include <sys/mman.h>
-#include <linux/sockios.h> 
-#include <linux/socket.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <sys/time.h> 
-#include <sys/timeb.h> 
-#include <math.h>//for pow
-#include <unistd.h>
-#include <linux/if_packet.h>
-#include <netinet/if_ether.h>
-#include <net/if.h>
-#include <netinet/ether.h>
-
-
-#include "define.h"
-#include "EvComm.h"
-#include "NidNmk.h"
-
-#define Debug
-
-struct SysConfigAndInfo			*ShmSysConfigAndInfo;
-struct StatusCodeData 			*ShmStatusCodeData;
-struct CcsData				*ShmCcsData;
-struct InternalComm			*ShmInternalComm;
-
-pid_t						PilotDetectionPid;
-enum MsgFlowStatus			V2gFlowStatus;
-int 							RawSock,UdpSock,TcpSock;
-unsigned char 					*RecvBuffer,*SendBuffer;
-int 							RecvBufferSize=64*1024;
-int 							SendBufferSize=64*1024;
-unsigned short 				Aag[64];
-struct MmeHeader 				SendMmePacket;
-int							SendMmePacketSize;
-unsigned char					CsuMac[6],QcaMac[6],EvMac[6],SlacRunId[8];
-struct sockaddr_ll 				DestSocketAddress;
-struct ifreq 					Req;
-unsigned int 					PwmStartTime;
-struct timeb 					SeqStartTime,SeqEndTime;
-unsigned char 					AagGroupsNum, MnbcSoundNum,AttenProfileNum;
-unsigned char					NewNmkKey[16],Nid[7];
-
-#ifdef SystemLogMessage
-int StoreLogMsg(unsigned char *DataString)
-{
-	unsigned char Buf[256];
-	time_t CurrentTime;
-	struct tm *tm;
-			
-	memset(Buf,0,sizeof(Buf));
-	CurrentTime = time(NULL);
-	tm=localtime(&CurrentTime);
-	sprintf(Buf,"echo \"%04d.%02d.%02d %02d:%02d:%02d - %s\" >> /Storage/SystemLog/[%04d.%02d]SystemLog",
-			tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,
-			DataString,
-			tm->tm_year+1900,tm->tm_mon+1);
-	system(Buf);
-	#ifdef Debug
-	printf("%s \n",DataString);
-	#endif
-}		
-#endif
-
-int DiffTimeb(struct timeb ST, struct timeb ET)
-{
-	//return milli-second
-	unsigned int StartTime,StopTime;
-	
-	StartTime=(unsigned int)ST.time;
-	StopTime=(unsigned int)ET.time;
-	return (StopTime-StartTime)*1000+ET.millitm-ST.millitm;
-}	
-
-int CreatShareMemory()
-{
-	int MeterSMId;
-	
-	//creat ShmSysConfigAndInfo
-	if ((MeterSMId = shmget(ShmSysConfigAndInfoKey, sizeof(struct SysConfigAndInfo), IPC_CREAT | 0777)) < 0) 
-    	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[main]CreatShareMemory:shmget ShmSysConfigAndInfo NG");
-		#endif			
-		return 0;
-	}
-    	else if ((ShmSysConfigAndInfo = shmat(MeterSMId, NULL, 0)) == (void *) -1) 
-    	{
-    		#ifdef SystemLogMessage	
-		StoreLogMsg("[main]CreatShareMemory:shmat ShmSysConfigAndInfo NG");
-		#endif		
-		return 0;
-   	 }
-   	 memset(ShmSysConfigAndInfo,0,sizeof(struct SysConfigAndInfo));
-   	 //creat ShmStatusCodeData
-   	 if ((MeterSMId = shmget(ShmStatusCodeKey, sizeof(struct StatusCodeData), IPC_CREAT | 0777)) < 0) 
-    	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[main]CreatShareMemory:shmget ShmStatusCodeData NG");
-		#endif		
-		return 0;	
-	}
-    	else if ((ShmStatusCodeData = shmat(MeterSMId, NULL, 0)) == (void *) -1) 
-    	{
-    		#ifdef SystemLogMessage	
-		StoreLogMsg("[main]CreatShareMemory:shmat ShmStatusCodeData NG");
-		#endif		
-		return 0;
-   	 }
-   	 memset(ShmStatusCodeData,0,sizeof(struct StatusCodeData));
-   	 //creat ShmCcsData
-   	 if ((MeterSMId = shmget(ShmCcsCommKey, sizeof(struct CcsData), IPC_CREAT | 0777)) < 0) 
-    	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[main]CreatShareMemory:shmget ShmCcsData NG");
-		#endif			
-		return 0;
-	}
-    	else if ((ShmCcsData = shmat(MeterSMId, NULL, 0)) == (void *) -1) 
-    	{
-    		#ifdef SystemLogMessage	
-		StoreLogMsg("[main]CreatShareMemory:shmat ShmCcsData NG");
-		#endif		
-		return 0;
-   	 }
-   	 memset(ShmCcsData,0,sizeof(struct CcsData));
-    	return 1;
-}
-
-int InitShareMemory()
-{
-	int MeterSMId;
-	
-	//creat ShmSysConfigAndInfo
-	if ((MeterSMId = shmget(ShmSysConfigAndInfoKey, sizeof(struct SysConfigAndInfo),  0777)) < 0) 
-    	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[EvComm]InitShareMemory:shmget ShmSysConfigAndInfo NG");
-		#endif			
-		return 0;
-	}
-    	else if ((ShmSysConfigAndInfo = shmat(MeterSMId, NULL, 0)) == (void *) -1) 
-    	{
-    		#ifdef SystemLogMessage	
-		StoreLogMsg("[EvComm]InitShareMemory:shmat ShmSysConfigAndInfo NG");
-		#endif		
-		return 0;
-   	 }
-   	 //creat ShmStatusCodeData
-   	 if ((MeterSMId = shmget(ShmStatusCodeKey, sizeof(struct StatusCodeData),  0777)) < 0) 
-    	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[EvComm]InitShareMemory:shmget ShmStatusCodeData NG");
-		#endif		
-		return 0;	
-	}
-    	else if ((ShmStatusCodeData = shmat(MeterSMId, NULL, 0)) == (void *) -1) 
-    	{
-    		#ifdef SystemLogMessage	
-		StoreLogMsg("[EvComm]InitShareMemory:shmat ShmStatusCodeData NG");
-		#endif		
-		return 0;
-   	 }
-
-   	 //creat ShmCcsData
-   	 if ((MeterSMId = shmget(ShmCcsCommKey, sizeof(struct CcsData),  0777)) < 0) 
-    	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[EvComm]InitShareMemory:shmget ShmCcsData NG");
-		#endif			
-		return 0;
-	}
-    	else if ((ShmCcsData = shmat(MeterSMId, NULL, 0)) == (void *) -1) 
-    	{
-    		#ifdef SystemLogMessage	
-		StoreLogMsg("[EvComm]InitShareMemory:shmat ShmCcsData NG");
-		#endif		
-		return 0;
-   	 }
-   	 
-   	  //creat ShmInternalComm
-   	 if ((MeterSMId = shmget(ShmInternalCommKey, sizeof(struct InternalComm),   0777)) < 0) 
-    	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[EvComm]InitShareMemory:shmget ShmInternalComm NG");
-		#endif			
-		return 0;
-	}
-    	else if ((ShmInternalComm = shmat(MeterSMId, NULL, 0)) == (void *) -1) 
-    	{
-    		#ifdef SystemLogMessage	
-		StoreLogMsg("[EvComm]InitShareMemory:shmat ShmInternalComm NG");
-		#endif		
-		return 0;
-   	 }
-   	 
-    	return 1;
-}
-
-int GetEthMac(unsigned char *Eth, unsigned char *mac)
-{
-	//Parameters:MAC,IP,Mask,Gateway
-    	int fd,rd=0;
-	unsigned char addr[18], Buffer[128];
-	
-	memset(Buffer,0,sizeof(Buffer));
-	sprintf(Buffer,"cat /sys/class/net/%s/address > /mnt/GetEthInfo",Eth);
-	system(Buffer);
-	fd = open("/mnt/GetEthInfo", O_RDONLY);
-	if(fd<0)
-	{
-		system("rm -f /mnt/GetEthInfo");
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[EvComm]GetEthMac: MAC Address open error");
-		#endif		
-	        return 0;
-	}
-    	memset(mac,0,6);
-    	memset(addr,0,sizeof(addr));
-    	rd=read(fd,addr,17);	
-    	close(fd);
-    	system("rm -f /mnt/GetEthInfo");
-    	sscanf(addr, "%02x:%02x:%02x:%02x:%02x:%02x", &mac[0], &mac[1], &mac[2], &mac[3], &mac[4], &mac[5]); 
-    	return 1;
-}
-
-float ReadAdcVolt(unsigned char AdcChannel)
-{
-	//AIN0=CCS GUN Temp 1
-	//AIN1=CCS GUN Temp 2
-	//AIN2=CCS_Proximity/2
-	//AIN3=pilot voltage
-    	FILE *fp; 
-	unsigned char str[64];
-	unsigned char AdcValue[8];
-	
-	if(AdcChannel>7)
-		return -1;
-	memset(str,0,sizeof(str));
-	memset(AdcValue,0,sizeof(AdcValue));
-	sprintf(str,"cat /sys/bus/iio/devices/iio\\:device0/in_voltage%d_raw",AdcChannel);	    
-   	fp=popen(str, "r"); 
-    	if(fgets(AdcValue,sizeof(AdcValue),fp)==NULL)
-    	{	
-    		pclose(fp);
-    		 return -1;	 
-    	}
-    	pclose(fp);
-    	//Vin =  Vref *D / (2^n - 1) 
-    	return ((float)1.8*(float)atoi(AdcValue))/4095;
-}
-
-void Qca7kPowerReset()
-{
-	system("echo 1 > /sys/class/gpio/gpio88/value");
-	usleep(500000);
-	system("echo 0 > /sys/class/gpio/gpio88/value");
-}
-
-void SwitchCpStateE(unsigned char OnOff)
-{
-	//OnOff=1 => switch State to E
-	//OnOff=0 => return noraml 
-	if(OnOff==0)
-		system("echo 0 > /sys/class/gpio/gpio86/value");
-	else
-		system("echo 1 > /sys/class/gpio/gpio86/value");	
-}
-
-int OutputCpPwmDuty(unsigned char Duty)
-{
-	unsigned char str[128];
-	int DutyInNanoSec;
-	
-	if((Duty<0)||(Duty>100))
-		return -1;
-		
-	memset(str,0,sizeof(str));
-	DutyInNanoSec=10000*Duty;	
-	sprintf(str,"echo %d > /sys/class/pwm/pwmchip0/pwm0/duty_cycle",DutyInNanoSec);//nanoseconds
-	system(str);
-	ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotDuty=Duty;
-	return 0;
-}
-
-int ConnectorPlugIn()
-{
-	//return 0 => unplug
-	//return 1 => plug-in
-	float TmpProximity;
-	unsigned char Rtn=0;
-	
-	if(((FirmwareVersion&0x0000FF00)>>8)==0x01)
-	{
-		//UL version: judge with CP and proximity
-		TmpProximity=ReadAdcVolt(2);
-		if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState>=2)&&(ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState<=5)&&
-			(TmpProximity>=0.4)&&(TmpProximity<=0.9))
-		{
-			Rtn=1;
-		}  
-	}	
-	else
-	{
-		//CE version: judge with CP only
-		if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState>=2)&&(ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState<=5))
-			Rtn=1;
-	}
-	ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].ConnectorPlugIn=Rtn;
-	return Rtn;	
-} 
-
-void PilotDetection()
-{
-	pid_t tmp=0;
-	struct timeb StartTime,EndTime;
-	unsigned char CpState[3],count;
-	float TmpVolt;
-	
-	if(PilotDetectionPid==0)
-	{
-		tmp=fork();
-		if(tmp>0)
-		{
-			PilotDetectionPid=tmp;	
-			{
-				unsigned char buf[64];
-				memset(buf,0,sizeof(buf));
-				sprintf(buf,"renice -20 -p %d",tmp);
-				system(buf);
-			}
-			return;
-		}
-	}
-	
-	while(1)
-	{
-		//ADC_Voltage = (1+RE62/RE63)*0.9 - (RE62/RE63)*Pilot_Voltage, 	RE62/RE63=0.06
-		//=>Pilot_Voltage=(0.954-ADC_Voltage)/0.06
-		//ftime(&StartTime);	
-		TmpVolt=0;
-		for(count=0;count<3;count++)
-		{
-			TmpVolt+=(0.954-ReadAdcVolt(3))/0.06;
-		}	
-		TmpVolt/=3;
-		ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotVoltage=TmpVolt;
-		if(TmpVolt>=13.5)
-		{
-			//Pilot Error
-			if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState==1)&&(TmpVolt<13.75))
-				ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=1;
-			else		
-				ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=8;	
-		}
-		else if((TmpVolt>=10.5)&&(TmpVolt<13.5))
-		{
-			//State A
-			if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState>=2)&&(ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState<=3)&&(TmpVolt<10.75))
-			{	
-				if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotDuty>=5)&&(ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotDuty<100))
-					ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=3;
-				else
-					ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=2;	
-			}
-			else if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState==8)&&(TmpVolt>=13.25))
-				ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=8;	
-			else
-				ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=1;	
-		}	
-		else if((TmpVolt>=7.5)&&(TmpVolt<10.5))
-		{
-			//State B
-			if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState==4)&&(TmpVolt<7.75))
-				ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=4;
-			else if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState==1)&&(TmpVolt>=10.25))
-				ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=1;	
-			else
-			{
-				if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotDuty>=5)&&(ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotDuty<100))
-					ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=3;
-				else
-					ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=2;	
-			}		
-		}	
-		else if((TmpVolt>=4.5)&&(TmpVolt<7.5))
-		{
-			//State C
-			if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState==5)&&(TmpVolt<4.75))
-				ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=5;
-			else if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState>=2)&&(ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState<=3)&&(TmpVolt>=7.25))
-			{
-				if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotDuty>=5)&&(ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotDuty<100))
-					ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=3;
-				else
-					ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=2;	
-			}
-			else
-			{
-				ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=4;	
-			}		
-		}	
-		else if((TmpVolt>=1.5)&&(TmpVolt<4.5))
-		{
-			//State D
-			if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState==6)&&(TmpVolt<1.75))
-				ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=6;
-			else if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState==4)&&(TmpVolt>=4.25))
-				ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=4;	
-			else
-			{
-				ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=5;	
-			}		
-		}		
-		else if((TmpVolt>= -1.5)&&(TmpVolt<1.5))
-		{
-			//State E
-			if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState==8)&&(TmpVolt< -1.25))
-				ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=8;
-			else if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState==5)&&(TmpVolt>=1.25))
-				ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=5;	
-			else
-			{
-				ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=6;	
-			}		
-		}		
-		else if((TmpVolt>= -13.5)&&(TmpVolt< -10.5))
-		{
-			//State F
-			if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState==8)&&(TmpVolt>= -10.75))
-				ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=8;	
-			else
-			{
-				ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=7;	
-			}		
-		}		
-		//ftime(&EndTime);	
-		//printf("duration:%d\n", DiffTimeb(StartTime, EndTime));
-	}//while
-}
-
-int MmeProcess(unsigned char *Buffer, int DataLength)
-{
-	//struct ethhdr	*EthPacket;
-	struct MmeHeader	*MmePacket;
-	int Rtn;
-	static unsigned char counter;
-	
-	MmePacket = (struct MmeHeader *)Buffer;
-	#ifdef Debug
-	printf("\n\n***********************************\n");
-	printf("***** Received MME Packet *****\n");
-	printf("***********************************\n");
-	printf("DataLength=%d\n",DataLength);
-	printf("ODA: %02x:%02x:%02x:%02x:%02x:%02x\n", 
-		MmePacket->ODA[0],MmePacket->ODA[1],MmePacket->ODA[2],MmePacket->ODA[3],MmePacket->ODA[4],MmePacket->ODA[5]);
-	printf("OSA: %02x:%02x:%02x:%02x:%02x:%02x\n", 
-		MmePacket->OSA[0],MmePacket->OSA[1],MmePacket->OSA[2],MmePacket->OSA[3],MmePacket->OSA[4],MmePacket->OSA[5]);
-	printf("MTYPE: 0x%x\n", htons(MmePacket->MTYPE));
-	printf("MMV: 0x%x\n", MmePacket->MMV);
-	printf("MMTYPE: 0x%x\n", MmePacket->MMTYPE);
-	printf("FMI 0x%x, 0x%x\n", MmePacket->FMI[0],MmePacket->FMI[1]);
-	#endif
-	//check if the destination address is broadcast or EVSE itself, it can be ignore if not belong to itself.  
-	switch(MmePacket->MMTYPE)
-	{
-		case MMTYPE_CM_SET_KEY_CNF:
-			#ifdef Debug
-			printf("--- MMTYPE_CM_SET_KEY_CNF ---\n");
-			printf("Result: 0x%x\n", MmePacket->MMENTRY[0]);
-			#endif
-			V2gFlowStatus=CM_SET_KEY_CNF;
-			break;
-		case MMTYPE_CM_SLAC_PARM_REQ:
-			#ifdef Debug
-			printf("--- MMTYPE_CM_SLAC_PARM_REQ ---\n");
-			printf("APPLICATION_TYPE: 0x%x\n", MmePacket->MMENTRY[0]);
-			printf("SECURITY_TYPE: 0x%x\n", MmePacket->MMENTRY[1]);
-			printf("RunID: %02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x\n", 
-				MmePacket->MMENTRY[2],MmePacket->MMENTRY[3],MmePacket->MMENTRY[4],MmePacket->MMENTRY[5],MmePacket->MMENTRY[6],
-				MmePacket->MMENTRY[7],MmePacket->MMENTRY[8],MmePacket->MMENTRY[9]);
-			printf("CipherSuiteSetSize: 0x%x\n", MmePacket->MMENTRY[10]);	
-			printf("CipherSuite [1]: 0x%x,0x%x\n", MmePacket->MMENTRY[11], MmePacket->MMENTRY[12]);	
-			#endif
-			V2gFlowStatus=CM_SLAC_PARM_REQ;
-			memcpy(EvMac,MmePacket->OSA,sizeof(EvMac));
-			memcpy(DestSocketAddress.sll_addr,MmePacket->OSA,sizeof(EvMac));
-			memcpy(SlacRunId,MmePacket->MMENTRY+2,sizeof(SlacRunId));
-			memset(&SendMmePacket,0,sizeof(struct MmeHeader));
-			memcpy(SendMmePacket.ODA,MmePacket->OSA,6);
-			memcpy(SendMmePacket.OSA,CsuMac,6);
-			SendMmePacket.MTYPE=htons(EtherType_HomePlug);
-			SendMmePacket.MMV=MmePacket->MMV;
-			SendMmePacket.MMTYPE=MMTYPE_CM_SLAC_PARM_CNF;
-			SendMmePacket.FMI[0]=SendMmePacket.FMI[1]=0;
-			SendMmePacketSize=0;
-			memset(SendMmePacket.MMENTRY,0xFF,6);	//Fixed value indicating that M-Sounds to be sent as Ethernet broadcast
-			SendMmePacketSize+=6;
-			SendMmePacket.MMENTRY[SendMmePacketSize++]=C_EV_match_MNBC;
-			SendMmePacket.MMENTRY[SendMmePacketSize++]=TT_EVSE_match_MNBC;
-			SendMmePacket.MMENTRY[SendMmePacketSize++]=0x01;	//Fixed value indicating ¡§Other GP station¡¨, 0x00 ¡V HLE of the STA, 0x01 ¡V Another GP STA, 0x02 ¡V 0xFF ¡V Reserved
-			memcpy(SendMmePacket.MMENTRY+SendMmePacketSize,EvMac,6);
-			SendMmePacketSize+=6;
-			SendMmePacket.MMENTRY[SendMmePacketSize++]=0;		//Fixed value indicating ¡§PEVEVSEMatching¡¨
-			SendMmePacket.MMENTRY[SendMmePacketSize++]=0;		//Fixed value indicating ¡§No Security¡¨
-			memcpy(SendMmePacket.MMENTRY+SendMmePacketSize,SlacRunId,sizeof(SlacRunId));
-			SendMmePacketSize+=sizeof(SlacRunId);
-			SendMmePacketSize+=19;	//the size before MMENTRY
-			#ifdef Debug
-			printf("\n\n***** Response MME Packet *****\n");
-			printf("SendMmePacket.ODA: %02x:%02x:%02x:%02x:%02x:%02x:\n", 
-				SendMmePacket.ODA[0],SendMmePacket.ODA[1],SendMmePacket.ODA[2],SendMmePacket.ODA[3],SendMmePacket.ODA[4],SendMmePacket.ODA[5]);
-			printf("SendMmePacket.OSA: %02x:%02x:%02x:%02x:%02x:%02x:\n", 
-				SendMmePacket.OSA[0],SendMmePacket.OSA[1],SendMmePacket.OSA[2],SendMmePacket.OSA[3],SendMmePacket.OSA[4],SendMmePacket.OSA[5]);
-			printf("MTYPE: 0x%x\n", htons(SendMmePacket.MTYPE));
-			printf("MMV: 0x%x\n", SendMmePacket.MMV);
-			printf("MMTYPE: 0x%x\n", SendMmePacket.MMTYPE);
-			printf("FMI 0x%x, 0x%x\n", SendMmePacket.FMI[0],SendMmePacket.FMI[1]);
-			printf("--- CM_SLAC_PARM_CNF ---\n");
-			printf("M-SOUND_TARGET: %02x:%02x:%02x:%02x:%02x:%02x\n", 
-				SendMmePacket.MMENTRY[0],SendMmePacket.MMENTRY[1],SendMmePacket.MMENTRY[2],SendMmePacket.MMENTRY[3],
-				SendMmePacket.MMENTRY[4],SendMmePacket.MMENTRY[5]);
-			printf("NUM_SOUNDS: 0x%x\n", SendMmePacket.MMENTRY[6]);
-			printf("Time_Out: 0x%x\n", SendMmePacket.MMENTRY[7]);
-			printf("RESP_TYPE: 0x%x\n", SendMmePacket.MMENTRY[8]);
-			printf("M-FORWARDING_STA: %02x:%02x:%02x:%02x:%02x:%02x:\n", 
-				SendMmePacket.MMENTRY[9],SendMmePacket.MMENTRY[10],SendMmePacket.MMENTRY[11],SendMmePacket.MMENTRY[12],
-				SendMmePacket.MMENTRY[13],SendMmePacket.MMENTRY[14]);
-			printf("APPLICATION_TYPE: 0x%x\n", SendMmePacket.MMENTRY[15]);
-			printf("SECURITY_TYPE: 0x%x\n", SendMmePacket.MMENTRY[16]);
-			printf("RunID: %02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x\n", 
-				SendMmePacket.MMENTRY[17],SendMmePacket.MMENTRY[18],SendMmePacket.MMENTRY[19],SendMmePacket.MMENTRY[20],
-				SendMmePacket.MMENTRY[21],SendMmePacket.MMENTRY[22],SendMmePacket.MMENTRY[23],SendMmePacket.MMENTRY[24]);
-			#endif
-			V2gFlowStatus=CM_SLAC_PARM_CONF;
-			Rtn=sendto(RawSock, &SendMmePacket, SendMmePacketSize, 0, (struct sockaddr*)&DestSocketAddress, sizeof(struct sockaddr_ll));
-			#ifdef Debug
-			printf("SendMmePacketSize=%d,Rtn=%d\n",SendMmePacketSize,Rtn);
-			#endif
-			ftime(&SeqStartTime);	
-			counter=0;
-			break;	
-		case MMTYPE_CM_START_ATTEN_CHAR_IND:
-			#ifdef Debug
-			printf("--- MMTYPE_CM_START_ATTEN_CHAR_IND (counter : %d/3 ) ---\n",counter+1);
-			printf("APPLICATION_TYPE: 0x%x\n", MmePacket->MMENTRY[0]);
-			printf("SECURITY_TYPE: 0x%x\n", MmePacket->MMENTRY[1]);
-			printf("NUM_SOUNDS: 0x%x\n", MmePacket->MMENTRY[2]);
-			MnbcSoundNum=MmePacket->MMENTRY[2];
-			printf("Time_Out 0x%x\n", MmePacket->MMENTRY[3]);
-			printf("RESP_TYPE 0x%x\n", MmePacket->MMENTRY[4]);//Fixed value (0x01) indicating ¡§other Green PHY station¡¨
-			printf("FORWARDING_STA: %02x:%02x:%02x:%02x:%02x:%02x\n", 
-				MmePacket->MMENTRY[5],MmePacket->MMENTRY[6],MmePacket->MMENTRY[7],MmePacket->MMENTRY[8],
-				MmePacket->MMENTRY[9],MmePacket->MMENTRY[10]);
-			printf("RunID: %02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x\n", 
-				MmePacket->MMENTRY[11],MmePacket->MMENTRY[12],MmePacket->MMENTRY[13],MmePacket->MMENTRY[14],
-				MmePacket->MMENTRY[15],MmePacket->MMENTRY[16],MmePacket->MMENTRY[17],MmePacket->MMENTRY[18]);	
-			#endif
-			V2gFlowStatus=CM_START_ATTEN_CHAR_IND;
-			counter++;
-			if(counter==1)
-			{
-				memset(Aag,0,sizeof(Aag));
-				AttenProfileNum=0;
-				ftime(&SeqStartTime);	//start TT_EVSE_match_MNBC
-			}	
-			else if(counter>=3)
-			{
-				counter=0;
-			}	
-			break;	
-		case MMTYPE_CM_MNBC_SOUND_IND:
-			if(V2gFlowStatus>=CM_ATTEN_CHAR_IND)
-				break;
-			#ifdef Debug
-			printf("--- MMTYPE_CM_MNBC_SOUND_IND (counter : %d/%d) ---\n",counter+1,MnbcSoundNum);
-			printf("APPLICATION_TYPE: 0x%x\n", MmePacket->MMENTRY[0]);
-			printf("SECURITY_TYPE: 0x%x\n", MmePacket->MMENTRY[1]);
-			printf("SenderID: %02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x\n", 
-				MmePacket->MMENTRY[2],MmePacket->MMENTRY[3],MmePacket->MMENTRY[4],MmePacket->MMENTRY[5],
-				MmePacket->MMENTRY[6],MmePacket->MMENTRY[7],MmePacket->MMENTRY[8],MmePacket->MMENTRY[9],
-				MmePacket->MMENTRY[10],MmePacket->MMENTRY[11],MmePacket->MMENTRY[12],MmePacket->MMENTRY[13],
-				MmePacket->MMENTRY[14],MmePacket->MMENTRY[15],MmePacket->MMENTRY[16],MmePacket->MMENTRY[17],
-				MmePacket->MMENTRY[18]);	
-			printf("Cnt: 0x%x\n", MmePacket->MMENTRY[19]);
-			printf("RunID: %02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x\n", 
-				MmePacket->MMENTRY[20],MmePacket->MMENTRY[21],MmePacket->MMENTRY[22],MmePacket->MMENTRY[23],
-				MmePacket->MMENTRY[24],MmePacket->MMENTRY[25],MmePacket->MMENTRY[26],MmePacket->MMENTRY[27]);	
-			printf("RSVD: %02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x\n", 
-				MmePacket->MMENTRY[28],MmePacket->MMENTRY[29],MmePacket->MMENTRY[30],MmePacket->MMENTRY[31],
-				MmePacket->MMENTRY[32],MmePacket->MMENTRY[33],MmePacket->MMENTRY[34],MmePacket->MMENTRY[35]);		
-			printf("Rnd: %02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x\n", 
-				MmePacket->MMENTRY[36],MmePacket->MMENTRY[37],MmePacket->MMENTRY[38],MmePacket->MMENTRY[39],
-				MmePacket->MMENTRY[40],MmePacket->MMENTRY[41],MmePacket->MMENTRY[42],MmePacket->MMENTRY[43],
-				MmePacket->MMENTRY[44],MmePacket->MMENTRY[45],MmePacket->MMENTRY[46],MmePacket->MMENTRY[47],
-				MmePacket->MMENTRY[48],MmePacket->MMENTRY[49],MmePacket->MMENTRY[50],MmePacket->MMENTRY[51]);	
-			#endif
-			V2gFlowStatus=CM_MNBC_SOUND_IND;
-			counter++;
-			break;		
-		case MMTYPE_CM_ATTEN_PROFILE_IND:
-			if(V2gFlowStatus>=CM_ATTEN_CHAR_IND)
-				break;
-			#ifdef Debug
-			printf("--- MMTYPE_CM_ATTEN_PROFILE_IND (counter : %d/%d) ---\n",counter,MnbcSoundNum);
-			printf("EV MAC: %02x:%02x:%02x:%02x:%02x:%02x\n", 
-				MmePacket->MMENTRY[0],MmePacket->MMENTRY[1],MmePacket->MMENTRY[2],MmePacket->MMENTRY[3],
-				MmePacket->MMENTRY[4],MmePacket->MMENTRY[5]);
-			printf("NumGroups: 0x%x\n", MmePacket->MMENTRY[6]);	
-			printf("RSVD: 0x%x\n", MmePacket->MMENTRY[7]);	
-			printf("AAG: \n");	
-			for(Rtn=0;Rtn<MmePacket->MMENTRY[6];Rtn++)
-				printf("%02x, ",MmePacket->MMENTRY[8+Rtn]);
-			printf("\n");	
-			#endif
-			AagGroupsNum=MmePacket->MMENTRY[6];
-			for(Rtn=0;Rtn<MmePacket->MMENTRY[6];Rtn++)
-				Aag[Rtn]+=MmePacket->MMENTRY[8+Rtn];
-			AttenProfileNum++;
-			V2gFlowStatus=CM_MNBC_SOUND_IND;
-			break;	
-		case MMTYPE_CM_ATTN_CHAR_RSP:
-			#ifdef Debug
-			printf("--- MMTYPE_CM_ATTN_CHAR_RSP ---\n");
-			printf("APPLICATION_TYPE: 0x%x\n", MmePacket->MMENTRY[0]);
-			printf("SECURITY_TYPE: 0x%x\n", MmePacket->MMENTRY[1]);
-			printf("SOURCE_ADDRESS: %02x:%02x:%02x:%02x:%02x:%02x\n", 
-				MmePacket->MMENTRY[2],MmePacket->MMENTRY[3],MmePacket->MMENTRY[4],MmePacket->MMENTRY[5],
-				MmePacket->MMENTRY[6],MmePacket->MMENTRY[7]);
-			printf("RunID: %02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x\n", 
-				MmePacket->MMENTRY[8],MmePacket->MMENTRY[9],MmePacket->MMENTRY[10],MmePacket->MMENTRY[11],
-				MmePacket->MMENTRY[12],MmePacket->MMENTRY[13],MmePacket->MMENTRY[14],MmePacket->MMENTRY[15]);		
-			printf("SOURCE_ID: \n");	
-			for(Rtn=0;Rtn<17;Rtn++)
-				printf("%02x, ",MmePacket->MMENTRY[16+Rtn]);
-			printf("\n");		
-			printf("RESP_ID: \n");	
-			for(Rtn=0;Rtn<17;Rtn++)
-				printf("%02x, ",MmePacket->MMENTRY[33+Rtn]);
-			printf("\n");		
-			printf("Result: 0x%x\n", MmePacket->MMENTRY[50]);//Fixed value of 0x00 indicates a successful SLAC process
-			#endif	
-			V2gFlowStatus=CM_ATTEN_CHAR_RSP;
-			ftime(&SeqStartTime);	
-			break;
-		case MMTYPE_CM_VALIDATE_REQ:
-			#ifdef Debug
-			printf("--- MMTYPE_CM_VALIDATE_REQ ---\n");	
-			printf("Signal Type: 0x%x\n", MmePacket->MMENTRY[0]);//Fixed value (0x00) to indicate ¡§PEV S2 toggles on control pilot line¡¨
-			printf("Timer: 0x%x\n", MmePacket->MMENTRY[1]);//Fixed value In the first VALIDATE Request-Response exchange, the Timer field shall be set to zero.
-			printf("Result: 0x%x\n", MmePacket->MMENTRY[2]);//Fixed value In the first VALIDATE Request-Response exchange, the Result field shall be set to 0x01 = ¡§ready¡¨.
-			#endif	
-			counter=0;
-			for(Rtn=0;Rtn<6;Rtn++)
-			{
-				if(MmePacket->ODA[Rtn]!=CsuMac[Rtn])
-				{
-					counter=1;
-					break;
-				}	
-			}
-			memset(&SendMmePacket,0,sizeof(struct MmeHeader));
-			memcpy(SendMmePacket.ODA,EvMac,6);
-			memcpy(SendMmePacket.OSA,CsuMac,6);
-			SendMmePacket.MTYPE=htons(EtherType_HomePlug);
-			SendMmePacket.MMV=0x01;
-			SendMmePacket.MMTYPE=MMTYPE_CM_VALIDATE_CNF;
-			SendMmePacket.FMI[0]=SendMmePacket.FMI[1]=0;
-			SendMmePacketSize=0;
-			if(counter==0)
-			{
-				//First MMTYPE_CM_VALIDATE_REQ because Unicast
-				SendMmePacket.MMENTRY[SendMmePacketSize++]=0;//Fixed value to indicate ¡§PEV S2 toggles on control pilot line¡¨
-				SendMmePacket.MMENTRY[SendMmePacketSize++]=0;//Fixed value In the first VALIDATE Request-Response exchange, the ToggleNum field shall be set to zero.
-				#ifdef SupportBcbToggle
-				SendMmePacket.MMENTRY[SendMmePacketSize++]=1;//0x01 = Ready	
-				#else
-				SendMmePacket.MMENTRY[SendMmePacketSize++]=4;//0x04 = Not Required	
-				#endif
-			}	
-			else
-			{
-				//second MMTYPE_CM_VALIDATE_REQ because Broadcast
-				unsigned char	PreStatus=3,ToggleNum=0;
-				ftime(&SeqStartTime);			
-				while(1)
-				{
-					ftime(&SeqEndTime);	
-					if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState==4)&&(PreStatus==3))
-					{	
-						ToggleNum++;
-						PreStatus=4;
-					}
-					else
-					{
-						PreStatus=3;
-					}	
-					if(DiffTimeb(SeqStartTime, SeqEndTime)>=(SendMmePacket.MMENTRY[1]*100+100))
-					{
-						SendMmePacket.MMENTRY[SendMmePacketSize++]=0;//Fixed value to indicate ¡§PEV S2 toggles on control pilot line¡¨
-						SendMmePacket.MMENTRY[SendMmePacketSize++]= ToggleNum;
-						#ifdef SupportBcbToggle
-						SendMmePacket.MMENTRY[SendMmePacketSize++]=2;//0x02 = Success		
-						#else
-						SendMmePacket.MMENTRY[SendMmePacketSize++]=4;//0x04 = Not Required	
-						#endif
-						break;
-					}
-				}
-			}
-			SendMmePacketSize+=19;	//the size before MMENTRY
-			sendto(RawSock, &SendMmePacket, SendMmePacketSize, 0, (struct sockaddr*)&DestSocketAddress, sizeof(struct sockaddr_ll));
-			V2gFlowStatus=CM_VALIDATE_CNF;
-			ftime(&SeqStartTime);
-			break;
-		case MMTYPE_CM_SLAC_MATCH_REQ:
-			#ifdef Debug
-			printf("--- MMTYPE_CM_SLAC_MATCH_REQ ---\n");
-			printf("APPLICATION_TYPE: 0x%x\n", MmePacket->MMENTRY[0]);
-			printf("SECURITY_TYPE: 0x%x\n", MmePacket->MMENTRY[1]);
-			printf("MVFLength: 0x%x, 0x%x\n", MmePacket->MMENTRY[2],MmePacket->MMENTRY[3]);//Fixed value (0x3E) for matching
-			printf("PEV ID: \n");	
-			for(Rtn=0;Rtn<17;Rtn++)
-				printf("%02x, ",MmePacket->MMENTRY[4+Rtn]);
-			printf("\n");		
-			printf("PEV MAC: \n");	
-			for(Rtn=0;Rtn<6;Rtn++)
-				printf("%02x, ",MmePacket->MMENTRY[21+Rtn]);
-			printf("\n");	
-			printf("EVSE ID: \n");	
-			for(Rtn=0;Rtn<17;Rtn++)
-				printf("%02x, ",MmePacket->MMENTRY[27+Rtn]);
-			printf("\n");		
-			printf("EVSE MAC: \n");	
-			for(Rtn=0;Rtn<6;Rtn++)
-				printf("%02x, ",MmePacket->MMENTRY[44+Rtn]);
-			printf("\n");		
-			printf("RunID: \n");	
-			for(Rtn=0;Rtn<8;Rtn++)
-				printf("%02x, ",MmePacket->MMENTRY[50+Rtn]);
-			printf("\n");		
-			printf("RSVD: \n");	
-			for(Rtn=0;Rtn<8;Rtn++)
-				printf("%02x, ",MmePacket->MMENTRY[58+Rtn]);
-			printf("\n");		
-			#endif		
-			V2gFlowStatus=CM_SLAC_MATCH_REQ;
-			memset(&SendMmePacket,0,sizeof(struct MmeHeader));
-			memcpy(SendMmePacket.ODA,MmePacket->OSA,6);
-			memcpy(SendMmePacket.OSA,CsuMac,6);
-			SendMmePacket.MTYPE=htons(EtherType_HomePlug);
-			SendMmePacket.MMV=MmePacket->MMV;
-			SendMmePacket.MMTYPE=MMTYPE_CM_SLAC_MATCH_CNF;
-			SendMmePacket.FMI[0]=SendMmePacket.FMI[1]=0;
-			SendMmePacketSize=0;
-			SendMmePacket.MMENTRY[SendMmePacketSize++]=0x00;//Fixed value (0x00) indicating ¡§PEV-EVSE matching¡¨
-			SendMmePacket.MMENTRY[SendMmePacketSize++]=0x00;//Fixed value (0x00) indicating ¡§No Security¡¨
-			SendMmePacket.MMENTRY[SendMmePacketSize++]=0x00;//Fixed value (0x0056) for matching
-			SendMmePacket.MMENTRY[SendMmePacketSize++]=0x56;//Fixed value (0x0056) for matching
-			memset(SendMmePacket.MMENTRY+SendMmePacketSize,0,17);//PEV ID
-			SendMmePacketSize+=17;
-			memcpy(SendMmePacket.MMENTRY+SendMmePacketSize,EvMac,6);
-			SendMmePacketSize+=6;
-			memset(SendMmePacket.MMENTRY+SendMmePacketSize,0,17);//EVSE ID
-			SendMmePacketSize+=17;
-			memcpy(SendMmePacket.MMENTRY+SendMmePacketSize,CsuMac,6);
-			SendMmePacketSize+=6;
-			memcpy(SendMmePacket.MMENTRY+SendMmePacketSize,SlacRunId,sizeof(SlacRunId));
-			SendMmePacketSize+=sizeof(SlacRunId);
-			memset(SendMmePacket.MMENTRY+SendMmePacketSize,0,8);//RSVD
-			SendMmePacketSize+=8;
-			memcpy(SendMmePacket.MMENTRY+SendMmePacketSize,Nid,sizeof(Nid));
-			SendMmePacketSize+=sizeof(Nid);
-			SendMmePacket.MMENTRY[SendMmePacketSize++]=0x00;//RSVD
-			memcpy(SendMmePacket.MMENTRY+SendMmePacketSize,NewNmkKey,sizeof(NewNmkKey));
-			SendMmePacketSize+=sizeof(NewNmkKey);
-			SendMmePacketSize+=19;	//the size before MMENTRY
-			#ifdef Debug
-			printf("\n\n***** Response MME Packet *****\n");
-			printf("SendMmePacket.ODA: %02x:%02x:%02x:%02x:%02x:%02x:\n", 
-				SendMmePacket.ODA[0],SendMmePacket.ODA[1],SendMmePacket.ODA[2],SendMmePacket.ODA[3],SendMmePacket.ODA[4],SendMmePacket.ODA[5]);
-			printf("SendMmePacket.OSA: %02x:%02x:%02x:%02x:%02x:%02x:\n", 
-				SendMmePacket.OSA[0],SendMmePacket.OSA[1],SendMmePacket.OSA[2],SendMmePacket.OSA[3],SendMmePacket.OSA[4],SendMmePacket.OSA[5]);
-			printf("MTYPE: 0x%x\n", htons(SendMmePacket.MTYPE));
-			printf("MMV: 0x%x\n", SendMmePacket.MMV);
-			printf("MMTYPE: 0x%x\n", SendMmePacket.MMTYPE);
-			printf("FMI 0x%x, 0x%x\n", SendMmePacket.FMI[0],SendMmePacket.FMI[1]);
-			printf("--- CM_SLAC_MATCH_CNF ---\n");
-			printf("APPLICATION_TYPE: 0x%x\n", SendMmePacket.MMENTRY[0]);
-			printf("SECURITY_TYPE: 0x%x\n", SendMmePacket.MMENTRY[1]);
-			printf("MVFLength: 0x%x, 0x%x\n", SendMmePacket.MMENTRY[2],SendMmePacket.MMENTRY[3]);
-			printf("PEV ID: \n");	
-			for(Rtn=0;Rtn<17;Rtn++)
-				printf("%02x, ",SendMmePacket.MMENTRY[4+Rtn]);
-			printf("\n");		
-			printf("PEV MAC: \n");	
-			for(Rtn=0;Rtn<6;Rtn++)
-				printf("%02x, ",SendMmePacket.MMENTRY[21+Rtn]);
-			printf("\n");	
-			printf("EVSE ID: \n");	
-			for(Rtn=0;Rtn<17;Rtn++)
-				printf("%02x, ",SendMmePacket.MMENTRY[27+Rtn]);
-			printf("\n");		
-			printf("EVSE MAC: \n");	
-			for(Rtn=0;Rtn<6;Rtn++)
-				printf("%02x, ",SendMmePacket.MMENTRY[44+Rtn]);
-			printf("\n");		
-			printf("RunID: \n");	
-			for(Rtn=0;Rtn<8;Rtn++)
-				printf("%02x, ",SendMmePacket.MMENTRY[50+Rtn]);
-			printf("\n");		
-			printf("RSVD: \n");	
-			for(Rtn=0;Rtn<8;Rtn++)
-				printf("%02x, ",SendMmePacket.MMENTRY[58+Rtn]);
-			printf("\n");		
-			printf("NID: \n");	
-			for(Rtn=0;Rtn<7;Rtn++)
-				printf("%02x, ",SendMmePacket.MMENTRY[66+Rtn]);
-			printf("\n");	
-			printf("RSVD: 0x%x\n", SendMmePacket.MMENTRY[73]);
-			printf("NMK: \n");	
-			for(Rtn=0;Rtn<16;Rtn++)
-				printf("%02x, ",SendMmePacket.MMENTRY[74+Rtn]);
-			printf("\n");	
-			#endif
-			V2gFlowStatus=CM_SLAC_MATCH_CNF;
-			Rtn=sendto(RawSock, &SendMmePacket, SendMmePacketSize, 0, (struct sockaddr*)&DestSocketAddress, sizeof(struct sockaddr_ll));
-			#ifdef Debug
-			printf("SendMmePacketSize=%d,Rtn=%d\n",SendMmePacketSize,Rtn);
-			#endif
-			ftime(&SeqStartTime);	
-			break;
-		case MMTYPE_VENDOR_VS_HOST_ACTION:
-			{
-				struct QcaVendorMmeHeader *RecvPacket;
-				RecvPacket = (struct QcaVendorMmeHeader *)Buffer;
-				//#ifdef Debug
-				printf("--- MMTYPE_VENDOR_VS_HOST_ACTION ---\n");
-				//#endif
-				switch (RecvPacket->MBODY[0])
-				{
-					case 0x00:
-						//Loader (Device Softloader or Bootloader) ready
-						printf("QCA7K: Loader Ready\n");
-						break;
-					case 0x01:
-						//Firmware Upgrade Ready
-						printf("QCA7K: Firmware Upgrade Ready\n");
-						break;	
-					case 0x02:
-						//PIB Update Ready
-						printf("QCA7K: PIB Update Ready\n");
-						break;	
-					case 0x03:
-						//Firmware Upgrade and PIB Update ready
-						printf("QCA7K: Firmware Upgrade and PIB Update ready\n");
-						break;		
-					case 0x04:
-						//Loader (Bootloader) ready to receive SDRAM configuration.
-						printf("QCA7K: Loader ready to receive SDRAM configuration\n");
-						break;			
-					case 0x05:
-						//Reset to Factory Defaults.
-						printf("QCA7K: Reset to Factory Defaults\n");
-						break;	
-					default:
-						//Reserved
-						printf("QCA7K: Reserved\n");
-						break;			
-				}
-			}
-			break;		
-		case MMTYPE_VENDOR_ATTEN_CHAR:
-			#ifdef Debug
-			printf("--- MMTYPE_VENDOR_ATTEN_CHAR ---\n");
-			#endif
-			break;		
-		case MMTYPE_VENDOR_VS_NW_INFO_CNF:		
-			memcpy(QcaMac,MmePacket->OSA,6);
-			#ifdef Debug
-			printf("--- MMTYPE_VENDOR_VS_NW_INFO_CNF ---\n");
-			printf("QcaMac: %02x:%02x:%02x:%02x:%02x:%02x\n", 
-				QcaMac[0],QcaMac[1],QcaMac[2],QcaMac[3],QcaMac[4],QcaMac[5]);
-			#endif
-			V2gFlowStatus=CM_SET_KEY_REQ;
-		default:
-			break;
-	}
-}
-
-int SendSetKey()
-{
-	int i = 0;
-	unsigned char nRandValue = 0x0;
-	unsigned char ConstString[16]="PhihongKey000000";
-	
-	memset(&SendMmePacket,0,sizeof(struct MmeHeader));
-	memcpy(SendMmePacket.ODA,QcaMac,6);
-	memcpy(SendMmePacket.OSA,CsuMac,6);
-	SendMmePacket.MTYPE=htons(EtherType_HomePlug);
-	SendMmePacket.MMV=0x01;
-	SendMmePacket.MMTYPE=MMTYPE_CM_SET_KEY_REQ;
-	SendMmePacket.FMI[0]=SendMmePacket.FMI[1]=0;
-	SendMmePacketSize=0;
-	SendMmePacket.MMENTRY[SendMmePacketSize++]=0x01;//Fixed value (0x01) to indicate ¡§NMK¡¨
-	memset(SendMmePacket.MMENTRY+SendMmePacketSize,0,4);//My Nonce, Fixed value(0x00000000), encrypted payload not used
-	SendMmePacketSize+=4;
-	memset(SendMmePacket.MMENTRY+SendMmePacketSize,0,4);//Your Nonce, Fixed value(0x00000000), encrypted payload not used
-	SendMmePacketSize+=4;
-	SendMmePacket.MMENTRY[SendMmePacketSize++]=0x04;//PID, Fixed value (0x04) to indicate ¡§HLE protocol¡¨
-	memset(SendMmePacket.MMENTRY+SendMmePacketSize,0,2);//PRN, Fixed value(0x00), encrypted payload not used
-	SendMmePacketSize+=2;
-	SendMmePacket.MMENTRY[SendMmePacketSize++]=0x00;//PMN, Fixed value(0x00) encrypted payload not used
-	SendMmePacket.MMENTRY[SendMmePacketSize++]=0x01;//CCo Capablility
-	srand(time(NULL));
-	for(i=10;i<16;i++)
-	{
-        	nRandValue = (rand()%62)+1;
-		if((nRandValue>=0)&&(nRandValue<=9))  // 0 ~ 9
-            		ConstString[i]= nRandValue + 0x30;
-		else if((nRandValue>=10)&&(nRandValue<=35)) // A ~ Z
-			ConstString[i]= nRandValue -10 + 0x41;
-		else if((nRandValue>=36)&&(nRandValue<=61)) // a ~ z
-			ConstString[i]= nRandValue -37 + 0x61;
-		else
-			ConstString[i]= 0x30;
-	}   
-	memset(NewNmkKey,0,sizeof(NewNmkKey));
-	memset(Nid,0,sizeof(Nid));
-    	HPAVKeyNMK(NewNmkKey,ConstString);
-    	HPAVKeyNID(Nid,NewNmkKey,DEFAULT_LEVEL);
-    	memcpy(SendMmePacket.MMENTRY+SendMmePacketSize,Nid,sizeof(Nid));//NID, 54 LSBs contain the NID 2 MSBs = 0b00
-	SendMmePacketSize+=sizeof(Nid);
-	SendMmePacket.MMENTRY[SendMmePacketSize++]=0x01;//NewEKS,Fixed value (0x01)to indicate ¡§NMK¡¨
-	memcpy(SendMmePacket.MMENTRY+SendMmePacketSize,NewNmkKey,sizeof(NewNmkKey));//NewKey
-	SendMmePacketSize+=sizeof(NewNmkKey);
-	SendMmePacketSize+=19;	//the size before MMENTRY
-	V2gFlowStatus=CM_SET_KEY_REQ;
-	i=sendto(RawSock, &SendMmePacket, SendMmePacketSize, 0, (struct sockaddr*)&DestSocketAddress, sizeof(struct sockaddr_ll));
-	#ifdef Debug
-	printf("SendSetKey: send size =%d\n",i);
-	#endif
-	
-}
-
-int GetQca7kMac()
-{
-	int i = 0;
-	struct QcaVendorMmeHeader SendPacket;
-	
-	memset(&SendPacket,0,sizeof(struct QcaVendorMmeHeader));
-	memset(SendPacket.ODA, 0xFF, 6);
-	memcpy(SendPacket.OSA,CsuMac,6);
-	SendPacket.MTYPE=htons(EtherType_HomePlug);
-	SendPacket.MMV=0x00;
-	SendPacket.MMTYPE=MMTYPE_VENDOR_VS_NW_INFO;
-	SendPacket.OUI[0]=0x00;
-	SendPacket.OUI[1]=0xB0;
-	SendPacket.OUI[2]=0x52;
-	
-	i=sendto(RawSock, &SendPacket, 20, 0, (struct sockaddr*)&DestSocketAddress, sizeof(struct sockaddr_ll));
-	#ifdef Debug
-	printf("GetQca7kMac: send size =%d\n",i);
-	#endif
-}
- 
-int SlacComm()
-{
-	int packet_size,count;
-	static unsigned int STime;
-	
-	if(RawSock>=0)	
-	{
-		memset(RecvBuffer,0,RecvBufferSize);
-		packet_size = recvfrom(RawSock , RecvBuffer , RecvBufferSize , 0 , NULL, NULL);
-		if(packet_size>0)
-		{
-			/*#ifdef Debug
-			printf("Raw Data: ");
-			for(count=0;count<packet_size;count++)
-				printf("0x%x, ",RecvBuffer[count]);
-			printf("\n");
-			#endif*/
-			MmeProcess(RecvBuffer, packet_size);
-		}	
-	}
-	switch(V2gFlowStatus)
-	{
-		case Idle:
-			if(RawSock<0)	
-			{
-				struct timeval	tv;
-				RawSock= socket(PF_PACKET, SOCK_RAW, htons(EtherType_HomePlug));
-				#ifdef Debug
-				printf("RawSock=%d\n",RawSock);
-				#endif
-				if(RawSock == -1)
-				{
-					
-					#ifdef SystemLogMessage	
-					StoreLogMsg("[EvComm]SlacComm:Failed to create socke");
-					#endif		
-					V2gFlowStatus=Other_Fault;
-				   	return -1;
-				}
-				setsockopt(RawSock, SOL_SOCKET, SO_BINDTODEVICE,QcaInterface, 4);
-			    	/*tv.tv_sec = 0; 
-			    	tv.tv_usec = 10000; 
-			   	 if (setsockopt(RawSock, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof(struct	timeval)) < 0) 
-			    	{
-				       	#ifdef SystemLogMessage	
-					StoreLogMsg("[EvComm]SlacComm:Set SO_RCVTIMEO NG");
-					#endif	
-					V2gFlowStatus=Other_Fault;
-				   	return -1;	
-			    	}*/
-			    	memset(&Req, 0, sizeof(struct ifreq));
-	    			strcpy( (char*)Req.ifr_name, QcaInterface);
-				if (ioctl(RawSock, SIOCGIFINDEX, &Req) < 0)
-				{
-			    		#ifdef SystemLogMessage	
-					StoreLogMsg("[EvComm]SlacComm: ioctl NG");
-					#endif	
-					V2gFlowStatus=Other_Fault;
-				   	return -1;	
-				}
-				memset( &DestSocketAddress, 0, sizeof(struct sockaddr_ll) );
-				DestSocketAddress.sll_ifindex = Req.ifr_ifindex;
-				DestSocketAddress.sll_halen = ETH_ALEN;
-				//Get QCA7K MAC address
-				GetQca7kMac();
-				PwmStartTime=0;
-				count=0;
-				STime=time(NULL);
-			}	
-			else
-			{
-				if((time(NULL)-STime)>=3)
-				{
-					if((count++) >=3)
-						V2gFlowStatus=Sequence_Timeout;
-					else
-					{		
-						GetQca7kMac();
-						STime=time(NULL);
-					}
-				}	
-			}
-			break;
-		case CM_SET_KEY_REQ:	
-			//CM_SET_KEY_REQ
-			SendSetKey();
-			break;
-		case CM_SET_KEY_CNF:
-			OutputCpPwmDuty(5);
-			if(PwmStartTime<=0)
-				PwmStartTime=time(NULL);
-			else
-			{
-				if((time(NULL)-PwmStartTime)>TT_EVSE_SLAC_init)
-				{
-					#ifdef SystemLogMessage	
-					StoreLogMsg("[EvComm]SlacComm: Wait CM_SLAC_PARM_REQ Timeout - TT_EVSE_SLAC_init ");
-					#endif	
-					V2gFlowStatus=Sequence_Timeout;
-				   	return -1;	
-				}	
-			}		
-			break;	
-		case CM_SLAC_PARM_CONF:
-			ftime(&SeqEndTime);	
-			if(DiffTimeb(SeqStartTime, SeqEndTime)>TT_match_sequence)
-			{
-				#ifdef SystemLogMessage	
-				StoreLogMsg("[EvComm]SlacComm: Wait CM_START_ATTEN_CHAR_IND Timeout - TT_match_sequence ");
-				#endif	
-				V2gFlowStatus=Sequence_Timeout;
-				return -1;	
-			}	
-			break;
-		case CM_START_ATTEN_CHAR_IND:	
-			ftime(&SeqEndTime);	
-			if(DiffTimeb(SeqStartTime, SeqEndTime)>(3*TP_EV_batch_msg_interval))//one more time interval for tolerance 
-			{
-				#ifdef SystemLogMessage	
-				StoreLogMsg("[EvComm]SlacComm: Wait CM_MNBC_SOUND_IND Timeout - 3*TP_EV_batch_msg_interval ");
-				#endif	
-				V2gFlowStatus=Sequence_Timeout;
-				return -1;	
-			}	
-			break;
-		case CM_MNBC_SOUND_IND:	
-			ftime(&SeqEndTime);	
-			if(DiffTimeb(SeqStartTime, SeqEndTime)>(TT_EVSE_match_MNBC*100))
-			{
-				memset(&SendMmePacket,0,sizeof(struct MmeHeader));
-				memcpy(SendMmePacket.ODA,EvMac,6);
-				memcpy(SendMmePacket.OSA,CsuMac,6);
-				SendMmePacket.MTYPE=htons(EtherType_HomePlug);
-				SendMmePacket.MMV=0x01;
-				SendMmePacket.MMTYPE=MMTYPE_CM_ATTN_CHAR_IND;
-				SendMmePacket.FMI[0]=SendMmePacket.FMI[1]=0;
-				SendMmePacketSize=0;
-				SendMmePacket.MMENTRY[SendMmePacketSize++]=0;//APPLICATION_TYPE,  Fixed value indicating ¡§PEVEVSE matching¡¨
-				SendMmePacket.MMENTRY[SendMmePacketSize++]=0;//SECURITY_TYPE, Fixed value indicating ¡§No Security¡¨
-				memcpy(SendMmePacket.MMENTRY+SendMmePacketSize,EvMac,6);//SOURCE_ADDRESS, MAC address of the EV Host
-				SendMmePacketSize+=6;
-				memcpy(SendMmePacket.MMENTRY+SendMmePacketSize,SlacRunId,sizeof(SlacRunId));
-				SendMmePacketSize+=sizeof(SlacRunId);
-				memset(SendMmePacket.MMENTRY+SendMmePacketSize,0,17);//SOURCE_ID
-				SendMmePacketSize+=17;
-				memset(SendMmePacket.MMENTRY+SendMmePacketSize,0,17);//RESP_ID
-				SendMmePacketSize+=17;
-				SendMmePacket.MMENTRY[SendMmePacketSize++]=AttenProfileNum;//NumSounds
-				for(count=0;count<AagGroupsNum;count++)
-					SendMmePacket.MMENTRY[SendMmePacketSize++]=(Aag[count]/AttenProfileNum)&0xFF;
-				SendMmePacketSize+=19;	//the size before MMENTRY
-				#ifdef Debug
-				printf("\n\n***** Send MME Packet *****\n");
-				printf("SendMmePacket.ODA: %02x:%02x:%02x:%02x:%02x:%02x:\n", 
-					SendMmePacket.ODA[0],SendMmePacket.ODA[1],SendMmePacket.ODA[2],SendMmePacket.ODA[3],SendMmePacket.ODA[4],SendMmePacket.ODA[5]);
-				printf("SendMmePacket.OSA: %02x:%02x:%02x:%02x:%02x:%02x:\n", 
-					SendMmePacket.OSA[0],SendMmePacket.OSA[1],SendMmePacket.OSA[2],SendMmePacket.OSA[3],SendMmePacket.OSA[4],SendMmePacket.OSA[5]);
-				printf("MTYPE: 0x%x\n", htons(SendMmePacket.MTYPE));
-				printf("MMV: 0x%x\n", SendMmePacket.MMV);
-				printf("MMTYPE: 0x%x\n", SendMmePacket.MMTYPE);
-				printf("FMI 0x%x, 0x%x\n", SendMmePacket.FMI[0],SendMmePacket.FMI[1]);
-				printf("--- CM_ATTEN_CHAR_IND ---\n");
-				printf("APPLICATION_TYPE: 0x%x\n", SendMmePacket.MMENTRY[0]);
-				printf("SECURITY_TYPE: 0x%x\n", SendMmePacket.MMENTRY[1]);
-				printf("SOURCE_ADDRESS: %02x:%02x:%02x:%02x:%02x:%02x\n", 
-					SendMmePacket.MMENTRY[2],SendMmePacket.MMENTRY[3],SendMmePacket.MMENTRY[4],SendMmePacket.MMENTRY[5],
-					SendMmePacket.MMENTRY[6],SendMmePacket.MMENTRY[7]);
-				printf("RunID: %02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x\n", 
-					SendMmePacket.MMENTRY[8],SendMmePacket.MMENTRY[9],SendMmePacket.MMENTRY[10],SendMmePacket.MMENTRY[11],
-					SendMmePacket.MMENTRY[12],SendMmePacket.MMENTRY[13],SendMmePacket.MMENTRY[14],SendMmePacket.MMENTRY[15]);	
-				printf("SOURCE_ID: \n");	
-				for(count=0;count<17;count++)
-					printf("%02x, ",SendMmePacket.MMENTRY[16+count]);
-				printf("\n");		
-				printf("RESP_ID: \n");	
-				for(count=0;count<17;count++)
-					printf("%02x, ",SendMmePacket.MMENTRY[33+count]);
-				printf("\n");		
-				printf("NumSounds: 0x%x\n", SendMmePacket.MMENTRY[50]);
-				printf("ATTEN_PROFILE: \n");	
-				for(count=0;count<AagGroupsNum;count++)
-					printf("%02x, ",SendMmePacket.MMENTRY[51+count]);
-				printf("\n");		
-				#endif
-				V2gFlowStatus=CM_ATTEN_CHAR_IND;
-				count=sendto(RawSock, &SendMmePacket, SendMmePacketSize, 0, (struct sockaddr*)&DestSocketAddress, sizeof(struct sockaddr_ll));
-				#ifdef Debug
-				printf("SendMmePacketSize=%d,Rtn=%d\n",SendMmePacketSize,count);
-				#endif
-				ftime(&SeqStartTime);	
-			}	
-			break;	
-		case CM_ATTEN_CHAR_IND:	
-			ftime(&SeqEndTime);	
-			if(DiffTimeb(SeqStartTime, SeqEndTime)>TT_match_response)
-			{
-				#ifdef SystemLogMessage	
-				StoreLogMsg("[EvComm]SlacComm: Wait CM_ATTEN_CHAR_RSP Timeout - TT_match_response ");
-				#endif	
-				V2gFlowStatus=Sequence_Timeout;
-				return -1;	
-			}	
-			break;	
-		case CM_ATTEN_CHAR_RSP:	
-			ftime(&SeqEndTime);	
-			if(DiffTimeb(SeqStartTime, SeqEndTime)>TT_EVSE_match_session)
-			{
-				#ifdef SystemLogMessage	
-				StoreLogMsg("[EvComm]SlacComm: Wait CM_VALIDATE_REQ or CM_SLAC_MATCH_REQ Timeout - TT_EVSE_match_session ");
-				#endif	
-				V2gFlowStatus=Sequence_Timeout;
-				return -1;	
-			}	
-			break;		
-		case CM_VALIDATE_CNF:	
-			ftime(&SeqEndTime);	
-			if(DiffTimeb(SeqStartTime, SeqEndTime)>TT_match_sequence)
-			{
-				#ifdef SystemLogMessage	
-				StoreLogMsg("[EvComm]SlacComm: Wait CM_VALIDATE_CNF or CM_SLAC_MATCH_REQ Timeout - TT_match_sequence ");
-				#endif	
-				V2gFlowStatus=Sequence_Timeout;
-				return -1;	
-			}	
-			break;			
-		case CM_SLAC_MATCH_CNF:	
-			if(UdpSock>0)
-			{
-				close(UdpSock);
-				UdpSock=-1;
-			}	
-			if(TcpSock>0)
-			{
-				close(TcpSock);
-				TcpSock=-1;
-			}	
-			ftime(&SeqStartTime);	
-			V2gFlowStatus=SLACC_SDP_UDP_Connection;
-			break;				
-		defaudlt:
-			break;		
-	}	
-    return 0;  
-} 
-
-int V2gMsgProcess(unsigned char *Buffer, int DataLength)
-{
-	struct V2gtpHeader *RecvHeader;
-       	unsigned char *PayloadData;
-       	
-       	RecvHeader= (struct V2gtpHeader *) Buffer;
-	#ifdef Debug
-	printf("\n\n***********************************\n");
-	printf("***** Received V2G Packet *****\n");
-	printf("***********************************\n");
-	printf("ProtocolVersion=%d\n",RecvHeader->ProtocolVersion);
-	printf("InverseProtocolVersion=0x%x\n",RecvHeader->InverseProtocolVersion);
-	printf("PayloadType=0x%x\n",htons(RecvHeader->PayloadType));
-	printf("PayloadLength=0x%x\n",htonl(RecvHeader->PayloadLength));
-	#endif
-	if(htons(RecvHeader->PayloadType)!=V2GTP_PAYLOAD_TYPE_EXI_MSG)
-	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[EvComm]V2gMsgProcess: Wrong Payload Type");
-		#endif	
-		return 0;  
-	}
-	//EXI decode 
-	//process received message and change status flag
-	
-}
-
-int V2gComm(int AcceptFd)
-{
-	int packet_size,count;
-			
-	memset(RecvBuffer,0,RecvBufferSize);
-	packet_size=recv(AcceptFd, RecvBuffer, RecvBufferSize, 0);
-	if(packet_size>0)
-	{
-		/*#ifdef Debug
-		printf("V2gComm Data: ");
-		for(count=0;count<packet_size;count++)
-			printf("0x%x, ",RecvBuffer[count]);
-		printf("\n");
-		#endif*/
-		V2gMsgProcess(RecvBuffer, packet_size);
-	}	
-	//following are the response message handling according to status flag
-	switch(V2gFlowStatus)
-	{
-		case SupportedAppProtocolRequest:
-			break;
-		default:
-			break;	
-	}
-	return 0;
-}
-
-int SdpUdpConnected()
-{
-	int packet_size,Rtn;
-	struct sockaddr_in6 ServerAddr,ClientAddr; 
-       	struct V2gtpHeader *RecvHeader;
-       	unsigned char *PayloadData;
-        
-	if(UdpSock<=0)
-	{
-		if ((UdpSock = socket(AF_INET6, SOCK_DGRAM, 0)) <0) 
-		{
-	                #ifdef SystemLogMessage	
-			StoreLogMsg("[EvComm]SdpUdpConnected: Fail to open UdpSock");
-			#endif	
-	                return 0;  
-		}
-		memset(&ServerAddr,0, sizeof(struct sockaddr_in));
-		ServerAddr.sin6_family = AF_INET6;
-        	ServerAddr.sin6_addr=in6addr_any;
-        	ServerAddr.sin6_port = htons(SdpUdpServerPort);
-		if(bind(UdpSock, (struct sockaddr *)&ServerAddr, sizeof(struct sockaddr_in6)) <0)
-		{
-                  	#ifdef SystemLogMessage	
-			StoreLogMsg("[EvComm]SdpUdpConnected: Fail to bind UdpSock");
-			#endif	
-			close(UdpSock);
-			UdpSock=-1;
-	                return 0;  
-       		}
-       		#ifdef Debug
-       		printf("UdpSock=%d\n",UdpSock);
-       		#endif	
-	}
-	memset(RecvBuffer,0,RecvBufferSize);
-	memset(&ClientAddr,0, sizeof(struct sockaddr_in));
-	Rtn=sizeof(struct sockaddr_in6);
-	packet_size = recvfrom(UdpSock , RecvBuffer , RecvBufferSize , MSG_DONTWAIT , (struct sockaddr *)&ClientAddr, &Rtn);
-	#ifdef Debug
-       	printf("packet_size=%d\n",packet_size);
-       	#endif	
-	if(packet_size>0)
-	{		
-		RecvHeader= (struct V2gtpHeader *) RecvBuffer;
-		PayloadData=RecvBuffer+sizeof(struct V2gtpHeader);
-		#ifdef Debug
-		printf("\n\n***********************************\n");
-		printf("***** Received SDP Packet *****\n");
-		printf("***********************************\n");
-		printf("ClientAddress=");
-		for(Rtn=0;Rtn<16;Rtn+=2)
-			printf("%02x%02x:",ClientAddr.sin6_addr.s6_addr[Rtn],ClientAddr.sin6_addr.s6_addr[Rtn+1]);
-		printf("\n");	
-		printf("ClientPort=%d\n",ClientAddr.sin6_port);
-		printf("ProtocolVersion=%d\n",RecvHeader->ProtocolVersion);
-		printf("InverseProtocolVersion=0x%x\n",RecvHeader->InverseProtocolVersion);
-		printf("PayloadType=0x%x\n",htons(RecvHeader->PayloadType));
-		printf("PayloadLength=0x%x\n",htonl(RecvHeader->PayloadLength));
-		#endif
-		if((RecvHeader->ProtocolVersion==0x01)&&(RecvHeader->InverseProtocolVersion==0xFE)&&(htons(RecvHeader->PayloadType)==V2GTP_PAYLOAD_TYPE_SDP_REQUEST))
-		{
-			#ifdef Debug
-			printf("Security=0x%x\n",*(PayloadData+0));
-			printf("TransportProtocol=0x%x\n",*(PayloadData+1));
-			#endif
-			RecvHeader->PayloadType=htons(V2GTP_PAYLOAD_TYPE_SDP_RESPONSE);
-			RecvHeader->PayloadLength=htonl(20);	//Fixed Length=20
-			memset(PayloadData,0,20);
-			// MAC address[0:2] + FFFE + MAC address[3:5]
-			PayloadData[0]=(IPV6_LINK_LOCAL_PREFIX>>8)&0xFF;  
-			PayloadData[1]=IPV6_LINK_LOCAL_PREFIX&0xFF;
-			PayloadData[8]=CsuMac[0];
-			PayloadData[8]^=0x02;// bit 1 should complemented.
-			PayloadData[9]=CsuMac[1];
-			PayloadData[10]=CsuMac[2];
-			PayloadData[11]=0xFF;
-			PayloadData[12]=0xFE;
-			PayloadData[13] =CsuMac[3];
-			PayloadData[14]=CsuMac[4];
-			PayloadData[15]=CsuMac[5];
-			//TCP port
-			PayloadData[16]=(SdpTcpServerPort>>8)&0xFF;
-			PayloadData[17]=SdpTcpServerPort&0xFF;
-			PayloadData[18]=SDP_PAYLOAD_SECURITY_NONE;		//Security
-			PayloadData[19]=SDP_PAYLOAD_TRANS_PROTOCOL_TCP;	//Transport protocol
-			Rtn=sendto(UdpSock, RecvBuffer, sizeof(struct V2gtpHeader)+htonl(RecvHeader->PayloadLength), 0, (struct sockaddr *)&ClientAddr, sizeof(struct sockaddr_in6));
-			#ifdef Debug
-			printf("\n\n***** Response SDP Packet *****\n");
-			printf("Send size=%d\n",Rtn);
-			printf("Destination Address=");
-			for(Rtn=0;Rtn<16;Rtn++)
-				printf("%02x, ",ClientAddr.sin6_addr.s6_addr[Rtn]);
-			printf("\n");	
-			printf("Destination Port=%d\n",ClientAddr.sin6_port);
-			printf("ProtocolVersion=%d\n",RecvHeader->ProtocolVersion);
-			printf("InverseProtocolVersion=0x%x\n",RecvHeader->InverseProtocolVersion);
-			printf("PayloadType=0x%x\n",htons(RecvHeader->PayloadType));
-			printf("PayloadLength=0x%x\n",htonl(RecvHeader->PayloadLength));
-			printf("SECC Ipv6 Address=");
-			for(Rtn=0;Rtn<16;Rtn++)
-				printf("%02x:",PayloadData[Rtn]);
-			printf("\n");	
-			printf("SECC Port=%d\n",(PayloadData[16]<<8|PayloadData[17]));
-			printf("Security=0x%x\n",PayloadData[19]);
-			printf("TransportProtocol=0x%x\n",PayloadData[20]);
-			#endif
-			if(Rtn>0)
-				return 1;
-		}
-	}	
-	return 0;  
-}
-
-int V2gTcpConnected()
-{
-	int packet_size,Rtn,AcceptFd;
-	struct sockaddr_in6 ServerAddr,ClientAddr; 
-       
-	if(TcpSock<=0)
-	{
-		if ((TcpSock = socket(PF_INET6, SOCK_STREAM, 0)) <0) 
-		{
-	                #ifdef SystemLogMessage	
-			StoreLogMsg("[EvComm]V2gTcpConnected: Fail to open TcpSock");
-			#endif	
-	                return 0;  
-		}
-		fcntl(TcpSock, F_SETFL, O_NONBLOCK);	//set to O_NONBLOCK
-		memset(&ServerAddr,0, sizeof(struct sockaddr_in));
-		ServerAddr.sin6_family = PF_INET6;
-        	ServerAddr.sin6_addr=in6addr_any;
-        	ServerAddr.sin6_port = htons(SdpTcpServerPort);
-		if(bind(TcpSock, (struct sockaddr *)&ServerAddr, sizeof(struct sockaddr_in6)) <0)
-		{
-                  	#ifdef SystemLogMessage	
-			StoreLogMsg("[EvComm]V2gTcpConnected: Fail to bind TcpSock");
-			#endif	
-			close(TcpSock);
-			TcpSock=-1;
-	                return 0;  
-       		}
-       		if(listen(TcpSock, 1) == -1) //only accept one connection
-       		{
-       			#ifdef SystemLogMessage	
-			StoreLogMsg("[EvComm]V2gTcpConnected: Fail to listen TcpSock");
-			#endif	
-			close(TcpSock);
-			TcpSock=-1;
-	                return 0;  
-       		}
-       		#ifdef Debug
-      	 	printf("TcpSock=%d\n",TcpSock);
-      	 	#endif	
-	}
-	Rtn=sizeof(struct sockaddr_in6);
-	if((AcceptFd=accept(TcpSock,(struct sockaddr *)&ClientAddr,&Rtn))==-1)
-	{
-		#ifdef Debug
-		printf("Wait TCP connection\n");
-		#endif
-		return 0;
-	}
-	#ifdef Debug
-	printf("Accept one TCP connection:\n");
-	printf("AcceptFd=%d\n",AcceptFd);
-	printf("ClientAddress=");
-		for(Rtn=0;Rtn<16;Rtn+=2)
-			printf("%02x%02x:",ClientAddr.sin6_addr.s6_addr[Rtn],ClientAddr.sin6_addr.s6_addr[Rtn+1]);
-		printf("\n");	
-		printf("ClientPort=%d\n",ClientAddr.sin6_port);
-	#endif
-	return AcceptFd;  
-}
- 
-int main(int argc,char *argv[])
-{
-	unsigned char Rtn;
-	int TcpAcceptFd;
-	//Initialization	
-	InitShareMemory();
-	//start to detect pilot state
-	PilotDetectionPid=0;
-	PilotDetection();
-	//Init communication parameters
-	GetEthMac(QcaInterface, CsuMac);
-	RecvBuffer=(unsigned char *)malloc(RecvBufferSize);
-	memset(RecvBuffer,0,RecvBufferSize);
-	SendBuffer=(unsigned char *)malloc(SendBufferSize);
-	memset(SendBuffer,0,SendBufferSize);
-	if(RawSock>0)
-		close(RawSock);
-	if(UdpSock>0)
-		close(UdpSock);
-	if(TcpSock>0)
-		close(TcpSock);
-	RawSock=UdpSock=TcpSock=-1;
-	V2gFlowStatus=0;
-	AttenProfileNum=0;
-	while(1)
-	{
-		#ifdef Debug
-		printf("V2gFlowStatus=%d\n",V2gFlowStatus);
-		#endif
-		//if((ShmInternalComm->ChargingPermission==0x01)&&(ConnectorPlugIn()==1))
-		if(1)
-		{
-			if(V2gFlowStatus<SLACC_SDP_UDP_Connection)
-				SlacComm();
-			else if(V2gFlowStatus==SLACC_SDP_UDP_Connection)
-			{
-				if(SdpUdpConnected()==1)
-				{
-					V2gFlowStatus=SLACC_SDP_TCP_Connection;
-					continue;
-				}	
-				ftime(&SeqEndTime);	
-				if(DiffTimeb(SeqStartTime, SeqEndTime)>TT_match_join)
-				{
-					#ifdef SystemLogMessage	
-					StoreLogMsg("[EvComm]main: Wait SLACC_SDP_UDP_Connection Timeout - TT_match_join ");
-					#endif	
-					V2gFlowStatus=Sequence_Timeout;
-				}	
-			}			
-			else if(V2gFlowStatus==SLACC_SDP_TCP_Connection)
-			{
-				if((TcpAcceptFd=V2gTcpConnected())>0)
-				{
-					V2gFlowStatus=SupportedAppProtocolRequest;
-					continue;
-				}	
-				ftime(&SeqEndTime);	
-				if(DiffTimeb(SeqStartTime, SeqEndTime)>TT_match_join)
-				{
-					#ifdef SystemLogMessage	
-					StoreLogMsg("[EvComm]main: Wait SLACC_SDP_TCP_Connection Timeout - TT_match_join ");
-					#endif	
-					V2gFlowStatus=Sequence_Timeout;
-				}
-			}		
-			else 	if(V2gFlowStatus<Performance_Timeout)
-				V2gComm(TcpAcceptFd);
-		}
-		if(V2gFlowStatus>=Performance_Timeout)	
-		{
-			//Normal Stop
-			//alarm and duty to 100%
-			OutputCpPwmDuty(100);
-			goto ReSet;
-		}	
-		/*else if((ConnectorPlugIn()==0)&&(V2gFlowStatus>Idle))
-		{
-			//Emergency stop
-			OutputCpPwmDuty(100);
-			goto ReSet;
-		}*/	
-		continue;
-		
-ReSet:
-		if(RawSock>0)
-			close(RawSock);
-		if(UdpSock>0)
-			close(UdpSock);
-		if(TcpSock>0)
-		{	
-			close(TcpSock);
-			close(TcpAcceptFd);
-		}
-		RawSock=UdpSock=TcpSock=TcpAcceptFd=-1;
-		V2gFlowStatus=0;
-		while(1)
-		{
-			//wait for CSU configrm
-		}
-	}//main while
-}
+/*===========================================================================
+                    Combined Charging System (CCS): SECC
+                                 EVComm.c
+
+                        initiated by Vern, Joseph
+                           (since 2019/07/19)
+   =============================================================================*/
+#include <netinet/ip.h>
+#include <arpa/inet.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <linux/termios.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+#include <stdlib.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#include <sys/mman.h>
+#include <linux/sockios.h>
+#include <linux/socket.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <sys/time.h>
+#include <sys/timeb.h>
+#include <math.h>//for pow
+#include <unistd.h>
+#include <linux/if_packet.h>
+#include <netinet/if_ether.h>
+#include <net/if.h>
+#include <netinet/ether.h>
+
+#include "define.h"
+#include "EvComm.h"
+#include "NidNmk.h"
+#include "EvComm.h"
+
+#define Debug
+
+struct SysConfigAndInfo         *ShmSysConfigAndInfo;
+struct StatusCodeData           *ShmStatusCodeData;
+struct CcsData              	*ShmCcsData;
+struct InternalComm         	*ShmInternalComm;
+
+pid_t PilotDetectionPid;
+enum MsgFlowStatus V2gFlowStatus;
+int RawSock,UdpSock,TcpSock;
+unsigned char                   *RecvBuffer,*SendBuffer;
+int RecvBufferSize=64*1024;
+int SendBufferSize=64*1024;
+unsigned short Aag[64];
+struct MmeHeader SendMmePacket;
+int SendMmePacketSize;
+unsigned char CsuMac[6],QcaMac[6],EvMac[6],SlacRunId[8];
+struct sockaddr_ll DestSocketAddress;
+struct ifreq Req;
+unsigned int PwmStartTime;
+struct timeb SeqStartTime,SeqEndTime;
+unsigned char AagGroupsNum, MnbcSoundNum,AttenProfileNum;
+unsigned char NewNmkKey[16],Nid[7];
+
+
+#ifdef SystemLogMessage
+int StoreLogMsg(unsigned char *DataString)
+{
+    unsigned char Buf[256];
+    time_t CurrentTime;
+    struct tm *tm;
+
+    memset(Buf,0,sizeof(Buf));
+    CurrentTime = time(NULL);
+    tm=localtime(&CurrentTime);
+    sprintf(Buf,"echo \"%04d.%02d.%02d %02d:%02d:%02d - %s\" >> /Storage/SystemLog/[%04d.%02d]SystemLog",
+            tm->tm_year+1900,
+			tm->tm_mon+1,
+			tm->tm_mday,
+			tm->tm_hour,
+			tm->tm_min,
+			tm->tm_sec,
+            DataString,
+            tm->tm_year+1900,
+			tm->tm_mon+1
+		   );
+    system(Buf);
+    #ifdef Debug
+    printf("%s \n",DataString);
+    #endif
+}
+#endif
+
+int DiffTimeb(struct timeb ST, struct timeb ET)
+{
+    //return milli-second
+    unsigned int StartTime,StopTime;
+
+    StartTime=(unsigned int)ST.time;
+    StopTime=(unsigned int)ET.time;
+    return (StopTime-StartTime)*1000+ET.millitm-ST.millitm;
+}
+
+int CreatShareMemory()
+{
+    int MeterSMId;
+
+    //creat ShmSysConfigAndInfo
+    if ((MeterSMId = shmget(ShmSysConfigAndInfoKey, sizeof(struct SysConfigAndInfo), IPC_CREAT | 0777)) < 0)
+    {
+        #ifdef SystemLogMessage
+        StoreLogMsg("[main]CreatShareMemory:shmget ShmSysConfigAndInfo NG");
+        #endif
+        return 0;
+    }
+    else if ((ShmSysConfigAndInfo = shmat(MeterSMId, NULL, 0)) == (void *) -1)
+    {
+        #ifdef SystemLogMessage
+        StoreLogMsg("[main]CreatShareMemory:shmat ShmSysConfigAndInfo NG");
+        #endif
+        return 0;
+    }
+    memset(ShmSysConfigAndInfo,0,sizeof(struct SysConfigAndInfo));
+    //creat ShmStatusCodeData
+    if ((MeterSMId = shmget(ShmStatusCodeKey, sizeof(struct StatusCodeData), IPC_CREAT | 0777)) < 0)
+    {
+        #ifdef SystemLogMessage
+        StoreLogMsg("[main]CreatShareMemory:shmget ShmStatusCodeData NG");
+        #endif
+        return 0;
+    }
+    else if ((ShmStatusCodeData = shmat(MeterSMId, NULL, 0)) == (void *) -1)
+    {
+        #ifdef SystemLogMessage
+        StoreLogMsg("[main]CreatShareMemory:shmat ShmStatusCodeData NG");
+        #endif
+        return 0;
+    }
+    memset(ShmStatusCodeData,0,sizeof(struct StatusCodeData));
+    //creat ShmCcsData
+    if ((MeterSMId = shmget(ShmCcsCommKey, sizeof(struct CcsData), IPC_CREAT | 0777)) < 0)
+    {
+        #ifdef SystemLogMessage
+        StoreLogMsg("[main]CreatShareMemory:shmget ShmCcsData NG");
+        #endif
+        return 0;
+    }
+    else if ((ShmCcsData = shmat(MeterSMId, NULL, 0)) == (void *) -1)
+    {
+        #ifdef SystemLogMessage
+        StoreLogMsg("[main]CreatShareMemory:shmat ShmCcsData NG");
+        #endif
+        return 0;
+    }
+    memset(ShmCcsData,0,sizeof(struct CcsData));
+    return 1;
+}
+
+int InitShareMemory()
+{
+    int MeterSMId;
+
+    //creat ShmSysConfigAndInfo
+    if ((MeterSMId = shmget(ShmSysConfigAndInfoKey, sizeof(struct SysConfigAndInfo),  0777)) < 0)
+    {
+        #ifdef SystemLogMessage
+        StoreLogMsg("[EvComm]InitShareMemory:shmget ShmSysConfigAndInfo NG");
+        #endif
+        return 0;
+    }
+    else if ((ShmSysConfigAndInfo = shmat(MeterSMId, NULL, 0)) == (void *) -1)
+    {
+        #ifdef SystemLogMessage
+        StoreLogMsg("[EvComm]InitShareMemory:shmat ShmSysConfigAndInfo NG");
+        #endif
+        return 0;
+    }
+    //creat ShmStatusCodeData
+    if ((MeterSMId = shmget(ShmStatusCodeKey, sizeof(struct StatusCodeData),  0777)) < 0)
+    {
+        #ifdef SystemLogMessage
+        StoreLogMsg("[EvComm]InitShareMemory:shmget ShmStatusCodeData NG");
+        #endif
+        return 0;
+    }
+    else if ((ShmStatusCodeData = shmat(MeterSMId, NULL, 0)) == (void *) -1)
+    {
+            #ifdef SystemLogMessage
+        StoreLogMsg("[EvComm]InitShareMemory:shmat ShmStatusCodeData NG");
+        #endif
+        return 0;
+    }
+
+    //creat ShmCcsData
+    if ((MeterSMId = shmget(ShmCcsCommKey, sizeof(struct CcsData),  0777)) < 0)
+    {
+        #ifdef SystemLogMessage
+        StoreLogMsg("[EvComm]InitShareMemory:shmget ShmCcsData NG");
+        #endif
+        return 0;
+    }
+    else if ((ShmCcsData = shmat(MeterSMId, NULL, 0)) == (void *) -1)
+    {
+            #ifdef SystemLogMessage
+        StoreLogMsg("[EvComm]InitShareMemory:shmat ShmCcsData NG");
+        #endif
+        return 0;
+    }
+
+    //creat ShmInternalComm
+    if ((MeterSMId = shmget(ShmInternalCommKey, sizeof(struct InternalComm),   0777)) < 0)
+    {
+        #ifdef SystemLogMessage
+        StoreLogMsg("[EvComm]InitShareMemory:shmget ShmInternalComm NG");
+        #endif
+        return 0;
+    }
+    else if ((ShmInternalComm = shmat(MeterSMId, NULL, 0)) == (void *) -1)
+    {
+        #ifdef SystemLogMessage
+        StoreLogMsg("[EvComm]InitShareMemory:shmat ShmInternalComm NG");
+        #endif
+        return 0;
+    }
+
+    return 1;
+}
+
+int GetEthMac(unsigned char *Eth, unsigned char *mac)
+{
+    //Parameters:MAC,IP,Mask,Gateway
+    int fd,rd=0;
+    unsigned char addr[18], Buffer[128];
+
+    memset(Buffer,0,sizeof(Buffer));
+    sprintf(Buffer,"cat /sys/class/net/%s/address > /mnt/GetEthInfo",Eth);
+    system(Buffer);
+    fd = open("/mnt/GetEthInfo", O_RDONLY);
+    if(fd<0)
+    {
+        system("rm -f /mnt/GetEthInfo");
+        #ifdef SystemLogMessage
+        StoreLogMsg("[EvComm]GetEthMac: MAC Address open error");
+        #endif
+        return 0;
+    }
+    memset(mac,0,6);
+    memset(addr,0,sizeof(addr));
+    rd=read(fd,addr,17);
+    close(fd);
+    system("rm -f /mnt/GetEthInfo");
+    sscanf(addr, "%02x:%02x:%02x:%02x:%02x:%02x", &mac[0], &mac[1], &mac[2], &mac[3], &mac[4], &mac[5]);
+    return 1;
+}
+
+float ReadAdcVolt(unsigned char AdcChannel)
+{
+    //AIN0=CCS GUN Temp 1
+    //AIN1=CCS GUN Temp 2
+    //AIN2=CCS_Proximity/2
+    //AIN3=pilot voltage
+    FILE *fp;
+    unsigned char str[64];
+    unsigned char AdcValue[8];
+
+    if(AdcChannel>7)
+        return -1;
+    memset(str,0,sizeof(str));
+    memset(AdcValue,0,sizeof(AdcValue));
+    sprintf(str,"cat /sys/bus/iio/devices/iio\\:device0/in_voltage%d_raw",AdcChannel);
+    fp=popen(str, "r");
+    if(fgets(AdcValue,sizeof(AdcValue),fp)==NULL)
+    {
+        pclose(fp);
+        return -1;
+    }
+    pclose(fp);
+    //Vin =  Vref *D / (2^n - 1)
+    return ((float)1.8*(float)atoi(AdcValue))/4095;
+}
+
+void Qca7kPowerReset()
+{
+    system("echo 1 > /sys/class/gpio/gpio88/value");
+    usleep(500000);
+    system("echo 0 > /sys/class/gpio/gpio88/value");
+}
+
+void SwitchCpStateE(unsigned char OnOff)
+{
+    //OnOff=1 => switch State to E
+    //OnOff=0 => return noraml
+    if(OnOff==0)
+        system("echo 0 > /sys/class/gpio/gpio86/value");
+    else
+        system("echo 1 > /sys/class/gpio/gpio86/value");
+}
+
+int OutputCpPwmDuty(unsigned char Duty)
+{
+    unsigned char str[128];
+    int DutyInNanoSec;
+
+    if((Duty<0)||(Duty>100))
+        return -1;
+
+    memset(str,0,sizeof(str));
+    DutyInNanoSec=10000*Duty;
+    sprintf(str,"echo %d > /sys/class/pwm/pwmchip0/pwm0/duty_cycle",DutyInNanoSec);//nanoseconds
+    system(str);
+    ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotDuty=Duty;
+    return 0;
+}
+
+int ConnectorPlugIn()
+{
+    //return 0 => unplug
+    //return 1 => plug-in
+    float TmpProximity;
+    unsigned char Rtn=0;
+
+    if(((FirmwareVersion&0x0000FF00)>>8)==0x01)
+    {
+        //UL version: judge with CP and proximity
+        TmpProximity=ReadAdcVolt(2);
+        if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState>=2)&&(ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState<=5)&&
+           (TmpProximity>=0.4)&&(TmpProximity<=0.9))
+        {
+            Rtn=1;
+        }
+    }
+    else
+    {
+        //CE version: judge with CP only
+        if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState>=2)&&(ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState<=5))
+            Rtn=1;
+    }
+    ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].ConnectorPlugIn=Rtn;
+    return Rtn;
+}
+
+void PilotDetection()
+{
+    pid_t tmp=0;
+    struct timeb StartTime,EndTime;
+    unsigned char CpState[3],count;
+    float TmpVolt;
+
+    if(PilotDetectionPid==0)
+    {
+        tmp=fork();
+        if(tmp>0)
+        {
+            PilotDetectionPid=tmp;
+            {
+                unsigned char buf[64];
+                memset(buf,0,sizeof(buf));
+                sprintf(buf,"renice -20 -p %d",tmp);
+                system(buf);
+            }
+            return;
+        }
+    }
+
+    while(1)
+    {
+        //ADC_Voltage = (1+RE62/RE63)*0.9 - (RE62/RE63)*Pilot_Voltage,  RE62/RE63=0.06
+        //=>Pilot_Voltage=(0.954-ADC_Voltage)/0.06
+        //ftime(&StartTime);
+        TmpVolt=0;
+        for(count=0; count<3; count++)
+        {
+            TmpVolt+=(0.954-ReadAdcVolt(3))/0.06;
+        }
+        TmpVolt/=3;
+        ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotVoltage=TmpVolt;
+        if(TmpVolt>=13.5)
+        {
+            //Pilot Error
+            if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState==1)&&(TmpVolt<13.75))
+                ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=1;
+            else
+                ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=8;
+        }
+        else if((TmpVolt>=10.5)&&(TmpVolt<13.5))
+        {
+            //State A
+            if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState>=2)&&(ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState<=3)&&(TmpVolt<10.75))
+            {
+                if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotDuty>=5)&&(ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotDuty<100))
+                    ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=3;
+                else
+                    ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=2;
+            }
+            else if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState==8)&&(TmpVolt>=13.25))
+                ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=8;
+            else
+                ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=1;
+        }
+        else if((TmpVolt>=7.5)&&(TmpVolt<10.5))
+        {
+            //State B
+            if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState==4)&&(TmpVolt<7.75))
+                ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=4;
+            else if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState==1)&&(TmpVolt>=10.25))
+                ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=1;
+            else
+            {
+                if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotDuty>=5)&&(ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotDuty<100))
+                    ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=3;
+                else
+                    ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=2;
+            }
+        }
+        else if((TmpVolt>=4.5)&&(TmpVolt<7.5))
+        {
+            //State C
+            if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState==5)&&(TmpVolt<4.75))
+                ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=5;
+            else if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState>=2)&&(ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState<=3)&&(TmpVolt>=7.25))
+            {
+                if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotDuty>=5)&&(ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotDuty<100))
+                    ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=3;
+                else
+                    ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=2;
+            }
+            else
+            {
+                ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=4;
+            }
+        }
+        else if((TmpVolt>=1.5)&&(TmpVolt<4.5))
+        {
+            //State D
+            if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState==6)&&(TmpVolt<1.75))
+                ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=6;
+            else if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState==4)&&(TmpVolt>=4.25))
+                ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=4;
+            else
+            {
+                ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=5;
+            }
+        }
+        else if((TmpVolt>= -1.5)&&(TmpVolt<1.5))
+        {
+            //State E
+            if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState==8)&&(TmpVolt< -1.25))
+                ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=8;
+            else if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState==5)&&(TmpVolt>=1.25))
+                ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=5;
+            else
+            {
+                ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=6;
+            }
+        }
+        else if((TmpVolt>= -13.5)&&(TmpVolt< -10.5))
+        {
+            //State F
+            if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState==8)&&(TmpVolt>= -10.75))
+                ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=8;
+            else
+            {
+                ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState=7;
+            }
+        }
+        //ftime(&EndTime);
+        //printf("duration:%d\n", DiffTimeb(StartTime, EndTime));
+    }//while
+}
+
+int MmeProcess(unsigned char *Buffer, int DataLength)
+{
+    //struct ethhdr	*EthPacket;
+    struct MmeHeader    *MmePacket;
+    int Rtn;
+    static unsigned char counter;
+
+    MmePacket = (struct MmeHeader *)Buffer;
+
+    #ifdef Debug
+    printf("\n\n***********************************\n");
+    printf("***** Received MME Packet *****\n");
+    printf("***********************************\n");
+    printf("DataLength=%d\n",DataLength);
+    printf("ODA: %02x:%02x:%02x:%02x:%02x:%02x\n",
+           MmePacket->ODA[0],MmePacket->ODA[1],MmePacket->ODA[2],MmePacket->ODA[3],MmePacket->ODA[4],MmePacket->ODA[5]);
+    printf("OSA: %02x:%02x:%02x:%02x:%02x:%02x\n",
+           MmePacket->OSA[0],MmePacket->OSA[1],MmePacket->OSA[2],MmePacket->OSA[3],MmePacket->OSA[4],MmePacket->OSA[5]);
+    printf("MTYPE: 0x%x\n", htons(MmePacket->MTYPE));
+    printf("MMV: 0x%x\n", MmePacket->MMV);
+    printf("MMTYPE: 0x%x\n", MmePacket->MMTYPE);
+    printf("FMI 0x%x, 0x%x\n", MmePacket->FMI[0],MmePacket->FMI[1]);
+    #endif
+
+    //check if the destination address is broadcast or EVSE itself, it can be ignore if not belong to itself.
+    switch(MmePacket->MMTYPE)
+    {
+	    case MMTYPE_CM_SET_KEY_CNF:
+		{
+	        #ifdef Debug
+	        printf("--- MMTYPE_CM_SET_KEY_CNF ---\n");
+	        printf("Result: 0x%x\n", MmePacket->MMENTRY[0]);
+	        #endif
+	        V2gFlowStatus=CM_SET_KEY_CNF;
+	        break;
+		}
+
+	    case MMTYPE_CM_SLAC_PARM_REQ:
+		{
+	        #ifdef Debug
+	        printf("--- MMTYPE_CM_SLAC_PARM_REQ ---\n");
+	        printf("APPLICATION_TYPE: 0x%x\n", MmePacket->MMENTRY[0]);
+	        printf("SECURITY_TYPE: 0x%x\n", MmePacket->MMENTRY[1]);
+	        printf("RunID: %02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x\n",
+	               MmePacket->MMENTRY[2],MmePacket->MMENTRY[3],MmePacket->MMENTRY[4],MmePacket->MMENTRY[5],MmePacket->MMENTRY[6],
+	               MmePacket->MMENTRY[7],MmePacket->MMENTRY[8],MmePacket->MMENTRY[9]);
+	        printf("CipherSuiteSetSize: 0x%x\n", MmePacket->MMENTRY[10]);
+	        printf("CipherSuite [1]: 0x%x,0x%x\n", MmePacket->MMENTRY[11], MmePacket->MMENTRY[12]);
+	        #endif
+	        V2gFlowStatus=CM_SLAC_PARM_REQ;
+	        memcpy(EvMac,MmePacket->OSA,sizeof(EvMac));
+	        memcpy(DestSocketAddress.sll_addr,MmePacket->OSA,sizeof(EvMac));
+	        memcpy(SlacRunId,MmePacket->MMENTRY+2,sizeof(SlacRunId));
+	        memset(&SendMmePacket,0,sizeof(struct MmeHeader));
+	        memcpy(SendMmePacket.ODA,MmePacket->OSA,6);
+	        memcpy(SendMmePacket.OSA,CsuMac,6);
+	        SendMmePacket.MTYPE=htons(EtherType_HomePlug);
+	        SendMmePacket.MMV=MmePacket->MMV;
+	        SendMmePacket.MMTYPE=MMTYPE_CM_SLAC_PARM_CNF;
+	        SendMmePacket.FMI[0]=SendMmePacket.FMI[1]=0;
+	        SendMmePacketSize=0;
+	        memset(SendMmePacket.MMENTRY,0xFF,6);       //Fixed value indicating that M-Sounds to be sent as Ethernet broadcast
+	        SendMmePacketSize+=6;
+	        SendMmePacket.MMENTRY[SendMmePacketSize++]=C_EV_match_MNBC;
+	        SendMmePacket.MMENTRY[SendMmePacketSize++]=TT_EVSE_match_MNBC;
+	        SendMmePacket.MMENTRY[SendMmePacketSize++]=0x01;        //Fixed value indicating ��Other GP station��, 0x00 �V HLE of the STA, 0x01 �V Another GP STA, 0x02 �V 0xFF �V Reserved
+	        memcpy(SendMmePacket.MMENTRY+SendMmePacketSize,EvMac,6);
+	        SendMmePacketSize+=6;
+	        SendMmePacket.MMENTRY[SendMmePacketSize++]=0;           //Fixed value indicating ��PEVEVSEMatching��
+	        SendMmePacket.MMENTRY[SendMmePacketSize++]=0;           //Fixed value indicating ��No Security��
+	        memcpy(SendMmePacket.MMENTRY+SendMmePacketSize,SlacRunId,sizeof(SlacRunId));
+	        SendMmePacketSize+=sizeof(SlacRunId);
+	        SendMmePacketSize+=19;      //the size before MMENTRY
+	        #ifdef Debug
+	        printf("\n\n***** Response MME Packet *****\n");
+	        printf("SendMmePacket.ODA: %02x:%02x:%02x:%02x:%02x:%02x:\n",
+	               SendMmePacket.ODA[0],SendMmePacket.ODA[1],SendMmePacket.ODA[2],SendMmePacket.ODA[3],SendMmePacket.ODA[4],SendMmePacket.ODA[5]);
+	        printf("SendMmePacket.OSA: %02x:%02x:%02x:%02x:%02x:%02x:\n",
+	               SendMmePacket.OSA[0],SendMmePacket.OSA[1],SendMmePacket.OSA[2],SendMmePacket.OSA[3],SendMmePacket.OSA[4],SendMmePacket.OSA[5]);
+	        printf("MTYPE: 0x%x\n", htons(SendMmePacket.MTYPE));
+	        printf("MMV: 0x%x\n", SendMmePacket.MMV);
+	        printf("MMTYPE: 0x%x\n", SendMmePacket.MMTYPE);
+	        printf("FMI 0x%x, 0x%x\n", SendMmePacket.FMI[0],SendMmePacket.FMI[1]);
+	        printf("--- CM_SLAC_PARM_CNF ---\n");
+	        printf("M-SOUND_TARGET: %02x:%02x:%02x:%02x:%02x:%02x\n",
+	               SendMmePacket.MMENTRY[0],SendMmePacket.MMENTRY[1],SendMmePacket.MMENTRY[2],SendMmePacket.MMENTRY[3],
+	               SendMmePacket.MMENTRY[4],SendMmePacket.MMENTRY[5]);
+	        printf("NUM_SOUNDS: 0x%x\n", SendMmePacket.MMENTRY[6]);
+	        printf("Time_Out: 0x%x\n", SendMmePacket.MMENTRY[7]);
+	        printf("RESP_TYPE: 0x%x\n", SendMmePacket.MMENTRY[8]);
+	        printf("M-FORWARDING_STA: %02x:%02x:%02x:%02x:%02x:%02x:\n",
+	               SendMmePacket.MMENTRY[9],SendMmePacket.MMENTRY[10],SendMmePacket.MMENTRY[11],SendMmePacket.MMENTRY[12],
+	               SendMmePacket.MMENTRY[13],SendMmePacket.MMENTRY[14]);
+	        printf("APPLICATION_TYPE: 0x%x\n", SendMmePacket.MMENTRY[15]);
+	        printf("SECURITY_TYPE: 0x%x\n", SendMmePacket.MMENTRY[16]);
+	        printf("RunID: %02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x\n",
+	               SendMmePacket.MMENTRY[17],SendMmePacket.MMENTRY[18],SendMmePacket.MMENTRY[19],SendMmePacket.MMENTRY[20],
+	               SendMmePacket.MMENTRY[21],SendMmePacket.MMENTRY[22],SendMmePacket.MMENTRY[23],SendMmePacket.MMENTRY[24]);
+	        #endif
+	        V2gFlowStatus=CM_SLAC_PARM_CONF;
+	        Rtn=sendto(RawSock, &SendMmePacket, SendMmePacketSize, 0, (struct sockaddr*)&DestSocketAddress, sizeof(struct sockaddr_ll));
+	        #ifdef Debug
+	        printf("SendMmePacketSize=%d,Rtn=%d\n",SendMmePacketSize,Rtn);
+	        #endif
+	        ftime(&SeqStartTime);
+	        counter=0;
+	        break;
+		}
+
+	    case MMTYPE_CM_START_ATTEN_CHAR_IND:
+		{
+	        #ifdef Debug
+	        printf("--- MMTYPE_CM_START_ATTEN_CHAR_IND (counter : %d/3 ) ---\n",counter+1);
+	        printf("APPLICATION_TYPE: 0x%x\n", MmePacket->MMENTRY[0]);
+	        printf("SECURITY_TYPE: 0x%x\n", MmePacket->MMENTRY[1]);
+	        printf("NUM_SOUNDS: 0x%x\n", MmePacket->MMENTRY[2]);
+	        printf("Time_Out 0x%x\n", MmePacket->MMENTRY[3]);
+	        printf("RESP_TYPE 0x%x\n", MmePacket->MMENTRY[4]);    //Fixed value (0x01) indicating ��other Green PHY station��
+	        printf("FORWARDING_STA: %02x:%02x:%02x:%02x:%02x:%02x\n",
+	               MmePacket->MMENTRY[5],MmePacket->MMENTRY[6],MmePacket->MMENTRY[7],MmePacket->MMENTRY[8],
+	               MmePacket->MMENTRY[9],MmePacket->MMENTRY[10]);
+	        printf("RunID: %02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x\n",
+	               MmePacket->MMENTRY[11],MmePacket->MMENTRY[12],MmePacket->MMENTRY[13],MmePacket->MMENTRY[14],
+	               MmePacket->MMENTRY[15],MmePacket->MMENTRY[16],MmePacket->MMENTRY[17],MmePacket->MMENTRY[18]);
+	            #endif
+	        MnbcSoundNum=MmePacket->MMENTRY[2];
+	        V2gFlowStatus=CM_START_ATTEN_CHAR_IND;
+	        counter++;
+	        if(counter==1)
+	        {
+	            memset(Aag,0,sizeof(Aag));
+	            AttenProfileNum=0;
+	            ftime(&SeqStartTime);       //start TT_EVSE_match_MNBC
+	        }
+	        else if(counter>=3)
+	        {
+	            counter=0;
+	        }
+	        break;
+		}
+
+	    case MMTYPE_CM_MNBC_SOUND_IND:
+		{
+	        if(V2gFlowStatus>=CM_ATTEN_CHAR_IND)
+	            break;
+	        #ifdef Debug
+	        printf("--- MMTYPE_CM_MNBC_SOUND_IND (counter : %d/%d) ---\n",counter+1,MnbcSoundNum);
+	        printf("APPLICATION_TYPE: 0x%x\n", MmePacket->MMENTRY[0]);
+	        printf("SECURITY_TYPE: 0x%x\n", MmePacket->MMENTRY[1]);
+	        printf("SenderID: %02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x\n",
+	               MmePacket->MMENTRY[2],MmePacket->MMENTRY[3],MmePacket->MMENTRY[4],MmePacket->MMENTRY[5],
+	               MmePacket->MMENTRY[6],MmePacket->MMENTRY[7],MmePacket->MMENTRY[8],MmePacket->MMENTRY[9],
+	               MmePacket->MMENTRY[10],MmePacket->MMENTRY[11],MmePacket->MMENTRY[12],MmePacket->MMENTRY[13],
+	               MmePacket->MMENTRY[14],MmePacket->MMENTRY[15],MmePacket->MMENTRY[16],MmePacket->MMENTRY[17],
+	               MmePacket->MMENTRY[18]);
+	        printf("Cnt: 0x%x\n", MmePacket->MMENTRY[19]);
+	        printf("RunID: %02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x\n",
+	               MmePacket->MMENTRY[20],MmePacket->MMENTRY[21],MmePacket->MMENTRY[22],MmePacket->MMENTRY[23],
+	               MmePacket->MMENTRY[24],MmePacket->MMENTRY[25],MmePacket->MMENTRY[26],MmePacket->MMENTRY[27]);
+	        printf("RSVD: %02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x\n",
+	               MmePacket->MMENTRY[28],MmePacket->MMENTRY[29],MmePacket->MMENTRY[30],MmePacket->MMENTRY[31],
+	               MmePacket->MMENTRY[32],MmePacket->MMENTRY[33],MmePacket->MMENTRY[34],MmePacket->MMENTRY[35]);
+	        printf("Rnd: %02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x\n",
+	               MmePacket->MMENTRY[36],MmePacket->MMENTRY[37],MmePacket->MMENTRY[38],MmePacket->MMENTRY[39],
+	               MmePacket->MMENTRY[40],MmePacket->MMENTRY[41],MmePacket->MMENTRY[42],MmePacket->MMENTRY[43],
+	               MmePacket->MMENTRY[44],MmePacket->MMENTRY[45],MmePacket->MMENTRY[46],MmePacket->MMENTRY[47],
+	               MmePacket->MMENTRY[48],MmePacket->MMENTRY[49],MmePacket->MMENTRY[50],MmePacket->MMENTRY[51]);
+	        #endif
+	        V2gFlowStatus=CM_MNBC_SOUND_IND;
+	        counter++;
+	        break;
+		}
+
+	    case MMTYPE_CM_ATTEN_PROFILE_IND:
+		{
+	        if(V2gFlowStatus>=CM_ATTEN_CHAR_IND)
+	        {
+				break;
+			}
+
+	        #ifdef Debug
+	        printf("--- MMTYPE_CM_ATTEN_PROFILE_IND (counter : %d/%d) ---\n",counter,MnbcSoundNum);
+	        printf("EV MAC: %02x:%02x:%02x:%02x:%02x:%02x\n",
+	               MmePacket->MMENTRY[0],MmePacket->MMENTRY[1],MmePacket->MMENTRY[2],MmePacket->MMENTRY[3],
+	               MmePacket->MMENTRY[4],MmePacket->MMENTRY[5]);
+	        printf("NumGroups: 0x%x\n", MmePacket->MMENTRY[6]);
+	        printf("RSVD: 0x%x\n", MmePacket->MMENTRY[7]);
+	        printf("AAG: \n");
+	        for(Rtn=0; Rtn<MmePacket->MMENTRY[6]; Rtn++)
+	            printf("%02x, ",MmePacket->MMENTRY[8+Rtn]);
+	        printf("\n");
+	            #endif
+	        AagGroupsNum=MmePacket->MMENTRY[6];
+	        for(Rtn=0; Rtn<MmePacket->MMENTRY[6]; Rtn++)
+	            Aag[Rtn]+=MmePacket->MMENTRY[8+Rtn];
+	        AttenProfileNum++;
+	        V2gFlowStatus=CM_MNBC_SOUND_IND;
+	        break;
+		}
+
+	    case MMTYPE_CM_ATTN_CHAR_RSP:
+		{
+	        #ifdef Debug
+	        printf("--- MMTYPE_CM_ATTN_CHAR_RSP ---\n");
+	        printf("APPLICATION_TYPE: 0x%x\n", MmePacket->MMENTRY[0]);
+	        printf("SECURITY_TYPE: 0x%x\n", MmePacket->MMENTRY[1]);
+	        printf("SOURCE_ADDRESS: %02x:%02x:%02x:%02x:%02x:%02x\n",
+	               MmePacket->MMENTRY[2],MmePacket->MMENTRY[3],MmePacket->MMENTRY[4],MmePacket->MMENTRY[5],
+	               MmePacket->MMENTRY[6],MmePacket->MMENTRY[7]);
+	        printf("RunID: %02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x\n",
+	               MmePacket->MMENTRY[8],MmePacket->MMENTRY[9],MmePacket->MMENTRY[10],MmePacket->MMENTRY[11],
+	               MmePacket->MMENTRY[12],MmePacket->MMENTRY[13],MmePacket->MMENTRY[14],MmePacket->MMENTRY[15]);
+	        printf("SOURCE_ID: \n");
+	        for(Rtn=0; Rtn<17; Rtn++)
+	            printf("%02x, ",MmePacket->MMENTRY[16+Rtn]);
+	        printf("\n");
+	        printf("RESP_ID: \n");
+	        for(Rtn=0; Rtn<17; Rtn++)
+	            printf("%02x, ",MmePacket->MMENTRY[33+Rtn]);
+	        printf("\n");
+	        printf("Result: 0x%x\n", MmePacket->MMENTRY[50]);    //Fixed value of 0x00 indicates a successful SLAC process
+	            #endif
+	        V2gFlowStatus=CM_ATTEN_CHAR_RSP;
+	        ftime(&SeqStartTime);
+	        break;
+		}
+
+	    case MMTYPE_CM_VALIDATE_REQ:
+		{
+	        #ifdef Debug
+	        printf("--- MMTYPE_CM_VALIDATE_REQ ---\n");
+	        printf("Signal Type: 0x%x\n", MmePacket->MMENTRY[0]);    //Fixed value (0x00) to indicate ��PEV S2 toggles on control pilot line��
+	        printf("Timer: 0x%x\n", MmePacket->MMENTRY[1]);    //Fixed value In the first VALIDATE Request-Response exchange, the Timer field shall be set to zero.
+	        printf("Result: 0x%x\n", MmePacket->MMENTRY[2]);    //Fixed value In the first VALIDATE Request-Response exchange, the Result field shall be set to 0x01 = ��ready��.
+	        #endif
+	        counter=0;
+
+	        for(Rtn=0; Rtn<6; Rtn++)
+	        {
+	            if(MmePacket->ODA[Rtn]!=CsuMac[Rtn])
+	            {
+	                counter=1;
+	                break;
+	            }
+	        }
+
+	        memset(&SendMmePacket,0,sizeof(struct MmeHeader));
+	        memcpy(SendMmePacket.ODA,EvMac,6);
+	        memcpy(SendMmePacket.OSA,CsuMac,6);
+	        SendMmePacket.MTYPE=htons(EtherType_HomePlug);
+	        SendMmePacket.MMV=0x01;
+	        SendMmePacket.MMTYPE=MMTYPE_CM_VALIDATE_CNF;
+	        SendMmePacket.FMI[0]=SendMmePacket.FMI[1]=0;
+	        SendMmePacketSize=0;
+	        if(counter==0)
+	        {
+	            //First MMTYPE_CM_VALIDATE_REQ because Unicast
+	            SendMmePacket.MMENTRY[SendMmePacketSize++]=0;    //Fixed value to indicate ��PEV S2 toggles on control pilot line��
+	            SendMmePacket.MMENTRY[SendMmePacketSize++]=0;    //Fixed value In the first VALIDATE Request-Response exchange, the ToggleNum field shall be set to zero.
+	                #ifdef SupportBcbToggle
+	            SendMmePacket.MMENTRY[SendMmePacketSize++]=1;    //0x01 = Ready
+	                #else
+	            SendMmePacket.MMENTRY[SendMmePacketSize++]=4;    //0x04 = Not Required
+	                #endif
+	        }
+	        else
+	        {
+	            //second MMTYPE_CM_VALIDATE_REQ because Broadcast
+	            unsigned char PreStatus=3,ToggleNum=0;
+	            ftime(&SeqStartTime);
+	            while(1)
+	            {
+	                ftime(&SeqEndTime);
+	                if((ShmSysConfigAndInfo->SysInfo.CcsChargingData[0].PilotState==4)&&(PreStatus==3))
+	                {
+	                    ToggleNum++;
+	                    PreStatus=4;
+	                }
+	                else
+	                {
+	                    PreStatus=3;
+	                }
+	                if(DiffTimeb(SeqStartTime, SeqEndTime)>=(SendMmePacket.MMENTRY[1]*100+100))
+	                {
+	                    SendMmePacket.MMENTRY[SendMmePacketSize++]=0;    //Fixed value to indicate ��PEV S2 toggles on control pilot line��
+	                    SendMmePacket.MMENTRY[SendMmePacketSize++]= ToggleNum;
+	                        #ifdef SupportBcbToggle
+	                    SendMmePacket.MMENTRY[SendMmePacketSize++]=2;    //0x02 = Success
+	                        #else
+	                    SendMmePacket.MMENTRY[SendMmePacketSize++]=4;    //0x04 = Not Required
+	                        #endif
+	                    break;
+	                }
+	            }
+	        }
+	        SendMmePacketSize+=19;      //the size before MMENTRY
+	        sendto(RawSock, &SendMmePacket, SendMmePacketSize, 0, (struct sockaddr*)&DestSocketAddress, sizeof(struct sockaddr_ll));
+	        V2gFlowStatus=CM_VALIDATE_CNF;
+	        ftime(&SeqStartTime);
+	        break;
+		}
+
+	    case MMTYPE_CM_SLAC_MATCH_REQ:
+		{
+	        #ifdef Debug
+	        printf("--- MMTYPE_CM_SLAC_MATCH_REQ ---\n");
+	        printf("APPLICATION_TYPE: 0x%x\n", MmePacket->MMENTRY[0]);
+	        printf("SECURITY_TYPE: 0x%x\n", MmePacket->MMENTRY[1]);
+	        printf("MVFLength: 0x%x, 0x%x\n", MmePacket->MMENTRY[2],MmePacket->MMENTRY[3]);    //Fixed value (0x3E) for matching
+	        printf("PEV ID: \n");
+	        for(Rtn=0; Rtn<17; Rtn++)
+	            printf("%02x, ",MmePacket->MMENTRY[4+Rtn]);
+	        printf("\n");
+	        printf("PEV MAC: \n");
+	        for(Rtn=0; Rtn<6; Rtn++)
+	            printf("%02x, ",MmePacket->MMENTRY[21+Rtn]);
+	        printf("\n");
+	        printf("EVSE ID: \n");
+	        for(Rtn=0; Rtn<17; Rtn++)
+	            printf("%02x, ",MmePacket->MMENTRY[27+Rtn]);
+	        printf("\n");
+	        printf("EVSE MAC: \n");
+	        for(Rtn=0; Rtn<6; Rtn++)
+	            printf("%02x, ",MmePacket->MMENTRY[44+Rtn]);
+	        printf("\n");
+	        printf("RunID: \n");
+	        for(Rtn=0; Rtn<8; Rtn++)
+	            printf("%02x, ",MmePacket->MMENTRY[50+Rtn]);
+	        printf("\n");
+	        printf("RSVD: \n");
+	        for(Rtn=0; Rtn<8; Rtn++)
+	            printf("%02x, ",MmePacket->MMENTRY[58+Rtn]);
+	        printf("\n");
+	            #endif
+	        V2gFlowStatus=CM_SLAC_MATCH_REQ;
+	        memset(&SendMmePacket,0,sizeof(struct MmeHeader));
+	        memcpy(SendMmePacket.ODA,MmePacket->OSA,6);
+	        memcpy(SendMmePacket.OSA,CsuMac,6);
+	        SendMmePacket.MTYPE=htons(EtherType_HomePlug);
+	        SendMmePacket.MMV=MmePacket->MMV;
+	        SendMmePacket.MMTYPE=MMTYPE_CM_SLAC_MATCH_CNF;
+	        SendMmePacket.FMI[0]=SendMmePacket.FMI[1]=0;
+	        SendMmePacketSize=0;
+	        SendMmePacket.MMENTRY[SendMmePacketSize++]=0x00;    //Fixed value (0x00) indicating ��PEV-EVSE matching��
+	        SendMmePacket.MMENTRY[SendMmePacketSize++]=0x00;    //Fixed value (0x00) indicating ��No Security��
+	        SendMmePacket.MMENTRY[SendMmePacketSize++]=0x00;    //Fixed value (0x0056) for matching
+	        SendMmePacket.MMENTRY[SendMmePacketSize++]=0x56;    //Fixed value (0x0056) for matching
+	        memset(SendMmePacket.MMENTRY+SendMmePacketSize,0,17);    //PEV ID
+	        SendMmePacketSize+=17;
+	        memcpy(SendMmePacket.MMENTRY+SendMmePacketSize,EvMac,6);
+	        SendMmePacketSize+=6;
+	        memset(SendMmePacket.MMENTRY+SendMmePacketSize,0,17);    //EVSE ID
+	        SendMmePacketSize+=17;
+	        memcpy(SendMmePacket.MMENTRY+SendMmePacketSize,CsuMac,6);
+	        SendMmePacketSize+=6;
+	        memcpy(SendMmePacket.MMENTRY+SendMmePacketSize,SlacRunId,sizeof(SlacRunId));
+	        SendMmePacketSize+=sizeof(SlacRunId);
+	        memset(SendMmePacket.MMENTRY+SendMmePacketSize,0,8);    //RSVD
+	        SendMmePacketSize+=8;
+	        memcpy(SendMmePacket.MMENTRY+SendMmePacketSize,Nid,sizeof(Nid));
+	        SendMmePacketSize+=sizeof(Nid);
+	        SendMmePacket.MMENTRY[SendMmePacketSize++]=0x00;    //RSVD
+	        memcpy(SendMmePacket.MMENTRY+SendMmePacketSize,NewNmkKey,sizeof(NewNmkKey));
+	        SendMmePacketSize+=sizeof(NewNmkKey);
+	        SendMmePacketSize+=19;      //the size before MMENTRY
+	            #ifdef Debug
+	        printf("\n\n***** Response MME Packet *****\n");
+	        printf("SendMmePacket.ODA: %02x:%02x:%02x:%02x:%02x:%02x:\n",
+	               SendMmePacket.ODA[0],SendMmePacket.ODA[1],SendMmePacket.ODA[2],SendMmePacket.ODA[3],SendMmePacket.ODA[4],SendMmePacket.ODA[5]);
+	        printf("SendMmePacket.OSA: %02x:%02x:%02x:%02x:%02x:%02x:\n",
+	               SendMmePacket.OSA[0],SendMmePacket.OSA[1],SendMmePacket.OSA[2],SendMmePacket.OSA[3],SendMmePacket.OSA[4],SendMmePacket.OSA[5]);
+	        printf("MTYPE: 0x%x\n", htons(SendMmePacket.MTYPE));
+	        printf("MMV: 0x%x\n", SendMmePacket.MMV);
+	        printf("MMTYPE: 0x%x\n", SendMmePacket.MMTYPE);
+	        printf("FMI 0x%x, 0x%x\n", SendMmePacket.FMI[0],SendMmePacket.FMI[1]);
+	        printf("--- CM_SLAC_MATCH_CNF ---\n");
+	        printf("APPLICATION_TYPE: 0x%x\n", SendMmePacket.MMENTRY[0]);
+	        printf("SECURITY_TYPE: 0x%x\n", SendMmePacket.MMENTRY[1]);
+	        printf("MVFLength: 0x%x, 0x%x\n", SendMmePacket.MMENTRY[2],SendMmePacket.MMENTRY[3]);
+	        printf("PEV ID: \n");
+	        for(Rtn=0; Rtn<17; Rtn++)
+	            printf("%02x, ",SendMmePacket.MMENTRY[4+Rtn]);
+	        printf("\n");
+	        printf("PEV MAC: \n");
+	        for(Rtn=0; Rtn<6; Rtn++)
+	            printf("%02x, ",SendMmePacket.MMENTRY[21+Rtn]);
+	        printf("\n");
+	        printf("EVSE ID: \n");
+	        for(Rtn=0; Rtn<17; Rtn++)
+	            printf("%02x, ",SendMmePacket.MMENTRY[27+Rtn]);
+	        printf("\n");
+	        printf("EVSE MAC: \n");
+	        for(Rtn=0; Rtn<6; Rtn++)
+	            printf("%02x, ",SendMmePacket.MMENTRY[44+Rtn]);
+	        printf("\n");
+	        printf("RunID: \n");
+	        for(Rtn=0; Rtn<8; Rtn++)
+	            printf("%02x, ",SendMmePacket.MMENTRY[50+Rtn]);
+	        printf("\n");
+	        printf("RSVD: \n");
+	        for(Rtn=0; Rtn<8; Rtn++)
+	            printf("%02x, ",SendMmePacket.MMENTRY[58+Rtn]);
+	        printf("\n");
+	        printf("NID: \n");
+	        for(Rtn=0; Rtn<7; Rtn++)
+	            printf("%02x, ",SendMmePacket.MMENTRY[66+Rtn]);
+	        printf("\n");
+	        printf("RSVD: 0x%x\n", SendMmePacket.MMENTRY[73]);
+	        printf("NMK: \n");
+	        for(Rtn=0; Rtn<16; Rtn++)
+	            printf("%02x, ",SendMmePacket.MMENTRY[74+Rtn]);
+	        printf("\n");
+	            #endif
+	        V2gFlowStatus=CM_SLAC_MATCH_CNF;
+	        Rtn=sendto(RawSock, &SendMmePacket, SendMmePacketSize, 0, (struct sockaddr*)&DestSocketAddress, sizeof(struct sockaddr_ll));
+	            #ifdef Debug
+	        printf("SendMmePacketSize=%d,Rtn=%d\n",SendMmePacketSize,Rtn);
+	            #endif
+	        ftime(&SeqStartTime);
+	        break;
+		}
+
+	    case MMTYPE_VENDOR_VS_HOST_ACTION:
+	    {
+	        struct QcaVendorMmeHeader *RecvPacket;
+	        RecvPacket = (struct QcaVendorMmeHeader *)Buffer;
+	        //#ifdef Debug
+	        printf("--- MMTYPE_VENDOR_VS_HOST_ACTION ---\n");
+	        //#endif
+	        switch (RecvPacket->MBODY[0])
+	        {
+		        case 0x00:
+		            //Loader (Device Softloader or Bootloader) ready
+		            printf("QCA7K: Loader Ready\n");
+		            break;
+
+		        case 0x01:
+		            //Firmware Upgrade Ready
+		            printf("QCA7K: Firmware Upgrade Ready\n");
+		            break;
+
+		        case 0x02:
+		            //PIB Update Ready
+		            printf("QCA7K: PIB Update Ready\n");
+		            break;
+
+		        case 0x03:
+		            //Firmware Upgrade and PIB Update ready
+		            printf("QCA7K: Firmware Upgrade and PIB Update ready\n");
+		            break;
+
+		        case 0x04:
+		            //Loader (Bootloader) ready to receive SDRAM configuration.
+		            printf("QCA7K: Loader ready to receive SDRAM configuration\n");
+		            break;
+
+		        case 0x05:
+		            //Reset to Factory Defaults.
+		            printf("QCA7K: Reset to Factory Defaults\n");
+		            break;
+
+		        default:
+		            //Reserved
+		            printf("QCA7K: Reserved\n");
+		            break;
+	        }
+			break;
+	    }
+
+	    case MMTYPE_VENDOR_ATTEN_CHAR:
+		{
+	        #ifdef Debug
+	        printf("--- MMTYPE_VENDOR_ATTEN_CHAR ---\n");
+	        #endif
+	        break;
+		}
+
+	    case MMTYPE_VENDOR_VS_NW_INFO_CNF:
+		{
+	        memcpy(QcaMac,MmePacket->OSA,6);
+	            #ifdef Debug
+	        printf("--- MMTYPE_VENDOR_VS_NW_INFO_CNF ---\n");
+	        printf("QcaMac: %02x:%02x:%02x:%02x:%02x:%02x\n",
+	               QcaMac[0],QcaMac[1],QcaMac[2],QcaMac[3],QcaMac[4],QcaMac[5]);
+	            #endif
+	        V2gFlowStatus=CM_SET_KEY_REQ;
+		}
+
+	    default:
+		{
+	        break;
+		}
+    }
+}
+
+int SendSetKey()
+{
+    int i = 0;
+    unsigned char nRandValue = 0x0;
+    unsigned char ConstString[16]="PhihongKey000000";
+
+    memset(&SendMmePacket,0,sizeof(struct MmeHeader));
+    memcpy(SendMmePacket.ODA,QcaMac,6);
+    memcpy(SendMmePacket.OSA,CsuMac,6);
+    SendMmePacket.MTYPE=htons(EtherType_HomePlug);
+    SendMmePacket.MMV=0x01;
+    SendMmePacket.MMTYPE=MMTYPE_CM_SET_KEY_REQ;
+    SendMmePacket.FMI[0]=SendMmePacket.FMI[1]=0;
+    SendMmePacketSize=0;
+    SendMmePacket.MMENTRY[SendMmePacketSize++]=0x01;//Fixed value (0x01) to indicate ��NMK��
+    memset(SendMmePacket.MMENTRY+SendMmePacketSize,0,4);//My Nonce, Fixed value(0x00000000), encrypted payload not used
+    SendMmePacketSize+=4;
+    memset(SendMmePacket.MMENTRY+SendMmePacketSize,0,4);//Your Nonce, Fixed value(0x00000000), encrypted payload not used
+    SendMmePacketSize+=4;
+    SendMmePacket.MMENTRY[SendMmePacketSize++]=0x04;//PID, Fixed value (0x04) to indicate ��HLE protocol��
+    memset(SendMmePacket.MMENTRY+SendMmePacketSize,0,2);//PRN, Fixed value(0x00), encrypted payload not used
+    SendMmePacketSize+=2;
+    SendMmePacket.MMENTRY[SendMmePacketSize++]=0x00;//PMN, Fixed value(0x00) encrypted payload not used
+    SendMmePacket.MMENTRY[SendMmePacketSize++]=0x01;//CCo Capablility
+    srand(time(NULL));
+    for(i=10; i<16; i++)
+    {
+        nRandValue = (rand()%62)+1;
+        if((nRandValue>=0)&&(nRandValue<=9))  // 0 ~ 9
+            ConstString[i]= nRandValue + 0x30;
+        else if((nRandValue>=10)&&(nRandValue<=35)) // A ~ Z
+            ConstString[i]= nRandValue -10 + 0x41;
+        else if((nRandValue>=36)&&(nRandValue<=61)) // a ~ z
+            ConstString[i]= nRandValue -37 + 0x61;
+        else
+            ConstString[i]= 0x30;
+    }
+    memset(NewNmkKey,0,sizeof(NewNmkKey));
+    memset(Nid,0,sizeof(Nid));
+    HPAVKeyNMK(NewNmkKey,ConstString);
+    HPAVKeyNID(Nid,NewNmkKey,DEFAULT_LEVEL);
+    memcpy(SendMmePacket.MMENTRY+SendMmePacketSize,Nid,sizeof(Nid));    //NID, 54 LSBs contain the NID 2 MSBs = 0b00
+    SendMmePacketSize+=sizeof(Nid);
+    SendMmePacket.MMENTRY[SendMmePacketSize++]=0x01;//NewEKS,Fixed value (0x01)to indicate ��NMK��
+    memcpy(SendMmePacket.MMENTRY+SendMmePacketSize,NewNmkKey,sizeof(NewNmkKey));//NewKey
+    SendMmePacketSize+=sizeof(NewNmkKey);
+    SendMmePacketSize+=19;  //the size before MMENTRY
+    V2gFlowStatus=CM_SET_KEY_REQ;
+    i=sendto(RawSock, &SendMmePacket, SendMmePacketSize, 0, (struct sockaddr*)&DestSocketAddress, sizeof(struct sockaddr_ll));
+    #ifdef Debug
+    printf("SendSetKey: send size =%d\n",i);
+    #endif
+
+}
+
+int GetQca7kMac()
+{
+    int i = 0;
+    struct QcaVendorMmeHeader SendPacket;
+
+    memset(&SendPacket,0,sizeof(struct QcaVendorMmeHeader));
+    memset(SendPacket.ODA, 0xFF, 6);
+    memcpy(SendPacket.OSA,CsuMac,6);
+    SendPacket.MTYPE=htons(EtherType_HomePlug);
+    SendPacket.MMV=0x00;
+    SendPacket.MMTYPE=MMTYPE_VENDOR_VS_NW_INFO;
+    SendPacket.OUI[0]=0x00;
+    SendPacket.OUI[1]=0xB0;
+    SendPacket.OUI[2]=0x52;
+
+    i=sendto(RawSock, &SendPacket, 20, 0, (struct sockaddr*)&DestSocketAddress, sizeof(struct sockaddr_ll));
+    #ifdef Debug
+    printf("GetQca7kMac: send size =%d\n",i);
+    #endif
+}
+
+int SlacComm()
+{
+    int packet_size,count;
+    static unsigned int STime;
+
+    if(RawSock>=0)
+    {
+        memset(RecvBuffer,0,RecvBufferSize);
+        packet_size = recvfrom(RawSock, RecvBuffer, RecvBufferSize, 0, NULL, NULL);
+        if(packet_size>0)
+        {
+            /*#ifdef Debug
+               printf("Raw Data: ");
+               for(count=0;count<packet_size;count++)
+                printf("0x%x, ",RecvBuffer[count]);
+               printf("\n");
+             #endif*/
+            MmeProcess(RecvBuffer, packet_size);
+        }
+    }
+    switch(V2gFlowStatus)
+    {
+	    case Idle:
+		{
+	        if(RawSock<0)
+	        {
+	            struct timeval tv;
+	            RawSock= socket(PF_PACKET, SOCK_RAW, htons(EtherType_HomePlug));
+	                #ifdef Debug
+	            printf("RawSock=%d\n",RawSock);
+	                #endif
+	            if(RawSock == -1)
+	            {
+
+	                    #ifdef SystemLogMessage
+	                StoreLogMsg("[EvComm]SlacComm:Failed to create socke");
+	                    #endif
+	                V2gFlowStatus=Other_Fault;
+	                return -1;
+	            }
+	            setsockopt(RawSock, SOL_SOCKET, SO_BINDTODEVICE,QcaInterface, 4);
+	            /*tv.tv_sec = 0;
+	               tv.tv_usec = 10000;
+	               if (setsockopt(RawSock, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof(struct	timeval)) < 0)
+	               {
+	             #ifdef SystemLogMessage
+	               StoreLogMsg("[EvComm]SlacComm:Set SO_RCVTIMEO NG");
+	             #endif
+	               V2gFlowStatus=Other_Fault;
+	               return -1;
+	               }*/
+	            memset(&Req, 0, sizeof(struct ifreq));
+	            strcpy( (char*)Req.ifr_name, QcaInterface);
+	            if (ioctl(RawSock, SIOCGIFINDEX, &Req) < 0)
+	            {
+	                        #ifdef SystemLogMessage
+	                StoreLogMsg("[EvComm]SlacComm: ioctl NG");
+	                    #endif
+	                V2gFlowStatus=Other_Fault;
+	                return -1;
+	            }
+	            memset( &DestSocketAddress, 0, sizeof(struct sockaddr_ll) );
+	            DestSocketAddress.sll_ifindex = Req.ifr_ifindex;
+	            DestSocketAddress.sll_halen = ETH_ALEN;
+	            //Get QCA7K MAC address
+	            GetQca7kMac();
+	            PwmStartTime=0;
+	            count=0;
+	            STime=time(NULL);
+	        }
+	        else
+	        {
+	            if((time(NULL)-STime)>=3)
+	            {
+	                if((count++) >=3)
+	                    V2gFlowStatus=Sequence_Timeout;
+	                else
+	                {
+	                    GetQca7kMac();
+	                    STime=time(NULL);
+	                }
+	            }
+	        }
+	        break;
+		}
+
+	    case CM_SET_KEY_REQ:
+		{
+	        //CM_SET_KEY_REQ
+	        SendSetKey();
+	        break;
+		}
+
+	    case CM_SET_KEY_CNF:
+		{
+	        OutputCpPwmDuty(5);
+	        if(PwmStartTime<=0)
+	            PwmStartTime=time(NULL);
+	        else
+	        {
+	            if((time(NULL)-PwmStartTime)>TT_EVSE_SLAC_init)
+	            {
+	                    #ifdef SystemLogMessage
+	                StoreLogMsg("[EvComm]SlacComm: Wait CM_SLAC_PARM_REQ Timeout - TT_EVSE_SLAC_init ");
+	                    #endif
+	                V2gFlowStatus=Sequence_Timeout;
+	                return -1;
+	            }
+	        }
+	        break;
+		}
+
+	    case CM_SLAC_PARM_CONF:
+		{
+	        ftime(&SeqEndTime);
+	        if(DiffTimeb(SeqStartTime, SeqEndTime)>TT_match_sequence)
+	        {
+	                #ifdef SystemLogMessage
+	            StoreLogMsg("[EvComm]SlacComm: Wait CM_START_ATTEN_CHAR_IND Timeout - TT_match_sequence ");
+	                #endif
+	            V2gFlowStatus=Sequence_Timeout;
+	            return -1;
+	        }
+	        break;
+		}
+
+	    case CM_START_ATTEN_CHAR_IND:
+		{
+	        ftime(&SeqEndTime);
+	        if(DiffTimeb(SeqStartTime, SeqEndTime)>(3*TP_EV_batch_msg_interval))    //one more time interval for tolerance
+	        {
+	                #ifdef SystemLogMessage
+	            StoreLogMsg("[EvComm]SlacComm: Wait CM_MNBC_SOUND_IND Timeout - 3*TP_EV_batch_msg_interval ");
+	                #endif
+	            V2gFlowStatus=Sequence_Timeout;
+	            return -1;
+	        }
+	        break;
+		}
+
+	    case CM_MNBC_SOUND_IND:
+		{
+	        ftime(&SeqEndTime);
+	        if(DiffTimeb(SeqStartTime, SeqEndTime)>(TT_EVSE_match_MNBC*100)||(AttenProfileNum>=MnbcSoundNum))
+	        {
+	            memset(&SendMmePacket,0,sizeof(struct MmeHeader));
+	            memcpy(SendMmePacket.ODA,EvMac,6);
+	            memcpy(SendMmePacket.OSA,CsuMac,6);
+	            SendMmePacket.MTYPE=htons(EtherType_HomePlug);
+	            SendMmePacket.MMV=0x01;
+	            SendMmePacket.MMTYPE=MMTYPE_CM_ATTN_CHAR_IND;
+	            SendMmePacket.FMI[0]=SendMmePacket.FMI[1]=0;
+	            SendMmePacketSize=0;
+	            SendMmePacket.MMENTRY[SendMmePacketSize++]=0;    //APPLICATION_TYPE,  Fixed value indicating ��PEVEVSE matching��
+	            SendMmePacket.MMENTRY[SendMmePacketSize++]=0;    //SECURITY_TYPE, Fixed value indicating ��No Security��
+	            memcpy(SendMmePacket.MMENTRY+SendMmePacketSize,EvMac,6);    //SOURCE_ADDRESS, MAC address of the EV Host
+	            SendMmePacketSize+=6;
+	            memcpy(SendMmePacket.MMENTRY+SendMmePacketSize,SlacRunId,sizeof(SlacRunId));
+	            SendMmePacketSize+=sizeof(SlacRunId);
+	            memset(SendMmePacket.MMENTRY+SendMmePacketSize,0,17);    //SOURCE_ID
+	            SendMmePacketSize+=17;
+	            memset(SendMmePacket.MMENTRY+SendMmePacketSize,0,17);    //RESP_ID
+	            SendMmePacketSize+=17;
+	            SendMmePacket.MMENTRY[SendMmePacketSize++]=AttenProfileNum;    //NumSounds
+	            SendMmePacket.MMENTRY[SendMmePacketSize++]=AagGroupsNum;    //NumGroups
+	            for(count=0; count<AagGroupsNum; count++)
+	            {
+	                unsigned char TmpAag;
+	                TmpAag=((Aag[count]/AttenProfileNum)&0xFF);
+	                if(TmpAag>=39)
+	                {
+						/*
+						// [To-do] If this statement is enabled, SLAC will fail due to timeout.
+	                    #ifdef SystemLogMessage
+	                    {
+	                        unsigned char TmpBuf[64];
+	                        memset(TmpBuf,0,sizeof(TmpBuf));
+	                        sprintf(TmpBuf,"[EvComm]SlacComm: bad Aag[%d]=%d",count,TmpAag);
+	                        StoreLogMsg(TmpBuf);
+	                    }
+	                    #endif
+						*/
+	                    TmpAag=37;
+	                }
+	                SendMmePacket.MMENTRY[SendMmePacketSize++]=TmpAag;
+	            }
+	            SendMmePacketSize+=19;      //the size before MMENTRY
+	                #ifdef Debug
+	            printf("\n\n***** Send MME Packet *****\n");
+	            printf("SendMmePacket.ODA: %02x:%02x:%02x:%02x:%02x:%02x:\n",
+	                   SendMmePacket.ODA[0],SendMmePacket.ODA[1],SendMmePacket.ODA[2],SendMmePacket.ODA[3],SendMmePacket.ODA[4],SendMmePacket.ODA[5]);
+	            printf("SendMmePacket.OSA: %02x:%02x:%02x:%02x:%02x:%02x:\n",
+	                   SendMmePacket.OSA[0],SendMmePacket.OSA[1],SendMmePacket.OSA[2],SendMmePacket.OSA[3],SendMmePacket.OSA[4],SendMmePacket.OSA[5]);
+	            printf("MTYPE: 0x%x\n", htons(SendMmePacket.MTYPE));
+	            printf("MMV: 0x%x\n", SendMmePacket.MMV);
+	            printf("MMTYPE: 0x%x\n", SendMmePacket.MMTYPE);
+	            printf("FMI 0x%x, 0x%x\n", SendMmePacket.FMI[0],SendMmePacket.FMI[1]);
+	            printf("--- CM_ATTEN_CHAR_IND ---\n");
+	            printf("APPLICATION_TYPE: 0x%x\n", SendMmePacket.MMENTRY[0]);
+	            printf("SECURITY_TYPE: 0x%x\n", SendMmePacket.MMENTRY[1]);
+	            printf("SOURCE_ADDRESS: %02x:%02x:%02x:%02x:%02x:%02x\n",
+	                   SendMmePacket.MMENTRY[2],SendMmePacket.MMENTRY[3],SendMmePacket.MMENTRY[4],SendMmePacket.MMENTRY[5],
+	                   SendMmePacket.MMENTRY[6],SendMmePacket.MMENTRY[7]);
+	            printf("RunID: %02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x\n",
+	                   SendMmePacket.MMENTRY[8],SendMmePacket.MMENTRY[9],SendMmePacket.MMENTRY[10],SendMmePacket.MMENTRY[11],
+	                   SendMmePacket.MMENTRY[12],SendMmePacket.MMENTRY[13],SendMmePacket.MMENTRY[14],SendMmePacket.MMENTRY[15]);
+	            printf("SOURCE_ID: \n");
+	            for(count=0; count<17; count++)
+	                printf("%02x, ",SendMmePacket.MMENTRY[16+count]);
+	            printf("\n");
+	            printf("RESP_ID: \n");
+	            for(count=0; count<17; count++)
+	                printf("%02x, ",SendMmePacket.MMENTRY[33+count]);
+	            printf("\n");
+	            printf("NumSounds: 0x%x\n", SendMmePacket.MMENTRY[50]);
+	            printf("ATTEN_PROFILE: \n");
+	            for(count=0; count<AagGroupsNum; count++)
+	                printf("%02x, ",SendMmePacket.MMENTRY[51+count]);
+	            printf("\n");
+	                #endif
+	            V2gFlowStatus=CM_ATTEN_CHAR_IND;
+	            count=sendto(RawSock, &SendMmePacket, SendMmePacketSize, 0, (struct sockaddr*)&DestSocketAddress, sizeof(struct sockaddr_ll));
+	                #ifdef Debug
+	            printf("SendMmePacketSize=%d,Rtn=%d\n",SendMmePacketSize,count);
+	                #endif
+	            ftime(&SeqStartTime);
+	        }
+	        break;
+		}
+
+	    case CM_ATTEN_CHAR_IND:
+		{
+	        ftime(&SeqEndTime);
+	        //if(DiffTimeb(SeqStartTime, SeqEndTime)>TT_match_response)
+	        if(DiffTimeb(SeqStartTime, SeqEndTime)>TT_match_response*2)     //extended to 400ms due to the response of CM_ATTEN_CHAR.RSP of some EVCC is slower than 200ms.
+	        {
+	                #ifdef SystemLogMessage
+	            StoreLogMsg("[EvComm]SlacComm: Wait CM_ATTEN_CHAR_RSP Timeout - TT_match_response ");
+	                #endif
+	            V2gFlowStatus=Sequence_Timeout;
+	            return -1;
+	        }
+	        break;
+		}
+
+	    case CM_ATTEN_CHAR_RSP:
+		{
+	        ftime(&SeqEndTime);
+	        if(DiffTimeb(SeqStartTime, SeqEndTime)>TT_EVSE_match_session)
+	        {
+	                #ifdef SystemLogMessage
+	            StoreLogMsg("[EvComm]SlacComm: Wait CM_VALIDATE_REQ or CM_SLAC_MATCH_REQ Timeout - TT_EVSE_match_session ");
+	                #endif
+	            V2gFlowStatus=Sequence_Timeout;
+	            return -1;
+	        }
+	        break;
+		}
+
+	    case CM_VALIDATE_CNF:
+		{
+	        ftime(&SeqEndTime);
+	        if(DiffTimeb(SeqStartTime, SeqEndTime)>TT_match_sequence)
+	        {
+	                #ifdef SystemLogMessage
+	            StoreLogMsg("[EvComm]SlacComm: Wait CM_VALIDATE_CNF or CM_SLAC_MATCH_REQ Timeout - TT_match_sequence ");
+	                #endif
+	            V2gFlowStatus=Sequence_Timeout;
+	            return -1;
+	        }
+	        break;
+		}
+
+	    case CM_SLAC_MATCH_CNF:
+		{
+	        if(UdpSock>0)
+	        {
+	            close(UdpSock);
+	            UdpSock=-1;
+	        }
+	        if(TcpSock>0)
+	        {
+	            close(TcpSock);
+	            TcpSock=-1;
+	        }
+	        ftime(&SeqStartTime);
+	        V2gFlowStatus=SLACC_SDP_UDP_Connection;
+	        break;
+		}
+
+		defaudlt:
+		{
+		    break;
+		}
+    }
+    return 0;
+}
+
+int V2gMsgProcess(unsigned char *Buffer, int DataLength)
+{
+    struct V2gtpHeader *RecvHeader;
+    unsigned char *PayloadData;
+
+    RecvHeader= (struct V2gtpHeader *) Buffer;
+
+    #ifdef Debug
+    printf("\n\n***********************************\n");
+    printf("***** Received V2G Packet *****\n");
+    printf("***********************************\n");
+    printf("ProtocolVersion=%d\n",RecvHeader->ProtocolVersion);
+    printf("InverseProtocolVersion=0x%x\n",RecvHeader->InverseProtocolVersion);
+    printf("PayloadType=0x%x\n",htons(RecvHeader->PayloadType));
+    printf("PayloadLength=0x%x\n",htonl(RecvHeader->PayloadLength));
+    #endif
+
+    if(htons(RecvHeader->PayloadType)!=V2GTP_PAYLOAD_TYPE_EXI_MSG)
+    {
+        #ifdef SystemLogMessage
+        StoreLogMsg("[EvComm]V2gMsgProcess: Wrong Payload Type");
+        #endif
+        return 0;
+    }
+    //EXI decode
+    //process received message and change status flag
+
+}
+
+int V2gComm(int AcceptFd)
+{
+    int packet_size,count;
+
+    memset(RecvBuffer,0,RecvBufferSize);
+    packet_size=recv(AcceptFd, RecvBuffer, RecvBufferSize, 0);
+    if(packet_size>0)
+    {
+        /*#ifdef Debug
+           printf("V2gComm Data: ");
+           for(count=0;count<packet_size;count++)
+            printf("0x%x, ",RecvBuffer[count]);
+           printf("\n");
+         #endif*/
+        V2gMsgProcess(RecvBuffer, packet_size);
+    }
+    //following are the response message handling according to status flag
+    switch(V2gFlowStatus)
+    {
+	    case SupportedAppProtocolRequest:
+	        break;
+	    default:
+	        break;
+    }
+    return 0;
+}
+
+int SdpUdpConnected()
+{
+    int packet_size,Rtn;
+    struct sockaddr_in6 ServerAddr,ClientAddr;
+    struct V2gtpHeader *RecvHeader;
+    unsigned char *PayloadData;
+
+    if(UdpSock<=0)
+    {
+        if ((UdpSock = socket(AF_INET6, SOCK_DGRAM, 0)) <0)
+        {
+                    #ifdef SystemLogMessage
+            StoreLogMsg("[EvComm]SdpUdpConnected: Fail to open UdpSock");
+            #endif
+            return 0;
+        }
+        memset(&ServerAddr,0, sizeof(struct sockaddr_in));
+        ServerAddr.sin6_family = AF_INET6;
+        ServerAddr.sin6_addr=in6addr_any;
+        ServerAddr.sin6_port = htons(SdpUdpServerPort);
+        if(bind(UdpSock, (struct sockaddr *)&ServerAddr, sizeof(struct sockaddr_in6)) <0)
+        {
+                    #ifdef SystemLogMessage
+            StoreLogMsg("[EvComm]SdpUdpConnected: Fail to bind UdpSock");
+            #endif
+            close(UdpSock);
+            UdpSock=-1;
+            return 0;
+        }
+            #ifdef Debug
+        printf("UdpSock=%d\n",UdpSock);
+            #endif
+    }
+    memset(RecvBuffer,0,RecvBufferSize);
+    memset(&ClientAddr,0, sizeof(struct sockaddr_in));
+    Rtn=sizeof(struct sockaddr_in6);
+    packet_size = recvfrom(UdpSock, RecvBuffer, RecvBufferSize, MSG_DONTWAIT, (struct sockaddr *)&ClientAddr, &Rtn);
+    #ifdef Debug
+    printf("packet_size=%d\n",packet_size);
+        #endif
+    if(packet_size>0)
+    {
+        RecvHeader= (struct V2gtpHeader *) RecvBuffer;
+        PayloadData=RecvBuffer+sizeof(struct V2gtpHeader);
+        #ifdef Debug
+        printf("\n\n***********************************\n");
+        printf("***** Received SDP Packet *****\n");
+        printf("***********************************\n");
+        printf("ClientAddress=");
+        for(Rtn=0; Rtn<16; Rtn+=2)
+            printf("%02x%02x:",ClientAddr.sin6_addr.s6_addr[Rtn],ClientAddr.sin6_addr.s6_addr[Rtn+1]);
+        printf("\n");
+        printf("ClientPort=%d\n",ClientAddr.sin6_port);
+        printf("ProtocolVersion=%d\n",RecvHeader->ProtocolVersion);
+        printf("InverseProtocolVersion=0x%x\n",RecvHeader->InverseProtocolVersion);
+        printf("PayloadType=0x%x\n",htons(RecvHeader->PayloadType));
+        printf("PayloadLength=0x%x\n",htonl(RecvHeader->PayloadLength));
+        #endif
+        if((RecvHeader->ProtocolVersion==0x01)&&(RecvHeader->InverseProtocolVersion==0xFE)&&(htons(RecvHeader->PayloadType)==V2GTP_PAYLOAD_TYPE_SDP_REQUEST))
+        {
+            #ifdef Debug
+            printf("Security=0x%x\n",*(PayloadData+0));
+            printf("TransportProtocol=0x%x\n",*(PayloadData+1));
+            #endif
+            RecvHeader->PayloadType=htons(V2GTP_PAYLOAD_TYPE_SDP_RESPONSE);
+            RecvHeader->PayloadLength=htonl(20);    //Fixed Length=20
+            memset(PayloadData,0,20);
+            // MAC address[0:2] + FFFE + MAC address[3:5]
+            PayloadData[0]=(IPV6_LINK_LOCAL_PREFIX>>8)&0xFF;
+            PayloadData[1]=IPV6_LINK_LOCAL_PREFIX&0xFF;
+            PayloadData[8]=CsuMac[0];
+            PayloadData[8]^=0x02;// bit 1 should complemented.
+            PayloadData[9]=CsuMac[1];
+            PayloadData[10]=CsuMac[2];
+            PayloadData[11]=0xFF;
+            PayloadData[12]=0xFE;
+            PayloadData[13] =CsuMac[3];
+            PayloadData[14]=CsuMac[4];
+            PayloadData[15]=CsuMac[5];
+            //TCP port
+            PayloadData[16]=(SdpTcpServerPort>>8)&0xFF;
+            PayloadData[17]=SdpTcpServerPort&0xFF;
+            PayloadData[18]=SDP_PAYLOAD_SECURITY_NONE;      //Security
+            PayloadData[19]=SDP_PAYLOAD_TRANS_PROTOCOL_TCP; //Transport protocol
+            Rtn=sendto(UdpSock, RecvBuffer, sizeof(struct V2gtpHeader)+htonl(RecvHeader->PayloadLength), 0, (struct sockaddr *)&ClientAddr, sizeof(struct sockaddr_in6));
+            #ifdef Debug
+            printf("\n\n***** Response SDP Packet *****\n");
+            printf("Send size=%d\n",Rtn);
+            printf("Destination Address=");
+            for(Rtn=0; Rtn<16; Rtn++)
+                printf("%02x, ",ClientAddr.sin6_addr.s6_addr[Rtn]);
+            printf("\n");
+            printf("Destination Port=%d\n",ClientAddr.sin6_port);
+            printf("ProtocolVersion=%d\n",RecvHeader->ProtocolVersion);
+            printf("InverseProtocolVersion=0x%x\n",RecvHeader->InverseProtocolVersion);
+            printf("PayloadType=0x%x\n",htons(RecvHeader->PayloadType));
+            printf("PayloadLength=0x%x\n",htonl(RecvHeader->PayloadLength));
+            printf("SECC Ipv6 Address=");
+            for(Rtn=0; Rtn<16; Rtn++)
+                printf("%02x:",PayloadData[Rtn]);
+            printf("\n");
+            printf("SECC Port=%d\n",(PayloadData[16]<<8|PayloadData[17]));
+            printf("Security=0x%x\n",PayloadData[19]);
+            printf("TransportProtocol=0x%x\n",PayloadData[20]);
+            #endif
+            if(Rtn>0)
+                return 1;
+        }
+    }
+    return 0;
+}
+
+int V2gTcpConnected()
+{
+    int packet_size,Rtn,AcceptFd;
+    struct sockaddr_in6 ServerAddr,ClientAddr;
+
+    if(TcpSock<=0)
+    {
+        if ((TcpSock = socket(PF_INET6, SOCK_STREAM, 0)) <0)
+        {
+                    #ifdef SystemLogMessage
+            StoreLogMsg("[EvComm]V2gTcpConnected: Fail to open TcpSock");
+            #endif
+            return 0;
+        }
+        fcntl(TcpSock, F_SETFL, O_NONBLOCK);    //set to O_NONBLOCK
+        memset(&ServerAddr,0, sizeof(struct sockaddr_in));
+        ServerAddr.sin6_family = PF_INET6;
+        ServerAddr.sin6_addr=in6addr_any;
+        ServerAddr.sin6_port = htons(SdpTcpServerPort);
+        if(bind(TcpSock, (struct sockaddr *)&ServerAddr, sizeof(struct sockaddr_in6)) <0)
+        {
+                    #ifdef SystemLogMessage
+            StoreLogMsg("[EvComm]V2gTcpConnected: Fail to bind TcpSock");
+            #endif
+            close(TcpSock);
+            TcpSock=-1;
+            return 0;
+        }
+        if(listen(TcpSock, 1) == -1)     //only accept one connection
+        {
+                #ifdef SystemLogMessage
+            StoreLogMsg("[EvComm]V2gTcpConnected: Fail to listen TcpSock");
+            #endif
+            close(TcpSock);
+            TcpSock=-1;
+            return 0;
+        }
+            #ifdef Debug
+        printf("TcpSock=%d\n",TcpSock);
+            #endif
+    }
+    Rtn=sizeof(struct sockaddr_in6);
+    if((AcceptFd=accept(TcpSock,(struct sockaddr *)&ClientAddr,&Rtn))==-1)
+    {
+        #ifdef Debug
+        printf("Wait TCP connection\n");
+        #endif
+        return 0;
+    }
+    #ifdef Debug
+    printf("Accept one TCP connection:\n");
+    printf("AcceptFd=%d\n",AcceptFd);
+    printf("ClientAddress=");
+    for(Rtn=0; Rtn<16; Rtn+=2)
+        printf("%02x%02x:",ClientAddr.sin6_addr.s6_addr[Rtn],ClientAddr.sin6_addr.s6_addr[Rtn+1]);
+    printf("\n");
+    printf("ClientPort=%d\n",ClientAddr.sin6_port);
+    #endif
+    return AcceptFd;
+}
+
+int main(int argc,char *argv[])
+{
+    unsigned char Rtn;
+    int TcpAcceptFd;
+    //Initialization
+    InitShareMemory();
+    //start to detect pilot state
+    PilotDetectionPid=0;
+    PilotDetection();
+    //Init communication parameters
+    GetEthMac(QcaInterface, CsuMac);
+    RecvBuffer=(unsigned char *)malloc(RecvBufferSize);
+    memset(RecvBuffer,0,RecvBufferSize);
+    SendBuffer=(unsigned char *)malloc(SendBufferSize);
+    memset(SendBuffer,0,SendBufferSize);
+    if(RawSock>0)
+        close(RawSock);
+    if(UdpSock>0)
+        close(UdpSock);
+    if(TcpSock>0)
+        close(TcpSock);
+    RawSock=UdpSock=TcpSock=-1;
+    V2gFlowStatus=0;
+    AttenProfileNum=0;
+    while(1)
+    {
+        #ifdef Debug
+        printf("V2gFlowStatus=%d\n",V2gFlowStatus);
+        #endif
+        //if((ShmInternalComm->ChargingPermission==0x01)&&(ConnectorPlugIn()==1))
+        if(1)
+        {
+            if(V2gFlowStatus<SLACC_SDP_UDP_Connection)
+                SlacComm();
+            else if(V2gFlowStatus==SLACC_SDP_UDP_Connection)
+            {
+                if(SdpUdpConnected()==1)
+                {
+                    V2gFlowStatus=SLACC_SDP_TCP_Connection;
+                    continue;
+                }
+                ftime(&SeqEndTime);
+                if(DiffTimeb(SeqStartTime, SeqEndTime)>TT_match_join)
+                {
+                    #ifdef SystemLogMessage
+                    StoreLogMsg("[EvComm]main: Wait SLACC_SDP_UDP_Connection Timeout - TT_match_join ");
+                    #endif
+                    V2gFlowStatus=Sequence_Timeout;
+                }
+            }
+            else if(V2gFlowStatus==SLACC_SDP_TCP_Connection)
+            {
+                if((TcpAcceptFd=V2gTcpConnected())>0)
+                {
+                    V2gFlowStatus=SupportedAppProtocolRequest;
+                    continue;
+                }
+                ftime(&SeqEndTime);
+                if(DiffTimeb(SeqStartTime, SeqEndTime)>TT_match_join)
+                {
+                    #ifdef SystemLogMessage
+                    StoreLogMsg("[EvComm]main: Wait SLACC_SDP_TCP_Connection Timeout - TT_match_join ");
+                    #endif
+                    V2gFlowStatus=Sequence_Timeout;
+                }
+            }
+            else if(V2gFlowStatus<Performance_Timeout)
+                V2gComm(TcpAcceptFd);
+        }
+        if(V2gFlowStatus>=Performance_Timeout)
+        {
+            //Normal Stop
+            //alarm and duty to 100%
+            OutputCpPwmDuty(100);
+            goto ReSet;
+        }
+        /*else if((ConnectorPlugIn()==0)&&(V2gFlowStatus>Idle))
+           {
+            //Emergency stop
+            OutputCpPwmDuty(100);
+            goto ReSet;
+           }*/
+        continue;
+
+ReSet:
+        if(RawSock>0)
+            close(RawSock);
+        if(UdpSock>0)
+            close(UdpSock);
+        if(TcpSock>0)
+        {
+            close(TcpSock);
+            close(TcpAcceptFd);
+        }
+        RawSock=UdpSock=TcpSock=TcpAcceptFd=-1;
+        V2gFlowStatus=0;
+        while(1)
+        {
+            //wait for CSU configrm
+        }
+    }//main while
+}

+ 109 - 100
EVSE/Projects/CCS/Apps/EvComm.h

@@ -1,100 +1,109 @@
-#ifndef	EVCOMM_H_
-#define	EVCOMM_H_
-
-
-#define	QcaInterface						"eth0"
-#define 	SupportBcbToggle					
-#define	SdpUdpServerPort					15118
-#define	SdpTcpServerPort					59438	//49152-65535
-#define	IPV6_LINK_LOCAL_PREFIX				0xFE80
-
-/***********************************************/
-/*********** Ethernet Type ********************/
-/**********************************************/
-#define EtherType_HomePlug					0x88E1
-
-/***********************************************/
-/*** MMTYPE (Management Message Type) **/
-/**********************************************/
-#define MMTYPE_CM_SET_KEY_REQ				0x6008
-#define MMTYPE_CM_SET_KEY_CNF				0x6009
-#define MMTYPE_CM_SLAC_PARM_REQ			0x6064
-#define MMTYPE_CM_SLAC_PARM_CNF			0x6065
-#define MMTYPE_CM_START_ATTEN_CHAR_IND	0x606A
-#define MMTYPE_CM_MNBC_SOUND_IND		0x6076
-#define MMTYPE_CM_ATTN_CHAR_IND			0x606E
-#define MMTYPE_CM_ATTN_CHAR_RSP			0x606F
-#define MMTYPE_CM_VALIDATE_REQ			0x6078
-#define MMTYPE_CM_VALIDATE_CNF			0x6079
-#define MMTYPE_CM_SLAC_MATCH_REQ			0x607C
-#define MMTYPE_CM_SLAC_MATCH_CNF		0x607D
-#define MMTYPE_CM_ATTEN_PROFILE_IND		0x6086
-//following are the vendor specific type
-#define MMTYPE_VENDOR_VS_HOST_ACTION	 	0xA062		//Embedded Host Action Requested Indication MME
-#define MMTYPE_VENDOR_ATTEN_CHAR			0xA14E		//Attenuation Characteristics MME (VS_ATTEN_CHAR)
-#define MMTYPE_VENDOR_VS_NW_INFO			0xA038		//Network Info MME
-#define MMTYPE_VENDOR_VS_NW_INFO_CNF		0xA039		//Network Info MME
-
-/***********************************************/
-/************** V2GTP Payload Type ************/
-/**********************************************/
-#define V2GTP_PAYLOAD_TYPE_SDP_REQUEST		0x9000		//SDP request message
-#define V2GTP_PAYLOAD_TYPE_SDP_RESPONSE	0x9001		//SDP response message
-#define V2GTP_PAYLOAD_TYPE_EXI_MSG			0x8001		//EXI encoded V2G Message
-//Payload
-#define SDP_PAYLOAD_SECURITY_TLS			0x00			//0x00 = secured with TLS
-#define SDP_PAYLOAD_SECURITY_NONE			0x10			//0x10 = No transport layer security
-#define SDP_PAYLOAD_TRANS_PROTOCOL_TCP	0x00			//0x00= TCP
-#define SDP_PAYLOAD_TRANS_PROTOCOL_UDP	0x10			//0x10 = reserved for UDP
-/***********************************************/
-/****** Timing and constant values **********/
-/*********** [2015] ISO 15118_3 ***************/
-/**********************************************/
-#define C_EV_match_MNBC					0x0A
-#define TT_EVSE_SLAC_init					50			//unit: sec.
-#define TT_match_sequence					400			//unit: ms
-#define TT_EVSE_match_MNBC				6			//unit: 100ms
-#define TP_match_response					100			//unit: ms, General performance time for a response to a request
-#define TT_match_response					200			//unit: ms, Time that the EV/EVSE shall wait for a response from the EVSE/EV
-#define TP_EV_batch_msg_interval			50			//unit: ms
-#define TT_EVSE_match_session				10000		//unit: ms
-#define TT_match_join						12000		//unit: ms
-/***********************************************/
-/*************** Structure *********************/
-/**********************************************/
-struct MmeHeader
-{
-    unsigned char ODA[6];		//Original Destination Address
-    unsigned char OSA[6];			//Original source Address
-    //unsigned int VLAN Tag; 		//IEEE802.1Q VLAN Tag (optional)
-    unsigned short MTYPE;			//Ethernet Type for HomePlug, should be 0x88E1
-    unsigned char MMV;			//Management Message Version
-    unsigned short MMTYPE;		//Management Message Type
-    unsigned char FMI[2];			//Fragmentation Management Information, Fragmentation Message Sequence Number
-    unsigned char MMENTRY[256];	//Management Message Entry Data
-}__attribute__((packed));
-
-//Qualcomm Atheros Vendor Specific MME Format
-struct QcaVendorMmeHeader
-{
-    unsigned char ODA[6];		//Original Destination Address
-    unsigned char OSA[6];			//Original source Address
-    //unsigned int VLAN Tag; 		//IEEE802.1Q VLAN Tag (optional)
-    unsigned short MTYPE;			//Ethernet Type for HomePlug, should be 0x88E1
-    unsigned char MMV;			//Management Message Version
-    unsigned short MMTYPE;		//Management Message Type
-    unsigned char OUI[3];			//Fragmentation Management Information, Fragmentation Message Sequence Number
-    unsigned char MBODY[1024];	//Management Message Entry Data
-}__attribute__((packed));
-
-struct V2gtpHeader
-{
-    unsigned char 	ProtocolVersion;		//0x01: V2GTP version 1, 0x00, 0x02-0xFF reserved
-    unsigned char 	InverseProtocolVersion;	//Equals the <Protocol_Version> XOR 0xFF, 0xFE: V2GTP Version 1
-    unsigned short 	PayloadType;			//0x8001:	EXI encoded V2G Message, 
-    									//0x9000:	SDP request message,
-    									//0x9001:	SDP response message,
-    									//0xA000 - 0xFFFF:	Manufacturer specific use
-    unsigned int 	PayloadLength;		//excluding the generic V2GTP header byte		
-}__attribute__((packed));
-#endif
+/*===========================================================================
+                    Combined Charging System (CCS): SECC
+                                EVComm.h
+
+                        initiated by Vern, Joseph
+                           (since 2019/07/19)
+   =============================================================================*/
+
+#ifndef EVCOMM_H_
+#define EVCOMM_H_
+
+
+#define QcaInterface                        "eth0"
+#define SupportBcbToggle
+#define SdpUdpServerPort                    15118
+#define SdpTcpServerPort                    59438   //49152-65535
+#define IPV6_LINK_LOCAL_PREFIX              0xFE80
+
+/***********************************************/
+/*********** Ethernet Type ********************/
+/**********************************************/
+#define EtherType_HomePlug                  0x88E1
+
+/***********************************************/
+/*** MMTYPE (Management Message Type) **/
+/**********************************************/
+#define MMTYPE_CM_SET_KEY_REQ               0x6008
+#define MMTYPE_CM_SET_KEY_CNF               0x6009
+#define MMTYPE_CM_SLAC_PARM_REQ             0x6064
+#define MMTYPE_CM_SLAC_PARM_CNF             0x6065
+#define MMTYPE_CM_START_ATTEN_CHAR_IND      0x606A
+#define MMTYPE_CM_MNBC_SOUND_IND            0x6076
+#define MMTYPE_CM_ATTN_CHAR_IND             0x606E
+#define MMTYPE_CM_ATTN_CHAR_RSP             0x606F
+#define MMTYPE_CM_VALIDATE_REQ              0x6078
+#define MMTYPE_CM_VALIDATE_CNF              0x6079
+#define MMTYPE_CM_SLAC_MATCH_REQ            0x607C
+#define MMTYPE_CM_SLAC_MATCH_CNF            0x607D
+#define MMTYPE_CM_ATTEN_PROFILE_IND         0x6086
+//following are the vendor specific type
+#define MMTYPE_VENDOR_VS_HOST_ACTION        0xA062      //Embedded Host Action Requested Indication MME
+#define MMTYPE_VENDOR_ATTEN_CHAR            0xA14E      //Attenuation Characteristics MME (VS_ATTEN_CHAR)
+#define MMTYPE_VENDOR_VS_NW_INFO            0xA038      //Network Info MME
+#define MMTYPE_VENDOR_VS_NW_INFO_CNF        0xA039      //Network Info MME
+
+/***********************************************/
+/************** V2GTP Payload Type ************/
+/**********************************************/
+#define V2GTP_PAYLOAD_TYPE_SDP_REQUEST      0x9000      //SDP request message
+#define V2GTP_PAYLOAD_TYPE_SDP_RESPONSE     0x9001      //SDP response message
+#define V2GTP_PAYLOAD_TYPE_EXI_MSG          0x8001      //EXI encoded V2G Message
+//Payload
+#define SDP_PAYLOAD_SECURITY_TLS            0x00            //0x00 = secured with TLS
+#define SDP_PAYLOAD_SECURITY_NONE           0x10            //0x10 = No transport layer security
+#define SDP_PAYLOAD_TRANS_PROTOCOL_TCP      0x00            //0x00= TCP
+#define SDP_PAYLOAD_TRANS_PROTOCOL_UDP      0x10            //0x10 = reserved for UDP
+/***********************************************/
+/****** Timing and constant values **********/
+/*********** [2015] ISO 15118_3 ***************/
+/**********************************************/
+#define C_EV_match_MNBC                     0x0A
+#define TT_EVSE_SLAC_init                   50          //unit: sec.
+#define TT_match_sequence                   400         //unit: ms
+#define TT_EVSE_match_MNBC                  6           //unit: 100ms
+#define TP_match_response                   100         //unit: ms, General performance time for a response to a request
+#define TT_match_response                   200         //unit: ms, Time that the EV/EVSE shall wait for a response from the EVSE/EV
+#define TP_EV_batch_msg_interval            50          //unit: ms
+#define TT_EVSE_match_session               10000       //unit: ms
+#define TT_match_join                       12000       //unit: ms
+/***********************************************/
+/*************** Structure *********************/
+/**********************************************/
+struct MmeHeader
+{
+    unsigned char ODA[6];       //Original Destination Address
+    unsigned char OSA[6];           //Original source Address
+    //unsigned int VLAN Tag;        //IEEE802.1Q VLAN Tag (optional)
+    unsigned short MTYPE;           //Ethernet Type for HomePlug, should be 0x88E1
+    unsigned char MMV;          //Management Message Version
+    unsigned short MMTYPE;      //Management Message Type
+    unsigned char FMI[2];           //Fragmentation Management Information, Fragmentation Message Sequence Number
+    unsigned char MMENTRY[256]; //Management Message Entry Data
+} __attribute__((packed));
+
+//Qualcomm Atheros Vendor Specific MME Format
+struct QcaVendorMmeHeader
+{
+    unsigned char ODA[6];       //Original Destination Address
+    unsigned char OSA[6];           //Original source Address
+    //unsigned int VLAN Tag;        //IEEE802.1Q VLAN Tag (optional)
+    unsigned short MTYPE;           //Ethernet Type for HomePlug, should be 0x88E1
+    unsigned char MMV;          //Management Message Version
+    unsigned short MMTYPE;      //Management Message Type
+    unsigned char OUI[3];           //Fragmentation Management Information, Fragmentation Message Sequence Number
+    unsigned char MBODY[1024];  //Management Message Entry Data
+} __attribute__((packed));
+
+struct V2gtpHeader
+{
+    unsigned char ProtocolVersion;          //0x01: V2GTP version 1, 0x00, 0x02-0xFF reserved
+    unsigned char InverseProtocolVersion;   //Equals the <Protocol_Version> XOR 0xFF, 0xFE: V2GTP Version 1
+    unsigned short PayloadType;             //0x8001:	EXI encoded V2G Message,
+    //0x9000:	SDP request message,
+    //0x9001:	SDP response message,
+    //0xA000 - 0xFFFF:	Manufacturer specific use
+    unsigned int PayloadLength;         //excluding the generic V2GTP header byte
+} __attribute__((packed));
+
+#endif

二进制
EVSE/Projects/CCS/Apps/EventLogging


+ 281 - 253
EVSE/Projects/CCS/Apps/EventLogging.c

@@ -1,253 +1,281 @@
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <linux/termios.h>
-#include <stdio.h>
-#include <string.h>
-#include <time.h>
-#include <stdlib.h>
-#include <sys/ipc.h>
-#include <sys/shm.h>
-#include <sys/mman.h>
-#include <linux/sockios.h> 
-#include <linux/socket.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <sys/time.h> 
-#include <sys/timeb.h> 
-#include <math.h>//for pow
-#include <unistd.h>
-#include "define.h"
-
-//#define Debug
-
-struct SysConfigAndInfo			*ShmSysConfigAndInfo;
-struct StatusCodeData 			*ShmStatusCodeData;
-
-
-#ifdef SystemLogMessage
-int StoreLogMsg(unsigned char *DataString)
-{
-	unsigned char Buf[256];
-	time_t CurrentTime;
-	struct tm *tm;
-			
-	memset(Buf,0,sizeof(Buf));
-	CurrentTime = time(NULL);
-	tm=localtime(&CurrentTime);
-	sprintf(Buf,"echo \"%04d.%02d.%02d %02d:%02d:%02d - %s\" >> /Storage/SystemLog/[%04d.%02d]SystemLog",
-			tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,
-			DataString,
-			tm->tm_year+1900,tm->tm_mon+1);
-	system(Buf);
-	#ifdef Debug
-	printf("%s \n",DataString);
-	#endif
-}		
-#endif
-
-int StoreEventLogMsg(unsigned char *EventCodeString)
-{
-	unsigned char Buf[256];
-	time_t CurrentTime;
-	struct tm *tm;
-			
-	memset(Buf,0,sizeof(Buf));
-	CurrentTime = time(NULL);
-	tm=localtime(&CurrentTime);
-	sprintf(Buf,"echo \"%04d.%02d.%02d %02d:%02d:%02d - %s\" >> /Storage/EventLog/[%04d.%02d]EventLog",
-			tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,
-			EventCodeString,
-			tm->tm_year+1900,tm->tm_mon+1);
-	system(Buf);
-	#ifdef Debug
-	printf("%s \n",Buf);
-	#endif
-}		
-
-int DiffTimeb(struct timeb ST, struct timeb ET)
-{
-	//return milli-second
-	unsigned int StartTime,StopTime;
-	
-	StartTime=(unsigned int)ST.time;
-	StopTime=(unsigned int)ET.time;
-	return (StopTime-StartTime)*1000+ET.millitm-ST.millitm;
-}	
-	
-/**************************************************************************************/
-/**************************Init all share memory *********************************/
-/**************************************************************************************/
-int InitShareMemory()
-{
-	int MeterSMId;
-	
-	//creat ShmSysConfigAndInfo
-	if ((MeterSMId = shmget(ShmSysConfigAndInfoKey, sizeof(struct SysConfigAndInfo),  0777)) < 0) 
-    	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[EventLogging]InitShareMemory:shmget ShmSysConfigAndInfo NG");
-		#endif			
-		return 0;
-	}
-    	else if ((ShmSysConfigAndInfo = shmat(MeterSMId, NULL, 0)) == (void *) -1) 
-    	{
-    		#ifdef SystemLogMessage	
-		StoreLogMsg("[EventLogging]InitShareMemory:shmat ShmSysConfigAndInfo NG");
-		#endif		
-		return 0;
-   	 }
-   	 //creat ShmStatusCodeData
-   	 if ((MeterSMId = shmget(ShmStatusCodeKey, sizeof(struct StatusCodeData),  0777)) < 0) 
-    	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[EventLogging]InitShareMemory:shmget ShmStatusCodeData NG");
-		#endif		
-		return 0;	
-	}
-    	else if ((ShmStatusCodeData = shmat(MeterSMId, NULL, 0)) == (void *) -1) 
-    	{
-    		#ifdef SystemLogMessage	
-		StoreLogMsg("[EventLogging]InitShareMemory:shmat ShmStatusCodeData NG");
-		#endif		
-		return 0;
-   	 }
-
-    	return 1;
-}
-
-void FlashPresentStatusCode(unsigned char *NewCode)
-{
-	unsigned char CodeIndex,SaveIndex=0;
-	unsigned char 	StatusCodeTmp[10][6];
-	
-	memset(StatusCodeTmp,0,sizeof(StatusCodeTmp));
-	for(CodeIndex=0;CodeIndex<(sizeof(ShmStatusCodeData->PresentStatusCode)/6);CodeIndex++)
-	{
-		if(strlen(ShmStatusCodeData->PresentStatusCode[CodeIndex])<=0)
-		{	
-			memcpy(StatusCodeTmp[SaveIndex++],NewCode,6);
-			memset(ShmStatusCodeData->PresentStatusCode,0,sizeof(ShmStatusCodeData->PresentStatusCode));
-			memcpy(ShmStatusCodeData->PresentStatusCode,StatusCodeTmp,sizeof(StatusCodeTmp));
-			return;
-		}
-		else if(strstr(ShmStatusCodeData->PresentStatusCode[CodeIndex],NewCode+1)!=NULL)
-		{
-			if((CodeIndex+1)<10)
-				memcpy(StatusCodeTmp[SaveIndex],ShmStatusCodeData->PresentStatusCode[CodeIndex+1],(9-CodeIndex)*6);
-			memset(ShmStatusCodeData->PresentStatusCode,0,sizeof(ShmStatusCodeData->PresentStatusCode));
-			memcpy(ShmStatusCodeData->PresentStatusCode,StatusCodeTmp,sizeof(StatusCodeTmp));	
-			return;
-		}	
-		else
-		{
-			memcpy(StatusCodeTmp[SaveIndex++],ShmStatusCodeData->PresentStatusCode[CodeIndex],6);
-		}		
-	}
-}
-
-int main(int argc,char *argv[])
-{
-	int ByteCount,BitCount;
-	unsigned char tmp, EventCodeTmp[7];
-	
-	//Initialization
-	if(InitShareMemory()==0)
-	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[EventLogging]main:InitShareMemory NG");
-		#endif		
-		if(ShmStatusCodeData!=NULL)
-		{
-			ShmStatusCodeData->AlarmCode.AlarmEvents.bits.FailToCreateShareMemory=1;
-		}	
-		sleep(5);
-		return 0;
-	}	
-	
-	while(1)
-	{
-		//check Fault Status
-		for(ByteCount=0;ByteCount<4;ByteCount++)
-		{
-			if(ShmStatusCodeData->FaultCode.FaultEvents.FaultVal[ByteCount] != ShmStatusCodeData->FaultCode.PreviousFaultVal[ByteCount])
-			{
-				tmp=ShmStatusCodeData->FaultCode.FaultEvents.FaultVal[ByteCount]; //prevent be modified during following process
-				for(BitCount=0;BitCount<8;BitCount++)
-				{
-					if(((tmp>>BitCount)&0x01) != ((ShmStatusCodeData->FaultCode.PreviousFaultVal[ByteCount]>>BitCount)&0x01))
-					{
-						memset(EventCodeTmp,0,sizeof(EventCodeTmp));
-						memcpy(EventCodeTmp,FaultStatusCode[ByteCount*8+BitCount],sizeof(EventCodeTmp)-1);
-						if(((tmp>>BitCount)&0x01)==0)//Recovered
-						{	
-							EventCodeTmp[0]=1;
-							ShmStatusCodeData->FaultCode.PreviousFaultVal[ByteCount]&=(0<<BitCount);
-						}
-						else
-							ShmStatusCodeData->FaultCode.PreviousFaultVal[ByteCount]|=(1<<BitCount);
-						FlashPresentStatusCode(EventCodeTmp);
-						StoreEventLogMsg(EventCodeTmp);
-					}
-				}
-			}
-		}
-		
-		//check Alarm Status
-		for(ByteCount=0;ByteCount<8;ByteCount++)
-		{
-			if(ShmStatusCodeData->AlarmCode.AlarmEvents.AlarmVal[ByteCount] != ShmStatusCodeData->AlarmCode.PreviousAlarmVal[ByteCount])
-			{
-				tmp=ShmStatusCodeData->AlarmCode.AlarmEvents.AlarmVal[ByteCount]; //prevent be modified during following process
-				for(BitCount=0;BitCount<8;BitCount++)
-				{
-					if(((tmp>>BitCount)&0x01) != ((ShmStatusCodeData->AlarmCode.PreviousAlarmVal[ByteCount]>>BitCount)&0x01))
-					{
-						memset(EventCodeTmp,0,sizeof(EventCodeTmp));
-						memcpy(EventCodeTmp,AlarmStatusCode[ByteCount*8+BitCount],sizeof(EventCodeTmp)-1);
-						if(((tmp>>BitCount)&0x01)==0)//Recovered
-						{	
-							EventCodeTmp[0]=1;
-							ShmStatusCodeData->AlarmCode.PreviousAlarmVal[ByteCount]&=(0<<BitCount);
-						}
-						else
-						{	
-							ShmStatusCodeData->AlarmCode.PreviousAlarmVal[ByteCount]|=(1<<BitCount);
-							
-						}
-						FlashPresentStatusCode(EventCodeTmp);
-						StoreEventLogMsg(EventCodeTmp);
-					}
-				}
-			}
-		}
-		
-		//check Info Status
-		for(ByteCount=0;ByteCount<8;ByteCount++)
-		{
-			if(ShmStatusCodeData->InfoCode.InfoEvents.InfoVal[ByteCount] != ShmStatusCodeData->InfoCode.PreviousInfoVal[ByteCount])
-			{
-				tmp=ShmStatusCodeData->InfoCode.InfoEvents.InfoVal[ByteCount]; //prevent be modified during following process
-				for(BitCount=0;BitCount<8;BitCount++)
-				{
-					if(((tmp>>BitCount)&0x01) != ((ShmStatusCodeData->InfoCode.PreviousInfoVal[ByteCount]>>BitCount)&0x01))
-					{
-						memset(EventCodeTmp,0,sizeof(EventCodeTmp));
-						memcpy(EventCodeTmp,InfoStatusCode[ByteCount*8+BitCount],sizeof(EventCodeTmp)-1);
-						if(((tmp>>BitCount)&0x01)==0)//Recovered
-						{	
-							EventCodeTmp[0]=1;
-							ShmStatusCodeData->InfoCode.PreviousInfoVal[ByteCount]&=(0<<BitCount);
-						}
-						else
-							ShmStatusCodeData->InfoCode.PreviousInfoVal[ByteCount]|=(1<<BitCount);
-						FlashPresentStatusCode(EventCodeTmp);	
-						StoreEventLogMsg(EventCodeTmp);
-					}
-				}
-			}
-		}
-	}//main while loop 
-}
-
-
+/*===========================================================================
+                    Combined Charging System (CCS): SECC
+                             EventLogging.c
+
+                        initiated by Vern, Joseph
+                           (since 2019/07/19)
+=============================================================================*/
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <linux/termios.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+#include <stdlib.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#include <sys/mman.h>
+#include <linux/sockios.h>
+#include <linux/socket.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <sys/time.h>
+#include <sys/timeb.h>
+#include <math.h>//for pow
+#include <unistd.h>
+#include "define.h"
+#include "EventLogging.h"
+
+//#define Debug
+
+struct SysConfigAndInfo         *ShmSysConfigAndInfo;
+struct StatusCodeData           *ShmStatusCodeData;
+
+
+#ifdef SystemLogMessage
+int StoreLogMsg(unsigned char *DataString)
+{
+    unsigned char Buf[256];
+    time_t CurrentTime;
+    struct tm *tm;
+
+    memset(Buf, 0, sizeof(Buf));
+    CurrentTime = time(NULL);
+    tm = localtime(&CurrentTime);
+    sprintf(Buf, "echo \"%04d.%02d.%02d %02d:%02d:%02d - %s\" >> /Storage/SystemLog/[%04d.%02d]SystemLog",
+            tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec,
+            DataString,
+            tm->tm_year + 1900, tm->tm_mon + 1);
+    system(Buf);
+
+    #ifdef Debug
+    printf("%s \n", DataString);
+    #endif
+    }
+#endif
+
+int StoreEventLogMsg(unsigned char *EventCodeString)
+{
+    unsigned char Buf[256];
+    time_t CurrentTime;
+    struct tm *tm;
+
+    memset(Buf, 0, sizeof(Buf));
+    CurrentTime = time(NULL);
+    tm = localtime(&CurrentTime);
+    sprintf(Buf, "echo \"%04d.%02d.%02d %02d:%02d:%02d - %s\" >> /Storage/EventLog/[%04d.%02d]EventLog",
+            tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec,
+            EventCodeString,
+            tm->tm_year + 1900, tm->tm_mon + 1);
+    system(Buf);
+    #ifdef Debug
+        printf("%s \n", Buf);
+    #endif
+}
+
+int DiffTimeb(struct timeb ST, struct timeb ET)
+{
+    //return milli-second
+    unsigned int StartTime, StopTime;
+
+    StartTime = (unsigned int)ST.time;
+    StopTime = (unsigned int)ET.time;
+    return (StopTime - StartTime) * 1000 + ET.millitm - ST.millitm;
+}
+
+/**************************************************************************************/
+/**************************Init all share memory *********************************/
+/**************************************************************************************/
+int InitShareMemory()
+{
+    int MeterSMId;
+
+    //creat ShmSysConfigAndInfo
+    if((MeterSMId = shmget(ShmSysConfigAndInfoKey, sizeof(struct SysConfigAndInfo),  0777)) < 0)
+    {
+        #ifdef SystemLogMessage
+            StoreLogMsg("[EventLogging]InitShareMemory:shmget ShmSysConfigAndInfo NG");
+        #endif
+        return 0;
+    }
+    else if((ShmSysConfigAndInfo = shmat(MeterSMId, NULL, 0)) == (void *)-1)
+    {
+        #ifdef SystemLogMessage
+            StoreLogMsg("[EventLogging]InitShareMemory:shmat ShmSysConfigAndInfo NG");
+        #endif
+        return 0;
+    }
+
+    //creat ShmStatusCodeData
+    if((MeterSMId = shmget(ShmStatusCodeKey, sizeof(struct StatusCodeData),  0777)) < 0)
+    {
+        #ifdef SystemLogMessage
+            StoreLogMsg("[EventLogging]InitShareMemory:shmget ShmStatusCodeData NG");
+        #endif
+        return 0;
+    }
+    else if((ShmStatusCodeData = shmat(MeterSMId, NULL, 0)) == (void *)-1)
+    {
+        #ifdef SystemLogMessage
+            StoreLogMsg("[EventLogging]InitShareMemory:shmat ShmStatusCodeData NG");
+        #endif
+        return 0;
+    }
+
+    return 1;
+}
+
+void FlashPresentStatusCode(unsigned char *NewCode)
+{
+    unsigned char CodeIndex, SaveIndex = 0;
+    unsigned char StatusCodeTmp[10][6];
+
+    memset(StatusCodeTmp, 0, sizeof(StatusCodeTmp));
+
+    for(CodeIndex = 0; CodeIndex < (sizeof(ShmStatusCodeData->PresentStatusCode) / 6); CodeIndex++)
+    {
+        if(strlen(ShmStatusCodeData->PresentStatusCode[CodeIndex]) <= 0)
+        {
+            memcpy(StatusCodeTmp[SaveIndex++], NewCode, 6);
+            memset(ShmStatusCodeData->PresentStatusCode, 0, sizeof(ShmStatusCodeData->PresentStatusCode));
+            memcpy(ShmStatusCodeData->PresentStatusCode, StatusCodeTmp, sizeof(StatusCodeTmp));
+            return;
+        }
+        else if(strstr(ShmStatusCodeData->PresentStatusCode[CodeIndex], NewCode + 1) != NULL)
+        {
+            if((CodeIndex + 1) < 10)
+            {
+                memcpy(StatusCodeTmp[SaveIndex], ShmStatusCodeData->PresentStatusCode[CodeIndex + 1], (9 - CodeIndex) * 6);
+            }
+
+            memset(ShmStatusCodeData->PresentStatusCode, 0, sizeof(ShmStatusCodeData->PresentStatusCode));
+            memcpy(ShmStatusCodeData->PresentStatusCode, StatusCodeTmp, sizeof(StatusCodeTmp));
+            return;
+        }
+        else
+        {
+            memcpy(StatusCodeTmp[SaveIndex++], ShmStatusCodeData->PresentStatusCode[CodeIndex], 6);
+        }
+    }
+}
+
+int main(int argc, char *argv[])
+{
+    int ByteCount, BitCount;
+    unsigned char tmp, EventCodeTmp[7];
+
+    //Initialization
+    if(InitShareMemory() == 0)
+    {
+        #ifdef SystemLogMessage
+            StoreLogMsg("[EventLogging]main:InitShareMemory NG");
+        #endif
+
+        if(ShmStatusCodeData != NULL)
+        {
+            ShmStatusCodeData->AlarmCode.AlarmEvents.bits.FailToCreateShareMemory = 1;
+        }
+
+        sleep(5);
+        return 0;
+    }
+
+    while(1)
+    {
+        //check Fault Status
+        for(ByteCount = 0; ByteCount < 4; ByteCount++)
+        {
+            if(ShmStatusCodeData->FaultCode.FaultEvents.FaultVal[ByteCount] != ShmStatusCodeData->FaultCode.PreviousFaultVal[ByteCount])
+            {
+                tmp = ShmStatusCodeData->FaultCode.FaultEvents.FaultVal[ByteCount]; //prevent be modified during following process
+
+                for(BitCount = 0; BitCount < 8; BitCount++)
+                {
+                    if(((tmp >> BitCount) & 0x01) != ((ShmStatusCodeData->FaultCode.PreviousFaultVal[ByteCount] >> BitCount) & 0x01))
+                    {
+                        memset(EventCodeTmp, 0, sizeof(EventCodeTmp));
+                        memcpy(EventCodeTmp, FaultStatusCode[ByteCount * 8 + BitCount], sizeof(EventCodeTmp) - 1);
+
+                        if(((tmp >> BitCount) & 0x01) == 0)//Recovered
+                        {
+                            EventCodeTmp[0] = 1;
+                            ShmStatusCodeData->FaultCode.PreviousFaultVal[ByteCount] &= (0 << BitCount);
+                        }
+                        else
+                        {
+                            ShmStatusCodeData->FaultCode.PreviousFaultVal[ByteCount] |= (1 << BitCount);
+                        }
+
+                        FlashPresentStatusCode(EventCodeTmp);
+                        StoreEventLogMsg(EventCodeTmp);
+                    }
+                }
+            }
+        }
+
+        //check Alarm Status
+        for(ByteCount = 0; ByteCount < 8; ByteCount++)
+        {
+            if(ShmStatusCodeData->AlarmCode.AlarmEvents.AlarmVal[ByteCount] != ShmStatusCodeData->AlarmCode.PreviousAlarmVal[ByteCount])
+            {
+                tmp = ShmStatusCodeData->AlarmCode.AlarmEvents.AlarmVal[ByteCount]; //prevent be modified during following process
+
+                for(BitCount = 0; BitCount < 8; BitCount++)
+                {
+                    if(((tmp >> BitCount) & 0x01) != ((ShmStatusCodeData->AlarmCode.PreviousAlarmVal[ByteCount] >> BitCount) & 0x01))
+                    {
+                        memset(EventCodeTmp, 0, sizeof(EventCodeTmp));
+                        memcpy(EventCodeTmp, AlarmStatusCode[ByteCount * 8 + BitCount], sizeof(EventCodeTmp) - 1);
+
+                        if(((tmp >> BitCount) & 0x01) == 0)//Recovered
+                        {
+                            EventCodeTmp[0] = 1;
+                            ShmStatusCodeData->AlarmCode.PreviousAlarmVal[ByteCount] &= (0 << BitCount);
+                        }
+                        else
+                        {
+                            ShmStatusCodeData->AlarmCode.PreviousAlarmVal[ByteCount] |= (1 << BitCount);
+
+                        }
+
+                        FlashPresentStatusCode(EventCodeTmp);
+                        StoreEventLogMsg(EventCodeTmp);
+                    }
+                }
+            }
+        }
+
+        //check Info Status
+        for(ByteCount = 0; ByteCount < 8; ByteCount++)
+        {
+            if(ShmStatusCodeData->InfoCode.InfoEvents.InfoVal[ByteCount] != ShmStatusCodeData->InfoCode.PreviousInfoVal[ByteCount])
+            {
+                tmp = ShmStatusCodeData->InfoCode.InfoEvents.InfoVal[ByteCount]; //prevent be modified during following process
+
+                for(BitCount = 0; BitCount < 8; BitCount++)
+                {
+                    if(((tmp >> BitCount) & 0x01) != ((ShmStatusCodeData->InfoCode.PreviousInfoVal[ByteCount] >> BitCount) & 0x01))
+                    {
+                        memset(EventCodeTmp, 0, sizeof(EventCodeTmp));
+                        memcpy(EventCodeTmp, InfoStatusCode[ByteCount * 8 + BitCount], sizeof(EventCodeTmp) - 1);
+
+                        if(((tmp >> BitCount) & 0x01) == 0)//Recovered
+                        {
+                            EventCodeTmp[0] = 1;
+                            ShmStatusCodeData->InfoCode.PreviousInfoVal[ByteCount] &= (0 << BitCount);
+                        }
+                        else
+                        {
+                            ShmStatusCodeData->InfoCode.PreviousInfoVal[ByteCount] |= (1 << BitCount);
+                        }
+
+                        FlashPresentStatusCode(EventCodeTmp);
+                        StoreEventLogMsg(EventCodeTmp);
+                    }
+                }
+            }
+        }
+    }//main while loop
+
+}

+ 7 - 0
EVSE/Projects/CCS/Apps/EventLogging.h

@@ -0,0 +1,7 @@
+/*===========================================================================
+                    Combined Charging System (CCS): SECC
+                             EventLogging.h
+
+                        initiated by Vern, Joseph
+                           (since 2019/07/19)
+=============================================================================*/

二进制
EVSE/Projects/CCS/Apps/FWMaker


+ 140 - 109
EVSE/Projects/CCS/Apps/FWMaker.c

@@ -1,109 +1,140 @@
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <string.h>
-#include <net/if.h> /*struct ifreq*/
-#include <linux/sockios.h> /*SIOCGIFINDEX*/
-#include <linux/socket.h>
-#include <errno.h> 
-#include <sys/time.h> 
-#include <sys/timeb.h> 
-#include <fcntl.h>
-#include <sys/mman.h>
-
-//./FWMaker 172.16.24.126
-int main(int argc,char *argv[])
-{
-	unsigned char *MemBuf,*MemBuf2,buf[64];
-    int fd,rd=0,wrd=0,tmp=0,rd2=0;
-    unsigned int CheckSum=0;
-
-
-
-	memset(buf,0,64);
-	sprintf(buf,"tftp -gr uImage -l /mnt/uImage %s",argv[1]);   
-	system(buf);
-	memset(buf,0,64);
-	sprintf(buf,"tftp -gr rootfs_nor.img -l /mnt/rootfs_nor.img %s",argv[1]);   
-	system(buf);
-
-	if((MemBuf=malloc(0x100000D))==NULL)
-	{
-		printf("Allocate MemBuf memory error\n");
-		return 0;
-	}	
-	memset(MemBuf, 0xff, 0x100000D);
-	fd = open("/mnt/uImage", O_RDWR);
-	if (fd > 0) 
-	{
-	    if((rd=read(fd,MemBuf,0x100000D))<=0)
-	    {
-			printf("/mnt/uImage read Error\n");
-			free(MemBuf);
-			close(fd);
-			return 0;
-	    }   
-	    close(fd);
-	    for(tmp=0;tmp<rd;tmp++)
-	    	CheckSum+=MemBuf[tmp];
-	    strncpy(MemBuf+rd,"DELTADCOK",9);	
-	   *(MemBuf+rd+9)=CheckSum>>24;
-	    *(MemBuf+rd+10)=CheckSum>>16;
-	    *(MemBuf+rd+11)=CheckSum>>8;
-	     *(MemBuf+rd+12)=CheckSum;
-	   // memcpy(MemBuf+rd+9,&CheckSum,4);	
-	    fd = open("/mnt/DcoKImage", O_CREAT|O_RDWR);
-	    wrd=write(fd, MemBuf, rd+13);
-	    if(wrd!=(rd+13))
-	    	printf("write error wrd=0x%x, rd=0x%x\n",wrd,rd+13);
-	   else 
-	   		printf("/mnt/DcoKImage OK\n"); 	
-	    
-	}
-	else	
-	{	
-		free(MemBuf);
-		printf("/mnt/uImage open Error\n");
-		return 0;
-	}
-	
-	
-	memset(MemBuf, 0xff, 0x100000D);
-	CheckSum=rd=0;
-	fd = open("/mnt/rootfs_nor.img", O_RDWR);
-	if (fd > 0) 
-	{
-	    if((rd=read(fd,MemBuf,0x100000D))<=0)
-	    {
-			printf("/mnt/rootfs_nor.img read Error\n");
-			free(MemBuf);
-			close(fd);
-			return 0;
-	    }   
-	    close(fd);
-	    for(tmp=0;tmp<rd;tmp++)
-	    	CheckSum+=MemBuf[tmp];
-	    strncpy(MemBuf+rd,"DELTADCOF",9);	
-	    *(MemBuf+rd+9)=CheckSum>>24;
-	    *(MemBuf+rd+10)=CheckSum>>16;
-	    *(MemBuf+rd+11)=CheckSum>>8;
-	     *(MemBuf+rd+12)=CheckSum;
-	    //memcpy(MemBuf+rd+9,&CheckSum,4);	
-	    fd = open("/mnt/DcoFImage", O_CREAT|O_RDWR);
-	    wrd=write(fd, MemBuf, rd+13);
-	    if(wrd!=(rd+13))
-	    	printf("write error wrd=0x%x, rd=0x%x\n",wrd,rd+13);
-	   else 
-	   		printf("/mnt/DcoFImage OK\n"); 	
-	    
-	}
-	else	
-	{	
-		free(MemBuf);
-		printf("/mnt/rootfs_nor.img open Error\n");
-		return 0;
-	}
-	
-}
+/*===========================================================================
+                    Combined Charging System (CCS): SECC
+                                 FWMaker.c
+
+                        initiated by Vern, Joseph
+                           (since 2019/07/19)
+=============================================================================*/
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <string.h>
+#include <net/if.h> /*struct ifreq*/
+#include <linux/sockios.h> /*SIOCGIFINDEX*/
+#include <linux/socket.h>
+#include <errno.h>
+#include <sys/time.h>
+#include <sys/timeb.h>
+#include <fcntl.h>
+#include <sys/mman.h>
+#include "FWMaker.h"
+
+//./FWMaker 172.16.24.126
+int main(int argc, char *argv[])
+{
+    unsigned char *MemBuf, *MemBuf2, buf[64];
+    int fd, rd = 0, wrd = 0, tmp = 0, rd2 = 0;
+    unsigned int CheckSum = 0;
+
+
+
+    memset(buf, 0, 64);
+    sprintf(buf, "tftp -gr uImage -l /mnt/uImage %s", argv[1]);
+    system(buf);
+    memset(buf, 0, 64);
+    sprintf(buf, "tftp -gr rootfs_nor.img -l /mnt/rootfs_nor.img %s", argv[1]);
+    system(buf);
+
+    if((MemBuf = malloc(0x100000D)) == NULL)
+    {
+        printf("Allocate MemBuf memory error\n");
+        return 0;
+    }
+
+    memset(MemBuf, 0xff, 0x100000D);
+    fd = open("/mnt/uImage", O_RDWR);
+
+    if(fd > 0)
+    {
+        if((rd = read(fd, MemBuf, 0x100000D)) <= 0)
+        {
+            printf("/mnt/uImage read Error\n");
+            free(MemBuf);
+            close(fd);
+            return 0;
+        }
+
+        close(fd);
+
+        for(tmp = 0; tmp < rd; tmp++)
+        {
+            CheckSum += MemBuf[tmp];
+        }
+
+        strncpy(MemBuf + rd, "DELTADCOK", 9);
+        *(MemBuf + rd + 9) = CheckSum >> 24;
+        *(MemBuf + rd + 10) = CheckSum >> 16;
+        *(MemBuf + rd + 11) = CheckSum >> 8;
+        *(MemBuf + rd + 12) = CheckSum;
+        // memcpy(MemBuf+rd+9,&CheckSum,4);
+        fd = open("/mnt/DcoKImage", O_CREAT | O_RDWR);
+        wrd = write(fd, MemBuf, rd + 13);
+
+        if(wrd != (rd + 13))
+        {
+            printf("write error wrd=0x%x, rd=0x%x\n", wrd, rd + 13);
+        }
+        else
+        {
+            printf("/mnt/DcoKImage OK\n");
+        }
+
+    }
+    else
+    {
+        free(MemBuf);
+        printf("/mnt/uImage open Error\n");
+        return 0;
+    }
+
+
+    memset(MemBuf, 0xff, 0x100000D);
+    CheckSum = rd = 0;
+    fd = open("/mnt/rootfs_nor.img", O_RDWR);
+
+    if(fd > 0)
+    {
+        if((rd = read(fd, MemBuf, 0x100000D)) <= 0)
+        {
+            printf("/mnt/rootfs_nor.img read Error\n");
+            free(MemBuf);
+            close(fd);
+            return 0;
+        }
+
+        close(fd);
+
+        for(tmp = 0; tmp < rd; tmp++)
+        {
+            CheckSum += MemBuf[tmp];
+        }
+
+        strncpy(MemBuf + rd, "DELTADCOF", 9);
+        *(MemBuf + rd + 9) = CheckSum >> 24;
+        *(MemBuf + rd + 10) = CheckSum >> 16;
+        *(MemBuf + rd + 11) = CheckSum >> 8;
+        *(MemBuf + rd + 12) = CheckSum;
+        //memcpy(MemBuf+rd+9,&CheckSum,4);
+        fd = open("/mnt/DcoFImage", O_CREAT | O_RDWR);
+        wrd = write(fd, MemBuf, rd + 13);
+
+        if(wrd != (rd + 13))
+        {
+            printf("write error wrd=0x%x, rd=0x%x\n", wrd, rd + 13);
+        }
+        else
+        {
+            printf("/mnt/DcoFImage OK\n");
+        }
+
+    }
+    else
+    {
+        free(MemBuf);
+        printf("/mnt/rootfs_nor.img open Error\n");
+        return 0;
+    }
+
+}

+ 7 - 0
EVSE/Projects/CCS/Apps/FWMaker.h

@@ -0,0 +1,7 @@
+/*===========================================================================
+                    Combined Charging System (CCS): SECC
+                                 FWMaker.h
+
+                        initiated by Vern, Joseph
+                           (since 2019/07/19)
+=============================================================================*/

二进制
EVSE/Projects/CCS/Apps/FactoryConfig


+ 195 - 173
EVSE/Projects/CCS/Apps/FactoryConfig.c

@@ -1,173 +1,195 @@
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <linux/termios.h>
-#include <stdio.h>
-#include <string.h>
-#include <time.h>
-#include <stdlib.h>
-#include <sys/ipc.h>
-#include <sys/shm.h>
-#include <sys/mman.h>
-#include <linux/sockios.h> 
-#include <linux/socket.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <sys/time.h> 
-#include <sys/timeb.h> 
-#include <math.h>//for pow
-#include <unistd.h>
-#include "define.h"
-
-
-#ifdef SystemLogMessage
-int StoreLogMsg(unsigned char *DataString)
-{
-	unsigned char Buf[256];
-	time_t CurrentTime;
-	struct tm *tm;
-			
-	memset(Buf,0,sizeof(Buf));
-	CurrentTime = time(NULL);
-	tm=localtime(&CurrentTime);
-	sprintf(Buf,"echo \"%04d.%02d.%02d %02d:%02d:%02d - %s\" >> /Storage/SystemLog/[%04d.%02d]SystemLog",
-			tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,
-			DataString,
-			tm->tm_year+1900,tm->tm_mon+1);
-	system(Buf);
-	#ifdef Debug
-	printf("%s \n",DataString);
-	#endif
-}		
-#endif
-
-
-/**************************************************************************************/
-/************This task will create Factory default confgiuration file *****************/
- /***********and store it into mtdblock 10,11,12                               ****************/
-/**************************************************************************************/
-
-int main(int argc,char *argv[])
-{
-	struct SysConfigData 	SysConfig;
-	unsigned int i,Chk;
-	unsigned char *ptr; 
-	int fd,wrd;
-	
-	ptr=malloc(sizeof(struct SysConfigData));
-	if(ptr==NULL)
-	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[FactoryConfig]main: malloc for SysConfigData NG");
-		#endif			
-		return 0;
-	}	
-	memset(ptr,0,sizeof(struct SysConfigData));
-	memset(&SysConfig,0,sizeof(struct SysConfigData));
-	
-	//Set default configuration
-	strcpy(SysConfig.Eth0Interface.EthIpAddress,"192.168.0.10");
-	strcpy(SysConfig.Eth0Interface.EthSubmaskAddress,"255.255.255.0");
-	strcpy(SysConfig.Eth0Interface.EthGatewayAddress,"192.168.0.254");
-	strcpy(SysConfig.Eth1Interface.EthIpAddress,"192.168.1.10");
-	strcpy(SysConfig.Eth1Interface.EthSubmaskAddress,"255.255.255.0");
-	strcpy(SysConfig.Eth1Interface.EthGatewayAddress,"192.168.1.254");
-	SysConfig.BackendConnTimeout=300; //300 seconds
-	
-	//copy default configuration to pointer
-	memcpy(ptr,&SysConfig,sizeof(struct SysConfigData));
-	
-	//calculate CRC
-	Chk=0;
-	for(i=0;i<(sizeof(struct SysConfigData)-4);i++)
-	{
-		Chk+=*(ptr+i);
-	}
-	SysConfig.Checksum=Chk;
-	
-	fd = open("/mnt/FactoryDefaultConfig.bin", O_RDWR|O_CREAT);
-	if (fd < 0) 
-	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[FactoryConfig]main: open /mnt/FactoryDefaultConfig.bin NG");
-		#endif	
-		free(ptr);
-		return 0;
-	}   
-
-	wrd=write(fd, &SysConfig, sizeof(struct SysConfigData));
-	close(fd);
-	if(wrd!=(sizeof(struct SysConfigData)))
-	{	
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[FactoryConfig]main: write /mnt/FactoryDefaultConfig.bin NG");
-		#endif	
-		free(ptr);
-		return 0;
-	}
-	
-	fd = open("/dev/mtdblock12", O_RDWR);
-	if (fd < 0) 
-	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[FactoryConfig]main: open /dev/mtdblock12 NG");
-		#endif	
-		free(ptr);
-		return 0;
-   	 }
-    	wrd=write(fd, &SysConfig, sizeof(struct SysConfigData));   
-    	close(fd);
-    	if(wrd!=(sizeof(struct SysConfigData)))
-	{	
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[FactoryConfig]main: write /dev/mtdblock12 NG");
-		#endif	
-		free(ptr);
-		return 0;
-	}	
-	
-	fd = open("/dev/mtdblock11", O_RDWR);
-	if (fd < 0) 
-	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[FactoryConfig]main: open /dev/mtdblock11 NG");
-		#endif	
-		free(ptr);
-		return 0;
-   	 }
-    	wrd=write(fd, &SysConfig, sizeof(struct SysConfigData));   
-    	close(fd);
-    	if(wrd!=(sizeof(struct SysConfigData)))
-	{	
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[FactoryConfig]main: write /dev/mtdblock11 NG");
-		#endif	
-		free(ptr);
-		return 0;
-	}	
-	
-	fd = open("/dev/mtdblock10", O_RDWR);
-	if (fd < 0) 
-	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[FactoryConfig]main: open /dev/mtdblock10 NG");
-		#endif	
-		free(ptr);
-		return 0;
-   	 }
-    	wrd=write(fd, &SysConfig, sizeof(struct SysConfigData));   
-    	close(fd);
-    	if(wrd!=(sizeof(struct SysConfigData)))
-	{	
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[FactoryConfig]main: write /dev/mtdblock10 NG");
-		#endif	
-		free(ptr);
-		return 0;
-	}	
-	
-	free(ptr);
-	#ifdef SystemLogMessage	
-	StoreLogMsg("[FactoryConfig]main: FactoryConfig OK");
-	#endif	
-}
+/*===========================================================================
+                    Combined Charging System (CCS): SECC
+                            FactoryConfig.c
+
+                        initiated by Vern, Joseph
+                           (since 2019/07/19)
+=============================================================================*/
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <linux/termios.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+#include <stdlib.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#include <sys/mman.h>
+#include <linux/sockios.h>
+#include <linux/socket.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <sys/time.h>
+#include <sys/timeb.h>
+#include <math.h>//for pow
+#include <unistd.h>
+#include "define.h"
+#include "FactoryConfig.h"
+
+#ifdef SystemLogMessage
+    int StoreLogMsg(unsigned char *DataString)
+    {
+        unsigned char Buf[256];
+        time_t CurrentTime;
+        struct tm *tm;
+
+        memset(Buf, 0, sizeof(Buf));
+        CurrentTime = time(NULL);
+        tm = localtime(&CurrentTime);
+        sprintf(Buf, "echo \"%04d.%02d.%02d %02d:%02d:%02d - %s\" >> /Storage/SystemLog/[%04d.%02d]SystemLog",
+                tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec,
+                DataString,
+                tm->tm_year + 1900, tm->tm_mon + 1);
+        system(Buf);
+        #ifdef Debug
+            printf("%s \n", DataString);
+        #endif
+    }
+#endif
+
+
+/**************************************************************************************/
+/************This task will create Factory default confgiuration file *****************/
+/***********and store it into mtdblock 10,11,12                               ****************/
+/**************************************************************************************/
+
+int main(int argc, char *argv[])
+{
+    struct SysConfigData SysConfig;
+    unsigned int i, Chk;
+    unsigned char *ptr;
+    int fd, wrd;
+
+    ptr = malloc(sizeof(struct SysConfigData));
+
+    if(ptr == NULL)
+    {
+        #ifdef SystemLogMessage
+            StoreLogMsg("[FactoryConfig]main: malloc for SysConfigData NG");
+        #endif
+        return 0;
+    }
+
+    memset(ptr, 0, sizeof(struct SysConfigData));
+    memset(&SysConfig, 0, sizeof(struct SysConfigData));
+
+    //Set default configuration
+    strcpy(SysConfig.Eth0Interface.EthIpAddress, "192.168.0.10");
+    strcpy(SysConfig.Eth0Interface.EthSubmaskAddress, "255.255.255.0");
+    strcpy(SysConfig.Eth0Interface.EthGatewayAddress, "192.168.0.254");
+    strcpy(SysConfig.Eth1Interface.EthIpAddress, "192.168.1.10");
+    strcpy(SysConfig.Eth1Interface.EthSubmaskAddress, "255.255.255.0");
+    strcpy(SysConfig.Eth1Interface.EthGatewayAddress, "192.168.1.254");
+    SysConfig.BackendConnTimeout = 300; //300 seconds
+
+    //copy default configuration to pointer
+    memcpy(ptr, &SysConfig, sizeof(struct SysConfigData));
+
+    //calculate CRC
+    Chk = 0;
+
+    for(i = 0; i < (sizeof(struct SysConfigData) - 4); i++)
+    {
+        Chk += *(ptr + i);
+    }
+
+    SysConfig.Checksum = Chk;
+
+    fd = open("/mnt/FactoryDefaultConfig.bin", O_RDWR | O_CREAT);
+
+    if(fd < 0)
+    {
+        #ifdef SystemLogMessage
+            StoreLogMsg("[FactoryConfig]main: open /mnt/FactoryDefaultConfig.bin NG");
+        #endif
+        free(ptr);
+        return 0;
+    }
+
+    wrd = write(fd, &SysConfig, sizeof(struct SysConfigData));
+    close(fd);
+
+    if(wrd != (sizeof(struct SysConfigData)))
+    {
+        #ifdef SystemLogMessage
+            StoreLogMsg("[FactoryConfig]main: write /mnt/FactoryDefaultConfig.bin NG");
+        #endif
+        free(ptr);
+        return 0;
+    }
+
+    fd = open("/dev/mtdblock12", O_RDWR);
+
+    if(fd < 0)
+    {
+        #ifdef SystemLogMessage
+            StoreLogMsg("[FactoryConfig]main: open /dev/mtdblock12 NG");
+        #endif
+        free(ptr);
+        return 0;
+    }
+
+    wrd = write(fd, &SysConfig, sizeof(struct SysConfigData));
+    close(fd);
+
+    if(wrd != (sizeof(struct SysConfigData)))
+    {
+        #ifdef SystemLogMessage
+            StoreLogMsg("[FactoryConfig]main: write /dev/mtdblock12 NG");
+        #endif
+        free(ptr);
+        return 0;
+    }
+
+    fd = open("/dev/mtdblock11", O_RDWR);
+
+    if(fd < 0)
+    {
+        #ifdef SystemLogMessage
+            StoreLogMsg("[FactoryConfig]main: open /dev/mtdblock11 NG");
+        #endif
+        free(ptr);
+        return 0;
+    }
+
+    wrd = write(fd, &SysConfig, sizeof(struct SysConfigData));
+    close(fd);
+
+    if(wrd != (sizeof(struct SysConfigData)))
+    {
+        #ifdef SystemLogMessage
+            StoreLogMsg("[FactoryConfig]main: write /dev/mtdblock11 NG");
+        #endif
+        free(ptr);
+        return 0;
+    }
+
+    fd = open("/dev/mtdblock10", O_RDWR);
+
+    if(fd < 0)
+    {
+        #ifdef SystemLogMessage
+            StoreLogMsg("[FactoryConfig]main: open /dev/mtdblock10 NG");
+        #endif
+        free(ptr);
+        return 0;
+    }
+
+    wrd = write(fd, &SysConfig, sizeof(struct SysConfigData));
+    close(fd);
+
+    if(wrd != (sizeof(struct SysConfigData)))
+    {
+        #ifdef SystemLogMessage
+            StoreLogMsg("[FactoryConfig]main: write /dev/mtdblock10 NG");
+        #endif
+        free(ptr);
+        return 0;
+    }
+
+    free(ptr);
+    #ifdef SystemLogMessage
+        StoreLogMsg("[FactoryConfig]main: FactoryConfig OK");
+    #endif
+}

+ 7 - 0
EVSE/Projects/CCS/Apps/FactoryConfig.h

@@ -0,0 +1,7 @@
+/*===========================================================================
+                    Combined Charging System (CCS): SECC
+                            FactoryConfig.h
+
+                        initiated by Vern, Joseph
+                           (since 2019/07/19)
+=============================================================================*/

+ 89 - 41
EVSE/Projects/CCS/Apps/Makefile

@@ -1,41 +1,89 @@
--include ../../../../Rules.make
-export PATH=/bin:/sbin:/usr/bin:$(SDK_PATH_TARGET)/usr/bin:$PATH
-
-all: CopyFile apps
-apps: MainTask CsuCommTask FactoryConfigTask EvCommTask UpdateRootfsTask FWMakerTask EventLoggingTask
-
-MainTask:
-	rm -f main; $(CC) main.c -lm -o main
-	cp -f main ../Images/root
-	
-CsuCommTask:
-	rm -f CsuComm; $(CC) CsuComm.c -lm -o CsuComm
-	cp -f CsuComm ../Images/root	
-	
-FactoryConfigTask:
-	rm -f FactoryConfig; $(CC) FactoryConfig.c -o FactoryConfig	
-	cp -f FactoryConfig ../Images/root		
-	
-EvCommTask:
-	rm -f EvComm; $(CC) EvComm.c NidNmk.c -lm -o EvComm	
-	cp -f EvComm ../Images/root
-	
-UpdateRootfsTask:
-	rm -f UpdateRootfs; $(CC) UpdateRootfs.c -o UpdateRootfs		 
-	cp -f UpdateRootfs ../Images/root				
-	
-EventLoggingTask:
-	rm -f EventLogging; $(CC) EventLogging.c -o EventLogging	
-	cp -f EventLogging ../Images/root	
-		
-FWMakerTask:
-	rm -f FWMaker; $(CC) FWMaker.c -o FWMaker	
-	cp -f FWMaker ../Images/root	
-	
-CopyFile: 
-	rm -rfv ../Images/root
-	mkdir -p ../Images/root
-
-
-
-	
+#===========================================================================
+#                    Combined Charging System (CCS): SECC
+#                                 Makefile
+
+#                        initiated by Vern, Joseph
+#                           (since 2019/07/19)
+#=============================================================================
+
+
+-include ../Rules.make
+export PATH=/bin:/sbin:/usr/bin:$(SDK_PATH_TARGET)/usr/bin:$PATH
+
+EXI_ENGINE =	exi_engine/api/api.c \
+				exi_engine/appHandshake/appHandEXIDatatypes.c \
+				exi_engine/appHandshake/appHandEXIDatatypesDecoder.c \
+				exi_engine/appHandshake/appHandEXIDatatypesEncoder.c \
+				exi_engine/codec/BitInputStream.c \
+				exi_engine/codec/BitOutputStream.c \
+				exi_engine/codec/ByteStream.c \
+				exi_engine/codec/DecoderChannel.c \
+				exi_engine/codec/EncoderChannel.c \
+				exi_engine/codec/EXIHeaderDecoder.c \
+				exi_engine/codec/EXIHeaderEncoder.c \
+				exi_engine/codec/MethodsBag.c \
+				exi_engine/din/dinEXIDatatypes.c \
+				exi_engine/din/dinEXIDatatypesDecoder.c \
+				exi_engine/din/dinEXIDatatypesEncoder.c \
+				exi_engine/iso1/iso1EXIDatatypes.c \
+				exi_engine/iso1/iso1EXIDatatypesDecoder.c \
+				exi_engine/iso1/iso1EXIDatatypesEncoder.c \
+				exi_engine/iso2/iso2EXIDatatypes.c \
+				exi_engine/iso2/iso2EXIDatatypesDecoder.c \
+				exi_engine/iso2/iso2EXIDatatypesEncoder.c \
+				exi_engine/transport/v2gtp.c \
+				exi_engine/xmldsig/xmldsigEXIDatatypes.c \
+				exi_engine/xmldsig/xmldsigEXIDatatypesDecoder.c \
+				exi_engine/xmldsig/xmldsigEXIDatatypesEncoder.c
+
+
+all: CopyFile apps
+apps: MainTask EvCommTask
+#apps: MainTask CsuCommTask FactoryConfigTask EvCommTask UpdateRootfsTask FWMakerTask EventLoggingTask
+
+MainTask:
+	rm -f main
+	$(CC) main.c -lm -o main
+	cp -f main ../Images/root
+	rm -f main
+
+CsuCommTask:
+	rm -f CsuComm
+	$(CC) CsuComm.c -lm -o CsuComm
+	cp -f CsuComm ../Images/root
+	rm -f CsuComm
+
+FactoryConfigTask:
+	rm -f FactoryConfig
+	$(CC) FactoryConfig.c -o FactoryConfig
+	cp -f FactoryConfig ../Images/root
+	rm -f FactoryConfig
+
+EvCommTask:
+	rm -f EvComm
+#	$(CC) EvComm.c NidNmk.c ${EXI_ENGINE} -lm -o EvComm
+	$(CC) EvComm.c NidNmk.c -lm -o EvComm
+	cp -f EvComm ../Images/root
+	rm -f EvComm
+
+UpdateRootfsTask:
+	rm -f UpdateRootfs
+	$(CC) UpdateRootfs.c -o UpdateRootfs
+	cp -f UpdateRootfs ../Images/root
+	rm -f UpdateRootfs
+
+EventLoggingTask:
+	rm -f EventLogging
+	$(CC) EventLogging.c -o EventLogging
+	cp -f EventLogging ../Images/root
+	rm -f EventLogging
+
+FWMakerTask:
+	rm -f FWMaker
+	$(CC) FWMaker.c -o FWMaker
+	cp -f FWMaker ../Images/root
+	rm -f FWMaker
+
+CopyFile:
+	rm -rfv ../Images/root
+	mkdir -p ../Images/root

+ 292 - 264
EVSE/Projects/CCS/Apps/NidNmk.c

@@ -1,264 +1,292 @@
-#include "NidNmk.h"
-
-
-void HPAVKeyNMK (uint8_t NMK [], const char * string) 
-
-{
-	struct sha256 sha256;
-	uint8_t digest [SHA256_DIGEST_LENGTH];
-	const uint8_t secret [] = 
-	{
-		0x08,
-		0x85,
-		0x6D,
-		0xAF,
-		0x7C,
-		0xF5,
-		0x81,
-		0x86
-	};
-	unsigned rehash = 999;
-	SHA256Reset (&sha256);
-	SHA256Write (&sha256, string, strlen (string));
-	SHA256Write (&sha256, secret, sizeof (secret));
-	SHA256Fetch (&sha256, digest);
-	while (rehash--) 
-	{
-		SHA256Reset (&sha256);
-		SHA256Write (&sha256, digest, sizeof (digest));
-		SHA256Fetch (&sha256, digest);
-	}
-	memcpy (NMK, digest, HPAVKEY_NMK_LEN);
-	return;
-}
-
-
-void HPAVKeyNID (uint8_t NID[], const uint8_t NMK[], uint8_t level) 
-
-{	
-	struct sha256 sha256;
-	uint8_t digest [SHA256_DIGEST_LENGTH];
-	unsigned int rehash = 4;
-	SHA256Reset (&sha256);
-	SHA256Write (&sha256, NMK, HPAVKEY_NMK_LEN);
-	SHA256Fetch (&sha256, digest);
-	while (rehash--) 
-	{
-		SHA256Reset (&sha256);
-		SHA256Write (&sha256, digest, sizeof (digest));
-		SHA256Fetch (&sha256, digest);
-	}
-#if 1
-
-	level <<= 4;
-	digest [HPAVKEY_NID_LEN - 1] >>= 4;
-	digest [HPAVKEY_NID_LEN - 1] |= level;
-
-#else
-
-	digest [HPAVKEY_NID_LEN - 1] &= ~0xC0;
-	digest [HPAVKEY_NID_LEN - 1] |= level << 6;
-
-#endif
-
-	memcpy (NID, digest, HPAVKEY_NID_LEN);
-
-	return;
-}
-
-void SHA256Reset (struct sha256 *sha256) 
-
-{
-	memset (sha256, 0, sizeof (struct sha256));
-	sha256->state [0] = 0x6A09E667;
-	sha256->state [1] = 0xBB67AE85;
-	sha256->state [2] = 0x3C6EF372;
-	sha256->state [3] = 0xA54FF53A;
-	sha256->state [4] = 0x510E527F;
-	sha256->state [5] = 0x9B05688C;
-	sha256->state [6] = 0x1F83D9AB;
-	sha256->state [7] = 0x5BE0CD19;
-	sha256->extra [0] = 0x80;
-	return;
-}
-void SHA256Block (struct sha256 *sha256, void const *memory) 
-
-{
-	static const uint32_t K [sizeof (sha256->block)] = 
-	{
-		0x428A2F98,
-		0x71374491,
-		0xB5C0FBCF,
-		0xE9B5DBA5,
-		0x3956C25B,
-		0x59F111F1,
-		0x923F82A4,
-		0xAB1C5ED5,
-		0xD807AA98,
-		0x12835B01,
-		0x243185BE,
-		0x550C7DC3,
-		0x72BE5D74,
-		0x80DEB1FE,
-		0x9BDC06A7,
-		0xC19BF174,
-		0xE49B69C1,
-		0xEFBE4786,
-		0x0FC19DC6,
-		0x240CA1CC,
-		0x2DE92C6F,
-		0x4A7484AA,
-		0x5CB0A9DC,
-		0x76F988DA,
-		0x983E5152,
-		0xA831C66D,
-		0xB00327C8,
-		0xBF597FC7,
-		0xC6E00BF3,
-		0xD5A79147,
-		0x06CA6351,
-		0x14292967,
-		0x27B70A85,
-		0x2E1B2138,
-		0x4D2C6DFC,
-		0x53380D13,
-		0x650A7354,
-		0x766A0ABB,
-		0x81C2C92E,
-		0x92722C85,
-		0xA2BFE8A1,
-		0xA81A664B,
-		0xC24B8B70,
-		0xC76C51A3,
-		0xD192E819,
-		0xD6990624,
-		0xF40E3585,
-		0x106AA070,
-		0x19A4C116,
-		0x1E376C08,
-		0x2748774C,
-		0x34B0BCB5,
-		0x391C0CB3,
-		0x4ED8AA4A,
-		0x5B9CCA4F,
-		0x682E6FF3,
-		0x748F82EE,
-		0x78A5636F,
-		0x84C87814,
-		0x8CC70208,
-		0x90BEFFFA,
-		0xA4506CEB,
-		0xBEF9A3F7,
-		0xC67178F2
-	};
-	unsigned int pass;
-	unsigned int word;
-	uint32_t H [sizeof (sha256->state)/sizeof (uint32_t)];
-	uint32_t W [sizeof (sha256->block)];
-	uint8_t * buffer = (uint8_t *)(memory);
-	for (word = 0; word < 16; word++) 
-	{
-		W [word] = 0;
-		W [word] |= (uint32_t)(*buffer++) << 24;
-		W [word] |= (uint32_t)(*buffer++) << 16;
-		W [word] |= (uint32_t)(*buffer++) << 8;
-		W [word] |= (uint32_t)(*buffer++) << 0;;
-	}
-	for (word = word; word < sizeof (sha256->block); word++) 
-	{
-		uint32_t s0 = ROTR (W [word-15], 7) ^ ROTR (W [word-15], 18) ^ SHR (W [word-15], 3);
-		uint32_t s1 = ROTR (W [word- 2], 17) ^ ROTR (W [word- 2], 19) ^ SHR (W [word- 2], 10);
-		W [word] = W [word - 16] + s0 + W [word - 7] + s1;
-	}
-	for (word = 0; word < (sizeof (sha256->state) / sizeof (uint32_t)); word++) 
-	{
-		H [word] = sha256->state [word];
-	}
-	for (pass = 0; pass < sizeof (sha256->block); pass++) 
-	{
-		uint32_t s2 = ROTR (H [0], 2) ^ ROTR (H [0], 13) ^ ROTR (H [0], 22);
-		uint32_t maj = (H [0] & H [1]) ^ (H [0] & H [2]) ^ (H [1] & H [2]);
-		uint32_t t2 = s2 + maj;
-		uint32_t s3 = ROTR (H [4], 6) ^ ROTR (H [4], 11) ^ ROTR (H [4], 25);
-		uint32_t ch = (H [4] & H [5]) ^ ((~ H [4]) & H [6]);
-		uint32_t t1 = H [7] + s3 + ch + K [pass] + W [pass];
-		for (word = (sizeof (sha256->state) / sizeof (uint32_t)) - 1; word > 0; word--) 
-		{
-			H [word] = H [word-1];
-		}
-		H [0] = t1 + t2;
-		H [4] += t1;
-	}
-	for (word = 0; word < (sizeof (sha256->state) / sizeof (uint32_t)); word++) 
-	{
-		sha256->state [word] += H [word];
-	}
-	return;
-}
-
-void SHA256Write (struct sha256 *sha256, void const *memory, uint16_t extent) 
-
-{
-	if (extent) 
-	{
-		uint8_t * buffer = (uint8_t *)(memory);
-		unsigned int left = sha256->count [0] & 0x3F;
-		unsigned int fill = sizeof (sha256->block) - left;
-		sha256->count [0] += (uint32_t)(extent);
-		sha256->count [0] &= 0xFFFFFFFF;
-		if (sha256->count [0] < extent) 
-		{
-			sha256->count [1]++;
-		}
-		if ((left) && (extent >= fill)) 
-		{
-			memcpy (sha256->block + left, buffer, fill);
-			SHA256Block (sha256, sha256->block);
-			extent -= fill;
-			buffer += fill;
-			left = 0;
-		}
-		while (extent >= sizeof (sha256->block)) 
-		{
-			SHA256Block (sha256, buffer);
-			extent -= sizeof (sha256->block);
-			buffer += sizeof (sha256->block);
-		}
-		if (extent) 
-		{
-			memcpy (sha256->block + left, buffer, extent);
-		}
-	}
-	return;
-}
-void SHAEncode(uint8_t memory[], uint32_t number) 
-
-{
-	*memory++ = (uint8_t)(number >> 24);
-	*memory++ = (uint8_t)(number >> 16);
-	*memory++ = (uint8_t)(number >> 8);
-	*memory++ = (uint8_t)(number >> 0);
-	return;
-}
-
-void SHA256Fetch (struct sha256 *sha256, uint8_t digest[]) 
-
-{
-	unsigned int word;
-	uint8_t bits [8];
-	uint32_t upper = (sha256->count [0] >> 29) | (sha256->count [1] << 3);
-	uint32_t lower = (sha256->count [0] << 3);
-	uint32_t final = (sha256->count [0] & 0x3F);
-	uint32_t extra = (final < 56)? (56 - final): (120 - final);
-	SHAEncode(&bits[0], upper);
-	SHAEncode(&bits[4], lower);
-	SHA256Write (sha256, sha256->extra, extra);
-	SHA256Write (sha256, bits, sizeof (bits));
-	for (word = 0; word < sizeof (sha256->state) / sizeof (uint32_t); word++) 
-	{
-		SHAEncode (digest, sha256->state [word]);
-		digest += sizeof (uint32_t);
-	}
-	memset (sha256, 0, sizeof (struct sha256));
-	return;
-}
+/*===========================================================================
+                    Combined Charging System (CCS): SECC
+                                NidNmk.c
+
+                        initiated by Vern, Joseph
+                           (since 2019/07/19)
+=============================================================================*/
+#include "NidNmk.h"
+
+void HPAVKeyNMK(uint8_t NMK [], const char *string)
+
+{
+    struct sha256 sha256;
+    uint8_t digest [SHA256_DIGEST_LENGTH];
+    const uint8_t secret [] =
+    {
+        0x08,
+        0x85,
+        0x6D,
+        0xAF,
+        0x7C,
+        0xF5,
+        0x81,
+        0x86
+    };
+    unsigned rehash = 999;
+
+    SHA256Reset(&sha256);
+    SHA256Write(&sha256, string, strlen(string));
+    SHA256Write(&sha256, secret, sizeof(secret));
+    SHA256Fetch(&sha256, digest);
+
+    while(rehash--)
+    {
+        SHA256Reset(&sha256);
+        SHA256Write(&sha256, digest, sizeof(digest));
+        SHA256Fetch(&sha256, digest);
+    }
+
+    memcpy(NMK, digest, HPAVKEY_NMK_LEN);
+    return;
+}
+
+
+void HPAVKeyNID(uint8_t NID[], const uint8_t NMK[], uint8_t level)
+
+{
+    struct sha256 sha256;
+    uint8_t digest [SHA256_DIGEST_LENGTH];
+    unsigned int rehash = 4;
+
+    SHA256Reset(&sha256);
+    SHA256Write(&sha256, NMK, HPAVKEY_NMK_LEN);
+    SHA256Fetch(&sha256, digest);
+
+    while(rehash--)
+    {
+        SHA256Reset(&sha256);
+        SHA256Write(&sha256, digest, sizeof(digest));
+        SHA256Fetch(&sha256, digest);
+    }
+
+    #if 1
+
+        level <<= 4;
+        digest [HPAVKEY_NID_LEN - 1] >>= 4;
+        digest [HPAVKEY_NID_LEN - 1] |= level;
+
+    #else
+
+        digest [HPAVKEY_NID_LEN - 1] &= ~0xC0;
+        digest [HPAVKEY_NID_LEN - 1] |= level << 6;
+
+    #endif
+
+    memcpy(NID, digest, HPAVKEY_NID_LEN);
+
+    return;
+}
+
+void SHA256Reset(struct sha256 *sha256)
+
+{
+    memset(sha256, 0, sizeof(struct sha256));
+    sha256->state [0] = 0x6A09E667;
+    sha256->state [1] = 0xBB67AE85;
+    sha256->state [2] = 0x3C6EF372;
+    sha256->state [3] = 0xA54FF53A;
+    sha256->state [4] = 0x510E527F;
+    sha256->state [5] = 0x9B05688C;
+    sha256->state [6] = 0x1F83D9AB;
+    sha256->state [7] = 0x5BE0CD19;
+    sha256->extra [0] = 0x80;
+    return;
+}
+void SHA256Block(struct sha256 *sha256, void const *memory)
+
+{
+    static const uint32_t K [sizeof(sha256->block)] =
+    {
+        0x428A2F98,
+        0x71374491,
+        0xB5C0FBCF,
+        0xE9B5DBA5,
+        0x3956C25B,
+        0x59F111F1,
+        0x923F82A4,
+        0xAB1C5ED5,
+        0xD807AA98,
+        0x12835B01,
+        0x243185BE,
+        0x550C7DC3,
+        0x72BE5D74,
+        0x80DEB1FE,
+        0x9BDC06A7,
+        0xC19BF174,
+        0xE49B69C1,
+        0xEFBE4786,
+        0x0FC19DC6,
+        0x240CA1CC,
+        0x2DE92C6F,
+        0x4A7484AA,
+        0x5CB0A9DC,
+        0x76F988DA,
+        0x983E5152,
+        0xA831C66D,
+        0xB00327C8,
+        0xBF597FC7,
+        0xC6E00BF3,
+        0xD5A79147,
+        0x06CA6351,
+        0x14292967,
+        0x27B70A85,
+        0x2E1B2138,
+        0x4D2C6DFC,
+        0x53380D13,
+        0x650A7354,
+        0x766A0ABB,
+        0x81C2C92E,
+        0x92722C85,
+        0xA2BFE8A1,
+        0xA81A664B,
+        0xC24B8B70,
+        0xC76C51A3,
+        0xD192E819,
+        0xD6990624,
+        0xF40E3585,
+        0x106AA070,
+        0x19A4C116,
+        0x1E376C08,
+        0x2748774C,
+        0x34B0BCB5,
+        0x391C0CB3,
+        0x4ED8AA4A,
+        0x5B9CCA4F,
+        0x682E6FF3,
+        0x748F82EE,
+        0x78A5636F,
+        0x84C87814,
+        0x8CC70208,
+        0x90BEFFFA,
+        0xA4506CEB,
+        0xBEF9A3F7,
+        0xC67178F2
+    };
+    unsigned int pass;
+    unsigned int word;
+    uint32_t H [sizeof(sha256->state) / sizeof(uint32_t)];
+    uint32_t W [sizeof(sha256->block)];
+    uint8_t *buffer = (uint8_t *)(memory);
+
+    for(word = 0; word < 16; word++)
+    {
+        W [word] = 0;
+        W [word] |= (uint32_t)(*buffer++) << 24;
+        W [word] |= (uint32_t)(*buffer++) << 16;
+        W [word] |= (uint32_t)(*buffer++) << 8;
+        W [word] |= (uint32_t)(*buffer++) << 0;;
+    }
+
+    for(word = word; word < sizeof(sha256->block); word++)
+    {
+        uint32_t s0 = ROTR(W [word - 15], 7) ^ ROTR(W [word - 15], 18) ^ SHR(W [word - 15], 3);
+        uint32_t s1 = ROTR(W [word - 2], 17) ^ ROTR(W [word - 2], 19) ^ SHR(W [word - 2], 10);
+        W [word] = W [word - 16] + s0 + W [word - 7] + s1;
+    }
+
+    for(word = 0; word < (sizeof(sha256->state) / sizeof(uint32_t)); word++)
+    {
+        H [word] = sha256->state [word];
+    }
+
+    for(pass = 0; pass < sizeof(sha256->block); pass++)
+    {
+        uint32_t s2 = ROTR(H [0], 2) ^ ROTR(H [0], 13) ^ ROTR(H [0], 22);
+        uint32_t maj = (H [0] & H [1]) ^ (H [0] & H [2]) ^ (H [1] & H [2]);
+        uint32_t t2 = s2 + maj;
+        uint32_t s3 = ROTR(H [4], 6) ^ ROTR(H [4], 11) ^ ROTR(H [4], 25);
+        uint32_t ch = (H [4] & H [5]) ^ ((~H [4]) & H [6]);
+        uint32_t t1 = H [7] + s3 + ch + K [pass] + W [pass];
+
+        for(word = (sizeof(sha256->state) / sizeof(uint32_t)) - 1; word > 0; word--)
+        {
+            H [word] = H [word - 1];
+        }
+
+        H [0] = t1 + t2;
+        H [4] += t1;
+    }
+
+    for(word = 0; word < (sizeof(sha256->state) / sizeof(uint32_t)); word++)
+    {
+        sha256->state [word] += H [word];
+    }
+
+    return;
+}
+
+void SHA256Write(struct sha256 *sha256, void const *memory, uint16_t extent)
+
+{
+    if(extent)
+    {
+        uint8_t *buffer = (uint8_t *)(memory);
+        unsigned int left = sha256->count [0] & 0x3F;
+        unsigned int fill = sizeof(sha256->block) - left;
+        sha256->count [0] += (uint32_t)(extent);
+        sha256->count [0] &= 0xFFFFFFFF;
+
+        if(sha256->count [0] < extent)
+        {
+            sha256->count [1]++;
+        }
+
+        if((left) && (extent >= fill))
+        {
+            memcpy(sha256->block + left, buffer, fill);
+            SHA256Block(sha256, sha256->block);
+            extent -= fill;
+            buffer += fill;
+            left = 0;
+        }
+
+        while(extent >= sizeof(sha256->block))
+        {
+            SHA256Block(sha256, buffer);
+            extent -= sizeof(sha256->block);
+            buffer += sizeof(sha256->block);
+        }
+
+        if(extent)
+        {
+            memcpy(sha256->block + left, buffer, extent);
+        }
+    }
+
+    return;
+}
+void SHAEncode(uint8_t memory[], uint32_t number)
+
+{
+    *memory++ = (uint8_t)(number >> 24);
+    *memory++ = (uint8_t)(number >> 16);
+    *memory++ = (uint8_t)(number >> 8);
+    *memory++ = (uint8_t)(number >> 0);
+    return;
+}
+
+void SHA256Fetch(struct sha256 *sha256, uint8_t digest[])
+
+{
+    unsigned int word;
+    uint8_t bits [8];
+    uint32_t upper = (sha256->count [0] >> 29) | (sha256->count [1] << 3);
+    uint32_t lower = (sha256->count [0] << 3);
+    uint32_t final = (sha256->count [0] & 0x3F);
+    uint32_t extra = (final < 56) ? (56 - final) : (120 - final);
+
+    SHAEncode(&bits[0], upper);
+    SHAEncode(&bits[4], lower);
+    SHA256Write(sha256, sha256->extra, extra);
+    SHA256Write(sha256, bits, sizeof(bits));
+
+    for(word = 0; word < sizeof(sha256->state) / sizeof(uint32_t); word++)
+    {
+        SHAEncode(digest, sha256->state [word]);
+        digest += sizeof(uint32_t);
+    }
+
+    memset(sha256, 0, sizeof(struct sha256));
+    return;
+}

+ 39 - 35
EVSE/Projects/CCS/Apps/NidNmk.h

@@ -1,35 +1,39 @@
-#include <stdint.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-
-typedef struct sha256 
-{
-
-	uint32_t count [2];
-	uint32_t state [8];
-	uint8_t block [64];
-	uint8_t extra [64];
-	
-}
-SHA256;
-
-#define SHA256_DIGEST_LENGTH 256/8
-#define HPAVKEY_NMK_LEN 16
-#define HPAVKEY_NID_LEN 7
-#define SHR(word,bits) ((word & 0xFFFFFFFF) >> bits)
-#define ROTR(word,bits) (SHR(word,bits) | (word << (32 - bits)))
-#define DEFAULT_LEVEL 0
-//-------------------------------------------------------------------------- 
-/* Functions -----------------------------------------------------------*/
-//-------------------------------------------------------------------------- 
-void HPAVKeyNMK (uint8_t NMK [], const char * string); 
-void HPAVKeyNID (uint8_t NID [], const uint8_t NMK [], uint8_t level);
-void SHA256Reset (struct sha256 *sha256);
-void SHA256Block (struct sha256 *sha256, void const *memory);
-void SHA256Write (struct sha256 *sha256, void const *memory, uint16_t extent);
-void SHAEncode(uint8_t memory [], uint32_t number);
-void SHA256Fetch (struct sha256 *sha256, uint8_t digest []) ;
- 
-
-
+/*===========================================================================
+                    Combined Charging System (CCS): SECC
+                                 NidNmk.h
+
+                        initiated by Vern, Joseph
+                           (since 2019/07/19)
+=============================================================================*/
+
+#include <stdint.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+typedef struct sha256
+{
+
+    uint32_t count [2];
+    uint32_t state [8];
+    uint8_t block [64];
+    uint8_t extra [64];
+
+} SHA256;
+
+#define SHA256_DIGEST_LENGTH 256 / 8
+#define HPAVKEY_NMK_LEN 16
+#define HPAVKEY_NID_LEN 7
+#define SHR(word, bits) ((word & 0xFFFFFFFF) >> bits)
+#define ROTR(word, bits) (SHR(word, bits) | (word << (32 - bits)))
+#define DEFAULT_LEVEL 0
+//--------------------------------------------------------------------------
+/* Functions -----------------------------------------------------------*/
+//--------------------------------------------------------------------------
+void HPAVKeyNMK(uint8_t NMK [], const char *string);
+void HPAVKeyNID(uint8_t NID [], const uint8_t NMK [], uint8_t level);
+void SHA256Reset(struct sha256 *sha256);
+void SHA256Block(struct sha256 *sha256, void const *memory);
+void SHA256Write(struct sha256 *sha256, void const *memory, uint16_t extent);
+void SHAEncode(uint8_t memory [], uint32_t number);
+void SHA256Fetch(struct sha256 *sha256, uint8_t digest []);

二进制
EVSE/Projects/CCS/Apps/UpdateRootfs


+ 86 - 69
EVSE/Projects/CCS/Apps/UpdateRootfs.c

@@ -1,69 +1,86 @@
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <linux/termios.h>
-#include <stdio.h>
-#include <string.h>
-#include <time.h>
-#include <stdlib.h>
-#include <sys/ipc.h>
-#include <sys/shm.h>
-#include <sys/mman.h>
-#include <linux/sockios.h> 
-#include <linux/socket.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <sys/time.h> 
-#include <sys/timeb.h> 
-#include <math.h>//for pow
-#include "define.h"
-
-
-int main(int argc,char *argv[])
-{
-	unsigned int MaxLen=25*1024*1024, ImageLen=0;
-	unsigned char *ptr; 
-	int fd,wrd;
-	
-	ptr=malloc(MaxLen);
-	if(ptr==NULL)
-	{
-		printf("UpdateRootfs NG - can not malloc\n");
-		return 0;
-	}	
-	memset(ptr,0xFF,MaxLen);
-	
-	fd = open(argv[1], O_RDONLY);
-	if(fd < 0)
-	{
-		printf("UpdateRootfs NG - can not open rootfs\n");
-		free(ptr);
-		return 0;
-	}
-    	ImageLen=read(fd,ptr,MaxLen);
-	close(fd);	
-	printf("ImageLen=0x%x\n",ImageLen);
-	if(ImageLen<(24*1024*1024))
-	{
-		printf("ImageLen size mismatch\n");
-		free(ptr);
-		return 0;
-	}	
-	fd = open("/dev/mtdblock8", O_RDWR);
-	if (fd < 0) 
-	{
-		printf("UpdateRootfs NG - can not open mtdblock8\n");
-		free(ptr);
-		return 0;
-    	}
-    	wrd=write(fd, ptr, ImageLen);   
-    	close(fd);
-   	if(wrd!=ImageLen)
-	{	
-		printf("UpdateRootfs NG - wrd(0x%x) != ImageLen(0x%x)\n",wrd,ImageLen);
-		free(ptr);
-		return 0;
-	}	
-	free(ptr);
-	printf("UpdateRootfs OK\n");
-}
+/*===========================================================================
+                    Combined Charging System (CCS): SECC
+                              UpdateRootfs.c
+
+                        initiated by Vern, Joseph
+                           (since 2019/07/19)
+=============================================================================*/
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <linux/termios.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+#include <stdlib.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#include <sys/mman.h>
+#include <linux/sockios.h>
+#include <linux/socket.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <sys/time.h>
+#include <sys/timeb.h>
+#include <math.h>//for pow
+#include "define.h"
+#include "UpdateRootfs.h"
+
+int main(int argc, char *argv[])
+{
+    unsigned int MaxLen = 25 * 1024 * 1024, ImageLen = 0;
+    unsigned char *ptr;
+    int fd, wrd;
+
+    ptr = malloc(MaxLen);
+
+    if(ptr == NULL)
+    {
+        printf("UpdateRootfs NG - can not malloc\n");
+        return 0;
+    }
+
+    memset(ptr, 0xFF, MaxLen);
+
+    fd = open(argv[1], O_RDONLY);
+
+    if(fd < 0)
+    {
+        printf("UpdateRootfs NG - can not open rootfs\n");
+        free(ptr);
+        return 0;
+    }
+
+    ImageLen = read(fd, ptr, MaxLen);
+    close(fd);
+    printf("ImageLen=0x%x\n", ImageLen);
+
+    if(ImageLen < (24 * 1024 * 1024))
+    {
+        printf("ImageLen size mismatch\n");
+        free(ptr);
+        return 0;
+    }
+
+    fd = open("/dev/mtdblock8", O_RDWR);
+
+    if(fd < 0)
+    {
+        printf("UpdateRootfs NG - can not open mtdblock8\n");
+        free(ptr);
+        return 0;
+    }
+
+    wrd = write(fd, ptr, ImageLen);
+    close(fd);
+
+    if(wrd != ImageLen)
+    {
+        printf("UpdateRootfs NG - wrd(0x%x) != ImageLen(0x%x)\n", wrd, ImageLen);
+        free(ptr);
+        return 0;
+    }
+
+    free(ptr);
+    printf("UpdateRootfs OK\n");
+}

+ 7 - 0
EVSE/Projects/CCS/Apps/UpdateRootfs.h

@@ -0,0 +1,7 @@
+/*===========================================================================
+                    Combined Charging System (CCS): SECC
+                              UpdateRootfs.h
+
+                        initiated by Vern, Joseph
+                           (since 2019/07/19)
+=============================================================================*/

+ 2118 - 2116
EVSE/Projects/CCS/Apps/define.h

@@ -1,2116 +1,2118 @@
-#ifndef	DEFINE_H_
-#define	DEFINE_H_
-
-/**************************************************************************************/
-/*********************************NAND Flash mapping *****************************/
-/**************************************************************************************/
-/* 
-  sector size	512 KiB
-  Page size       4096 b
-  OOB size        224 b
-  Erase size    	524288 b
--------------------------------------------------------------------------------------------------------------------------------
-Segment 					Physical address 			Size 
--------------------------------------------------------------------------------------------------------------------------------
-MLO						0x00000000-0x0007FFFF		512 KB
-Primary u-boot 			0x00080000-0x0017FFFF		1 MB
-Environment 				0x00180000-0x001FFFFF		512 KB
-Secondary u-boot	 		0x00200000-0x002FFFFF		1 MB
-Primary dtb				0x00300000-0x0037FFFF		512 KB
-Secondary dtb				0x00380000-0x003FFFFF		512 KB
-Primary kernel				0x00400000-0x00DFFFFF		10 MB
-Secondary Kernel 			0x00E00000-0x017FFFFF		10 MB
-Primary root file system		0x01800000-0x029FFFFF		24 MB
-Secondary root file system	0x03000000-0x047FFFFF		24 MB
-Primary user configuration 	0x04800000-0x004DFFFF		6 MB
-Secondary user configuration	0x04E00000-0x0053FFFF		6 MB
-Factory default configuration	0x05400000-0x0059FFFF		6 MB
-Storage					0x05A00000-0x7FFFFFFF		1958 MB
-*/
-
-/**************************************************************************************/
-/*********************************System Limitation**********************************/
-/**************************************************************************************/
-
-#define FirmwareVersion		0x00010201 
-/*
-0xAaBbCcDd
-Aa: main version
-Bb: minor version
-Cc:
-	0x01: UL 
-	0x02: CE
-	0x03: JP
-	0x04: GB
-Dd:  
-	0x01: CCS protocol
-	0x02:	 CHAdeMO protocol
-	0x03: GB Protocol
-*/
-
-/*relevant to Quantity */	
-#define CHAdeMO_QUANTITY	1
-#define CCS_QUANTITY		1
-#define GB_QUANTITY		1
-
-
-/*SystemLog message*/
-#define SystemLogMessage			//for engineer to do analysis
-
-/**************************************************************************************/
-/**************************share memory key information***************************/
-/**************************************************************************************/
-#define ShmSysConfigAndInfoKey	1001
-#define ShmCcsCommKey		1004	
-#define ShmStatusCodeKey		1005	
-#define ShmInternalCommKey	1009
-
-/**************************************************************************************/
-/****structure SysConfigData => shall store the data to NAND flash****************/
-/****structure SysInfoData => shall NOT store the data to NAND flash***************/
-/****according to System Configuration and Information Table.xlsx Rev.0.2 *******/
-/**************************************************************************************/
-
-struct EthConfigData 
-{
-	unsigned char		EthDhcpClient;			//0: enable,1: disable
-	unsigned char		EthMacAddress[18];			//default: Null		
-	unsigned char		EthIpAddress[16];			//Eth0 default:192.168.0.10	,Eth1 default:192.168.1.10				
-	unsigned char		EthSubmaskAddress[16];		//Eth0 default:255.255.255.0	,Eth1 default:255.255.255.0			
-	unsigned char		EthGatewayAddress[16];		//Eth0 default:192.168.0.254	,Eth1 default:192.168.1.254	
-};
-
-struct WifiConfigData 
-{
-	unsigned char		WifiMode;				//0: disable, 1: Infrastructure client, 2: Infrastructure server, 3: Ad-Hoc		
-	unsigned char		WifiSsid[256];				//default: Null		
-	unsigned char		WifiPassword[256];			//default: Null
-	int				WifiRssi;					//dbm		
-	unsigned char		WifiDhcpServer;			//0: enable, 1: disable	
-	unsigned char		WifiDhcpClient;			//0: enable, 1: disable		
-	unsigned char		WifiMacAddress[18];		//default: Null		
-	unsigned char		WifiIpAddress[16];			//default:192.168.2.10		
-	unsigned char		WifiSubmaskAddress[16];		//default:255.255.255.0			
-	unsigned char		WifiGatewayAddress[16];	//default:192.168.2.254	
-};
-
-struct TeleConfigData 
-{	
-	unsigned char		TelcomApn[256];			//default: Null		
-	int				TelcomRssi;				//dbm	
-	unsigned char		TelcomChapPapId[256];		//default: Null		
-	unsigned char		TelcomChapPapPwd[256];	//default: Null		
-	unsigned char		TelcomModemImei[16];		//default: Null		
-	unsigned char		TelcomSimImsi[16];			//default: Null			
-	unsigned char		TelcomSimStatus;			//0: no SIM card is found, 1: valid SIM card, 2: invalid SIM card	
-	unsigned char		TelcomModemMode;		//0: No services, 1: CDMA, 2: GSM/GPRS, 3: WCDMA, 4: GSM/WCDMA, 5: TD_SCDMA mode, 6: Unknow
-	unsigned char		TelcomIpAddress[16];		//default: Null			
-};
-
-struct SysConfigData 
-{
-	/**************System***************/
-	unsigned char			ModelName[64];			//charger model name
-	unsigned char			SerialNumber[64];			//charger system serial number								
-	unsigned char			SystemId[128];				//charger system ID
-	unsigned char			SystemDateTime[32];		//charger system date and time
-	unsigned char			AuthorisationMode;			//0: Phihong RFID tag,  1: OCPP backend,  2: Phihong backend,  3: free mode
-	unsigned char	   		DefaultLanguage;			//
-	unsigned char   		RfidCardNumEndian;		//0: little endian,  1: big endian	
-	unsigned short			AcPlugInTimes;				//0~65535
-	unsigned short			GbPlugInTimes;			//0~65535
-	unsigned short			Ccs1PlugInTime;			//0~65535
-	unsigned short			Ccs2PlugInTimes;			//0~65535
-	unsigned short			ChademoPlugInTimes;		//0~65535
-	/**************Charging***************/
-	unsigned short	   		MaxChargingEnergy;		//0: no limit,	1 ~ 65535	kWh		
-	unsigned short	   		MaxChargingPower;		//0: rating value, 1 ~ RATING_POWER	kW"		
-	unsigned short	   		MaxChargingCurrent;		//0: rating value, 1 ~ RATING_CURRENT	amp"		
-	unsigned short	   		MaxChargingDuration;		//0: no limit,	1 ~ 65535	minutes		
-	unsigned char   		PhaseLossPolicy;			//0: charging,  1: stop charging
-	unsigned char   		LocalWhiteCard[10][32];		//Max. card quantity is 10
-	unsigned char 			UserId[32];				//the user use this ID to trigger charging event, it can be RFID card number, OCPP IdTag, etc.
-	/**************Network***************/
-	unsigned char 			FtpServer[32];				//the ftp server for Phihong server to do data transimission								
-	struct EthConfigData 	Eth0Interface;
-	struct EthConfigData 	Eth1Interface;
-	struct WifiConfigData 	AthInterface;
-	struct TeleConfigData	TelecomInterface;		
-	/**************Backend***************/	
-	unsigned int 			BackendConnTimeout;		//default : 300s
-	unsigned char   		OfflinePolicy;				//0: local list, 1: Phihong RFID tag, 2: free charging, 3: no charging
-	unsigned short	   		OfflineMaxChargeEnergy;	//0: same as MaxChargingEnergy, 1 ~ 65535 kWh	
-	unsigned short	   		OfflineMaxChargeDuration;	//0: same as MaxChargeDuration, 1 ~ 65535 minutes		
-	unsigned char 			OcppServerURL[512];		//http: non-secure OCPP 1.5-S, https: secure OCPP 1.5-S, ws: non-secure OCPP 1.6-J, wss: secure OCPP 1.6-J"								
-	unsigned char 			ChargeBoxId[128];		
-	unsigned int 			Checksum;			//4 bytes checksum	
-};
-
-struct ChargingInfoData 
-{
-	float				MaximumChargingVoltage;	//0~6553.5 volt
-	float				AvailableChargingCurrent;	//0~6553.5 amp		
-	float				AvailableChargingPower;	//0~6553.5 kW		
-	float				PresentChargingVoltage	;	//0~6553.5 volt
-	float				PresentChargingCurrent;		//0~6553.5 amp		
-	float				PresentChargingPower;		//0~6553.5 kW		
-	float				PresentChargedEnergy;		//0~6553.5 kWh		
-	int				PresentChargedDuration;	// second		
-	int				RemainChargingDuration;	// second		
-	float				EvBatteryMaxVoltage;		// 0~6553.5 volt				
-	float				EvBatterytargetVoltage;		// 0~6553.5 volt				
-	int				EvBatterySoc;				// 0~100%		
-	unsigned char 		ConnectorPlugIn;			//0: unplug, 1: Plug-in	
-	float 			PilotVoltage;				
-	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%		
-};
-
-struct SysInfoData 
-{
-	/**************System***************/
-	unsigned char		SystemStatus;				//0: Booting, 1: idle, 2: authorizing, 3: preparing, 4: charging, 5: terminating, 6: alarm, 7: fault		
-	unsigned char		FactoryConfiguration;		//0: normal, 1: trigger, charger will return the configuration to factory default if trigger
-	float 			InputVoltageR;			//0~655.35 volt		
-	float 			InputVoltageS;				//0~655.35 volt		
-	float 			InputVoltageT;				//0~655.35 volt		
-	unsigned int 		SystemFanRotaSpeed;		//0 ~ 65535 RPM		
-	unsigned int 		PsuFanRotaSpeed;			//0 ~ 65535 RPM		
-	unsigned char		AuxPower5V;				//0 ~ 255 volt		
-	unsigned char		AuxPower12V;				//0 ~ 255 volt		
-	unsigned char		AuxPower24V;				//0 ~ 255 volt		
-	unsigned char		AuxPower48V;				//0 ~ 255 volt	
-	unsigned char 		CsuHwRev[32];			//CSU board hardware version	
-	unsigned char 		CsuBootLoadFwRev[32];		//CSU board bootloader firmware version
-	unsigned char 		CsuKernelFwRev[32];		//CSU board OS kernel firmware version								
-	unsigned char 		CsuRootFsFwRev[32];		//CSU board root file system firmware version		
-	unsigned char 		CsuPrimFwRev[32];			//CSU board root file system firmware version								
-	unsigned char 		LcmHwRev[32];			//LCM module hardware version								
-	unsigned char 		LcmFwRev[32];			//LCM module firmware version						
-	unsigned char 		PsuHwRev[32];				//PSU hardware version						
-	unsigned char 		PsuPrimFwRev[32];			//PSU primary firmware version			
-	unsigned char 		PsuSecFwRev[32];			//PSU secondary firmware version	
-	unsigned char 		AuxPwrHwRev[32];			//Aux. power module hardware version	
-	unsigned char 		AuxPwrFwRev[32];			//Aux. power module firmware version	
-	unsigned char 		FanModuleHwRev[32];		//Fan  module hardware version	
-	unsigned char 		FanModuleFwRev[32];		//Fan  module firmware version		
-	unsigned char 		RelayModuleHwRev[32];		//Relay control  module hardware version	
-	unsigned char 		RelayModuleFwRev[32];		//Relay control  module firmware version		
-	unsigned char 		TelcomModemFwRev[32];	//the 3G/4G modem firmware version	
-	int			  	SystemAmbientTemp;		// -40 ~ 215 degree C
-	int			  	SystemCriticalTemp;		// -40 ~ 215 degree C
-	int			  	CcsConnectorTemp;		// -40 ~ 215 degree C
-	int			  	PsuAmbientTemp;			// -40 ~ 215 degree C
-	/**************Charging***************/
-	struct ChargingInfoData 	ChademoChargingData[CHAdeMO_QUANTITY];	
-	struct ChargingInfoData 	CcsChargingData[CCS_QUANTITY];
-	struct ChargingInfoData 	GbChargingData[GB_QUANTITY];
-	/**************Network***************/
-	unsigned char 		InternetConn;				//0: disconnected, 1: connected	
-	/**************Backend***************/	
-	unsigned char 		OcppConnStatus;			//0: disconnected, 1: connected	
-
-};
-
-struct SysConfigAndInfo 
-{
-	struct SysConfigData	SysConfig; 
-	struct SysInfoData		SysInfo; 
-};
-
-/**************************************************************************************/
-/**************************Alarm Share memory**************************************/
-/***************************************************************************************
-	Status Code	A			B				C									D	E	F	
-				0: Issue		1: From EVSE 		1: Fault (unrecoverable)					001 ~ 999 serial number			
-			    								e.g., hardware broken, system latch				
-				1: Recovered	2: From EV		2: Alarm (recoverable)				
-			   								e.g., OTP, OVP				
-							3: From Backend	3: Information 				
-			  								e.g., swipe card to stop charging		
-			  								
-according to XXX.Revxx			  										
-***************************************************************************************/
-/**************************************************************************************/
-char FaultStatusCode[32][6]= 
-{
-	"011001",	//CHAdeMO output fuse blew		
-	"011002",	//CCS output fuse blew		
-	"011003",	//GB output fuse blew		
-	"011004",	//RCD/CCID self-test fail		
-	"011005",	//AC input contactor 1 welding 		
-	"011006",	//AC input contactor 1 driving fault 		
-	"011007",	//AC input contactor 2 welding 		
-	"011008",	//AC input contactor 2 driving fault  		
-	"011009",	//AC output relay welding		
-	"011010",	//AC output relay  driving fault		
-	"011011",	//CHAdeMO output relay welding		
-	"011012",	//CHAdeMO output relay driving fault		
-	"011013",	//CCS output relay welding		
-	"011014",	//CCS output relay driving fault		
-	"011015",	//GB output relay welding		
-	"011016",	//GB output relay driving fault		
-	"011017",	//AC connector temperature sensor broken		
-	"011018",	//CHAdeMO connector temperature sensor broken		
-	"011019",	//CCS connector temperature sensor broken		
-	"011020",	//GB connector temperature sensor broken		
-	"011021",	//WiFi module broken		
-	"011022",	//3G/4G module broken		
-	"011023",	//Aux. power module broken		
-	"011024",	//Relay control module /smart box broken		
-	"011025",	//CHAdeMO connector lock fail		
-	"011026",	//GB connector lock fail		
-	"011027",	//AC connector lock fail		
-	"011028",	//CHAdeMO module broken		
-	"011029",	//CCS module broken		
-	"011030",	//GBT module broken		
-	"011031",	//PSU module broken		
-	"011032"	//Reserved
-};
-
-struct FaultCodeData
-{
-	unsigned char PreviousFaultVal[4];
-	union
-	{
-		unsigned char FaultVal[4];
-		struct
-		{
-			//FaultVal[0]
-		    	unsigned char ChademoOutputFuseBlew:1;				//bit 0 
-			unsigned char CcsOutputFuseBlew:1;					//bit 1
-			unsigned char GbOutputFuseBlew:1;   					//bit 2
-			unsigned char RcdSelfTestFail:1;						//bit 3		              
-			unsigned char AcInputContactor1Welding:1;			//bit 4 		          
-			unsigned char AcInputContactor1DrivingFault:1;			//bit 5  		  
-			unsigned char AcInputContactor2Welding:1;			//bit 6 		          
-			unsigned char AcInputContactor2DrivingFault:1;			//bit 7  
-			//FaultVal[1]		
-			unsigned char AcOutputRelayWelding:1;				//bit 0 
-			unsigned char AcOutputRelayDrivingFault:1;				//bit 1
-			unsigned char ChademoOutputRelayWelding:1;			//bit 2
-			unsigned char ChademoOutputRelayDrivingFault	:1;		//bit 3		              
-			unsigned char CcsOutputRelayWelding:1;				//bit 4 		          
-			unsigned char CcsOutputRelayDrivingFault:1;			//bit 5  		  
-			unsigned char GbOutputRelayWelding:1;				//bit 6 		          
-			unsigned char GbOutputRelayDrivingFault:1;				//bit 7    
-			//FaultVal[2]		
-			unsigned char AcConnectorTempSensorBroken:1;			//bit 0 
-			unsigned char ChademoConnectorTempSensorBroken:1;	//bit 1
-			unsigned char CcsConnectorTempSensorBroken:1;		//bit 2
-			unsigned char GbConnectorTempSensorBroken:1;			//bit 3		              
-			unsigned char WiFiModuleBroken:1;					//bit 4 		          
-			unsigned char Telecom4GModuleBroken:1;				//bit 5  		  
-			unsigned char AuxPowerModuleBroken:1;				//bit 6 		          
-			unsigned char RelayControlModuleBroken :1;			//bit 7 	
-	             	 //FaultVal[3]		
-			unsigned char ChademoConnectorLockFail:1;			//bit 0 
-			unsigned char GbConnectorLockFail:1;					//bit 1
-			unsigned char AcConnectorLockFail:1;					//bit 2
-			unsigned char ChademoModuleBroken:1;				//bit 3		              
-			unsigned char CcsModuleBroken:1;					//bit 4 		          
-			unsigned char GbModuleBroken:1;						//bit 5  		  
-			unsigned char PsuModuleBroken:1;						//bit 6 		          
-			unsigned char :1;									//bit 7		reserved
-		}bits;
-	}FaultEvents;        
-};          
-
-char AlarmStatusCode[64][6]=
-{
-	"012200",	//System L1 input OVP		                            
-	"012201",	//System L2 input OVP		                            
-	"012202",	//System L3 input OVP		                            
-	"012203",	//System L1 input UVP		                            
-	"012204",	//System L2 input UVP		                            
-	"012205",	//System L3 input UVP		                            
-	"012206",	//PSU L1 input OVP		                                
-	"012207",	//PSU L2 input OVP		                                
-	"012208",	//PSU L3 input OVP		                                
-	"012209",	//PSU L1 input UVP		                                
-	"012210",	//PSU L2 input UVP		                                
-	"012211",	//PSU L3 input UVP		                                
-	"012212",	//System L1 input drop		                            
-	"012213",	//System L2 input drop		                            
-	"012214",	//System L3 input drop		                            
-	"012215",	//System AC output OVP		                            
-	"012216",	//System AC output OCP		                            
-	"012217",	//System CHAdeMO output OVP		                        
-	"012218",	//System CHAdeMO output OCP		                        
-	"012219",	//System CCS output OVP		                            
-	"012220",	//System CCS output OCP		                            
-	"012221",	//System GB output OVP		                            
-	"012222",	//System GB output OCP		                            
-	"012223",	//System ambient/inlet OTP		                        
-	"012224",	//System critical point OTP		                        
-	"012225",	//PSU ambient/inlet OTP		                            
-	"012226",	//PSU critical point OTP		                        
-	"012227",	//Aux. power module OTP		                            
-	"012228",	//Relay board/smart box OTP		                        
-	"012229",	//CHAdeMO connector OTP		                            
-	"012230",	//CCS connector OTP		                                
-	"012231",	//GB connector OTP		                                
-	"012232",	//AC connector OTP		                                
-	"012233",	//RCD/CCID trip		                                    
-	"012234",	//CHAdeMO GFD trip		                                
-	"012235",	//CCS GFD trip		                                    
-	"012236",	//GB GFD trip		                                    
-	"012237",	//SPD trip		                                        
-	"012238",	//Main power breaker trip		                        
-	"012239",	//Aux. power breaker trip		                        
-	"012240",	//PSU communication fail		                        
-	"012241",	//WiFi module communication fail		                
-	"012242",	//3G/4G module communication fail		                
-	"012243",	//RFID module communication fail		                
-	"012244",	//Bluetooth module communication fail		            
-	"012245",	//LCM module communication fail		                    
-	"012246",	//Aux. power module communication fail		            
-	"012247",	//Relay control boaed/smart box communication fail		
-	"012248",	//CCS module communication fail		                    
-	"012249",	//CHAdeMO module communication fail		                
-	"012250",	//GBT module communication fail		                    
-	"012251",	//Emergency stop		                                
-	"012252",	//Door open		                                        
-	"012253",	//System fan decay		                                
-	"012254",	//Fail to create share memory 
-	"012255",	//CSU initialization failed
-	"012256",	//Reserved
-	"012257",	//Reserved
-	"012258",	//Reserved
-	"012259",	//Reserved
-	"012260",	//Reserved
-	"012261",	//Reserved
-	"012262",	//Reserved
-	"012263"	//Reserved
-};   
-struct AlarmCodeData
-{
-	unsigned char PreviousAlarmVal[8];
-	union
-	{    
-		unsigned char AlarmVal[8];
-		struct
-		{
-			//AlarmVal[0]
-		    	unsigned char SystemL1InputOVP:1;					//bit 0 
-			unsigned char SystemL2InputOVP:1;					//bit 1
-			unsigned char SystemL3InputOVP:1;   					//bit 2
-			unsigned char SystemL1InputUVP:1;					//bit 3		              
-			unsigned char SystemL2InputUVP:1;					//bit 4 		          
-			unsigned char SystemL3InputUVP:1;					//bit 5  		  
-			unsigned char PsuL1InputOVP:1;						//bit 6 		          
-			unsigned char PsuL2InputOVP:1;						//bit 7  
-			//AlarmVal[1]		
-			unsigned char PsuL3InputOVP:1;						//bit 0 
-			unsigned char PsuL1InputUVP:1;						//bit 1
-			unsigned char PsuL2InputUVP:1;						//bit 2
-			unsigned char PsuL3InputUVP	:1;						//bit 3		              
-			unsigned char SystemL1InputDrop:1;					//bit 4 		          
-			unsigned char SystemL2InputDrop:1;					//bit 5  		  
-			unsigned char SystemL3InputDrop:1;					//bit 6 		          
-			unsigned char SystemAcOutputOVP:1;					//bit 7    
-			//AlarmVal[2]		
-			unsigned char SystemAcOutputOCP:1;					//bit 0 
-			unsigned char SystemChademoOutputOVP:1;			//bit 1
-			unsigned char SystemChademoOutputOCP:1;			//bit 2
-			unsigned char SystemCcsOutputOVP:1;					//bit 3		              
-			unsigned char SystemCcsOutputOCP:1;					//bit 4 		          
-			unsigned char SystemGbOutputOVP:1;					//bit 5  		  
-			unsigned char SystemGbOutputOCP:1;					//bit 6 		          
-			unsigned char SystemAmbientOTP :1;					//bit 7 	
-	             	 //AlarmVal[3]		
-			unsigned char SystemCriticalPointOTP:1;				//bit 0 
-			unsigned char PsuAmbientOTP:1;						//bit 1
-			unsigned char PsuCriticalPointOTP:1;					//bit 2
-			unsigned char AuxPowerModuleOTP:1;					//bit 3		              
-			unsigned char RelayBoardOTP:1;						//bit 4 		          
-			unsigned char ChademoConnectorOTP:1;				//bit 5  		  
-			unsigned char CcsConnectorOTP:1;					//bit 6 		          
-			unsigned char GbConnectorOTP:1;					//bit 7		
-			 //AlarmVal[4]			
-			unsigned char AcConnectorOTP:1;						//bit 0 
-			unsigned char RcdTrip:1;								//bit 1
-			unsigned char ChademoGfdTrip:1;						//bit 2
-			unsigned char CcsGfdTrip:1;							//bit 3		              
-			unsigned char GbGfdTrip:1;							//bit 4 		          
-			unsigned char SpdTrip:1;								//bit 5  		  
-			unsigned char MainPowerBreakerTrip:1;					//bit 6 		          
-			unsigned char AuxPowerBreakerTrip:1;					//bit 7			
-			//AlarmVal[5]			
-			unsigned char PsuCommunicationFail:1;				//bit 0 
-			unsigned char WiFiModuleCommFail:1;					//bit 1
-			unsigned char Telecom4GModuleCommFail:1;			//bit 2
-			unsigned char RfidModuleCommFail:1;					//bit 3		              
-			unsigned char BluetoothModuleCommFail:1;				//bit 4 		          
-			unsigned char LcmModuleCommFail:1;					//bit 5  		  
-			unsigned char AuxPowerModuleCommFail:1;			//bit 6 		          
-			unsigned char RelayBoardCommFail:1;					//bit 7			
-			//AlarmVal[6]			
-			unsigned char CcsModuleCommFail:1;					//bit 0 
-			unsigned char ChademoModuleCommFail:1;			//bit 1
-			unsigned char GbModuleCommFail:1;					//bit 2
-			unsigned char EmergencyStopTrip:1;					//bit 3		              
-			unsigned char DoorOpen:1;							//bit 4 		          
-			unsigned char SystemFanDecay:1;						//bit 5  		  
-			unsigned char FailToCreateShareMemory:1;				//bit 6  		  
-			unsigned char CsuInitFailed:1;							//bit 7  		
-			//AlarmVal[7]			  
-			unsigned char :8;									//reserved				
-		}bits;
-	}AlarmEvents;        
-};          
-
-char InfoStatusCode[64][6]=
-{
-	//Information comes from EVSE 
-	"013600",	//Normal stop charging by user		                
-	"013601",	//Charging Time's up		                        
-	"013602",	//Replace system air filter 		                
-	"013603",	//Reach to CHAdeMO max. plugging times.		        
-	"013604",	//Reach to CCS max. plugging times.		            
-	"013605",	//Reach to GB max. plugging times.		            
-	"013606",	//Reach to AC max. plugging times.		            
-	"013607",	//CSU fimrware update fail		            
-	"013608",	//CHAdeMO Module fimrware update fail	
-	"013609",	//CCS Module fimrware update fail	
-	"013610",	//GB Module fimrware update fail		                
-	"013611",	//Aux. power module fimrware update fail		    
-	"013612",	//Relay control module fimrware update fail		    
-	"013613",	//LCM module fimrware update fail		            
-	"013614",	//Bluetooth module fimrware update fail		        
-	"013615",	//WiFi module fimrware update fail		            
-	"013616",	//3G/4G module fimrware update fail		            
-	"013617",	//SMR fimrware update fail		                    
-	"013618",	//RFID module fimrware update fail		            
-	"013619",	//configured by USB flash drive		                
-	"013620",	//configured by backend		                        
-	"013621",	//configured by webpage		                    
-	"013622",	//disconnected from Internet through Ethernet		
-	"013623",	//disconnected from Internet through WiFi		    
-	"013624",	//disconnected from Internet through 3G/4G		    
-	"013625",	//disconnected from AP through WiFi		            
-	"013626",	//disconnected from APN through 3G/4G		  
-	"013627",	//Reserved
-	"013628",	//Reserved
-	"013629",	//Reserved
-	"013630",	//Reserved
-	"013631",	//Reserved    
-	//Information comes from EV
-	"023700",	//CHAdeMO EV communication Fail		           
-	"023701",	//CCS EV communication Fail		               
-	"023702",	//GB EV communication Fail		               
-	"023703",	//AC: pilot fault		                       
-	"023704",	//CHAdeMO:  battery malfunction		           
-	"023705",	//CHAdeMO:  no charging permission		       
-	"023706",	//CHAdeMO:  battery incompatibility		       
-	"023707",	//CHAdeMO:  battery OVP		                   
-	"023708",	//CHAdeMO:  battery UVP		                   
-	"023709",	//CHAdeMO:  battery OTP		                   
-	"023710",	//CHAdeMO:  battery current difference		   
-	"023711",	//CHAdeMO:  battery voltage difference		   
-	"023712",	//CHAdeMO:  shift position		               
-	"023713",	//CHAdeMO:  battery other fault		           
-	"023714",	//CHAdeMO:  charging system error		       
-	"023715",	//CHAdeMO:  EV normal stop	
-	"023716",	//Reserved
-	"023717",	//Reserved
-	"023718",	//Reserved
-	"023719",	//Reserved
-	"023720",	//Reserved
-	"023721",	//Reserved	
-	"023722",	//Reserved	
-	"023723",	//Reserved	
-	 //Information comes from Backend              
-	"033900",	//disconnected from backend through Ethernet		
-	"033901",	//disconnected from backend through WiFi		    
-	"033902",	//disconnected from backend through 3G/4G		    
-	"033903",	//Remote start charging by backend		            
-	"033904",	//Remote stop charging by backend		            
-	"033905",	//Remote reset by backend		                                   
-	"033906",	//Reserved                      	
-	"033907",	//Reserved                      	                   	
-};   
-struct InfoCodeData
-{
-	unsigned char PreviousInfoVal[8];
-	union
-	{    
-		unsigned char InfoVal[8];
-		struct
-		{
-			//InfoVal[0]
-		    	unsigned char NormalStopChargingByUser:1;				//bit 0 
-			unsigned char ChargingTimesUp:1;						//bit 1
-			unsigned char ReplaceSystemAirFilter:1; 					//bit 2
-			unsigned char ReachChademoMaxPluggingTimes:1;		//bit 3		              
-			unsigned char ReachCcsMaxPluggingTimes:1;			//bit 4 		          
-			unsigned char ReachGbMaxPluggingTimes:1;			//bit 5  		  
-			unsigned char ReachAcMaxPluggingTimes:1;				//bit 6 		          
-			unsigned char CsuFimrwareUpdateFail:1;				//bit 7  
-			//InfoVal[1]		
-			unsigned char ChademoModuleFimrwareUpdateFail:1;	//bit 0 
-			unsigned char CcsModuleFimrwareUpdateFail:1;			//bit 1
-			unsigned char GbModuleFimrwareUpdateFail:1;			//bit 2
-			unsigned char AuxPowerModuleFimrwareUpdateFail:1;		//bit 3		              
-			unsigned char RelayBoardFimrwareUpdateFail:1;			//bit 4 		          
-			unsigned char LcmModuleFimrwareUpdateFail:1;			//bit 5  		  
-			unsigned char BluetoothModuleFimrwareUpdateFail:1;		//bit 6 		          
-			unsigned char WiFiModuleFimrwareUpdateFail:1;			//bit 7    
-			//InfoVal[2]		
-			unsigned char Telocom4GModuleFimrwareUpdateFail:1;	//bit 0 
-			unsigned char PsuFimrwareUpdateFail:1;				//bit 1
-			unsigned char RfidModuleFimrwareUpdateFail:1;			//bit 2
-			unsigned char ConfiguredByUsbFlashDrive:1;				//bit 3		              
-			unsigned char ConfiguredByBackend:1;					//bit 4 		          
-			unsigned char ConfiguredByWebpage:1;				//bit 5  		  
-			unsigned char InternetDisconnectViaEthernet:1;			//bit 6 		          
-			unsigned char InternetDisconnectViaWiFi :1;				//bit 7 	
-	             	 //InfoVal[3]		
-			unsigned char InternetDisconnectVia4Gi:1;				//bit 0 
-			unsigned char ApDisconnectViaWiFi:1;					//bit 1
-			unsigned char ApnDisconnectVia4Gi:1;					//bit 2
-			unsigned char :5;									//bit 3~7 reserved		              
-			 //InfoVal[4]			
-			unsigned char ChademoEvCommFail:1;				//bit 0 
-			unsigned char CcsEvCommFail:1;						//bit 1
-			unsigned char GbEvCommFail:1;						//bit 2
-			unsigned char PilotFault:1;							//bit 3		              
-			unsigned char ChademoBatteryMalfun:1;				//bit 4 		          
-			unsigned char ChademoNoPermission:1;				//bit 5  		  
-			unsigned char ChademoBatteryIncompatibility:1;			//bit 6 		          
-			unsigned char ChademoBatteryOVP:1;					//bit 7			
-			//InfoVal[5]			
-			unsigned char ChademoBatteryUVP:1;					//bit 0 
-			unsigned char ChademoBatteryOTP:1;					//bit 1
-			unsigned char ChademoBatteryCurrentDiff:1;			//bit 2
-			unsigned char ChademoBatteryVoltageDiff:1;			//bit 3		              
-			unsigned char ChademoShiftPosition:1;					//bit 4 		          
-			unsigned char ChademoBatteryOtherFault:1;			//bit 5  		  
-			unsigned char ChademoChargingSystemError:1;			//bit 6 		          
-			unsigned char ChademoEvNormalStop:1;				//bit 7			
-			//InfoVal[6]			 	  
-			unsigned char :8;									//bit 0~7 reserved				
-			//InfoVal[7]			
-			unsigned char BackendDisconnectedViaEthernet:1;		//bit 0 
-			unsigned char BackendDisconnectViaWiFi:1;				//bit 1
-			unsigned char BackendDisconnectVia4G:1;				//bit 2
-			unsigned char BackendRemoteStart:1;					//bit 3		              
-			unsigned char BackendRemoteStop:1;					//bit 4 		          
-			unsigned char BackendRemoteReset:1;					//bit 5  		  
-			unsigned char :2;									//bit 6~7 reserved		
-		}bits;
-	}InfoEvents;        
-};          
-            
-struct StatusCodeData
-{           
-	unsigned  char 		PresentStatusCode[10][6];
-	struct FaultCodeData	FaultCode;	
-	struct AlarmCodeData	AlarmCode;
-	struct InfoCodeData	InfoCode;
-};          
-
-/************************************************************************************/
-/**************************CCS protocol Share memory***************************/
-/**************************DIN70121: 201412***************************************/
-/**************************ISO15118_2014: 2014************************************/
-/**************************ISO15118_2018: 2018************************************/
-/************************************************************************************/
-typedef enum boolean { FALSE, TRUE } BOOL; 
-enum ResponseCodeType_DIN70121		{ OK_DIN70121 = 0, OK_NewSessionEstablished_DIN70121 = 1, OK_OldSessionJoined_DIN70121 = 2, OK_CertificateExpiresSoon_DIN70121 = 3, 
-									   FAILED_DIN70121 = 4, FAILED_SequenceError_DIN70121 = 5, FAILED_ServiceIDInvalid_DIN70121 = 6, FAILED_UnknownSession_DIN70121 = 7,
-									   FAILED_ServiceSelectionInvalid_DIN70121 = 8, FAILED_PaymentSelectionInvalid_DIN70121 = 9, FAILED_CertificateExpired_DIN70121 = 10,
-									   FAILED_SignatureError_DIN70121 = 11, FAILED_NoCertificateAvailable_DIN70121 = 12, FAILED_CertChainError_DIN70121 = 13, FAILED_ChallengeInvalid_DIN70121 = 14,
-									   FAILED_ContractCanceled_DIN70121 = 15, FAILED_WrongChargeParameter_DIN70121 = 16, FAILED_PowerDeliveryNotApplied_DIN70121 = 17,
-									   FAILED_TariffSelectionInvalid_DIN70121 = 18, FAILED_ChargingProfileInvalid_DIN70121 = 19, FAILED_EVSEPresentVoltageToLow_DIN70121 = 20,
-									   FAILED_MeteringSignatureNotValid_DIN70121 = 21, FAILED_WrongEnergyTransferType_DIN70121 = 22};
-enum ResponseCodeType_ISO15118_2014	{ OK_ISO15118_2014 = 0, OK_NewSessionEstablished_ISO15118_2014 = 1, OK_OldSessionJoined_ISO15118_2014 = 2, OK_CertificateExpiresSoon_ISO15118_2014 = 3, 
-									   FAILED_ISO15118_2014 = 4, FAILED_SequenceError_ISO15118_2014 = 5, FAILED_ServiceIDInvalid_ISO15118_2014 = 6, FAILED_UnknownSession_ISO15118_2014 = 7,
-									   FAILED_ServiceSelectionInvalid_ISO15118_2014 = 8, FAILED_PaymentSelectionInvalid_ISO15118_2014 = 9, FAILED_CertificateExpired_ISO15118_2014 = 10,
-									   FAILED_SignatureError_ISO15118_2014 = 11, FAILED_NoCertificateAvailable_ISO15118_2014 = 12, FAILED_CertChainError_ISO15118_2014 = 13, FAILED_ChallengeInvalid_ISO15118_2014 = 14,
-									   FAILED_ContractCanceled_ISO15118_2014 = 15, FAILED_WrongChargeParameter_ISO15118_2014 = 16, FAILED_PowerDeliveryNotApplied_ISO15118_2014 = 17,
-									   FAILED_TariffSelectionInvalid_ISO15118_2014 = 18, FAILED_ChargingProfileInvalid_ISO15118_2014 = 19, FAILED_MeteringSignatureNotValid_ISO15118_2014 = 20,
-									   FAILED_NoChargeServiceSelected_ISO15118_2014 = 21, FAILED_WrongEnergyTransferMode_ISO15118_2014 = 22, FAILED_ContactorError_ISO15118_2014 = 23,
-									   FAILED_CertificateNotAllowedAtThisEVSE_ISO15118_2014 = 24, FAILED_CertificateRevoked_ISO15118_2014 = 25  };		
-enum ResponseCodeType_ISO15118_2018	{ OK_ISO15118_2018 = 0, OK_NewSessionEstablished_ISO15118_2018 = 1, OK_OldSessionJoined_ISO15118_2018 = 2, OK_CertificateExpiresSoon_ISO15118_2018 = 3, 
-									   OK_IsolationValid_ISO15118_2018 = 4, OK_IsolationWarning_ISO15118_2018 = 5, WARNING_CertificateExpired_ISO15118_2018 = 6, WARNING_NoCertificateAvailable_ISO15118_2018 = 7,
-									   WARNING_CertValidationError_ISO15118_2018 = 8, WARNING_CertVerificationError_ISO15118_2018 = 9, WARNING_ContractCanceled_ISO15118_2018 = 10,
-									   FAILED_ISO15118_2018 = 11, FAILED_SequenceError_ISO15118_2018 = 12, FAILED_ServiceIDInvalid_ISO15118_2018 = 13, FAILED_UnknownSession_ISO15118_2018 = 14,
-									   FAILED_ServiceSelectionInvalid_ISO15118_2018 = 15, FAILED_SignatureError_ISO15118_2018 = 16, FAILED_IdentificationSelectionInvalid_ISO15118_2018 = 17,
-									   FAILED_ChallengeInvalid_ISO15118_2018 = 18, FAILED_WrongChargeParameter_ISO15118_2018 = 19, FAILED_IsolationFault_ISO15118_2018 = 20,
-									   FAILED_PowerDeliveryNotApplied_ISO15118_2018 = 21, FAILED_TariffSelectionInvalid_ISO15118_2018 = 22, FAILED_ChargingProfileInvalid_ISO15118_2018 = 23,
-									   FAILED_MeteringSignatureNotValid_ISO15118_2018 = 24, FAILED_NoChargeServiceSelected_ISO15118_2018 = 25, FAILED_WrongEnergyTransferMode_ISO15118_2018 = 26,  
-									   FAILED_ContactorError_ISO15118_2018 = 27, FAILED_CertificateRevoked_ISO15118_2018 = 28, FAILED_CertificateNotYetValid_ISO15118_2018 = 29 };													   						   
-enum EVSENotificationType		 		{ None = 0, StopCharging = 1, ReNegotiation = 2};		
-enum ServiceCategoryType 				{ EVCharging = 0, Internet = 1, ContractCertificate = 2, OtherCustom = 3};
-enum PaymentOptionType 		      		{ Contract = 0, ExternalPayment = 1};
-/*enum EVSESupportedEnergyTransferType 	{ AC_single_phase_core = 0, AC_three_phase_core = 1, DC_core = 2, DC_extended = 3,
-									  DC_combo_core = 4, DC_dual = 5, AC_core1p_DC_extended = 6, AC_single_DC_core = 7,
-									  AC_single_phase_three_phase_core_DC_extended = 8, AC_core3p_DC_extended = 9};*/
-enum EnergyTransferModeType			{ AC_single_phase_core = 0, AC_three_phase_core = 1, DC_core = 2, DC_extended = 3,
-									  DC_combo_core = 4, DC_unique = 5};
-//enum identificationOptionType 			{ Contract = 0, ExternalIdentification = 1};						   
-enum unitSymbolType_DIN70121			{ h_DIN70121 = 0, m_DIN70121 = 1, s_DIN70121 = 2, A_DIN70121 = 3, Ah_DIN70121 = 4, V_DIN70121 = 5, VA_DIN70121 = 6, W_DIN70121 = 7, Ws_DIN70121 = 8, Wh_DIN70121 = 9};						   
-enum unitSymbolType_ISO15118_2014		{ h_ISO15118_2014 = 0, m_ISO15118_2014 = 1, s_ISO15118_2014 = 2, A_ISO15118_2014 = 3, V_ISO15118_2014 = 4, W_ISO15118_2014 = 5, Wh_ISO15118_2014 = 6};							   
-enum ProcessingType					{ Finished = 0, Ongoing = 1, Ongoing_WaitingForCustomerInteraction = 2};							   
-enum EVSEProcessingType_DIN70121		{ Finished_DIN70121 = 0, Ongoing_DIN70121 = 1};						   
-enum EVSEProcessingType_ISO15118_2014	{ Finished_ISO15118_2014 = 0, Ongoing_ISO15118_2014 = 1, Ongoing_WaitingForCustomerInteraction_ISO15118_2014=2 };		   
-enum DC_EVErrorCodeType 		  		{ NO_ERROR = 0, FAILED_RESSTemperatureInhibit = 1, FAILED_EVShiftPosition = 2, FAILED_ChargerConnectorLockFault = 3,
-									  FAILED_EVRESSMalfunction = 4, FAILED_ChargingCurrentdifferential = 5, FAILED_ChargingVoltageOutOfRange = 6,
-									  Reserved_A = 7, Reserved_B = 8, Reserved_C = 9, FAILED_ChargingSystemIncompatibility = 10, NoData = 11};
-enum IsolationLevelType_DIN70121 		{ Invalid_DIN70121 = 0, Valid_DIN70121 = 1, Warning_DIN70121 = 2, Fault_DIN70121 = 3};
-enum IsolationLevelType_ISO15118_2014		{ Invalid_ISO15118_2014 = 0, Valid_ISO15118_2014 = 1, Warning_ISO15118_2014 = 2, Fault_ISO15118_2014 = 3, No_IMD_ISO15118_2014	 = 4};
-enum DC_EVSEStatusCodeType			{ EVSE_NotReady = 0, EVSE_Ready = 1, EVSE_Shutdown = 2, EVSE_UtilityInterruptEvent = 3,
-						 			  EVSE_IsolationMonitoringActive = 4, EVSE_EmergencyShutdown = 5, EVSE_Malfunction = 6,
-						 			  Reserved_8 = 7, Reserved_9 = 8};
-enum ScheduleOriginType				{ EV = 0, SA = 1};		
-enum ChargeProgressType_ISO15118_2014	{start_ISO15118_2014 = 0, Stop_ISO15118_2014 = 1, Renegotiate_ISO15118_2014 = 2};		
-enum ChargeProgressType_ISO15118_2018	{start_ISO15118_2018 = 0, Renegotiate_ISO15118_2018 = 1, Standby_ISO15118_2018 = 2, Stop_ISO15118_2018 = 3};		
-enum evOperationType					{Charge = 0, Discharge = 1, Standby = 2};	
-enum mechanicalChargingDeviceStatusType {Home = 0, Moving = 1, EndPosition = 2};	
-enum EV_CP_StatusType					{A = 0, B = 1, C = 2, D = 3, E = 4, F = 5};	
-enum EV_Error_Status_CodeType			{ No_EV_Error = 0, EV_FAILED_EmergencyEvent = 1, EV_FAILED_Breaker = 2, EV_FAILED_RESSTemperatureInhibit = 3,
-						 			  EV_FAILED_RESS = 4, EV_FAILED_ChargingCurrentDifferential = 5, EV_FAILED_ChargingVoltageOutOfRange = 6,
-						 			  Reserved_by_ISO_1 = 7,  Reserved_by_ISO_2 = 8, Reserved_by_ISO_3 = 9, OEM1 = 10,
-						 			  OEM2 = 11,  OEM3 = 12, OEM4 = 13};
-enum IsolationStatusType				{ Invalid = 0, Safe = 1, Warning = 2, Fault = 3};
-enum ChargingSessionType				{ Terminate = 0, Pause = 1};
-enum CostKindType						{ relativePricePercentage = 0, RenewableGenerationPercentage = 1, CarbonDioxideEmission = 2};
-
-enum MsgFlowStatus		 			{ Idle = 0, CM_SLAC_PARM_REQ = 1, CM_SLAC_PARM_CONF = 2, CM_START_ATTEN_CHAR_IND = 3,  CM_MNBC_SOUND_IND = 4, CM_ATTEN_CHAR_IND = 5,
-									  CM_ATTEN_CHAR_RSP = 6, CM_VALIDATE_REQ = 7, CM_VALIDATE_CNF = 8, CM_SLAC_MATCH_REQ = 9, CM_SLAC_MATCH_CNF = 10, CM_AMP_MAP_REQ = 11,
-									  CM_AMP_MAP_CNF = 12, CM_SET_KEY_REQ=13, CM_SET_KEY_CNF = 14, SLACC_SDP_UDP_Connection = 15,
-									  SLACC_SDP_TCP_Connection = 16, SupportedAppProtocolRequest = 17, SupportedAppProtocolResponse = 18, SessionSetupRequest = 19, SessionSetupResponse = 20,
-									  ServiceDiscoveryRequest = 21, ServiceDiscoveryResponse = 22, ServiceDetailRequest = 23, ServiceDetailResponse = 24, ServiceAndPaymentSelectionRequest = 25, ServiceAndPaymentSelectionResponse = 26,
-									  PaymentDetailsRequest = 27, PaymentDetailsResponse = 28, AuthorizationRequest = 29, AuthorizationResponse = 30, CertificateUpdateRequest = 31, CertificateUpdateResponse = 32,
-									  CertificateInstallationRequest = 33, CertificateInstallationResponse = 34, ChargeParameterDiscoveryRequest = 35, ChargeParameterDiscoveryResponse = 36, CableCheckRequest = 37, CableCheckResponse = 38,
-									  PreChargeRequest = 39, PreChargeResponse = 40, PowerDeliveryRequestStart = 41, PowerDeliveryResponsetStart = 42, ChargingStatusRequest = 43, ChargingStatusResponse = 44,
-									  CurrentDemandRequest = 45, CurrentDemandResponse = 46, MeteringReceiptRequest = 47, MeteringReceiptResponse = 48, PowerDeliveryRequestStop = 49, PowerDeliveryResponsetStop = 50,
-									  WeldingDetectionRequest = 51, WeldingDetectionResponse = 52, SessionStopRequest = 53, SessionStopResponse = 54,
-									   Performance_Timeout = 253, Sequence_Timeout = 254, Other_Fault=255  };	
-
-
-struct PhysicalValueType_DIN70121 				//The final physical value is determined by: Value * 10 ^ Multiplier [Unit]
-{
-	int									Multiplier;			//range: -3..+3
-	enum unitSymbolType_DIN70121			Unit;		
-	short 								Value;
-}; 
-struct PhysicalValueType_ISO15118_2014			//The final physical value is determined by: Value * 10 ^ Multiplier [Unit]
-{
-	int									Multiplier;			//range: -3..+3
-	enum unitSymbolType_ISO15118_2014		Unit;		
-	short 								Value;
-}; 
-struct PhysicalValueType_ISO15118_2018			//The final physical value is determined by: Value * 10 ^ Exponent [Unit]
-{
-	int									Exponent;		//range: -3..+3
-	short 								Value;
-}; 
-struct AppProtocolType 
-{
-	unsigned char	ProtocolNamespace[100];	
-	unsigned int	VersionNumberMajor;		
-	unsigned int	VersionNumberMinor;		
-	unsigned char	SchemaID;				
-	unsigned char	Priority;					//range 1..20
-}; 
-struct ACD_SSEnergyTransferModeType
-{
-	unsigned char	EVID[20];	
-}; 
-struct EVSEStatusType
-{
-	unsigned short				NotificationMaxDelay;	//in seconds
-	enum EVSENotificationType	EVSENotification;
-}; 
-struct ServiceIDListType
-{
-	unsigned short	ServiceID[10];	//refer to chapter 8.6.2.1 Table 192
-}; 
-struct PaymentOptionListType
-{
-	enum PaymentOptionType	PaymentOption[2];
-};
-struct ServiceTagType 
-{
-	unsigned short				ServiceID;
-	unsigned char				ServiceName[32];//Optional Element
-	enum ServiceCategoryType	ServiceCategory;
-	unsigned char				ServiceScope[32];//Optional Element
-}; 
-struct ServiceType_DIN70121 
-{
-	struct ServiceTagType		ServiceTag;
-	BOOL					FreeService;
-}; 
-struct ServiceType_ISO15118_2014
-{
-	unsigned short				ServiceID;
-	unsigned char				ServiceName[32];	//Optional
-	enum ServiceCategoryType	ServiceCategory;
-	unsigned char				ServiceScope[64];	//Optional
-	BOOL					FreeService;
-}; 
-/*struct ServiceType_ISO15118_2018
-{
-	unsigned short				ServiceID;
-	BOOL					FreeService;
-}; */
-struct SupportedEnergyTransferModeType
-{
-	enum EnergyTransferModeType	EnergyTransferMode[6];
-};
-struct ServiceChargeType 
-{
-	struct ServiceType_DIN70121				Services;
-	//enum EVSESupportedEnergyTransferType		EnergyTransferType;
-	enum EnergyTransferModeType			EnergyTransferType;
-}; 
-
-struct ChargeServiceType 
-{
-	struct ServiceType_ISO15118_2014			Services;
-	struct SupportedEnergyTransferModeType	SupportedEnergyTransferMode;
-}; 
-struct ServiceListType
-{
-	struct ServiceType_ISO15118_2014			Service[8];
-}; 
-struct IdentificationOptionListType	
-{
-	enum PaymentOptionType				IdentificationOption[2];
-}; 
-struct ParameterType
-{
-	unsigned char							Name[32];
-	struct PhysicalValueType_ISO15118_2014		PhysicalValue_ISO15118_2014;
-	struct PhysicalValueType_ISO15118_2018		PhysicalValue_ISO15118_2018;
-};
-struct ParameterSetType
-{
-	short 				ParameterSetID;
-	struct ParameterType	Parameter[16];
-};
-struct ServiceParameterListType
-{
-	struct ParameterSetType		ParameterSet[255];
-};
-struct WPT_SDlEnergyTransferModeType
-{
-	struct ServiceParameterListType	ServiceParameterList;
-};
-struct SelectedServiceType
-{
-	unsigned short			ServiceID;
-	short					ParameterSetID;
-};
-struct SelectedServiceListType	
-{
-	struct SelectedServiceType	SelectedService[16];
-};
-
-struct CertificateChainType
-{
-	unsigned char 				Id[32];				//Optional
-	unsigned char 				Certificate[800];		//check size again
-	unsigned char				SubCertificates[4][800];	//Optional, 	check size again
-};
-struct PNC_AReqIdentificationModeType
-{
-	unsigned char 			GenChallenge[16];					//DIN70121=> None,	ISO15118_2014=>None,	ISO15118_2018=>Optional 	
-	unsigned char 			Id[32];							//DIN70121=> None,	ISO15118_2014=>None,	ISO15118_2018=>Optional 	
-};
-struct AC_EVChargeParameterType 
-{
-	unsigned int 								DepartureTime;		//Optional
-	struct PhysicalValueType_ISO15118_2014			EAmount;
-	struct PhysicalValueType_ISO15118_2014			EVMaxVoltage;
-	struct PhysicalValueType_ISO15118_2014			EVMaxCurrent;
-	struct PhysicalValueType_ISO15118_2014			EVMinCurrent;
-}; 
-struct DC_EVStatusType_DIN70121
-{
-	BOOL						EVReady;
-	BOOL						EVCabinConditioning;
-	BOOL						EVRESSConiditioning;
-	enum DC_EVErrorCodeType		EVErrorCode;
-	unsigned char 					EVRESSSOC;		/*0-100 percentage*/	
-}; 
-struct DC_EVChargeParameterType_DIN70121	 
-{
-	struct DC_EVStatusType_DIN70121			DC_EVStatus;
-	struct PhysicalValueType_DIN70121			EVMaximumCurrentLimit;
-	struct PhysicalValueType_DIN70121			EVMaximumPowerLimit;			//Optional
-	struct PhysicalValueType_DIN70121			EVMaximumVoltageLimit;
-	struct PhysicalValueType_DIN70121			EVEnergyCapacity;				//Optional
-	struct PhysicalValueType_DIN70121			EVEnergyRequest;				//Optional
-	unsigned char							FullSOC;/*0-100 percentage*/		//Optional
-	unsigned char							BulkSOC;/*0-100 percentage*/	//Optional
-}; 
-struct DC_EVStatusType_ISO15118_2014 
-{
-	BOOL						EVReady;
-	enum DC_EVErrorCodeType		EVErrorCode;
-	unsigned char 					EVRESSSOC;		/*0-100 percentage*/	
-}; 
-struct DC_EVChargeParameterType_ISO15118_2014 
-{
-	unsigned int 								DepartureTime;				//Optional
-	struct DC_EVStatusType_ISO15118_2014			DC_EVStatus;
-	struct PhysicalValueType_ISO15118_2014 			EVMaximumCurrentLimit;
-	struct PhysicalValueType_ISO15118_2014			EVMaximumPowerLimit;			//Optional
-	struct PhysicalValueType_ISO15118_2014			EVMaximumVoltageLimit;
-	struct PhysicalValueType_ISO15118_2014			EVEnergyCapacity;				//Optional
-	struct PhysicalValueType_ISO15118_2014			EVEnergyRequest;				//Optional
-	unsigned char								FullSOC;/*0-100 percentage*/		//Optional
-	unsigned char								BulkSOC;/*0-100 percentage*/	//Optional
-}; 
-struct Dynamic_CPDReqControlModeType
-{
-	unsigned int 								DepartureTime;				
-};
-struct RelativeTimeIntervalType 
-{
-	unsigned int 	duration;			//Optional
-	unsigned int	start;
-}; 
-struct PMaxScheduleEntryType 
-{
-	struct RelativeTimeIntervalType	RelativeTimeInterval;
-	unsigned short					PMax;
-}; 
-struct PMaxScheduleType 
-{
-	unsigned short					PMaxScheduleID;			//no this itme in ISO15118_2014 
-	struct PMaxScheduleEntryType		PMaxScheduleEntry[1024];
-}; 
-struct CostType
-{
-	unsigned int 					amount;
-	enum CostKindType				costKind;
-	int 							amountMultiplier;		//Optional , range: -3..+3
-};
-struct ConsumptionCostType	
-{
-	struct CostType						Cost[3];
-	struct PhysicalValueType_ISO15118_2014		startValue;
-};
-struct SalesTariffEntryType	
-{
-	struct RelativeTimeIntervalType	RelativeTimeInterval;
-	unsigned char 					EPriceLevel;			//Optional
-	struct ConsumptionCostType		ConsumptionCost[3];	//Optional
-};
-struct SalesTariffType	
-{
-	unsigned char 					Id[32];					//Optional
-	short 						SalesTariffID;
-	unsigned char 					SalesTariffDescription[32];	//Optional
-	unsigned char 					NumEPriceLevels;			//Optional
-	struct SalesTariffEntryType			SalesTariffEntry[1024];
-};
-struct SAScheduleTupleType
-{
-	short 						SAScheduleTupleID;
-	struct PMaxScheduleType			PMaxSchedule;
-	struct SalesTariffType				SalesTariff;				//Optional
-};
-struct ScheduleListType
-{
-	enum ScheduleOriginType					ScheduleOrigin;
-	struct SAScheduleTupleType					ScheduleTuple[3];	
-};
-struct Scheduled_CPDReqControlModeType	
-{
-	enum ProcessingType						EVProcessing;
-	unsigned int 								DepartureTime;		//Optional
-	unsigned short 							MaxSupportingPoints;
-	struct ScheduleListType						ScheduleList;			//Optional
-};
-struct AC_CPDReqEnergyTransferModeType	
-{
-	struct PhysicalValueType_ISO15118_2018			EVTargetEnergyRequest;			//Optional
-	struct PhysicalValueType_ISO15118_2018			EVMaximumEnergyRequest;		//Optional
-	struct PhysicalValueType_ISO15118_2018			EVMinimumEnergyRequest;		//Optional
-	struct PhysicalValueType_ISO15118_2018			EVMaximumChargePower;
-	struct PhysicalValueType_ISO15118_2018			EVMaximumChargeCurrent;
-	struct PhysicalValueType_ISO15118_2018			EVMinimumChargeCurrent;
-	struct PhysicalValueType_ISO15118_2018			EVMaximumVoltage;
-};
-struct DC_CPDReqEnergyTransferModeType
-{
-	struct PhysicalValueType_ISO15118_2018			EVMaximumChargePower;			//Optional
-	struct PhysicalValueType_ISO15118_2018			EVMinimumChargePower;			//Optional
-	struct PhysicalValueType_ISO15118_2018			EVMaximumChargeCurrent;			
-	struct PhysicalValueType_ISO15118_2018			EVMinimumChargeCurrent;			
-	struct PhysicalValueType_ISO15118_2018			EVMaximumVoltage;			
-	struct PhysicalValueType_ISO15118_2018			EVTargetEnergyRequest;				//Optional
-	struct PhysicalValueType_ISO15118_2018			EVMaximumEnergyRequest;			//Optional
-	struct PhysicalValueType_ISO15118_2018			EVMinimumEnergyRequest;			//Optional
-	unsigned char								TargetSOC;						//Optional
-	unsigned char								BulkSOC;							//Optional
-};
-struct BPT_AC_CPDReqEnergyTransferModeType
-{
-	struct PhysicalValueType_ISO15118_2018			EVMaximumChargePower;			
-	struct PhysicalValueType_ISO15118_2018			EVMaximumDischargePower;			
-	struct PhysicalValueType_ISO15118_2018			EVMinimumDischargePower;			
-	struct PhysicalValueType_ISO15118_2018			EVMaximumChargeCurrent;		
-	struct PhysicalValueType_ISO15118_2018			EVMaximumDischargeCurrent;			
-	struct PhysicalValueType_ISO15118_2018			EVMinimumChargeCurrent;			
-	struct PhysicalValueType_ISO15118_2018			EVMinimumDischargeCurrent;			
-	struct PhysicalValueType_ISO15118_2018			EVTargetEnergyRequest;				//Optional
-	struct PhysicalValueType_ISO15118_2018			EVMinimumEnergyRequest;			//Optional
-	struct PhysicalValueType_ISO15118_2018			EVMaximumEnergyRequest;			//Optional
-	struct PhysicalValueType_ISO15118_2018			EVMaximumVoltage;			
-};
-struct BPT_DC_CPDReqEnergyTransferModeType
-{
-	struct PhysicalValueType_ISO15118_2018			EVMaximumChargePower;			
-	struct PhysicalValueType_ISO15118_2018			EVMinimumChargePower;			
-	struct PhysicalValueType_ISO15118_2018			EVMaximumDischargePower;			
-	struct PhysicalValueType_ISO15118_2018			EVMinimumDischargePower;		
-	struct PhysicalValueType_ISO15118_2018			EVMaximumChargeCurrent;			
-	struct PhysicalValueType_ISO15118_2018			EVMinimumChargeCurrent;			
-	struct PhysicalValueType_ISO15118_2018			EVMaximumDischargeCurrent;			
-	struct PhysicalValueType_ISO15118_2018			EVMinimumDischargeCurrent;				
-	struct PhysicalValueType_ISO15118_2018			EVMaximumVoltage;			
-	struct PhysicalValueType_ISO15118_2018			EVMinimumVoltage;			
-	struct PhysicalValueType_ISO15118_2018			EVTargetEnergyRequest;	
-	struct PhysicalValueType_ISO15118_2018			EVMaximumEnergyRequest;			
-	struct PhysicalValueType_ISO15118_2018			EVMinimumEnergyRequest;			
-	unsigned char								TargetSOC;					//Optional
-	unsigned char								BulkSOC;						//Optional
-};	
-struct WPT_CPDReqEnergyTransferModeType
-{
-	struct PhysicalValueType_ISO15118_2018			EVMaximumPower;				//Optional
-	struct PhysicalValueType_ISO15118_2018			EVMinimumPower;				//Optional
-	struct PhysicalValueType_ISO15118_2018			EVTargetEnergyRequest;			//Optional
-	struct PhysicalValueType_ISO15118_2018			EVMaximumEnergyRequest;		//Optional
-	struct PhysicalValueType_ISO15118_2018			EVMinimumEnergyRequest;		//Optional
-};
-struct ACD_CPDReqEnergyTransferModeType	
-{
-	//cannot be found in standard
-};
-struct SAScheduleListType
-{
-	struct SAScheduleTupleType		SAScheduleTuple[3];
-};
-struct DC_EVSEStatusType_DIN70121 
-{
-	enum IsolationLevelType_DIN70121			EVSEIsolationStatus;			//Optional
-	enum DC_EVSEStatusCodeType			EVSEStatusCode;
-	unsigned int							NotificationMaxDelay;
-	enum EVSENotificationType				EVSENotification;
-}; 
-struct DC_EVSEChargeParameterType_DIN70121 
-{
-	struct DC_EVSEStatusType_DIN70121		DC_EVSEStatus;
-	struct PhysicalValueType_DIN70121			EVSEMaximumCurrentLimit;
-	struct PhysicalValueType_DIN70121			EVSEMaximumPowerLimit;			//Optional
-	struct PhysicalValueType_DIN70121			EVSEMaximumVoltageLimit;
-	struct PhysicalValueType_DIN70121			EVSEMinimumCurrentLimit;
-	struct PhysicalValueType_DIN70121			EVSEMinimumVoltageLimit;
-	struct PhysicalValueType_DIN70121			EVSECurrentRegulationTolerance;		//Optional
-	struct PhysicalValueType_DIN70121			EVSEPeakCurrentRipple;
-	struct PhysicalValueType_DIN70121			EVSEEnergyToBeDelivered;			//Optional
-}; 
-struct AC_EVSEStatusType	
-{
-	BOOL							  		RCD;
-	unsigned short 							NotificationMaxDelay;
-	enum EVSENotificationType					EVSENotification;		//need to be confirmed
-}; 
-struct AC_EVSEChargeParameterType 
-{
-	struct AC_EVSEStatusType					AC_EVSEStatus;
-	struct PhysicalValueType_ISO15118_2014			EVSENominalVoltage;
-	struct PhysicalValueType_ISO15118_2014			EVSEMaxCurrent;
-}; 
-struct DC_EVSEStatusType_ISO15118_2014
-{
-	unsigned short								NotificationMaxDelay;
-	enum EVSENotificationType					EVSENotification;
-	enum IsolationLevelType_ISO15118_2014			EVSEIsolationStatus;					//Optional
-	enum DC_EVSEStatusCodeType				DC_EVSEStatusCode;
-};
-struct DC_EVSEChargeParameterType_ISO15118_2014
-{
-	struct DC_EVSEStatusType_ISO15118_2014		DC_EVSEStatus;
-	struct PhysicalValueType_ISO15118_2014			EVSEMaximumCurrentLimit;
-	struct PhysicalValueType_ISO15118_2014			EVSEMaximumPowerLimit;			
-	struct PhysicalValueType_ISO15118_2014			EVSEMaximumVoltageLimit;
-	struct PhysicalValueType_ISO15118_2014			EVSEMinimumCurrentLimit;
-	struct PhysicalValueType_ISO15118_2014			EVSEMinimumVoltageLimit;
-	struct PhysicalValueType_ISO15118_2014			EVSECurrentRegulationTolerance;		//Optional
-	struct PhysicalValueType_ISO15118_2014			EVSEPeakCurrentRipple;
-	struct PhysicalValueType_ISO15118_2014			EVSEEnergyToBeDelivered;			//Optional
-}; 
-struct Scheduled_CPDResControlModeType	
-{
-	struct ScheduleListType						ScheduleList;
-};
-struct AC_CPDResEnergyTransferModeType
-{
-	struct PhysicalValueType_ISO15118_2018			EVSEMaximumChargeCurrent[3];
-	struct PhysicalValueType_ISO15118_2018			EVSENominalVoltage;
-	struct PhysicalValueType_ISO15118_2018			EVSENominalFrequency;
-};
-struct DC_CPDResEnergyTransferModeType
-{
-	struct PhysicalValueType_ISO15118_2018			EVSEMaximumChargePower;		
-	struct PhysicalValueType_ISO15118_2018			EVSEMaximumChargeCurrent;			
-	struct PhysicalValueType_ISO15118_2018			EVSEMinimumChargeCurrent;			
-	struct PhysicalValueType_ISO15118_2018			EVSEMaximumVoltage;			
-	struct PhysicalValueType_ISO15118_2018			EVSEMinimumVoltage;				
-};
-struct BPT_AC_CPDResEnergyTransferModeType
-{
-	struct PhysicalValueType_ISO15118_2018			EVSEMaximumChargeCurrent[3];		
-	struct PhysicalValueType_ISO15118_2018			EVSEMaximumDischargeCurrent[3];			
-	struct PhysicalValueType_ISO15118_2018			EVSENominalVoltage;			
-	struct PhysicalValueType_ISO15118_2018			EVSENominalFrequency;			
-};
-struct BPT_DC_CPDResEnergyTransferModeType
-{
-	struct PhysicalValueType_ISO15118_2018			EVSEMaximumChargePower;		
-	struct PhysicalValueType_ISO15118_2018			EVSEMaximumDischargePower;			
-	struct PhysicalValueType_ISO15118_2018			EVSEMaximumChargeCurrent;			
-	struct PhysicalValueType_ISO15118_2018			EVSEMaximumDischargeCurrent;			
-	struct PhysicalValueType_ISO15118_2018			EVSEMinimumChargeCurrent;		
-	struct PhysicalValueType_ISO15118_2018			EVSEMinimumDischargeCurrent;		
-	struct PhysicalValueType_ISO15118_2018			EVSEMaximumVoltage;			
-	struct PhysicalValueType_ISO15118_2018			EVSEMinimumVoltage;			
-};
-struct WPT_CPDResEnergyTransferModeType
-{
-	struct PhysicalValueType_ISO15118_2018			EVSEMaximumPower;			
-	struct PhysicalValueType_ISO15118_2018			EVSEMinimumPower;		
-};
-struct ACD_CPDResEnergyTransferModeType	
-{
-	//not found in ISO15118_2018
-};
-struct ProfileEntryType_DIN70121
-{
-	unsigned int 				ChargingProfileEntryStart;
-	short						ChargingProfileEntryMaxPower;
-};
-struct ChargingProfileType_DIN70121
-{
-	short 							SAScheduleTupleID;
-	struct ProfileEntryType_DIN70121		ProfileEntry[24];
-};
-struct DC_EVPowerDeliveryParameterType_DIN70121 
-{
-	struct DC_EVStatusType_DIN70121			DC_EVStatus;
-	BOOL								BulkChargingComplete;		//Optional
-	BOOL								ChargingComplete;
-}; 
-struct ProfileEntryType_ISO15118_2014 
-{
-	unsigned int 								ChargingProfileEntryStart;
-	struct PhysicalValueType_ISO15118_2018			ChargingProfileEntryMaxPower;
-	unsigned char 								ChargingProfileEntryMaxNumberOfPhasesInUse;	//Optional
-};
-struct ChargingProfileType_ISO15118_2014 
-{
-	struct ProfileEntryType_ISO15118_2014			ProfileEntry[24];
-};
-struct DC_EVPowerDeliveryParameterType_ISO15118_2014  
-{
-	struct DC_EVStatusType_ISO15118_2014 			DC_EVStatus;
-	BOOL									BulkChargingComplete;		//Optional
-	BOOL									ChargingComplete;
-}; 
-struct TimeInterval	
-{
-	unsigned int 								start;
-	unsigned int 								duration;				//Optional
-};
-struct PowerScheduleEntryType
-{
-	struct TimeInterval							TimeInterval;
-	struct PhysicalValueType_ISO15118_2018			Power[3];
-};
-struct EVPowerProfileType
-{
-	struct PowerScheduleEntryType				EVPowerProfileEntry[2048];
-};
-struct Scheduled_PDReqControlModeType
-{
-	unsigned char 								ScheduleTupleID;
-	struct EVPowerProfileType					EVPowerProfile;
-};
-struct BPT_Scheduled_PDReqControlModeType
-{
-	unsigned char 								ScheduleTupleID;
-	struct EVPowerProfileType					EVPowerProfile;			//Optional
-	enum evOperationType						EVOperation;
-};
-struct ListOfRootCertificateIDsType
-{
-	unsigned char 								RootCertificateID[20][40];
-};
-struct ContractSignatureEncryptedPrivateKeyType	
-{
-	unsigned char 								Id[32];
-};
-struct DiffieHellmanPublickeyType
-{
-	unsigned char 								Id[32];
-};
-struct ContractCertificateEncryptedPrivateKeyType
-{
-	unsigned char 								Id[32];
-};
-struct EVTechnicalStatusType
-{
-	BOOL									EV_Status_ReadyToCharge;
-	BOOL									EV_Status_ImmobilizationRequest;		//Optional
-	BOOL									EV_Status_Immobilized;
-	struct PhysicalValueType_ISO15118_2018			EV_Status_WLAN_Strength;
-	enum EV_CP_StatusType						EV_CP_Status;
-	unsigned char								EV_Status_RESSSOC;					//0~100%
-	enum EV_Error_Status_CodeType				EV_Error_Status_Code;	
-	BOOL									EVSE_Timeout;
-};
-struct MeterInfoType_ISO15118_2014		
-{
-	unsigned char								MeterID[32];
-	unsigned long 								MeterReading;						//Optional
-	unsigned char								SigMeterReading[64];				//Optional
-	short 									MeterStatus;						//Optional
-	short 									TMeter;							//Optional
-};
-struct Scheduled_MRReqControlModeType
-{
-	unsigned char 								ScheduleTupleID;
-};
-struct MeterInfoType_ISO15118_2018		
-{
-	unsigned char								MeterID[32];
-	unsigned long 								MeterReadingWhCharged;			//Optional
-	unsigned long 								MeterReadingWhDischarged;			//Optional
-	unsigned long 								MeterReadingVARhLeading;			//Optional
-	unsigned long 								MeterReadingVARhLagging;			//Optional
-	unsigned char								SignatureMeterReading[64];			//Optional
-	short 									MeterStatus;						//Optional
-	short 									TimeStampMeter;					//Optional
-	BOOL									ReceiptRequired;					//Optional
-};
-struct PnC_CLReqIdentificationModeType
-{
-	BOOL									MeteringReceiptRequested;
-};
-struct Dynamic_CSReqControlModeType
-{
-	struct PhysicalValueType_ISO15118_2018			EVTargetEnergyRequest;
-	struct PhysicalValueType_ISO15118_2018			EVMaximumEnergyRequest;
-	struct PhysicalValueType_ISO15118_2018			EVMinimumEnergyRequest;
-	struct PhysicalValueType_ISO15118_2018			EVMaximumChargePower;
-	struct PhysicalValueType_ISO15118_2018			EVMaximumChargeCurrent;
-	struct PhysicalValueType_ISO15118_2018			EVMinimumChargeCurrent;
-};
-struct Scheduled_CSReqControlModeType
-{
-	struct PhysicalValueType_ISO15118_2018			EVTargetEnergyRequest;				//Optional
-	struct PhysicalValueType_ISO15118_2018			EVMaximumEnergyRequest;			//Optional
-	struct PhysicalValueType_ISO15118_2018			EVMinimumEnergyRequest;			//Optional
-	BOOL									Standby;
-	struct PhysicalValueType_ISO15118_2018			EVMaximumChargePower;			//Optional
-	struct PhysicalValueType_ISO15118_2018			EVMaximumChargeCurrent;			//Optional
-	struct PhysicalValueType_ISO15118_2018			EVMinimumChargeCurrent;			//Optional
-};
-struct DisplayParametersType			
-{
-	unsigned short 							CurrentRange;
-	unsigned char	 							CurrentSOC;						//0~100%
-	unsigned char	 							MinimumSOC;						//0~100%
-	struct PhysicalValueType_ISO15118_2018			RemainingTimeToMaximumSOC;				
-	struct PhysicalValueType_ISO15118_2018			RemainingTimeToTargetSOC;		
-	struct PhysicalValueType_ISO15118_2018			RemainingTimeToBulkSOC;			
-	struct PhysicalValueType_ISO15118_2018			RemainingTimeToMinimumSOC;
-	BOOL									ChargingComplete;
-	BOOL									BulkChargingComplete;
-	BOOL									InletHot;			
-};		
-struct PnC_CLResIdentificationModeType
-{
-	struct MeterInfoType_ISO15118_2018			MeterInfo;		
-};
-struct Dynamic_CSResControlModeType
-{
-	struct PhysicalValueType_ISO15118_2018			EVSETargetActivePower;
-};
-struct Scheduled_CDResControlModeType
-{
-	struct PhysicalValueType_ISO15118_2018			EVSEMaximumChargePower;		//Optional
-	struct PhysicalValueType_ISO15118_2018			EVSEMaximumChargeCurrent;	//Optional
-	struct PhysicalValueType_ISO15118_2018			EVSEMaximumVoltage;			//Optional
-};
-struct LFA_EVFinePositioningSetupParametersType	
-{
-	unsigned char 								NumberOfSensors;
-	//NOT complete yet,  to be continue.....
-};
-
-/****SupportedAppProtocolRequest****/
-struct SupportedAppProtocolRequest_DIN70121 
-{
-	struct AppProtocolType	AppProtocol[20];			
-}; 
-struct SupportedAppProtocolRequest_ISO15118_2014 
-{
-	struct AppProtocolType	AppProtocol[20];			
-}; 
-struct SupportedAppProtocolRequest_ISO15118_2018 
-{
-	struct AppProtocolType	AppProtocol[20];			
-}; 
-/****SupportedAppProtocolResponse****/
-struct SupportedAppProtocolResponse_DIN70121 
-{
-	enum ResponseCodeType_DIN70121		ResponseCode;			
-	unsigned char							SchemaID;				//Optional
-}; 
-struct SupportedAppProtocolResponse_ISO15118_2014 
-{
-	enum ResponseCodeType_ISO15118_2014	ResponseCode;	
-	unsigned char							SchemaID;				//Optional
-}; 
-struct SupportedAppProtocolResponse_ISO15118_2018
-{
-	enum ResponseCodeType_ISO15118_2018	ResponseCode;	
-	unsigned char							SchemaID;					//Optional
-}; 
-/****SessionSetupRequest****/
-struct SessionSetupRequest_DIN70121  
-{
-	unsigned char						EVCCID[8];						//the MAC address of the EVCC in Hex
-}; 
-struct SessionSetupRequest_ISO15118_2014 
-{
-	unsigned char						EVCCID[8];						//the MAC address of the EVCC in Hex
-}; 
-struct SessionSetupRequest_ISO15118_2018 
-{
-	unsigned char						EVCCID[8];						//the MAC address of the EVCC in Hex
-	struct ACD_SSEnergyTransferModeType	ACD_SSEnergyTransferMode;			//For ACD mandatory, optional for rest
-}; 
-/****SessionSetupResponse****/
-struct SessionSetupResponse_DIN70121   
-{
-	enum ResponseCodeType_DIN70121		ResponseCode;		
-	unsigned char							EVSEID[40];					//DIN70121=>Max length:32,	ISO15118=>min length:7, max length:37
-	unsigned int							EVSETimeStamp;				//EPOCH format, Optional
-}; 
-struct SessionSetupResponse_ISO15118_2014  
-{
-	enum ResponseCodeType_ISO15118_2014	ResponseCode;	
-	unsigned char							EVSEID[40];					//DIN70121=>Max length:32,	ISO15118=>min length:7, max length:37
-	unsigned int							EVSETimeStamp;				//EPOCH format, Optional
-}; 
-struct SessionSetupResponse_ISO15118_2018 
-{
-	enum ResponseCodeType_ISO15118_2018	ResponseCode;	
-	unsigned char							EVSEID[40];					//DIN70121=>Max length:32,	ISO15118=>min length:7, max length:37
-	struct EVSEStatusType					EVSEStatus;					//Optional
-}; 
-/****ServiceDiscoveryRequest****/
-struct ServiceDiscoveryRequest_DIN70121    
-{
-	unsigned char				ServiceScope[32];		//Optional
-	enum ServiceCategoryType	ServiceCategory;		//Optional
-}; 
-struct ServiceDiscoveryRequest_ISO15118_2014 
-{
-	unsigned char				ServiceScope[32];		//Optional
-	enum ServiceCategoryType	ServiceCategory;		//Optional
-}; 
-struct ServiceDiscoveryRequest_ISO15118_2018  
-{
-	struct ServiceIDListType		SupportedServiceIDs;	//Optional
-}; 
-/****ServiceDiscoveryResponse****/
-struct ServiceDiscoveryResponse_DIN70121    
-{
-	enum ResponseCodeType_DIN70121		ResponseCode;
-	struct PaymentOptionListType				PaymentOptions;				
-	struct ServiceChargeType				ChargeService_DIN70121;		
-}; 
-struct ServiceDiscoveryResponse_ISO15118_2014
-{
-	enum ResponseCodeType_ISO15118_2014	ResponseCode;
-	struct PaymentOptionListType				PaymentOptions;				
-	struct ChargeServiceType				ChargeService;				
-	struct ServiceListType					ServiceList;					//Optional
-}; 
-struct ServiceDiscoveryResponse_ISO15118_2018  
-{
-	enum ResponseCodeType_ISO15118_2018	ResponseCode;		
-	struct EVSEStatusType					EVSEStatus;					//Optional
-	struct IdentificationOptionListType			IdentificationOptionList;			
-	struct ServiceListType					EnergyTransferServiceList;			
-	struct ServiceListType					VASList;						//Optional
-}; 
-/****ServiceDetailRequest****/
-//Only in ISO15118_2014 and ISO15118_2018
-struct ServiceDetailRequest_ISO15118_2014 
-{
-	unsigned short						ServiceID;								
-}; 
-struct ServiceDetailRequest_ISO15118_2018 
-{
-	unsigned short						ServiceID;						
-	struct WPT_SDlEnergyTransferModeType	WPT_SDlEnergyTransferMode;			
-}; 
-/****ServiceDetailResponse****/
-struct ServiceDetailResponse_ISO15118_2014
-{
-	enum ResponseCodeType_ISO15118_2014	ResponseCode;
-	unsigned short							ServiceID;						
-	struct ServiceParameterListType 			ServiceParameterList;			
-}; 
-struct ServiceDetailResponse_ISO15118_2018 
-{
-	enum ResponseCodeType_ISO15118_2018	ResponseCode;
-	unsigned short							ServiceID;						
-	struct ServiceParameterListType 			ServiceParameterList;			
-	struct EVSEStatusType					EVSEStatus;					//Optional
-}; 
-/****ServiceAndPaymentSelectionRequest / ServiceSelectionRequest****/
-struct ServiceAndPaymentSelectionRequest_DIN70121	 
-{
-	enum PaymentOptionType		SelectedPaymentOption;		
-	struct SelectedServiceListType		SelectedServiceList;				
-}; 
-struct ServiceAndPaymentSelectionRequest_ISO15118_2014 
-{
-	enum PaymentOptionType		SelectedPaymentOption;		
-	struct SelectedServiceListType		SelectedServiceList;				
-}; 
-struct ServiceSelectionRequest_ISO15118_2018 
-{
-	enum PaymentOptionType			SelectedPaymentOption;		
-	struct SelectedServiceType			SelectedEnergyTransferService;	
-	struct SelectedServiceListType			SelectedVASList;				
-	enum ProcessingType				EVProcessing;						
-}; 
-/****ServiceAndPaymentSelectionResponse / ServiceSelectionResponse****/
-struct ServiceAndPaymentSelectionResponse_DIN70121	  
-{
-	enum ResponseCodeType_DIN70121		ResponseCode;
-}; 
-struct ServiceAndPaymentSelectionResponse_ISO15118_2014  
-{
-	enum ResponseCodeType_ISO15118_2014	ResponseCode;
-}; 
-struct ServiceSelectionResponse_ISO15118_2018 
-{
-	enum ResponseCodeType_ISO15118_2018	ResponseCode;
-	struct EVSEStatusType					EVSEStatus;					//Optional
-}; 
-/****PaymentDetailsRequest / IdentificationDetailsRequest****/
-struct PaymentDetailsRequest_ISO15118_2014 
-{
-	unsigned char 					eMAID[16];
-	struct CertificateChainType		ContractSignatureCertChain;
-};
-struct IdentificationDetailsRequest_ISO15118_2018  
-{
-	struct CertificateChainType		ContractSignatureCertChain;
-};
-/****PaymentDetailsResponse  / IdentificationDetailsResponse ****/
-struct PaymentDetailsResponse_ISO15118_2014 
-{
-	enum ResponseCodeType_ISO15118_2014	ResponseCode;
-	unsigned char 							GenChallenge[16];
-	long 								EVSETimeStamp;
-};
-struct IdentificationDetailsResponse_ISO15118_2018   
-{
-	enum ResponseCodeType_ISO15118_2018	ResponseCode;
-	struct EVSEStatusType					EVSEStatus;						//Optional
-	unsigned char 							GenChallenge[16];
-	enum ProcessingType					EVSEProcessing;			
-};
-/****ContractAuthenticationRequest / AuthorizationRequest****/
-struct ContractAuthenticationRequest_DIN70121	 
-{
-	//None
-}; 
-struct AuthorizationRequest_ISO15118_2014
-{
-	unsigned char 			GenChallenge[16];					//Optional
-	unsigned char 			Id[32];							//Optional
-}; 
-struct AuthorizationRequest_ISO15118_2018  
-{
-	struct PNC_AReqIdentificationModeType		PNC_AReqIdentificationMode;	//Optional
-};
-/****ContractAuthenticationResponse  / AuthorizationResponse****/
-struct ContractAuthenticationResponse_DIN70121	 
-{
-	enum ResponseCodeType_DIN70121		ResponseCode;
-	enum EVSEProcessingType_DIN70121		EVSEProcessing;
-}; 
-struct AuthorizationResponse_ISO15118_2014
-{
-	enum ResponseCodeType_ISO15118_2014	ResponseCode;
-	enum EVSEProcessingType_ISO15118_2014	EVSEProcessing;
-}; 
-struct AuthorizationResponse_ISO15118_2018   
-{
-	enum ResponseCodeType_ISO15118_2018	ResponseCode;
-	enum ProcessingType					EVSEProcessing;
-	struct EVSEStatusType					EVSEStatus;						//Optional
-};
-/****ChargeParameterDiscoveryRequest****/
-struct ChargeParameterDiscoveryRequest_DIN70121	  
-{
-	enum EnergyTransferModeType					EVRequestedEnergyTransferType;			
-	struct DC_EVChargeParameterType_DIN70121		DC_EVChargeParameter;	
-}; 
-struct ChargeParameterDiscoveryRequest_ISO15118_2014 
-{
-	unsigned short										MaxEntriesSAScheduleTuple;			//Optional
-	enum EnergyTransferModeType						RequestedEnergyTransferMode;			
-	struct AC_EVChargeParameterType					AC_EVChargeParameter;			
-	struct DC_EVChargeParameterType_ISO15118_2014		DC_EVChargeParameter;	
-}; 
-struct ChargeParameterDiscoveryRequest_ISO15118_2018 
-{
-	struct Dynamic_CPDReqControlModeType			Dynamic_CPDReqControlMode;
-	struct Scheduled_CPDReqControlModeType			Scheduled_CPDReqControlMode;
-	struct AC_CPDReqEnergyTransferModeType			AC_CPDReqEnergyTransferMode;
-	struct DC_CPDReqEnergyTransferModeType			DC_CPDReqEnergyTransferMode;
-	struct BPT_AC_CPDReqEnergyTransferModeType		BPT_AC_CPDReqEnergyTransferMode;
-	struct BPT_DC_CPDReqEnergyTransferModeType		BPT_DC_CPDReqEnergyTransferMode;
-	struct WPT_CPDReqEnergyTransferModeType			WPT_CPDReqEnergyTransferMode;
-	struct ACD_CPDReqEnergyTransferModeType			ACD_CPDReqEnergyTransferMode;
-}; 
-/****ChargeParameterDiscoveryResponse****/
-struct ChargeParameterDiscoveryResponse_DIN70121	  
-{
-	enum ResponseCodeType_DIN70121					ResponseCode;
-	enum EVSEProcessingType_DIN70121					EVSEProcessing;
-	struct SAScheduleListType 							SAScheduleList;
-	struct DC_EVSEChargeParameterType_DIN70121			DC_EVSEChargeParameter;
-}; 
-struct ChargeParameterDiscoveryResponse_ISO15118_2014  
-{
-	enum EVSEProcessingType_ISO15118_2014				EVSEProcessing;
-	enum ResponseCodeType_ISO15118_2014				ResponseCode;
-	struct SAScheduleListType 							SAScheduleList;
-	struct AC_EVSEChargeParameterType					AC_EVSEChargeParameter;
-	struct DC_EVSEChargeParameterType_ISO15118_2014		DC_EVSEChargeParameter;
-}; 
-struct ChargeParameterDiscoveryResponse_ISO15118_2018 
-{
-	enum ResponseCodeType_ISO15118_2018				ResponseCode;
-	struct EVSEStatusType								EVSEStatus;					//Optional
-	enum ProcessingType								EVSEProcessing;
-	struct Scheduled_CPDResControlModeType				Scheduled_CPDResControlMode;	//Optional
-	struct AC_CPDResEnergyTransferModeType				AC_CPDResEnergyTransferMode;
-	struct DC_CPDResEnergyTransferModeType				DC_CPDResEnergyTransferMode;
-	struct BPT_AC_CPDResEnergyTransferModeType			BPT_AC_CPDResEnergyTransferMode;
-	struct BPT_DC_CPDResEnergyTransferModeType			BPT_DC_CPDResEnergyTransferMode;
-	struct WPT_CPDResEnergyTransferModeType				WPT_CPDResEnergyTransferMode;
-	struct ACD_CPDResEnergyTransferModeType				ACD_CPDResEnergyTransferMode;
-}; 
-/****PowerDeliveryRequest****/
-struct PowerDeliveryRequest_DIN70121	   
-{
-	BOOL											ReadyToChargeState;
-	struct ChargingProfileType_DIN70121					ChargingProfile;
-	struct DC_EVPowerDeliveryParameterType_DIN70121		DC_EVPowerDeliveryParameter;
-}; 
-struct PowerDeliveryRequest_ISO15118_2014 
-{
-	enum ChargeProgressType_ISO15118_2014				ChargeProgress;
-	short 											SAScheduleTupleID;
-	struct ChargingProfileType_ISO15118_2014 				ChargingProfile;
-	struct DC_EVPowerDeliveryParameterType_ISO15118_2014	DC_EVPowerDeliveryParameter;
-}; 
-struct PowerDeliveryRequest_ISO15118_2018
-{
-	enum ChargeProgressType_ISO15118_2018				ChargeProgress;
-	struct Scheduled_PDReqControlModeType				Scheduled_PDReqControlMode;
-	struct BPT_Scheduled_PDReqControlModeType			BPT_Scheduled_PDReqControlMode;
-}; 
-/****PowerDeliveryResponse****/
-struct PowerDeliveryResponse_DIN70121	    
-{
-	enum ResponseCodeType_DIN70121				ResponseCode;
-	struct DC_EVSEStatusType_DIN70121				DC_EVSEStatus;
-}; 
-struct PowerDeliveryResponse_ISO15118_2014
-{
-	enum ResponseCodeType_ISO15118_2014				ResponseCode;
-	struct AC_EVSEStatusType							AC_EVSEStatus;
-	struct DC_EVSEStatusType_ISO15118_2014				DC_EVSEStatus;
-}; 
-struct PowerDeliveryResponse_ISO15118_2018 
-{
-	enum ResponseCodeType_ISO15118_2018				ResponseCode;
-	struct EVSEStatusType								EVSEStatus;			//Optional
-}; 
-/****CertificateUpdateRequest****/
-struct CertificateUpdateRequest_ISO15118_2014
-{
-	unsigned char 										Id[32];
-	struct CertificateChainType							ContractSignatureCertChain;
-	unsigned char 										eMAID[16];
-	struct ListOfRootCertificateIDsType						ListOfRootCertificateIDs;
-}; 
-/****CertificateUpdateResponse****/
-struct CertificateUpdateResponse_ISO15118_2014
-{
-	enum ResponseCodeType_ISO15118_2014				ResponseCode;
-	struct CertificateChainType							SAProvisioningCertificateChain;
-	struct CertificateChainType							ContractSignatureCertChain;
-	struct ContractSignatureEncryptedPrivateKeyType			ContractSignatureEncryptedPrivateKey;
-	struct DiffieHellmanPublickeyType						DHpublickey;
-	unsigned char 										eMAID[16];
-	short 											RetryCounter;							//Optional
-}; 
-/****CertificateInstallationRequest****/
-struct CertificateInstallationRequest_ISO15118_2014
-{
-	unsigned char 										Id[32];
-	unsigned char 										OEMProvisioningCert[800];
-	struct ListOfRootCertificateIDsType						ListOfRootCertificateIDs;
-}; 
-struct CertificateInstallationRequest_ISO15118_2018
-{
-	unsigned char 										Id[32];
-	struct CertificateChainType							OEMProvisioningCertChain;
-	struct ListOfRootCertificateIDsType						ListOfRootCertificateIDs;
-	unsigned short										MaxSupportedCerts;
-}; 
-/****CertificateInstallationResponse****/
-struct CertificateInstallationResponse_ISO15118_2014
-{
-	enum ResponseCodeType_ISO15118_2014				ResponseCode;
-	struct CertificateChainType							SAProvisioningCertificateChain;
-	struct CertificateChainType							ContractSignatureCertChain;
-	struct ContractSignatureEncryptedPrivateKeyType			ContractSignatureEncryptedPrivateKey;
-	struct DiffieHellmanPublickeyType						DHpublickey;
-	unsigned char 										eMAID[16];
-}; 
-struct CertificateInstallationResponse_ISO15118_2018
-{
-	enum ResponseCodeType_ISO15118_2018				ResponseCode;
-	struct EVSEStatusType								EVSEStatus;					//Optional
-	struct CertificateChainType							SAProvisioningCertificateChain;
-	struct CertificateChainType							ContractCertificateChain;
-	struct ContractCertificateEncryptedPrivateKeyType		ContractEncryptedPrivateKey;
-	struct DiffieHellmanPublickeyType						DHpublickey;
-	enum ProcessingType								EVSEProcessing;
-	unsigned short 									RemainingContractCertificateChains;
-}; 
-/****SystemStatusRequest****/
-struct SystemStatusRequest_ISO15118_2018
-{
-	enum mechanicalChargingDeviceStatusType			EVMechanicalChargingDeviceStatus;
-	struct EVTechnicalStatusType							EVTechnicalStatus;
-	unsigned char 										EV_OEMStatus[800];					//Optional
-};
-/****SystemStatusResponse****/
-struct SystemStatusResponse_ISO15118_2018
-{
-	enum ResponseCodeType_ISO15118_2018				ResponseCode;
-	enum mechanicalChargingDeviceStatusType			EVSEMechanicalChargingDeviceStatus;
-	BOOL											EVSE_ReadyToCharge;
-	enum IsolationStatusType							EVSE_IsolationStatus;
-	BOOL											EVSE_Disabled;
-	BOOL											EVSE_UtilityInterruptEvent;
-	BOOL											EVSE_EmergencyShutdown;
-	BOOL											EVSE_Malfunction;
-	BOOL											EV_InChargePosition;
-	BOOL											EV_AssociationStatus;
-};
-/****SessionStopRequest****/
-struct SessionStopRequest_DIN70121	   
-{
-	//No member in standard
-}; 	
-struct SessionStopRequest_ISO15118_2014 
-{
-	enum ChargingSessionType							ChargingSession;
-}; 	
-struct SessionStopRequest_ISO15118_2018 
-{
-	enum ChargingSessionType							ChargingSession;
-}; 	
-/****SessionStopResponse****/
-struct SessionStopResponse_DIN70121	    
-{
-	enum ResponseCodeType_DIN70121					ResponseCode;
-}; 
-struct SessionStopResponse_ISO15118_2014	    
-{
-	enum ResponseCodeType_ISO15118_2014				ResponseCode;
-}; 
-struct SessionStopResponse_ISO15118_2018     
-{
-	enum ResponseCodeType_ISO15118_2018				ResponseCode;
-	struct EVSEStatusType								EVSEStatus;					//Optional
-}; 
-/****MeteringReceiptRequest****/
-struct MeteringReceiptRequest_ISO15118_2014	  	    
-{
-	unsigned char 										Id[32];						//Optional
-	unsigned char 										SessionID[8];
-	short 											SAScheduleTupleID;				//Optional
-	struct MeterInfoType_ISO15118_2014					MeterInfo;
-}; 
-struct MeteringReceiptRequest_ISO15118_2018	  	    
-{
-	unsigned char 										Id[32];						//Optional
-	unsigned char 										SessionID[8];
-	struct Scheduled_MRReqControlModeType				Schedule_MRReqControlMode;
-	struct MeterInfoType_ISO15118_2018					MeterInfo;								
-}; 
-/****MeteringReceiptResponse****/
-struct MeteringReceiptResponse_ISO15118_2014	  	    
-{
-	enum ResponseCodeType_ISO15118_2014				ResponseCode;
-	struct AC_EVSEStatusType							AC_EVSEStatus;
-	struct DC_EVSEStatusType_ISO15118_2014				DC_EVSEStatus;
-}; 
-struct MeteringReceiptResponse_ISO15118_2018	  	    
-{
-	enum ResponseCodeType_ISO15118_2018				ResponseCode;
-	struct EVSEStatusType								EVSEStatus;					//Optional
-}; 
-/****ChargingStatusRequest (AC Only)****/
-struct ChargingStatusRequest_ISO15118_2014	  	    
-{
-	//No member in standard
-}; 
-struct ChargingStatusRequest_ISO15118_2018	  	    
-{
-	struct PnC_CLReqIdentificationModeType				PnC_CLReqIdentificationMode;
-	struct Dynamic_CSReqControlModeType				Dynamic_CSReqControlMode;
-	struct Scheduled_CSReqControlModeType				Scheduled_CSReqControlMode;
-	struct DisplayParametersType							DisplayParameters;
-}; 
-/****ChargingStatusResponse (AC Only)****/
-struct ChargingStatusResponse_ISO15118_2014	  	    
-{
-	enum ResponseCodeType_ISO15118_2014				ResponseCode;
-	unsigned char										EVSEID[40];			//DIN70121=>Max length:32,	ISO15118=>min length:7, max length:37
-	short 											SAScheduleTupleID;
-	struct PhysicalValueType_ISO15118_2014					EVSEMaxCurrent;		//Optional
-	struct MeterInfoType_ISO15118_2014					MeterInfo;			//Optional
-	BOOL											ReceiptRequired;		//Optional
-	struct AC_EVSEStatusType							AC_EVSEStatus;
-}; 
-struct ChargingStatusResponse_ISO15118_2018	  	    
-{
-	enum ResponseCodeType_ISO15118_2018				ResponseCode;
-	struct EVSEStatusType								EVSEStatus;					//Optional
-	unsigned char										EVSEID[40];					//DIN70121=>Max length:32,	ISO15118=>min length:7, max length:37
-	struct PhysicalValueType_ISO15118_2018					EVSETargetFrequency;			//Optional
-	struct PnC_CLResIdentificationModeType				PnC_CLResIdentificationMode;
-	struct Dynamic_CSResControlModeType					Dynamic_CSResControlMode;
-	struct Scheduled_CSReqControlModeType				Scheduled_CSReqControlMode;
-}; 
-/****CableCheckRequest (DC Only)****/
-struct CableCheckRequest_DIN70121	     
-{
-	struct DC_EVStatusType_DIN70121						DC_EVStatus;
-};
-struct CableCheckRequest_ISO15118_2014 
-{
-	struct DC_EVStatusType_ISO15118_2014 					DC_EVStatus;
-};
-struct CableCheckRequest_ISO15118_2018	    
-{
-	//No member in standard
-};
-/****CableCheckResponse (DC Only)****/
-struct CableCheckResponse_DIN70121	    
-{
-	enum ResponseCodeType_DIN70121					ResponseCode;
-	struct DC_EVSEStatusType_DIN70121					DC_EVSEStatus;
-	enum EVSEProcessingType_DIN70121					EVSEProcessing;
-}; 
-struct CableCheckResponse_ISO15118_2014  
-{
-	enum ResponseCodeType_ISO15118_2014				ResponseCode;
-	struct DC_EVSEStatusType_ISO15118_2014				DC_EVSEStatus;
-	enum EVSEProcessingType_ISO15118_2014				EVSEProcessing;
-}; 
-struct CableCheckResponse_ISO15118_2018 
-{
-	enum ResponseCodeType_ISO15118_2018				ResponseCode;
-	struct EVSEStatusType								EVSEStatus;					//Optional
-	enum ProcessingType								EVSEProcessing;
-}; 
-/****PreChargeRequest (DC Only)****/
-struct PreChargeRequest_DIN70121	     
-{
-	struct DC_EVStatusType_DIN70121						DC_EVStatus;
-	struct PhysicalValueType_DIN70121						EVTargetVoltage;
-	struct PhysicalValueType_DIN70121						EVTargetCurrent;
-}; 
-struct PreChargeRequest_ISO15118_2014 
-{
-	struct DC_EVStatusType_ISO15118_2014 					DC_EVStatus;
-	struct PhysicalValueType_ISO15118_2014					EVTargetVoltage;
-	struct PhysicalValueType_ISO15118_2014					EVTargetCurrent;
-}; 
-struct PreChargeRequest_ISO15118_2018      
-{
-	struct PhysicalValueType_ISO15118_2018					EVTargetVoltage;
-	struct PhysicalValueType_ISO15118_2018					EVTargetCurrent;
-}; 
-/****PreChargeResponse (DC Only)****/
-struct PreChargeResponse_DIN70121 
-{
-	enum ResponseCodeType_DIN70121					ResponseCode;
-	struct DC_EVSEStatusType_DIN70121					DC_EVSEStatus;
-	struct PhysicalValueType_DIN70121						EVSEPresentVoltage;
-}; 
-struct PreChargeResponse_ISO15118_2014		
-{
-	enum ResponseCodeType_ISO15118_2014				ResponseCode;
-	struct DC_EVSEStatusType_ISO15118_2014				DC_EVSEStatus;
-	struct PhysicalValueType_ISO15118_2014					EVSEPresentVoltage;
-}; 
-struct PreChargeResponse_ISO15118_2018  
-{
-	enum ResponseCodeType_ISO15118_2018				ResponseCode;
-	struct EVSEStatusType								EVSEStatus;					//Optional
-	struct PhysicalValueType_ISO15118_2018					EVSEPresentVoltage;
-}; 
-/****CurrentDemandRequest (DC Only)****/
-struct CurrentDemandRequest_DIN70121 
-{
-	struct DC_EVStatusType_DIN70121						DC_EVStatus;
-	struct PhysicalValueType_DIN70121						EVTargetCurrent;
-	struct PhysicalValueType_DIN70121						EVMaximumVoltageLimit;		//Optional
-	struct PhysicalValueType_DIN70121						EVMaximumCurrentLimit;		//Optional
-	struct PhysicalValueType_DIN70121						EVMaximumPowerLimit;			//Optional
-	BOOL											BulkChargingComplete;			//Optional
-	BOOL											ChargingComplete;
-	struct PhysicalValueType_DIN70121						RemainingTimeToFullSoC;		//Optional
-	struct PhysicalValueType_DIN70121						RemainingTimeToBulkSoC;		//Optional
-	struct PhysicalValueType_DIN70121						EVTargetVoltage;
-};
-struct CurrentDemandRequest_ISO15118_2014	 
-{
-	struct DC_EVStatusType_ISO15118_2014 					DC_EVStatus;
-	struct PhysicalValueType_ISO15118_2014					EVTargetCurrent;
-	struct PhysicalValueType_ISO15118_2014					EVMaximumVoltageLimit;		//Optional
-	struct PhysicalValueType_ISO15118_2014					EVMaximumCurrentLimit;		//Optional
-	struct PhysicalValueType_ISO15118_2014					EVMaximumPowerLimit;			//Optional
-	BOOL											BulkChargingComplete;			//Optional
-	BOOL											ChargingComplete;
-	struct PhysicalValueType_ISO15118_2014					RemainingTimeToFullSoC;		//Optional
-	struct PhysicalValueType_ISO15118_2014					RemainingTimeToBulkSoC;		//Optional
-	struct PhysicalValueType_ISO15118_2014					EVTargetVoltage;
-};
-struct CurrentDemandRequest_ISO15118_2018 
-{
-	struct DisplayParametersType							DisplayParameters;				//Optional
-	struct PnC_CLReqIdentificationModeType				PnC_CLReqIdentificationMode;
-	struct Dynamic_CSReqControlModeType				Dynamic_CDReqControlMode;
-	struct Scheduled_CSReqControlModeType				Scheduled_CDReqControlMode;
-};
-/****CurrentDemandResponse (DC Only)****/
-struct CurrentDemandResponse_DIN70121		 
-{
-	enum ResponseCodeType_DIN70121					ResponseCode;
-	struct DC_EVSEStatusType_DIN70121					DC_EVSEStatus;
-	struct PhysicalValueType_DIN70121						EVSEPresentVoltage;
-	struct PhysicalValueType_DIN70121						EVSEPresentCurrent;
-	BOOL											EVSECurrentLimitAchieved;
-	BOOL											EVSEVoltageLimitAchieved;
-	BOOL											EVSEPowerLimitAchieved;
-	struct PhysicalValueType_DIN70121						EVSEMaximumVoltageLimit;		//Optional
-	struct PhysicalValueType_DIN70121						EVSEMaximumCurrentLimit;		//Optional
-	struct PhysicalValueType_DIN70121						EVSEMaximumPowerLimit;		//Optional
-}; 	
-struct CurrentDemandResponse_ISO15118_2014			 
-{
-	enum ResponseCodeType_ISO15118_2014				ResponseCode;
-	struct DC_EVSEStatusType_ISO15118_2014				DC_EVSEStatus;
-	struct PhysicalValueType_ISO15118_2014					EVSEPresentVoltage;
-	struct PhysicalValueType_ISO15118_2014					EVSEPresentCurrent;
-	BOOL											EVSECurrentLimitAchieved;
-	BOOL											EVSEVoltageLimitAchieved;
-	BOOL											EVSEPowerLimitAchieved;
-	struct PhysicalValueType_ISO15118_2014					EVSEMaximumVoltageLimit;		//Optional
-	struct PhysicalValueType_ISO15118_2014					EVSEMaximumCurrentLimit;		//Optional
-	struct PhysicalValueType_ISO15118_2014					EVSEMaximumPowerLimit;		//Optional
-	unsigned char										EVSEID[40];			//DIN70121=>Max length:32,	ISO15118=>min length:7, max length:37
-	short 											SAScheduleTupleID;
-	struct MeterInfoType_ISO15118_2014					MeterInfo;			//Optional
-	BOOL											ReceiptRequired;		//Optional
-}; 	
-struct CurrentDemandResponse_ISO15118_2018		 
-{
-	enum ResponseCodeType_ISO15118_2018				ResponseCode;
-	struct EVSEStatusType								EVSEStatus;						//Optional
-	struct PhysicalValueType_ISO15118_2018					EVSEPresentVoltage;
-	struct PhysicalValueType_ISO15118_2018					EVSEPresentCurrent;
-	BOOL											EVSECurrentLimitAchieved;
-	BOOL											EVSEVoltageLimitAchieved;
-	BOOL											EVSEPowerLimitAchieved;
-	struct PhysicalValueType_ISO15118_2018					EVSEMaximumChargeVoltage;		//Optional
-	struct PhysicalValueType_ISO15118_2018					EVSEMaximumChargeCurrent;		//Optional
-	struct PhysicalValueType_ISO15118_2018					EVSEMaximumChargePower;			//Optional
-	unsigned char										EVSEID[40];						//DIN70121=>Max length:32,	ISO15118=>min length:7, max length:37
-	struct PnC_CLResIdentificationModeType				PnC_CLResIdentificationMode;
-	struct Scheduled_CDResControlModeType				Scheduled_CDResControlMode;
-}; 	
-/****WeldingDetectionRequest (DC Only)*****/
-struct WeldingDetectionRequest_DIN70121 
-{
-	struct DC_EVStatusType_DIN70121						DC_EVStatus;
-}; 	
-struct WeldingDetectionRequest_ISO15118_2014 
-{
-	struct DC_EVStatusType_ISO15118_2014 					DC_EVStatus;
-}; 	
-struct WeldingDetectionRequest_ISO15118_2018 
-{
-	//No member in Standard
-}; 	
-/****WeldingDetectionResponse (DC Only)****/
-struct WeldingDetectionResponse_DIN70121  
-{
-	enum ResponseCodeType_DIN70121					ResponseCode;
-	struct DC_EVSEStatusType_DIN70121					DC_EVSEStatus;
-	struct PhysicalValueType_DIN70121						EVSEPresentVoltage;
-}; 	
-struct WeldingDetectionResponse_ISO15118_2014  
-{
-	enum ResponseCodeType_ISO15118_2014				ResponseCode;
-	struct DC_EVSEStatusType_ISO15118_2014				DC_EVSEStatus;
-	struct PhysicalValueType_ISO15118_2014					EVSEPresentVoltage;
-}; 	
-struct WeldingDetectionResponse_ISO15118_2018 
-{
-	enum ResponseCodeType_ISO15118_2018				ResponseCode;
-	struct EVSEStatusType								EVSEStatus;						//Optional
-	struct PhysicalValueType_ISO15118_2018					EVSEPresentVoltage;
-}; 	
-/****FinePositioningSetupRequest (WPT Only)****/
-struct FinePositioningSetupRequest_ISO15118_2018 
-{
-	struct LFA_EVFinePositioningSetupParametersType			LFA_EVFinePositioningSetupParameters;	//Optional
-};
-/****FinePositioningSetupResponse (WPT Only)****/
-struct FinePositioningSetupResponse_ISO15118_2018 
-{
-	//NOT complete yet,  to be continue.....
-};
-
-
-struct V2GMessageType_DIN70121
-{
-	enum MsgFlowStatus									PresentMsgFlowStatus;
-														/* 0: Idle(wait B2 state), 1: CM_SLAC_PARM.REQ, 2: CM_SLAC_PARM.CNF, 3: CM_START_ATTEN_CHAR.IND
-														    4: CM_MNBC_SOUND.IND, 5: CM_ATTEN_CHAR.IND, 6: CM_ATTEN_CHAR.RSP, 7: CM_VALIDATE.REQ
-														    8: CM_VALIDATE.CNF, 9: CM_SLAC_MATCH.REQ, 10: CM_SLAC_MATCH.CNF, 11: CM_AMP_MAP.REQ
-														    12: CM_AMP_MAP.CNF, 13: SLACC/SDP/TCP connection,
-														    16: SupportedAppProtocolRequest, 17: SupportedAppProtocolResponse, 18: SessionSetupRequest
-														    19: SessionSetupResponse, 20: ServiceDiscoveryRequest, 21: ServiceDiscoveryResponse
-														    22: ServiceDetailRequest, 23: ServiceDetailResponse
-														    24: ServiceAndPaymentSelectionRequest/ServiceSelectionRequest, 25: ServiceAndPaymentSelectionResponse/ServiceSelectionResponse
-														    26: PaymentDetailsRequest/IdentificationDetailsRequest;, 27: PaymentDetailsResponse/IdentificationDetailsResponse,
-														     28: AuthorizationRequest, 29: AuthorizationResponse, 
-														    30: CertificateUpdateRequest, 31: CertificateUpdateResponse, 32:CertificateInstallationRequest, 33: CertificateInstallationResponse
-														    34: ChargeParameterDiscoveryRequest, 35: ChargeParameterDiscoveryResponse
-														    36: CableCheckRequest, 37: CableCheckResponse, 38: PreChargeRequest, 39: PreChargeResponse
-														    40: PowerDeliveryRequest start, 41: PowerDeliveryResponse start, 42: ChargingStatusRequest, 43: ChargingStatusResponse
-														    44: CurrentDemandRequest, 45: CurrentDemandResponse, 46: MeteringReceiptRequest, 47: MeteringReceiptResponse 
-														    48: PowerDeliveryRequest end, 49: PowerDeliveryRequest end, 50: WeldingDetectionRequest, 51: WeldingDetectionResponse, 
-														    52: SessionStopRequest, 53: SessionStopResponse
-														   253: Performance Timeout, 254: Sequence Timeout, 255: Fault 	
-														*/ 		
-	struct SupportedAppProtocolRequest_DIN70121 			SupportedAppProtocolRequest;
-	struct SupportedAppProtocolResponse_DIN70121 			SupportedAppProtocolResponse;
-	struct SessionSetupRequest_DIN70121  					SessionSetupRequest;
-	struct SessionSetupResponse_DIN70121   				SessionSetupResponse;
-	struct ServiceDiscoveryRequest_DIN70121    				ServiceDiscoveryRequest;
-	struct ServiceDiscoveryResponse_DIN70121    				ServiceDiscoveryResponse;
-	struct ServiceAndPaymentSelectionRequest_DIN70121		ServiceAndPaymentSelectionRequest; 
-	struct ServiceAndPaymentSelectionResponse_DIN70121		ServiceAndPaymentSelectionResponse;
-	struct ContractAuthenticationRequest_DIN70121			ContractAuthenticationRequest;
-	struct ContractAuthenticationResponse_DIN70121	 		ContractAuthenticationResponse;
-	struct ChargeParameterDiscoveryRequest_DIN70121		ChargeParameterDiscoveryRequest;
-	struct ChargeParameterDiscoveryResponse_DIN70121		ChargeParameterDiscoveryResponse;
-	struct CableCheckRequest_DIN70121					CableCheckRequest;
-	struct CableCheckResponse_DIN70121					CableCheckResponse;
-	struct PreChargeRequest_DIN70121					PreChargeRequest;
-	struct PreChargeResponse_DIN70121 					PreChargeResponse;
-	struct PowerDeliveryRequest_DIN70121					PowerDeliveryRequest;
-	struct PowerDeliveryResponse_DIN70121	   				PowerDeliveryResponse;
-	struct CurrentDemandRequest_DIN70121 				CurrentDemandRequest;
-	struct CurrentDemandResponse_DIN70121				CurrentDemandResponse;
-	struct WeldingDetectionRequest_DIN70121 				WeldingDetectionRequest;
-	struct WeldingDetectionResponse_DIN70121  			WeldingDetectionResponse;
-	struct SessionStopRequest_DIN70121					SessionStopRequest;
-	struct SessionStopResponse_DIN70121	    				SessionStopResponse;
-};
-
-struct V2GMessageType_ISO15118_2014
-{
-	enum MsgFlowStatus									PresentMsgFlowStatus;
-														/* 0: Idle(wait B2 state), 1: CM_SLAC_PARM.REQ, 2: CM_SLAC_PARM.CNF, 3: CM_START_ATTEN_CHAR.IND
-														    4: CM_MNBC_SOUND.IND, 5: CM_ATTEN_CHAR.IND, 6: CM_ATTEN_CHAR.RSP, 7: CM_VALIDATE.REQ
-														    8: CM_VALIDATE.CNF, 9: CM_SLAC_MATCH.REQ, 10: CM_SLAC_MATCH.CNF, 11: CM_AMP_MAP.REQ
-														    12: CM_AMP_MAP.CNF, 13: SLACC/SDP/TCP connection,
-														    16: SupportedAppProtocolRequest, 17: SupportedAppProtocolResponse, 18: SessionSetupRequest
-														    19: SessionSetupResponse, 20: ServiceDiscoveryRequest, 21: ServiceDiscoveryResponse
-														    22: ServiceDetailRequest, 23: ServiceDetailResponse
-														    24: ServiceAndPaymentSelectionRequest/ServiceSelectionRequest, 25: ServiceAndPaymentSelectionResponse/ServiceSelectionResponse
-														    26: PaymentDetailsRequest/IdentificationDetailsRequest;, 27: PaymentDetailsResponse/IdentificationDetailsResponse,
-														     28: AuthorizationRequest, 29: AuthorizationResponse, 
-														    30: CertificateUpdateRequest, 31: CertificateUpdateResponse, 32:CertificateInstallationRequest, 33: CertificateInstallationResponse
-														    34: ChargeParameterDiscoveryRequest, 35: ChargeParameterDiscoveryResponse
-														    36: CableCheckRequest, 37: CableCheckResponse, 38: PreChargeRequest, 39: PreChargeResponse
-														    40: PowerDeliveryRequest start, 41: PowerDeliveryResponse start, 42: ChargingStatusRequest, 43: ChargingStatusResponse
-														    44: CurrentDemandRequest, 45: CurrentDemandResponse, 46: MeteringReceiptRequest, 47: MeteringReceiptResponse 
-														    48: PowerDeliveryRequest end, 49: PowerDeliveryRequest end, 50: WeldingDetectionRequest, 51: WeldingDetectionResponse, 
-														    52: SessionStopRequest, 53: SessionStopResponse
-														   253: Performance Timeout, 254: Sequence Timeout, 255: Fault 	
-														*/ 		
-	struct SupportedAppProtocolRequest_ISO15118_2014 			SupportedAppProtocolRequest;
-	struct SupportedAppProtocolResponse_ISO15118_2014 			SupportedAppProtocolResponse;
-	struct SessionSetupRequest_ISO15118_2014  					SessionSetupRequest;
-	struct SessionSetupResponse_ISO15118_2014   				SessionSetupResponse;
-	struct ServiceDiscoveryRequest_ISO15118_2014    				ServiceDiscoveryRequest;
-	struct ServiceDiscoveryResponse_ISO15118_2014    				ServiceDiscoveryResponse;
-	struct ServiceDetailRequest_ISO15118_2014 					ServiceDetailRequest;
-	struct ServiceDetailResponse_ISO15118_2014					ServiceDetailResponse;
-	struct ServiceAndPaymentSelectionRequest_ISO15118_2014 		ServiceAndPaymentSelectionRequest;
-	struct ServiceAndPaymentSelectionResponse_ISO15118_2014  	ServiceAndPaymentSelectionResponse;
-	struct PaymentDetailsRequest_ISO15118_2014 				PaymentDetailsRequest;
-	struct PaymentDetailsResponse_ISO15118_2014 				PaymentDetailsResponse;
-	struct AuthorizationRequest_ISO15118_2014					AuthorizationRequest;
-	struct AuthorizationResponse_ISO15118_2014					AuthorizationResponse;
-	struct CertificateUpdateRequest_ISO15118_2014				CertificateUpdateRequest;
-	struct CertificateUpdateResponse_ISO15118_2014				CertificateUpdateResponse;
-	struct CertificateInstallationRequest_ISO15118_2014			CertificateInstallationRequest;
-	struct CertificateInstallationResponse_ISO15118_2014			CertificateInstallationResponse;
-	struct ChargeParameterDiscoveryRequest_ISO15118_2014 		ChargeParameterDiscoveryRequest;
-	struct ChargeParameterDiscoveryResponse_ISO15118_2014  		ChargeParameterDiscoveryResponse;
-	struct CableCheckRequest_ISO15118_2014 					CableCheckRequest;
-	struct CableCheckResponse_ISO15118_2014  					CableCheckResponse;
-	struct PreChargeRequest_ISO15118_2014 					PreChargeRequest;
-	struct PreChargeResponse_ISO15118_2014					PreChargeResponse;
-	struct PowerDeliveryRequest_ISO15118_2014					PowerDeliveryRequest;
-	struct PowerDeliveryResponse_ISO15118_2014					PowerDeliveryResponse;
-	struct ChargingStatusRequest_ISO15118_2014	  				ChargingStatusRequest;	  
-	struct ChargingStatusResponse_ISO15118_2014				ChargingStatusResponse;
-	struct CurrentDemandRequest_ISO15118_2014	 			CurrentDemandRequest;
-	struct CurrentDemandResponse_ISO15118_2014				CurrentDemandResponse;
-	struct MeteringReceiptRequest_ISO15118_2014				MeteringReceiptRequest;  
-	struct MeteringReceiptResponse_ISO15118_2014				MeteringReceiptResponse;
-	struct WeldingDetectionRequest_ISO15118_2014 				WeldingDetectionRequest;
-	struct WeldingDetectionResponse_ISO15118_2014  			WeldingDetectionResponse;
-	struct SessionStopRequest_ISO15118_2014 					SessionStopRequest;
-	struct SessionStopResponse_ISO15118_2014					SessionStopResponse;
-};
-struct V2GMessageType_ISO15118_2018
-{
-	enum MsgFlowStatus									PresentMsgFlowStatus;
-													/* 0: Idle(wait B2 state), 1: CM_SLAC_PARM.REQ, 2: CM_SLAC_PARM.CNF, 3: CM_START_ATTEN_CHAR.IND
-													    4: CM_MNBC_SOUND.IND, 5: CM_ATTEN_CHAR.IND, 6: CM_ATTEN_CHAR.RSP, 7: CM_VALIDATE.REQ
-													    8: CM_VALIDATE.CNF, 9: CM_SLAC_MATCH.REQ, 10: CM_SLAC_MATCH.CNF, 11: CM_AMP_MAP.REQ
-													    12: CM_AMP_MAP.CNF, 13: SLACC/SDP/TCP connection,
-													    16: SupportedAppProtocolRequest, 17: SupportedAppProtocolResponse, 18: SessionSetupRequest
-													    19: SessionSetupResponse, 20: ServiceDiscoveryRequest, 21: ServiceDiscoveryResponse
-													    22: ServiceDetailRequest, 23: ServiceDetailResponse
-													    24: ServiceAndPaymentSelectionRequest/ServiceSelectionRequest, 25: ServiceAndPaymentSelectionResponse/ServiceSelectionResponse
-													    26: PaymentDetailsRequest/IdentificationDetailsRequest;, 27: PaymentDetailsResponse/IdentificationDetailsResponse,
-													     28: AuthorizationRequest, 29: AuthorizationResponse, 
-													    30: CertificateUpdateRequest, 31: CertificateUpdateResponse, 32:CertificateInstallationRequest, 33: CertificateInstallationResponse
-													    34: ChargeParameterDiscoveryRequest, 35: ChargeParameterDiscoveryResponse
-													    36: CableCheckRequest, 37: CableCheckResponse, 38: PreChargeRequest, 39: PreChargeResponse
-													    40: PowerDeliveryRequest start, 41: PowerDeliveryResponse start, 42: ChargingStatusRequest, 43: ChargingStatusResponse
-													    44: CurrentDemandRequest, 45: CurrentDemandResponse, 46: MeteringReceiptRequest, 47: MeteringReceiptResponse 
-													    48: PowerDeliveryRequest end, 49: PowerDeliveryRequest end, 50: WeldingDetectionRequest, 51: WeldingDetectionResponse, 
-													    52: SessionStopRequest, 53: SessionStopResponse
-													   253: Performance Timeout, 254: Sequence Timeout, 255: Fault 	
-													*/ 		
-	struct SupportedAppProtocolRequest_ISO15118_2018			SupportedAppProtocolRequest;
-	struct SupportedAppProtocolResponse_ISO15118_2018 			SupportedAppProtocolResponse;
-	struct SessionSetupRequest_ISO15118_2018					SessionSetupRequest;
-	struct SessionSetupResponse_ISO15118_2018  					SessionSetupResponse;
-	struct ServiceDiscoveryRequest_ISO15118_2018    				ServiceDiscoveryRequest;
-	struct ServiceDiscoveryResponse_ISO15118_2018    				ServiceDiscoveryResponse;
-	struct ServiceDetailRequest_ISO15118_2018 					ServiceDetailRequest;
-	struct ServiceDetailResponse_ISO15118_2018					ServiceDetailResponse;
-	struct ServiceSelectionRequest_ISO15118_2018				ServiceSelectionRequest;
-	struct ServiceSelectionResponse_ISO15118_2018				ServiceSelectionResponse;
-	struct IdentificationDetailsRequest_ISO15118_2018  			IdentificationDetailsRequest;
-	struct IdentificationDetailsResponse_ISO15118_2018  			IdentificationDetailsResponse;
-	struct AuthorizationRequest_ISO15118_2018  					AuthorizationRequest;
-	struct AuthorizationResponse_ISO15118_2018					AuthorizationResponse;
-	struct CertificateInstallationRequest_ISO15118_2018			CertificateInstallationRequest;
-	struct CertificateInstallationResponse_ISO15118_2018			CertificateInstallationResponse;
-	struct ChargeParameterDiscoveryRequest_ISO15118_2018 		ChargeParameterDiscoveryRequest;
-	struct ChargeParameterDiscoveryResponse_ISO15118_2018  		ChargeParameterDiscoveryResponse;
-	struct CableCheckRequest_ISO15118_2018 					CableCheckRequest;
-	struct CableCheckResponse_ISO15118_2018 					CableCheckResponse;
-	struct PreChargeRequest_ISO15118_2018 					PreChargeRequest;
-	struct PreChargeResponse_ISO15118_2018					PreChargeResponse;
-	struct PowerDeliveryRequest_ISO15118_2018					PowerDeliveryRequest;
-	struct PowerDeliveryResponse_ISO15118_2018					PowerDeliveryResponse;
-	struct ChargingStatusRequest_ISO15118_2018	  				ChargingStatusRequest;	  
-	struct ChargingStatusResponse_ISO15118_2018				ChargingStatusResponse;
-	struct CurrentDemandRequest_ISO15118_2018	 			CurrentDemandRequest;
-	struct CurrentDemandResponse_ISO15118_2018				CurrentDemandResponse;
-	struct MeteringReceiptRequest_ISO15118_2018				MeteringReceiptRequest;  
-	struct MeteringReceiptResponse_ISO15118_2018				MeteringReceiptResponse;
-	struct WeldingDetectionRequest_ISO15118_2018 				WeldingDetectionRequest;
-	struct WeldingDetectionResponse_ISO15118_2018  			WeldingDetectionResponse;
-	struct SessionStopRequest_ISO15118_2018 					SessionStopRequest;
-	struct SessionStopResponse_ISO15118_2018					SessionStopResponse;
-};
-
-struct CcsData 
-{
-	unsigned char 							CommProtocol;	// 1: V2GMessage_DIN70121, 2:V2GMessage_ISO15118_2014, 3:V2GMessage_ISO15118_2018
-	struct V2GMessageType_DIN70121			V2GMessage_DIN70121;
-	struct V2GMessageType_ISO15118_2014  		V2GMessage_ISO15118_2014;
-	struct V2GMessageType_ISO15118_2018  		V2GMessage_ISO15118_2018;
-};
-
-struct InternalComm
-{
-	unsigned char 	ChargingPermission;
-	unsigned char 	SlaveAddress;
-	union
-	{
-		unsigned char InternalCommVal;
-		struct
-		{
-			//FaultVal[0]
-		    	unsigned char FwVersion:1;							//bit 0 
-			unsigned char HwVersion:1;							//bit 1
-			unsigned char OutputRequirement:1;   					//bit 2
-			unsigned char EvBatteryInfo:1;						//bit 3		              
-			unsigned char MiscInfo:1;							//bit 4 		          
-			unsigned char :3;									//bit 5 ~ 7  		  
-		}bits;
-	}InternalCommUnion;        
-};    	
-#endif // DEFINE_H_
-	
-	
-	
-	
-
-
+/*===========================================================================
+                    Combined Charging System (CCS): SECC
+                                 define.h
+
+                        initiated by Vern, Joseph
+                           (since 2019/07/19)
+=============================================================================*/
+
+#ifndef	DEFINE_H_
+#define	DEFINE_H_
+
+/**************************************************************************************/
+/*********************************NAND Flash mapping *****************************/
+/**************************************************************************************/
+/*
+  sector size	512 KiB
+  Page size       4096 b
+  OOB size        224 b
+  Erase size    	524288 b
+-------------------------------------------------------------------------------------------------------------------------------
+Segment 					Physical address 			Size
+-------------------------------------------------------------------------------------------------------------------------------
+MLO						0x00000000-0x0007FFFF		512 KB
+Primary u-boot 			0x00080000-0x0017FFFF		1 MB
+Environment 				0x00180000-0x001FFFFF		512 KB
+Secondary u-boot	 		0x00200000-0x002FFFFF		1 MB
+Primary dtb				0x00300000-0x0037FFFF		512 KB
+Secondary dtb				0x00380000-0x003FFFFF		512 KB
+Primary kernel				0x00400000-0x00DFFFFF		10 MB
+Secondary Kernel 			0x00E00000-0x017FFFFF		10 MB
+Primary root file system		0x01800000-0x029FFFFF		24 MB
+Secondary root file system	0x03000000-0x047FFFFF		24 MB
+Primary user configuration 	0x04800000-0x004DFFFF		6 MB
+Secondary user configuration	0x04E00000-0x0053FFFF		6 MB
+Factory default configuration	0x05400000-0x0059FFFF		6 MB
+Storage					0x05A00000-0x7FFFFFFF		1958 MB
+*/
+
+/**************************************************************************************/
+/*********************************System Limitation**********************************/
+/**************************************************************************************/
+
+#define FirmwareVersion		0x00010201
+/*
+0xAaBbCcDd
+Aa: main version
+Bb: minor version
+Cc:
+	0x01: UL
+	0x02: CE
+	0x03: JP
+	0x04: GB
+Dd:
+	0x01: CCS protocol
+	0x02:	 CHAdeMO protocol
+	0x03: GB Protocol
+*/
+
+/*relevant to Quantity */
+#define CHAdeMO_QUANTITY	1
+#define CCS_QUANTITY		1
+#define GB_QUANTITY		1
+
+
+/*SystemLog message*/
+#define SystemLogMessage			//for engineer to do analysis
+
+/**************************************************************************************/
+/**************************share memory key information***************************/
+/**************************************************************************************/
+#define ShmSysConfigAndInfoKey	1001
+#define ShmCcsCommKey		1004
+#define ShmStatusCodeKey		1005
+#define ShmInternalCommKey	1009
+
+/**************************************************************************************/
+/****structure SysConfigData => shall store the data to NAND flash****************/
+/****structure SysInfoData => shall NOT store the data to NAND flash***************/
+/****according to System Configuration and Information Table.xlsx Rev.0.2 *******/
+/**************************************************************************************/
+
+struct EthConfigData
+{
+	unsigned char		EthDhcpClient;			//0: enable,1: disable
+	unsigned char		EthMacAddress[18];			//default: Null
+	unsigned char		EthIpAddress[16];			//Eth0 default:192.168.0.10	,Eth1 default:192.168.1.10
+	unsigned char		EthSubmaskAddress[16];		//Eth0 default:255.255.255.0	,Eth1 default:255.255.255.0
+	unsigned char		EthGatewayAddress[16];		//Eth0 default:192.168.0.254	,Eth1 default:192.168.1.254
+};
+
+struct WifiConfigData
+{
+	unsigned char		WifiMode;				//0: disable, 1: Infrastructure client, 2: Infrastructure server, 3: Ad-Hoc
+	unsigned char		WifiSsid[256];				//default: Null
+	unsigned char		WifiPassword[256];			//default: Null
+	int				WifiRssi;					//dbm
+	unsigned char		WifiDhcpServer;			//0: enable, 1: disable
+	unsigned char		WifiDhcpClient;			//0: enable, 1: disable
+	unsigned char		WifiMacAddress[18];		//default: Null
+	unsigned char		WifiIpAddress[16];			//default:192.168.2.10
+	unsigned char		WifiSubmaskAddress[16];		//default:255.255.255.0
+	unsigned char		WifiGatewayAddress[16];	//default:192.168.2.254
+};
+
+struct TeleConfigData
+{
+	unsigned char		TelcomApn[256];			//default: Null
+	int				TelcomRssi;				//dbm
+	unsigned char		TelcomChapPapId[256];		//default: Null
+	unsigned char		TelcomChapPapPwd[256];	//default: Null
+	unsigned char		TelcomModemImei[16];		//default: Null
+	unsigned char		TelcomSimImsi[16];			//default: Null
+	unsigned char		TelcomSimStatus;			//0: no SIM card is found, 1: valid SIM card, 2: invalid SIM card
+	unsigned char		TelcomModemMode;		//0: No services, 1: CDMA, 2: GSM/GPRS, 3: WCDMA, 4: GSM/WCDMA, 5: TD_SCDMA mode, 6: Unknow
+	unsigned char		TelcomIpAddress[16];		//default: Null
+};
+
+struct SysConfigData
+{
+	/**************System***************/
+	unsigned char			ModelName[64];			//charger model name
+	unsigned char			SerialNumber[64];			//charger system serial number
+	unsigned char			SystemId[128];				//charger system ID
+	unsigned char			SystemDateTime[32];		//charger system date and time
+	unsigned char			AuthorisationMode;			//0: Phihong RFID tag,  1: OCPP backend,  2: Phihong backend,  3: free mode
+	unsigned char	   		DefaultLanguage;			//
+	unsigned char   		RfidCardNumEndian;		//0: little endian,  1: big endian
+	unsigned short			AcPlugInTimes;				//0~65535
+	unsigned short			GbPlugInTimes;			//0~65535
+	unsigned short			Ccs1PlugInTime;			//0~65535
+	unsigned short			Ccs2PlugInTimes;			//0~65535
+	unsigned short			ChademoPlugInTimes;		//0~65535
+	/**************Charging***************/
+	unsigned short	   		MaxChargingEnergy;		//0: no limit,	1 ~ 65535	kWh
+	unsigned short	   		MaxChargingPower;		//0: rating value, 1 ~ RATING_POWER	kW"
+	unsigned short	   		MaxChargingCurrent;		//0: rating value, 1 ~ RATING_CURRENT	amp"
+	unsigned short	   		MaxChargingDuration;		//0: no limit,	1 ~ 65535	minutes
+	unsigned char   		PhaseLossPolicy;			//0: charging,  1: stop charging
+	unsigned char   		LocalWhiteCard[10][32];		//Max. card quantity is 10
+	unsigned char 			UserId[32];				//the user use this ID to trigger charging event, it can be RFID card number, OCPP IdTag, etc.
+	/**************Network***************/
+	unsigned char 			FtpServer[32];				//the ftp server for Phihong server to do data transimission
+	struct EthConfigData 	Eth0Interface;
+	struct EthConfigData 	Eth1Interface;
+	struct WifiConfigData 	AthInterface;
+	struct TeleConfigData	TelecomInterface;
+	/**************Backend***************/
+	unsigned int 			BackendConnTimeout;		//default : 300s
+	unsigned char   		OfflinePolicy;				//0: local list, 1: Phihong RFID tag, 2: free charging, 3: no charging
+	unsigned short	   		OfflineMaxChargeEnergy;	//0: same as MaxChargingEnergy, 1 ~ 65535 kWh
+	unsigned short	   		OfflineMaxChargeDuration;	//0: same as MaxChargeDuration, 1 ~ 65535 minutes
+	unsigned char 			OcppServerURL[512];		//http: non-secure OCPP 1.5-S, https: secure OCPP 1.5-S, ws: non-secure OCPP 1.6-J, wss: secure OCPP 1.6-J"
+	unsigned char 			ChargeBoxId[128];
+	unsigned int 			Checksum;			//4 bytes checksum
+};
+
+struct ChargingInfoData
+{
+	float				MaximumChargingVoltage;	//0~6553.5 volt
+	float				AvailableChargingCurrent;	//0~6553.5 amp
+	float				AvailableChargingPower;	//0~6553.5 kW
+	float				PresentChargingVoltage	;	//0~6553.5 volt
+	float				PresentChargingCurrent;		//0~6553.5 amp
+	float				PresentChargingPower;		//0~6553.5 kW
+	float				PresentChargedEnergy;		//0~6553.5 kWh
+	int				PresentChargedDuration;	// second
+	int				RemainChargingDuration;	// second
+	float				EvBatteryMaxVoltage;		// 0~6553.5 volt
+	float				EvBatterytargetVoltage;		// 0~6553.5 volt
+	int				EvBatterySoc;				// 0~100%
+	unsigned char 		ConnectorPlugIn;			//0: unplug, 1: Plug-in
+	float 			PilotVoltage;
+	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%
+};
+
+struct SysInfoData
+{
+	/**************System***************/
+	unsigned char		SystemStatus;				//0: Booting, 1: idle, 2: authorizing, 3: preparing, 4: charging, 5: terminating, 6: alarm, 7: fault
+	unsigned char		FactoryConfiguration;		//0: normal, 1: trigger, charger will return the configuration to factory default if trigger
+	float 			InputVoltageR;			//0~655.35 volt
+	float 			InputVoltageS;				//0~655.35 volt
+	float 			InputVoltageT;				//0~655.35 volt
+	unsigned int 		SystemFanRotaSpeed;		//0 ~ 65535 RPM
+	unsigned int 		PsuFanRotaSpeed;			//0 ~ 65535 RPM
+	unsigned char		AuxPower5V;				//0 ~ 255 volt
+	unsigned char		AuxPower12V;				//0 ~ 255 volt
+	unsigned char		AuxPower24V;				//0 ~ 255 volt
+	unsigned char		AuxPower48V;				//0 ~ 255 volt
+	unsigned char 		CsuHwRev[32];			//CSU board hardware version
+	unsigned char 		CsuBootLoadFwRev[32];		//CSU board bootloader firmware version
+	unsigned char 		CsuKernelFwRev[32];		//CSU board OS kernel firmware version
+	unsigned char 		CsuRootFsFwRev[32];		//CSU board root file system firmware version
+	unsigned char 		CsuPrimFwRev[32];			//CSU board root file system firmware version
+	unsigned char 		LcmHwRev[32];			//LCM module hardware version
+	unsigned char 		LcmFwRev[32];			//LCM module firmware version
+	unsigned char 		PsuHwRev[32];				//PSU hardware version
+	unsigned char 		PsuPrimFwRev[32];			//PSU primary firmware version
+	unsigned char 		PsuSecFwRev[32];			//PSU secondary firmware version
+	unsigned char 		AuxPwrHwRev[32];			//Aux. power module hardware version
+	unsigned char 		AuxPwrFwRev[32];			//Aux. power module firmware version
+	unsigned char 		FanModuleHwRev[32];		//Fan  module hardware version
+	unsigned char 		FanModuleFwRev[32];		//Fan  module firmware version
+	unsigned char 		RelayModuleHwRev[32];		//Relay control  module hardware version
+	unsigned char 		RelayModuleFwRev[32];		//Relay control  module firmware version
+	unsigned char 		TelcomModemFwRev[32];	//the 3G/4G modem firmware version
+	int			  	SystemAmbientTemp;		// -40 ~ 215 degree C
+	int			  	SystemCriticalTemp;		// -40 ~ 215 degree C
+	int			  	CcsConnectorTemp;		// -40 ~ 215 degree C
+	int			  	PsuAmbientTemp;			// -40 ~ 215 degree C
+	/**************Charging***************/
+	struct ChargingInfoData 	ChademoChargingData[CHAdeMO_QUANTITY];
+	struct ChargingInfoData 	CcsChargingData[CCS_QUANTITY];
+	struct ChargingInfoData 	GbChargingData[GB_QUANTITY];
+	/**************Network***************/
+	unsigned char 		InternetConn;				//0: disconnected, 1: connected
+	/**************Backend***************/
+	unsigned char 		OcppConnStatus;			//0: disconnected, 1: connected
+
+};
+
+struct SysConfigAndInfo
+{
+	struct SysConfigData	SysConfig;
+	struct SysInfoData		SysInfo;
+};
+
+/**************************************************************************************/
+/**************************Alarm Share memory**************************************/
+/***************************************************************************************
+	Status Code	A			B				C									D	E	F
+				0: Issue		1: From EVSE 		1: Fault (unrecoverable)					001 ~ 999 serial number
+			    								e.g., hardware broken, system latch
+				1: Recovered	2: From EV		2: Alarm (recoverable)
+			   								e.g., OTP, OVP
+							3: From Backend	3: Information
+			  								e.g., swipe card to stop charging
+
+according to XXX.Revxx
+***************************************************************************************/
+/**************************************************************************************/
+char FaultStatusCode[32][6]=
+{
+	"011001",	//CHAdeMO output fuse blew
+	"011002",	//CCS output fuse blew
+	"011003",	//GB output fuse blew
+	"011004",	//RCD/CCID self-test fail
+	"011005",	//AC input contactor 1 welding
+	"011006",	//AC input contactor 1 driving fault
+	"011007",	//AC input contactor 2 welding
+	"011008",	//AC input contactor 2 driving fault
+	"011009",	//AC output relay welding
+	"011010",	//AC output relay  driving fault
+	"011011",	//CHAdeMO output relay welding
+	"011012",	//CHAdeMO output relay driving fault
+	"011013",	//CCS output relay welding
+	"011014",	//CCS output relay driving fault
+	"011015",	//GB output relay welding
+	"011016",	//GB output relay driving fault
+	"011017",	//AC connector temperature sensor broken
+	"011018",	//CHAdeMO connector temperature sensor broken
+	"011019",	//CCS connector temperature sensor broken
+	"011020",	//GB connector temperature sensor broken
+	"011021",	//WiFi module broken
+	"011022",	//3G/4G module broken
+	"011023",	//Aux. power module broken
+	"011024",	//Relay control module /smart box broken
+	"011025",	//CHAdeMO connector lock fail
+	"011026",	//GB connector lock fail
+	"011027",	//AC connector lock fail
+	"011028",	//CHAdeMO module broken
+	"011029",	//CCS module broken
+	"011030",	//GBT module broken
+	"011031",	//PSU module broken
+	"011032"	//Reserved
+};
+
+struct FaultCodeData
+{
+	unsigned char PreviousFaultVal[4];
+	union
+	{
+		unsigned char FaultVal[4];
+		struct
+		{
+			//FaultVal[0]
+		    	unsigned char ChademoOutputFuseBlew:1;				//bit 0
+			unsigned char CcsOutputFuseBlew:1;					//bit 1
+			unsigned char GbOutputFuseBlew:1;   					//bit 2
+			unsigned char RcdSelfTestFail:1;						//bit 3
+			unsigned char AcInputContactor1Welding:1;			//bit 4
+			unsigned char AcInputContactor1DrivingFault:1;			//bit 5
+			unsigned char AcInputContactor2Welding:1;			//bit 6
+			unsigned char AcInputContactor2DrivingFault:1;			//bit 7
+			//FaultVal[1]
+			unsigned char AcOutputRelayWelding:1;				//bit 0
+			unsigned char AcOutputRelayDrivingFault:1;				//bit 1
+			unsigned char ChademoOutputRelayWelding:1;			//bit 2
+			unsigned char ChademoOutputRelayDrivingFault	:1;		//bit 3
+			unsigned char CcsOutputRelayWelding:1;				//bit 4
+			unsigned char CcsOutputRelayDrivingFault:1;			//bit 5
+			unsigned char GbOutputRelayWelding:1;				//bit 6
+			unsigned char GbOutputRelayDrivingFault:1;				//bit 7
+			//FaultVal[2]
+			unsigned char AcConnectorTempSensorBroken:1;			//bit 0
+			unsigned char ChademoConnectorTempSensorBroken:1;	//bit 1
+			unsigned char CcsConnectorTempSensorBroken:1;		//bit 2
+			unsigned char GbConnectorTempSensorBroken:1;			//bit 3
+			unsigned char WiFiModuleBroken:1;					//bit 4
+			unsigned char Telecom4GModuleBroken:1;				//bit 5
+			unsigned char AuxPowerModuleBroken:1;				//bit 6
+			unsigned char RelayControlModuleBroken :1;			//bit 7
+	             	 //FaultVal[3]
+			unsigned char ChademoConnectorLockFail:1;			//bit 0
+			unsigned char GbConnectorLockFail:1;					//bit 1
+			unsigned char AcConnectorLockFail:1;					//bit 2
+			unsigned char ChademoModuleBroken:1;				//bit 3
+			unsigned char CcsModuleBroken:1;					//bit 4
+			unsigned char GbModuleBroken:1;						//bit 5
+			unsigned char PsuModuleBroken:1;						//bit 6
+			unsigned char :1;									//bit 7		reserved
+		}bits;
+	}FaultEvents;
+};
+
+char AlarmStatusCode[64][6]=
+{
+	"012200",	//System L1 input OVP
+	"012201",	//System L2 input OVP
+	"012202",	//System L3 input OVP
+	"012203",	//System L1 input UVP
+	"012204",	//System L2 input UVP
+	"012205",	//System L3 input UVP
+	"012206",	//PSU L1 input OVP
+	"012207",	//PSU L2 input OVP
+	"012208",	//PSU L3 input OVP
+	"012209",	//PSU L1 input UVP
+	"012210",	//PSU L2 input UVP
+	"012211",	//PSU L3 input UVP
+	"012212",	//System L1 input drop
+	"012213",	//System L2 input drop
+	"012214",	//System L3 input drop
+	"012215",	//System AC output OVP
+	"012216",	//System AC output OCP
+	"012217",	//System CHAdeMO output OVP
+	"012218",	//System CHAdeMO output OCP
+	"012219",	//System CCS output OVP
+	"012220",	//System CCS output OCP
+	"012221",	//System GB output OVP
+	"012222",	//System GB output OCP
+	"012223",	//System ambient/inlet OTP
+	"012224",	//System critical point OTP
+	"012225",	//PSU ambient/inlet OTP
+	"012226",	//PSU critical point OTP
+	"012227",	//Aux. power module OTP
+	"012228",	//Relay board/smart box OTP
+	"012229",	//CHAdeMO connector OTP
+	"012230",	//CCS connector OTP
+	"012231",	//GB connector OTP
+	"012232",	//AC connector OTP
+	"012233",	//RCD/CCID trip
+	"012234",	//CHAdeMO GFD trip
+	"012235",	//CCS GFD trip
+	"012236",	//GB GFD trip
+	"012237",	//SPD trip
+	"012238",	//Main power breaker trip
+	"012239",	//Aux. power breaker trip
+	"012240",	//PSU communication fail
+	"012241",	//WiFi module communication fail
+	"012242",	//3G/4G module communication fail
+	"012243",	//RFID module communication fail
+	"012244",	//Bluetooth module communication fail
+	"012245",	//LCM module communication fail
+	"012246",	//Aux. power module communication fail
+	"012247",	//Relay control boaed/smart box communication fail
+	"012248",	//CCS module communication fail
+	"012249",	//CHAdeMO module communication fail
+	"012250",	//GBT module communication fail
+	"012251",	//Emergency stop
+	"012252",	//Door open
+	"012253",	//System fan decay
+	"012254",	//Fail to create share memory
+	"012255",	//CSU initialization failed
+	"012256",	//Reserved
+	"012257",	//Reserved
+	"012258",	//Reserved
+	"012259",	//Reserved
+	"012260",	//Reserved
+	"012261",	//Reserved
+	"012262",	//Reserved
+	"012263"	//Reserved
+};
+struct AlarmCodeData
+{
+	unsigned char PreviousAlarmVal[8];
+	union
+	{
+		unsigned char AlarmVal[8];
+		struct
+		{
+			//AlarmVal[0]
+		    	unsigned char SystemL1InputOVP:1;					//bit 0
+			unsigned char SystemL2InputOVP:1;					//bit 1
+			unsigned char SystemL3InputOVP:1;   					//bit 2
+			unsigned char SystemL1InputUVP:1;					//bit 3
+			unsigned char SystemL2InputUVP:1;					//bit 4
+			unsigned char SystemL3InputUVP:1;					//bit 5
+			unsigned char PsuL1InputOVP:1;						//bit 6
+			unsigned char PsuL2InputOVP:1;						//bit 7
+			//AlarmVal[1]
+			unsigned char PsuL3InputOVP:1;						//bit 0
+			unsigned char PsuL1InputUVP:1;						//bit 1
+			unsigned char PsuL2InputUVP:1;						//bit 2
+			unsigned char PsuL3InputUVP	:1;						//bit 3
+			unsigned char SystemL1InputDrop:1;					//bit 4
+			unsigned char SystemL2InputDrop:1;					//bit 5
+			unsigned char SystemL3InputDrop:1;					//bit 6
+			unsigned char SystemAcOutputOVP:1;					//bit 7
+			//AlarmVal[2]
+			unsigned char SystemAcOutputOCP:1;					//bit 0
+			unsigned char SystemChademoOutputOVP:1;			//bit 1
+			unsigned char SystemChademoOutputOCP:1;			//bit 2
+			unsigned char SystemCcsOutputOVP:1;					//bit 3
+			unsigned char SystemCcsOutputOCP:1;					//bit 4
+			unsigned char SystemGbOutputOVP:1;					//bit 5
+			unsigned char SystemGbOutputOCP:1;					//bit 6
+			unsigned char SystemAmbientOTP :1;					//bit 7
+	             	 //AlarmVal[3]
+			unsigned char SystemCriticalPointOTP:1;				//bit 0
+			unsigned char PsuAmbientOTP:1;						//bit 1
+			unsigned char PsuCriticalPointOTP:1;					//bit 2
+			unsigned char AuxPowerModuleOTP:1;					//bit 3
+			unsigned char RelayBoardOTP:1;						//bit 4
+			unsigned char ChademoConnectorOTP:1;				//bit 5
+			unsigned char CcsConnectorOTP:1;					//bit 6
+			unsigned char GbConnectorOTP:1;					//bit 7
+			 //AlarmVal[4]
+			unsigned char AcConnectorOTP:1;						//bit 0
+			unsigned char RcdTrip:1;								//bit 1
+			unsigned char ChademoGfdTrip:1;						//bit 2
+			unsigned char CcsGfdTrip:1;							//bit 3
+			unsigned char GbGfdTrip:1;							//bit 4
+			unsigned char SpdTrip:1;								//bit 5
+			unsigned char MainPowerBreakerTrip:1;					//bit 6
+			unsigned char AuxPowerBreakerTrip:1;					//bit 7
+			//AlarmVal[5]
+			unsigned char PsuCommunicationFail:1;				//bit 0
+			unsigned char WiFiModuleCommFail:1;					//bit 1
+			unsigned char Telecom4GModuleCommFail:1;			//bit 2
+			unsigned char RfidModuleCommFail:1;					//bit 3
+			unsigned char BluetoothModuleCommFail:1;				//bit 4
+			unsigned char LcmModuleCommFail:1;					//bit 5
+			unsigned char AuxPowerModuleCommFail:1;			//bit 6
+			unsigned char RelayBoardCommFail:1;					//bit 7
+			//AlarmVal[6]
+			unsigned char CcsModuleCommFail:1;					//bit 0
+			unsigned char ChademoModuleCommFail:1;			//bit 1
+			unsigned char GbModuleCommFail:1;					//bit 2
+			unsigned char EmergencyStopTrip:1;					//bit 3
+			unsigned char DoorOpen:1;							//bit 4
+			unsigned char SystemFanDecay:1;						//bit 5
+			unsigned char FailToCreateShareMemory:1;				//bit 6
+			unsigned char CsuInitFailed:1;							//bit 7
+			//AlarmVal[7]
+			unsigned char :8;									//reserved
+		}bits;
+	}AlarmEvents;
+};
+
+char InfoStatusCode[64][6]=
+{
+	//Information comes from EVSE
+	"013600",	//Normal stop charging by user
+	"013601",	//Charging Time's up
+	"013602",	//Replace system air filter
+	"013603",	//Reach to CHAdeMO max. plugging times.
+	"013604",	//Reach to CCS max. plugging times.
+	"013605",	//Reach to GB max. plugging times.
+	"013606",	//Reach to AC max. plugging times.
+	"013607",	//CSU fimrware update fail
+	"013608",	//CHAdeMO Module fimrware update fail
+	"013609",	//CCS Module fimrware update fail
+	"013610",	//GB Module fimrware update fail
+	"013611",	//Aux. power module fimrware update fail
+	"013612",	//Relay control module fimrware update fail
+	"013613",	//LCM module fimrware update fail
+	"013614",	//Bluetooth module fimrware update fail
+	"013615",	//WiFi module fimrware update fail
+	"013616",	//3G/4G module fimrware update fail
+	"013617",	//SMR fimrware update fail
+	"013618",	//RFID module fimrware update fail
+	"013619",	//configured by USB flash drive
+	"013620",	//configured by backend
+	"013621",	//configured by webpage
+	"013622",	//disconnected from Internet through Ethernet
+	"013623",	//disconnected from Internet through WiFi
+	"013624",	//disconnected from Internet through 3G/4G
+	"013625",	//disconnected from AP through WiFi
+	"013626",	//disconnected from APN through 3G/4G
+	"013627",	//Reserved
+	"013628",	//Reserved
+	"013629",	//Reserved
+	"013630",	//Reserved
+	"013631",	//Reserved
+	//Information comes from EV
+	"023700",	//CHAdeMO EV communication Fail
+	"023701",	//CCS EV communication Fail
+	"023702",	//GB EV communication Fail
+	"023703",	//AC: pilot fault
+	"023704",	//CHAdeMO:  battery malfunction
+	"023705",	//CHAdeMO:  no charging permission
+	"023706",	//CHAdeMO:  battery incompatibility
+	"023707",	//CHAdeMO:  battery OVP
+	"023708",	//CHAdeMO:  battery UVP
+	"023709",	//CHAdeMO:  battery OTP
+	"023710",	//CHAdeMO:  battery current difference
+	"023711",	//CHAdeMO:  battery voltage difference
+	"023712",	//CHAdeMO:  shift position
+	"023713",	//CHAdeMO:  battery other fault
+	"023714",	//CHAdeMO:  charging system error
+	"023715",	//CHAdeMO:  EV normal stop
+	"023716",	//Reserved
+	"023717",	//Reserved
+	"023718",	//Reserved
+	"023719",	//Reserved
+	"023720",	//Reserved
+	"023721",	//Reserved
+	"023722",	//Reserved
+	"023723",	//Reserved
+	 //Information comes from Backend
+	"033900",	//disconnected from backend through Ethernet
+	"033901",	//disconnected from backend through WiFi
+	"033902",	//disconnected from backend through 3G/4G
+	"033903",	//Remote start charging by backend
+	"033904",	//Remote stop charging by backend
+	"033905",	//Remote reset by backend
+	"033906",	//Reserved
+	"033907",	//Reserved
+};
+struct InfoCodeData
+{
+	unsigned char PreviousInfoVal[8];
+	union
+	{
+		unsigned char InfoVal[8];
+		struct
+		{
+			//InfoVal[0]
+		    	unsigned char NormalStopChargingByUser:1;				//bit 0
+			unsigned char ChargingTimesUp:1;						//bit 1
+			unsigned char ReplaceSystemAirFilter:1; 					//bit 2
+			unsigned char ReachChademoMaxPluggingTimes:1;		//bit 3
+			unsigned char ReachCcsMaxPluggingTimes:1;			//bit 4
+			unsigned char ReachGbMaxPluggingTimes:1;			//bit 5
+			unsigned char ReachAcMaxPluggingTimes:1;				//bit 6
+			unsigned char CsuFimrwareUpdateFail:1;				//bit 7
+			//InfoVal[1]
+			unsigned char ChademoModuleFimrwareUpdateFail:1;	//bit 0
+			unsigned char CcsModuleFimrwareUpdateFail:1;			//bit 1
+			unsigned char GbModuleFimrwareUpdateFail:1;			//bit 2
+			unsigned char AuxPowerModuleFimrwareUpdateFail:1;		//bit 3
+			unsigned char RelayBoardFimrwareUpdateFail:1;			//bit 4
+			unsigned char LcmModuleFimrwareUpdateFail:1;			//bit 5
+			unsigned char BluetoothModuleFimrwareUpdateFail:1;		//bit 6
+			unsigned char WiFiModuleFimrwareUpdateFail:1;			//bit 7
+			//InfoVal[2]
+			unsigned char Telocom4GModuleFimrwareUpdateFail:1;	//bit 0
+			unsigned char PsuFimrwareUpdateFail:1;				//bit 1
+			unsigned char RfidModuleFimrwareUpdateFail:1;			//bit 2
+			unsigned char ConfiguredByUsbFlashDrive:1;				//bit 3
+			unsigned char ConfiguredByBackend:1;					//bit 4
+			unsigned char ConfiguredByWebpage:1;				//bit 5
+			unsigned char InternetDisconnectViaEthernet:1;			//bit 6
+			unsigned char InternetDisconnectViaWiFi :1;				//bit 7
+	             	 //InfoVal[3]
+			unsigned char InternetDisconnectVia4Gi:1;				//bit 0
+			unsigned char ApDisconnectViaWiFi:1;					//bit 1
+			unsigned char ApnDisconnectVia4Gi:1;					//bit 2
+			unsigned char :5;									//bit 3~7 reserved
+			 //InfoVal[4]
+			unsigned char ChademoEvCommFail:1;				//bit 0
+			unsigned char CcsEvCommFail:1;						//bit 1
+			unsigned char GbEvCommFail:1;						//bit 2
+			unsigned char PilotFault:1;							//bit 3
+			unsigned char ChademoBatteryMalfun:1;				//bit 4
+			unsigned char ChademoNoPermission:1;				//bit 5
+			unsigned char ChademoBatteryIncompatibility:1;			//bit 6
+			unsigned char ChademoBatteryOVP:1;					//bit 7
+			//InfoVal[5]
+			unsigned char ChademoBatteryUVP:1;					//bit 0
+			unsigned char ChademoBatteryOTP:1;					//bit 1
+			unsigned char ChademoBatteryCurrentDiff:1;			//bit 2
+			unsigned char ChademoBatteryVoltageDiff:1;			//bit 3
+			unsigned char ChademoShiftPosition:1;					//bit 4
+			unsigned char ChademoBatteryOtherFault:1;			//bit 5
+			unsigned char ChademoChargingSystemError:1;			//bit 6
+			unsigned char ChademoEvNormalStop:1;				//bit 7
+			//InfoVal[6]
+			unsigned char :8;									//bit 0~7 reserved
+			//InfoVal[7]
+			unsigned char BackendDisconnectedViaEthernet:1;		//bit 0
+			unsigned char BackendDisconnectViaWiFi:1;				//bit 1
+			unsigned char BackendDisconnectVia4G:1;				//bit 2
+			unsigned char BackendRemoteStart:1;					//bit 3
+			unsigned char BackendRemoteStop:1;					//bit 4
+			unsigned char BackendRemoteReset:1;					//bit 5
+			unsigned char :2;									//bit 6~7 reserved
+		}bits;
+	}InfoEvents;
+};
+
+struct StatusCodeData
+{
+	unsigned  char 		PresentStatusCode[10][6];
+	struct FaultCodeData	FaultCode;
+	struct AlarmCodeData	AlarmCode;
+	struct InfoCodeData	InfoCode;
+};
+
+/************************************************************************************/
+/**************************CCS protocol Share memory***************************/
+/**************************DIN70121: 201412***************************************/
+/**************************ISO15118_2014: 2014************************************/
+/**************************ISO15118_2018: 2018************************************/
+/************************************************************************************/
+typedef enum boolean { FALSE, TRUE } BOOL;
+enum ResponseCodeType_DIN70121		{ OK_DIN70121 = 0, OK_NewSessionEstablished_DIN70121 = 1, OK_OldSessionJoined_DIN70121 = 2, OK_CertificateExpiresSoon_DIN70121 = 3,
+									   FAILED_DIN70121 = 4, FAILED_SequenceError_DIN70121 = 5, FAILED_ServiceIDInvalid_DIN70121 = 6, FAILED_UnknownSession_DIN70121 = 7,
+									   FAILED_ServiceSelectionInvalid_DIN70121 = 8, FAILED_PaymentSelectionInvalid_DIN70121 = 9, FAILED_CertificateExpired_DIN70121 = 10,
+									   FAILED_SignatureError_DIN70121 = 11, FAILED_NoCertificateAvailable_DIN70121 = 12, FAILED_CertChainError_DIN70121 = 13, FAILED_ChallengeInvalid_DIN70121 = 14,
+									   FAILED_ContractCanceled_DIN70121 = 15, FAILED_WrongChargeParameter_DIN70121 = 16, FAILED_PowerDeliveryNotApplied_DIN70121 = 17,
+									   FAILED_TariffSelectionInvalid_DIN70121 = 18, FAILED_ChargingProfileInvalid_DIN70121 = 19, FAILED_EVSEPresentVoltageToLow_DIN70121 = 20,
+									   FAILED_MeteringSignatureNotValid_DIN70121 = 21, FAILED_WrongEnergyTransferType_DIN70121 = 22};
+enum ResponseCodeType_ISO15118_2014	{ OK_ISO15118_2014 = 0, OK_NewSessionEstablished_ISO15118_2014 = 1, OK_OldSessionJoined_ISO15118_2014 = 2, OK_CertificateExpiresSoon_ISO15118_2014 = 3,
+									   FAILED_ISO15118_2014 = 4, FAILED_SequenceError_ISO15118_2014 = 5, FAILED_ServiceIDInvalid_ISO15118_2014 = 6, FAILED_UnknownSession_ISO15118_2014 = 7,
+									   FAILED_ServiceSelectionInvalid_ISO15118_2014 = 8, FAILED_PaymentSelectionInvalid_ISO15118_2014 = 9, FAILED_CertificateExpired_ISO15118_2014 = 10,
+									   FAILED_SignatureError_ISO15118_2014 = 11, FAILED_NoCertificateAvailable_ISO15118_2014 = 12, FAILED_CertChainError_ISO15118_2014 = 13, FAILED_ChallengeInvalid_ISO15118_2014 = 14,
+									   FAILED_ContractCanceled_ISO15118_2014 = 15, FAILED_WrongChargeParameter_ISO15118_2014 = 16, FAILED_PowerDeliveryNotApplied_ISO15118_2014 = 17,
+									   FAILED_TariffSelectionInvalid_ISO15118_2014 = 18, FAILED_ChargingProfileInvalid_ISO15118_2014 = 19, FAILED_MeteringSignatureNotValid_ISO15118_2014 = 20,
+									   FAILED_NoChargeServiceSelected_ISO15118_2014 = 21, FAILED_WrongEnergyTransferMode_ISO15118_2014 = 22, FAILED_ContactorError_ISO15118_2014 = 23,
+									   FAILED_CertificateNotAllowedAtThisEVSE_ISO15118_2014 = 24, FAILED_CertificateRevoked_ISO15118_2014 = 25  };
+enum ResponseCodeType_ISO15118_2018	{ OK_ISO15118_2018 = 0, OK_NewSessionEstablished_ISO15118_2018 = 1, OK_OldSessionJoined_ISO15118_2018 = 2, OK_CertificateExpiresSoon_ISO15118_2018 = 3,
+									   OK_IsolationValid_ISO15118_2018 = 4, OK_IsolationWarning_ISO15118_2018 = 5, WARNING_CertificateExpired_ISO15118_2018 = 6, WARNING_NoCertificateAvailable_ISO15118_2018 = 7,
+									   WARNING_CertValidationError_ISO15118_2018 = 8, WARNING_CertVerificationError_ISO15118_2018 = 9, WARNING_ContractCanceled_ISO15118_2018 = 10,
+									   FAILED_ISO15118_2018 = 11, FAILED_SequenceError_ISO15118_2018 = 12, FAILED_ServiceIDInvalid_ISO15118_2018 = 13, FAILED_UnknownSession_ISO15118_2018 = 14,
+									   FAILED_ServiceSelectionInvalid_ISO15118_2018 = 15, FAILED_SignatureError_ISO15118_2018 = 16, FAILED_IdentificationSelectionInvalid_ISO15118_2018 = 17,
+									   FAILED_ChallengeInvalid_ISO15118_2018 = 18, FAILED_WrongChargeParameter_ISO15118_2018 = 19, FAILED_IsolationFault_ISO15118_2018 = 20,
+									   FAILED_PowerDeliveryNotApplied_ISO15118_2018 = 21, FAILED_TariffSelectionInvalid_ISO15118_2018 = 22, FAILED_ChargingProfileInvalid_ISO15118_2018 = 23,
+									   FAILED_MeteringSignatureNotValid_ISO15118_2018 = 24, FAILED_NoChargeServiceSelected_ISO15118_2018 = 25, FAILED_WrongEnergyTransferMode_ISO15118_2018 = 26,
+									   FAILED_ContactorError_ISO15118_2018 = 27, FAILED_CertificateRevoked_ISO15118_2018 = 28, FAILED_CertificateNotYetValid_ISO15118_2018 = 29 };
+enum EVSENotificationType		 		{ None = 0, StopCharging = 1, ReNegotiation = 2};
+enum ServiceCategoryType 				{ EVCharging = 0, Internet = 1, ContractCertificate = 2, OtherCustom = 3};
+enum PaymentOptionType 		      		{ Contract = 0, ExternalPayment = 1};
+/*enum EVSESupportedEnergyTransferType 	{ AC_single_phase_core = 0, AC_three_phase_core = 1, DC_core = 2, DC_extended = 3,
+									  DC_combo_core = 4, DC_dual = 5, AC_core1p_DC_extended = 6, AC_single_DC_core = 7,
+									  AC_single_phase_three_phase_core_DC_extended = 8, AC_core3p_DC_extended = 9};*/
+enum EnergyTransferModeType			{ AC_single_phase_core = 0, AC_three_phase_core = 1, DC_core = 2, DC_extended = 3,
+									  DC_combo_core = 4, DC_unique = 5};
+//enum identificationOptionType 			{ Contract = 0, ExternalIdentification = 1};
+enum unitSymbolType_DIN70121			{ h_DIN70121 = 0, m_DIN70121 = 1, s_DIN70121 = 2, A_DIN70121 = 3, Ah_DIN70121 = 4, V_DIN70121 = 5, VA_DIN70121 = 6, W_DIN70121 = 7, Ws_DIN70121 = 8, Wh_DIN70121 = 9};
+enum unitSymbolType_ISO15118_2014		{ h_ISO15118_2014 = 0, m_ISO15118_2014 = 1, s_ISO15118_2014 = 2, A_ISO15118_2014 = 3, V_ISO15118_2014 = 4, W_ISO15118_2014 = 5, Wh_ISO15118_2014 = 6};
+enum ProcessingType					{ Finished = 0, Ongoing = 1, Ongoing_WaitingForCustomerInteraction = 2};
+enum EVSEProcessingType_DIN70121		{ Finished_DIN70121 = 0, Ongoing_DIN70121 = 1};
+enum EVSEProcessingType_ISO15118_2014	{ Finished_ISO15118_2014 = 0, Ongoing_ISO15118_2014 = 1, Ongoing_WaitingForCustomerInteraction_ISO15118_2014=2 };
+enum DC_EVErrorCodeType 		  		{ NO_ERROR = 0, FAILED_RESSTemperatureInhibit = 1, FAILED_EVShiftPosition = 2, FAILED_ChargerConnectorLockFault = 3,
+									  FAILED_EVRESSMalfunction = 4, FAILED_ChargingCurrentdifferential = 5, FAILED_ChargingVoltageOutOfRange = 6,
+									  Reserved_A = 7, Reserved_B = 8, Reserved_C = 9, FAILED_ChargingSystemIncompatibility = 10, NoData = 11};
+enum IsolationLevelType_DIN70121 		{ Invalid_DIN70121 = 0, Valid_DIN70121 = 1, Warning_DIN70121 = 2, Fault_DIN70121 = 3};
+enum IsolationLevelType_ISO15118_2014		{ Invalid_ISO15118_2014 = 0, Valid_ISO15118_2014 = 1, Warning_ISO15118_2014 = 2, Fault_ISO15118_2014 = 3, No_IMD_ISO15118_2014	 = 4};
+enum DC_EVSEStatusCodeType			{ EVSE_NotReady = 0, EVSE_Ready = 1, EVSE_Shutdown = 2, EVSE_UtilityInterruptEvent = 3,
+						 			  EVSE_IsolationMonitoringActive = 4, EVSE_EmergencyShutdown = 5, EVSE_Malfunction = 6,
+						 			  Reserved_8 = 7, Reserved_9 = 8};
+enum ScheduleOriginType				{ EV = 0, SA = 1};
+enum ChargeProgressType_ISO15118_2014	{start_ISO15118_2014 = 0, Stop_ISO15118_2014 = 1, Renegotiate_ISO15118_2014 = 2};
+enum ChargeProgressType_ISO15118_2018	{start_ISO15118_2018 = 0, Renegotiate_ISO15118_2018 = 1, Standby_ISO15118_2018 = 2, Stop_ISO15118_2018 = 3};
+enum evOperationType					{Charge = 0, Discharge = 1, Standby = 2};
+enum mechanicalChargingDeviceStatusType {Home = 0, Moving = 1, EndPosition = 2};
+enum EV_CP_StatusType					{A = 0, B = 1, C = 2, D = 3, E = 4, F = 5};
+enum EV_Error_Status_CodeType			{ No_EV_Error = 0, EV_FAILED_EmergencyEvent = 1, EV_FAILED_Breaker = 2, EV_FAILED_RESSTemperatureInhibit = 3,
+						 			  EV_FAILED_RESS = 4, EV_FAILED_ChargingCurrentDifferential = 5, EV_FAILED_ChargingVoltageOutOfRange = 6,
+						 			  Reserved_by_ISO_1 = 7,  Reserved_by_ISO_2 = 8, Reserved_by_ISO_3 = 9, OEM1 = 10,
+						 			  OEM2 = 11,  OEM3 = 12, OEM4 = 13};
+enum IsolationStatusType				{ Invalid = 0, Safe = 1, Warning = 2, Fault = 3};
+enum ChargingSessionType				{ Terminate = 0, Pause = 1};
+enum CostKindType						{ relativePricePercentage = 0, RenewableGenerationPercentage = 1, CarbonDioxideEmission = 2};
+
+enum MsgFlowStatus		 			{ Idle = 0, CM_SLAC_PARM_REQ = 1, CM_SLAC_PARM_CONF = 2, CM_START_ATTEN_CHAR_IND = 3,  CM_MNBC_SOUND_IND = 4, CM_ATTEN_CHAR_IND = 5,
+									  CM_ATTEN_CHAR_RSP = 6, CM_VALIDATE_REQ = 7, CM_VALIDATE_CNF = 8, CM_SLAC_MATCH_REQ = 9, CM_SLAC_MATCH_CNF = 10, CM_AMP_MAP_REQ = 11,
+									  CM_AMP_MAP_CNF = 12, CM_SET_KEY_REQ=13, CM_SET_KEY_CNF = 14, SLACC_SDP_UDP_Connection = 15,
+									  SLACC_SDP_TCP_Connection = 16, SupportedAppProtocolRequest = 17, SupportedAppProtocolResponse = 18, SessionSetupRequest = 19, SessionSetupResponse = 20,
+									  ServiceDiscoveryRequest = 21, ServiceDiscoveryResponse = 22, ServiceDetailRequest = 23, ServiceDetailResponse = 24, ServiceAndPaymentSelectionRequest = 25, ServiceAndPaymentSelectionResponse = 26,
+									  PaymentDetailsRequest = 27, PaymentDetailsResponse = 28, AuthorizationRequest = 29, AuthorizationResponse = 30, CertificateUpdateRequest = 31, CertificateUpdateResponse = 32,
+									  CertificateInstallationRequest = 33, CertificateInstallationResponse = 34, ChargeParameterDiscoveryRequest = 35, ChargeParameterDiscoveryResponse = 36, CableCheckRequest = 37, CableCheckResponse = 38,
+									  PreChargeRequest = 39, PreChargeResponse = 40, PowerDeliveryRequestStart = 41, PowerDeliveryResponsetStart = 42, ChargingStatusRequest = 43, ChargingStatusResponse = 44,
+									  CurrentDemandRequest = 45, CurrentDemandResponse = 46, MeteringReceiptRequest = 47, MeteringReceiptResponse = 48, PowerDeliveryRequestStop = 49, PowerDeliveryResponsetStop = 50,
+									  WeldingDetectionRequest = 51, WeldingDetectionResponse = 52, SessionStopRequest = 53, SessionStopResponse = 54,
+									   Performance_Timeout = 253, Sequence_Timeout = 254, Other_Fault=255  };
+
+
+struct PhysicalValueType_DIN70121 				//The final physical value is determined by: Value * 10 ^ Multiplier [Unit]
+{
+	int									Multiplier;			//range: -3..+3
+	enum unitSymbolType_DIN70121			Unit;
+	short 								Value;
+};
+struct PhysicalValueType_ISO15118_2014			//The final physical value is determined by: Value * 10 ^ Multiplier [Unit]
+{
+	int									Multiplier;			//range: -3..+3
+	enum unitSymbolType_ISO15118_2014		Unit;
+	short 								Value;
+};
+struct PhysicalValueType_ISO15118_2018			//The final physical value is determined by: Value * 10 ^ Exponent [Unit]
+{
+	int									Exponent;		//range: -3..+3
+	short 								Value;
+};
+struct AppProtocolType
+{
+	unsigned char	ProtocolNamespace[100];
+	unsigned int	VersionNumberMajor;
+	unsigned int	VersionNumberMinor;
+	unsigned char	SchemaID;
+	unsigned char	Priority;					//range 1..20
+};
+struct ACD_SSEnergyTransferModeType
+{
+	unsigned char	EVID[20];
+};
+struct EVSEStatusType
+{
+	unsigned short				NotificationMaxDelay;	//in seconds
+	enum EVSENotificationType	EVSENotification;
+};
+struct ServiceIDListType
+{
+	unsigned short	ServiceID[10];	//refer to chapter 8.6.2.1 Table 192
+};
+struct PaymentOptionListType
+{
+	enum PaymentOptionType	PaymentOption[2];
+};
+struct ServiceTagType
+{
+	unsigned short				ServiceID;
+	unsigned char				ServiceName[32];//Optional Element
+	enum ServiceCategoryType	ServiceCategory;
+	unsigned char				ServiceScope[32];//Optional Element
+};
+struct ServiceType_DIN70121
+{
+	struct ServiceTagType		ServiceTag;
+	BOOL					FreeService;
+};
+struct ServiceType_ISO15118_2014
+{
+	unsigned short				ServiceID;
+	unsigned char				ServiceName[32];	//Optional
+	enum ServiceCategoryType	ServiceCategory;
+	unsigned char				ServiceScope[64];	//Optional
+	BOOL					FreeService;
+};
+/*struct ServiceType_ISO15118_2018
+{
+	unsigned short				ServiceID;
+	BOOL					FreeService;
+}; */
+struct SupportedEnergyTransferModeType
+{
+	enum EnergyTransferModeType	EnergyTransferMode[6];
+};
+struct ServiceChargeType
+{
+	struct ServiceType_DIN70121				Services;
+	//enum EVSESupportedEnergyTransferType		EnergyTransferType;
+	enum EnergyTransferModeType			EnergyTransferType;
+};
+
+struct ChargeServiceType
+{
+	struct ServiceType_ISO15118_2014			Services;
+	struct SupportedEnergyTransferModeType	SupportedEnergyTransferMode;
+};
+struct ServiceListType
+{
+	struct ServiceType_ISO15118_2014			Service[8];
+};
+struct IdentificationOptionListType
+{
+	enum PaymentOptionType				IdentificationOption[2];
+};
+struct ParameterType
+{
+	unsigned char							Name[32];
+	struct PhysicalValueType_ISO15118_2014		PhysicalValue_ISO15118_2014;
+	struct PhysicalValueType_ISO15118_2018		PhysicalValue_ISO15118_2018;
+};
+struct ParameterSetType
+{
+	short 				ParameterSetID;
+	struct ParameterType	Parameter[16];
+};
+struct ServiceParameterListType
+{
+	struct ParameterSetType		ParameterSet[255];
+};
+struct WPT_SDlEnergyTransferModeType
+{
+	struct ServiceParameterListType	ServiceParameterList;
+};
+struct SelectedServiceType
+{
+	unsigned short			ServiceID;
+	short					ParameterSetID;
+};
+struct SelectedServiceListType
+{
+	struct SelectedServiceType	SelectedService[16];
+};
+
+struct CertificateChainType
+{
+	unsigned char 				Id[32];				//Optional
+	unsigned char 				Certificate[800];		//check size again
+	unsigned char				SubCertificates[4][800];	//Optional, 	check size again
+};
+struct PNC_AReqIdentificationModeType
+{
+	unsigned char 			GenChallenge[16];					//DIN70121=> None,	ISO15118_2014=>None,	ISO15118_2018=>Optional
+	unsigned char 			Id[32];							//DIN70121=> None,	ISO15118_2014=>None,	ISO15118_2018=>Optional
+};
+struct AC_EVChargeParameterType
+{
+	unsigned int 								DepartureTime;		//Optional
+	struct PhysicalValueType_ISO15118_2014			EAmount;
+	struct PhysicalValueType_ISO15118_2014			EVMaxVoltage;
+	struct PhysicalValueType_ISO15118_2014			EVMaxCurrent;
+	struct PhysicalValueType_ISO15118_2014			EVMinCurrent;
+};
+struct DC_EVStatusType_DIN70121
+{
+	BOOL						EVReady;
+	BOOL						EVCabinConditioning;
+	BOOL						EVRESSConiditioning;
+	enum DC_EVErrorCodeType		EVErrorCode;
+	unsigned char 					EVRESSSOC;		/*0-100 percentage*/
+};
+struct DC_EVChargeParameterType_DIN70121
+{
+	struct DC_EVStatusType_DIN70121			DC_EVStatus;
+	struct PhysicalValueType_DIN70121			EVMaximumCurrentLimit;
+	struct PhysicalValueType_DIN70121			EVMaximumPowerLimit;			//Optional
+	struct PhysicalValueType_DIN70121			EVMaximumVoltageLimit;
+	struct PhysicalValueType_DIN70121			EVEnergyCapacity;				//Optional
+	struct PhysicalValueType_DIN70121			EVEnergyRequest;				//Optional
+	unsigned char							FullSOC;/*0-100 percentage*/		//Optional
+	unsigned char							BulkSOC;/*0-100 percentage*/	//Optional
+};
+struct DC_EVStatusType_ISO15118_2014
+{
+	BOOL						EVReady;
+	enum DC_EVErrorCodeType		EVErrorCode;
+	unsigned char 					EVRESSSOC;		/*0-100 percentage*/
+};
+struct DC_EVChargeParameterType_ISO15118_2014
+{
+	unsigned int 								DepartureTime;				//Optional
+	struct DC_EVStatusType_ISO15118_2014			DC_EVStatus;
+	struct PhysicalValueType_ISO15118_2014 			EVMaximumCurrentLimit;
+	struct PhysicalValueType_ISO15118_2014			EVMaximumPowerLimit;			//Optional
+	struct PhysicalValueType_ISO15118_2014			EVMaximumVoltageLimit;
+	struct PhysicalValueType_ISO15118_2014			EVEnergyCapacity;				//Optional
+	struct PhysicalValueType_ISO15118_2014			EVEnergyRequest;				//Optional
+	unsigned char								FullSOC;/*0-100 percentage*/		//Optional
+	unsigned char								BulkSOC;/*0-100 percentage*/	//Optional
+};
+struct Dynamic_CPDReqControlModeType
+{
+	unsigned int 								DepartureTime;
+};
+struct RelativeTimeIntervalType
+{
+	unsigned int 	duration;			//Optional
+	unsigned int	start;
+};
+struct PMaxScheduleEntryType
+{
+	struct RelativeTimeIntervalType	RelativeTimeInterval;
+	unsigned short					PMax;
+};
+struct PMaxScheduleType
+{
+	unsigned short					PMaxScheduleID;			//no this itme in ISO15118_2014
+	struct PMaxScheduleEntryType		PMaxScheduleEntry[1024];
+};
+struct CostType
+{
+	unsigned int 					amount;
+	enum CostKindType				costKind;
+	int 							amountMultiplier;		//Optional , range: -3..+3
+};
+struct ConsumptionCostType
+{
+	struct CostType						Cost[3];
+	struct PhysicalValueType_ISO15118_2014		startValue;
+};
+struct SalesTariffEntryType
+{
+	struct RelativeTimeIntervalType	RelativeTimeInterval;
+	unsigned char 					EPriceLevel;			//Optional
+	struct ConsumptionCostType		ConsumptionCost[3];	//Optional
+};
+struct SalesTariffType
+{
+	unsigned char 					Id[32];					//Optional
+	short 						SalesTariffID;
+	unsigned char 					SalesTariffDescription[32];	//Optional
+	unsigned char 					NumEPriceLevels;			//Optional
+	struct SalesTariffEntryType			SalesTariffEntry[1024];
+};
+struct SAScheduleTupleType
+{
+	short 						SAScheduleTupleID;
+	struct PMaxScheduleType			PMaxSchedule;
+	struct SalesTariffType				SalesTariff;				//Optional
+};
+struct ScheduleListType
+{
+	enum ScheduleOriginType					ScheduleOrigin;
+	struct SAScheduleTupleType					ScheduleTuple[3];
+};
+struct Scheduled_CPDReqControlModeType
+{
+	enum ProcessingType						EVProcessing;
+	unsigned int 								DepartureTime;		//Optional
+	unsigned short 							MaxSupportingPoints;
+	struct ScheduleListType						ScheduleList;			//Optional
+};
+struct AC_CPDReqEnergyTransferModeType
+{
+	struct PhysicalValueType_ISO15118_2018			EVTargetEnergyRequest;			//Optional
+	struct PhysicalValueType_ISO15118_2018			EVMaximumEnergyRequest;		//Optional
+	struct PhysicalValueType_ISO15118_2018			EVMinimumEnergyRequest;		//Optional
+	struct PhysicalValueType_ISO15118_2018			EVMaximumChargePower;
+	struct PhysicalValueType_ISO15118_2018			EVMaximumChargeCurrent;
+	struct PhysicalValueType_ISO15118_2018			EVMinimumChargeCurrent;
+	struct PhysicalValueType_ISO15118_2018			EVMaximumVoltage;
+};
+struct DC_CPDReqEnergyTransferModeType
+{
+	struct PhysicalValueType_ISO15118_2018			EVMaximumChargePower;			//Optional
+	struct PhysicalValueType_ISO15118_2018			EVMinimumChargePower;			//Optional
+	struct PhysicalValueType_ISO15118_2018			EVMaximumChargeCurrent;
+	struct PhysicalValueType_ISO15118_2018			EVMinimumChargeCurrent;
+	struct PhysicalValueType_ISO15118_2018			EVMaximumVoltage;
+	struct PhysicalValueType_ISO15118_2018			EVTargetEnergyRequest;				//Optional
+	struct PhysicalValueType_ISO15118_2018			EVMaximumEnergyRequest;			//Optional
+	struct PhysicalValueType_ISO15118_2018			EVMinimumEnergyRequest;			//Optional
+	unsigned char								TargetSOC;						//Optional
+	unsigned char								BulkSOC;							//Optional
+};
+struct BPT_AC_CPDReqEnergyTransferModeType
+{
+	struct PhysicalValueType_ISO15118_2018			EVMaximumChargePower;
+	struct PhysicalValueType_ISO15118_2018			EVMaximumDischargePower;
+	struct PhysicalValueType_ISO15118_2018			EVMinimumDischargePower;
+	struct PhysicalValueType_ISO15118_2018			EVMaximumChargeCurrent;
+	struct PhysicalValueType_ISO15118_2018			EVMaximumDischargeCurrent;
+	struct PhysicalValueType_ISO15118_2018			EVMinimumChargeCurrent;
+	struct PhysicalValueType_ISO15118_2018			EVMinimumDischargeCurrent;
+	struct PhysicalValueType_ISO15118_2018			EVTargetEnergyRequest;				//Optional
+	struct PhysicalValueType_ISO15118_2018			EVMinimumEnergyRequest;			//Optional
+	struct PhysicalValueType_ISO15118_2018			EVMaximumEnergyRequest;			//Optional
+	struct PhysicalValueType_ISO15118_2018			EVMaximumVoltage;
+};
+struct BPT_DC_CPDReqEnergyTransferModeType
+{
+	struct PhysicalValueType_ISO15118_2018			EVMaximumChargePower;
+	struct PhysicalValueType_ISO15118_2018			EVMinimumChargePower;
+	struct PhysicalValueType_ISO15118_2018			EVMaximumDischargePower;
+	struct PhysicalValueType_ISO15118_2018			EVMinimumDischargePower;
+	struct PhysicalValueType_ISO15118_2018			EVMaximumChargeCurrent;
+	struct PhysicalValueType_ISO15118_2018			EVMinimumChargeCurrent;
+	struct PhysicalValueType_ISO15118_2018			EVMaximumDischargeCurrent;
+	struct PhysicalValueType_ISO15118_2018			EVMinimumDischargeCurrent;
+	struct PhysicalValueType_ISO15118_2018			EVMaximumVoltage;
+	struct PhysicalValueType_ISO15118_2018			EVMinimumVoltage;
+	struct PhysicalValueType_ISO15118_2018			EVTargetEnergyRequest;
+	struct PhysicalValueType_ISO15118_2018			EVMaximumEnergyRequest;
+	struct PhysicalValueType_ISO15118_2018			EVMinimumEnergyRequest;
+	unsigned char								TargetSOC;					//Optional
+	unsigned char								BulkSOC;						//Optional
+};
+struct WPT_CPDReqEnergyTransferModeType
+{
+	struct PhysicalValueType_ISO15118_2018			EVMaximumPower;				//Optional
+	struct PhysicalValueType_ISO15118_2018			EVMinimumPower;				//Optional
+	struct PhysicalValueType_ISO15118_2018			EVTargetEnergyRequest;			//Optional
+	struct PhysicalValueType_ISO15118_2018			EVMaximumEnergyRequest;		//Optional
+	struct PhysicalValueType_ISO15118_2018			EVMinimumEnergyRequest;		//Optional
+};
+struct ACD_CPDReqEnergyTransferModeType
+{
+	//cannot be found in standard
+};
+struct SAScheduleListType
+{
+	struct SAScheduleTupleType		SAScheduleTuple[3];
+};
+struct DC_EVSEStatusType_DIN70121
+{
+	enum IsolationLevelType_DIN70121			EVSEIsolationStatus;			//Optional
+	enum DC_EVSEStatusCodeType			EVSEStatusCode;
+	unsigned int							NotificationMaxDelay;
+	enum EVSENotificationType				EVSENotification;
+};
+struct DC_EVSEChargeParameterType_DIN70121
+{
+	struct DC_EVSEStatusType_DIN70121		DC_EVSEStatus;
+	struct PhysicalValueType_DIN70121			EVSEMaximumCurrentLimit;
+	struct PhysicalValueType_DIN70121			EVSEMaximumPowerLimit;			//Optional
+	struct PhysicalValueType_DIN70121			EVSEMaximumVoltageLimit;
+	struct PhysicalValueType_DIN70121			EVSEMinimumCurrentLimit;
+	struct PhysicalValueType_DIN70121			EVSEMinimumVoltageLimit;
+	struct PhysicalValueType_DIN70121			EVSECurrentRegulationTolerance;		//Optional
+	struct PhysicalValueType_DIN70121			EVSEPeakCurrentRipple;
+	struct PhysicalValueType_DIN70121			EVSEEnergyToBeDelivered;			//Optional
+};
+struct AC_EVSEStatusType
+{
+	BOOL							  		RCD;
+	unsigned short 							NotificationMaxDelay;
+	enum EVSENotificationType					EVSENotification;		//need to be confirmed
+};
+struct AC_EVSEChargeParameterType
+{
+	struct AC_EVSEStatusType					AC_EVSEStatus;
+	struct PhysicalValueType_ISO15118_2014			EVSENominalVoltage;
+	struct PhysicalValueType_ISO15118_2014			EVSEMaxCurrent;
+};
+struct DC_EVSEStatusType_ISO15118_2014
+{
+	unsigned short								NotificationMaxDelay;
+	enum EVSENotificationType					EVSENotification;
+	enum IsolationLevelType_ISO15118_2014			EVSEIsolationStatus;					//Optional
+	enum DC_EVSEStatusCodeType				DC_EVSEStatusCode;
+};
+struct DC_EVSEChargeParameterType_ISO15118_2014
+{
+	struct DC_EVSEStatusType_ISO15118_2014		DC_EVSEStatus;
+	struct PhysicalValueType_ISO15118_2014			EVSEMaximumCurrentLimit;
+	struct PhysicalValueType_ISO15118_2014			EVSEMaximumPowerLimit;
+	struct PhysicalValueType_ISO15118_2014			EVSEMaximumVoltageLimit;
+	struct PhysicalValueType_ISO15118_2014			EVSEMinimumCurrentLimit;
+	struct PhysicalValueType_ISO15118_2014			EVSEMinimumVoltageLimit;
+	struct PhysicalValueType_ISO15118_2014			EVSECurrentRegulationTolerance;		//Optional
+	struct PhysicalValueType_ISO15118_2014			EVSEPeakCurrentRipple;
+	struct PhysicalValueType_ISO15118_2014			EVSEEnergyToBeDelivered;			//Optional
+};
+struct Scheduled_CPDResControlModeType
+{
+	struct ScheduleListType						ScheduleList;
+};
+struct AC_CPDResEnergyTransferModeType
+{
+	struct PhysicalValueType_ISO15118_2018			EVSEMaximumChargeCurrent[3];
+	struct PhysicalValueType_ISO15118_2018			EVSENominalVoltage;
+	struct PhysicalValueType_ISO15118_2018			EVSENominalFrequency;
+};
+struct DC_CPDResEnergyTransferModeType
+{
+	struct PhysicalValueType_ISO15118_2018			EVSEMaximumChargePower;
+	struct PhysicalValueType_ISO15118_2018			EVSEMaximumChargeCurrent;
+	struct PhysicalValueType_ISO15118_2018			EVSEMinimumChargeCurrent;
+	struct PhysicalValueType_ISO15118_2018			EVSEMaximumVoltage;
+	struct PhysicalValueType_ISO15118_2018			EVSEMinimumVoltage;
+};
+struct BPT_AC_CPDResEnergyTransferModeType
+{
+	struct PhysicalValueType_ISO15118_2018			EVSEMaximumChargeCurrent[3];
+	struct PhysicalValueType_ISO15118_2018			EVSEMaximumDischargeCurrent[3];
+	struct PhysicalValueType_ISO15118_2018			EVSENominalVoltage;
+	struct PhysicalValueType_ISO15118_2018			EVSENominalFrequency;
+};
+struct BPT_DC_CPDResEnergyTransferModeType
+{
+	struct PhysicalValueType_ISO15118_2018			EVSEMaximumChargePower;
+	struct PhysicalValueType_ISO15118_2018			EVSEMaximumDischargePower;
+	struct PhysicalValueType_ISO15118_2018			EVSEMaximumChargeCurrent;
+	struct PhysicalValueType_ISO15118_2018			EVSEMaximumDischargeCurrent;
+	struct PhysicalValueType_ISO15118_2018			EVSEMinimumChargeCurrent;
+	struct PhysicalValueType_ISO15118_2018			EVSEMinimumDischargeCurrent;
+	struct PhysicalValueType_ISO15118_2018			EVSEMaximumVoltage;
+	struct PhysicalValueType_ISO15118_2018			EVSEMinimumVoltage;
+};
+struct WPT_CPDResEnergyTransferModeType
+{
+	struct PhysicalValueType_ISO15118_2018			EVSEMaximumPower;
+	struct PhysicalValueType_ISO15118_2018			EVSEMinimumPower;
+};
+struct ACD_CPDResEnergyTransferModeType
+{
+	//not found in ISO15118_2018
+};
+struct ProfileEntryType_DIN70121
+{
+	unsigned int 				ChargingProfileEntryStart;
+	short						ChargingProfileEntryMaxPower;
+};
+struct ChargingProfileType_DIN70121
+{
+	short 							SAScheduleTupleID;
+	struct ProfileEntryType_DIN70121		ProfileEntry[24];
+};
+struct DC_EVPowerDeliveryParameterType_DIN70121
+{
+	struct DC_EVStatusType_DIN70121			DC_EVStatus;
+	BOOL								BulkChargingComplete;		//Optional
+	BOOL								ChargingComplete;
+};
+struct ProfileEntryType_ISO15118_2014
+{
+	unsigned int 								ChargingProfileEntryStart;
+	struct PhysicalValueType_ISO15118_2018			ChargingProfileEntryMaxPower;
+	unsigned char 								ChargingProfileEntryMaxNumberOfPhasesInUse;	//Optional
+};
+struct ChargingProfileType_ISO15118_2014
+{
+	struct ProfileEntryType_ISO15118_2014			ProfileEntry[24];
+};
+struct DC_EVPowerDeliveryParameterType_ISO15118_2014
+{
+	struct DC_EVStatusType_ISO15118_2014 			DC_EVStatus;
+	BOOL									BulkChargingComplete;		//Optional
+	BOOL									ChargingComplete;
+};
+struct TimeInterval
+{
+	unsigned int 								start;
+	unsigned int 								duration;				//Optional
+};
+struct PowerScheduleEntryType
+{
+	struct TimeInterval							TimeInterval;
+	struct PhysicalValueType_ISO15118_2018			Power[3];
+};
+struct EVPowerProfileType
+{
+	struct PowerScheduleEntryType				EVPowerProfileEntry[2048];
+};
+struct Scheduled_PDReqControlModeType
+{
+	unsigned char 								ScheduleTupleID;
+	struct EVPowerProfileType					EVPowerProfile;
+};
+struct BPT_Scheduled_PDReqControlModeType
+{
+	unsigned char 								ScheduleTupleID;
+	struct EVPowerProfileType					EVPowerProfile;			//Optional
+	enum evOperationType						EVOperation;
+};
+struct ListOfRootCertificateIDsType
+{
+	unsigned char 								RootCertificateID[20][40];
+};
+struct ContractSignatureEncryptedPrivateKeyType
+{
+	unsigned char 								Id[32];
+};
+struct DiffieHellmanPublickeyType
+{
+	unsigned char 								Id[32];
+};
+struct ContractCertificateEncryptedPrivateKeyType
+{
+	unsigned char 								Id[32];
+};
+struct EVTechnicalStatusType
+{
+	BOOL									EV_Status_ReadyToCharge;
+	BOOL									EV_Status_ImmobilizationRequest;		//Optional
+	BOOL									EV_Status_Immobilized;
+	struct PhysicalValueType_ISO15118_2018			EV_Status_WLAN_Strength;
+	enum EV_CP_StatusType						EV_CP_Status;
+	unsigned char								EV_Status_RESSSOC;					//0~100%
+	enum EV_Error_Status_CodeType				EV_Error_Status_Code;
+	BOOL									EVSE_Timeout;
+};
+struct MeterInfoType_ISO15118_2014
+{
+	unsigned char								MeterID[32];
+	unsigned long 								MeterReading;						//Optional
+	unsigned char								SigMeterReading[64];				//Optional
+	short 									MeterStatus;						//Optional
+	short 									TMeter;							//Optional
+};
+struct Scheduled_MRReqControlModeType
+{
+	unsigned char 								ScheduleTupleID;
+};
+struct MeterInfoType_ISO15118_2018
+{
+	unsigned char								MeterID[32];
+	unsigned long 								MeterReadingWhCharged;			//Optional
+	unsigned long 								MeterReadingWhDischarged;			//Optional
+	unsigned long 								MeterReadingVARhLeading;			//Optional
+	unsigned long 								MeterReadingVARhLagging;			//Optional
+	unsigned char								SignatureMeterReading[64];			//Optional
+	short 									MeterStatus;						//Optional
+	short 									TimeStampMeter;					//Optional
+	BOOL									ReceiptRequired;					//Optional
+};
+struct PnC_CLReqIdentificationModeType
+{
+	BOOL									MeteringReceiptRequested;
+};
+struct Dynamic_CSReqControlModeType
+{
+	struct PhysicalValueType_ISO15118_2018			EVTargetEnergyRequest;
+	struct PhysicalValueType_ISO15118_2018			EVMaximumEnergyRequest;
+	struct PhysicalValueType_ISO15118_2018			EVMinimumEnergyRequest;
+	struct PhysicalValueType_ISO15118_2018			EVMaximumChargePower;
+	struct PhysicalValueType_ISO15118_2018			EVMaximumChargeCurrent;
+	struct PhysicalValueType_ISO15118_2018			EVMinimumChargeCurrent;
+};
+struct Scheduled_CSReqControlModeType
+{
+	struct PhysicalValueType_ISO15118_2018			EVTargetEnergyRequest;				//Optional
+	struct PhysicalValueType_ISO15118_2018			EVMaximumEnergyRequest;			//Optional
+	struct PhysicalValueType_ISO15118_2018			EVMinimumEnergyRequest;			//Optional
+	BOOL									Standby;
+	struct PhysicalValueType_ISO15118_2018			EVMaximumChargePower;			//Optional
+	struct PhysicalValueType_ISO15118_2018			EVMaximumChargeCurrent;			//Optional
+	struct PhysicalValueType_ISO15118_2018			EVMinimumChargeCurrent;			//Optional
+};
+struct DisplayParametersType
+{
+	unsigned short 							CurrentRange;
+	unsigned char	 							CurrentSOC;						//0~100%
+	unsigned char	 							MinimumSOC;						//0~100%
+	struct PhysicalValueType_ISO15118_2018			RemainingTimeToMaximumSOC;
+	struct PhysicalValueType_ISO15118_2018			RemainingTimeToTargetSOC;
+	struct PhysicalValueType_ISO15118_2018			RemainingTimeToBulkSOC;
+	struct PhysicalValueType_ISO15118_2018			RemainingTimeToMinimumSOC;
+	BOOL									ChargingComplete;
+	BOOL									BulkChargingComplete;
+	BOOL									InletHot;
+};
+struct PnC_CLResIdentificationModeType
+{
+	struct MeterInfoType_ISO15118_2018			MeterInfo;
+};
+struct Dynamic_CSResControlModeType
+{
+	struct PhysicalValueType_ISO15118_2018			EVSETargetActivePower;
+};
+struct Scheduled_CDResControlModeType
+{
+	struct PhysicalValueType_ISO15118_2018			EVSEMaximumChargePower;		//Optional
+	struct PhysicalValueType_ISO15118_2018			EVSEMaximumChargeCurrent;	//Optional
+	struct PhysicalValueType_ISO15118_2018			EVSEMaximumVoltage;			//Optional
+};
+struct LFA_EVFinePositioningSetupParametersType
+{
+	unsigned char 								NumberOfSensors;
+	//NOT complete yet,  to be continue.....
+};
+
+/****SupportedAppProtocolRequest****/
+struct SupportedAppProtocolRequest_DIN70121
+{
+	struct AppProtocolType	AppProtocol[20];
+};
+struct SupportedAppProtocolRequest_ISO15118_2014
+{
+	struct AppProtocolType	AppProtocol[20];
+};
+struct SupportedAppProtocolRequest_ISO15118_2018
+{
+	struct AppProtocolType	AppProtocol[20];
+};
+/****SupportedAppProtocolResponse****/
+struct SupportedAppProtocolResponse_DIN70121
+{
+	enum ResponseCodeType_DIN70121		ResponseCode;
+	unsigned char							SchemaID;				//Optional
+};
+struct SupportedAppProtocolResponse_ISO15118_2014
+{
+	enum ResponseCodeType_ISO15118_2014	ResponseCode;
+	unsigned char							SchemaID;				//Optional
+};
+struct SupportedAppProtocolResponse_ISO15118_2018
+{
+	enum ResponseCodeType_ISO15118_2018	ResponseCode;
+	unsigned char							SchemaID;					//Optional
+};
+/****SessionSetupRequest****/
+struct SessionSetupRequest_DIN70121
+{
+	unsigned char						EVCCID[8];						//the MAC address of the EVCC in Hex
+};
+struct SessionSetupRequest_ISO15118_2014
+{
+	unsigned char						EVCCID[8];						//the MAC address of the EVCC in Hex
+};
+struct SessionSetupRequest_ISO15118_2018
+{
+	unsigned char						EVCCID[8];						//the MAC address of the EVCC in Hex
+	struct ACD_SSEnergyTransferModeType	ACD_SSEnergyTransferMode;			//For ACD mandatory, optional for rest
+};
+/****SessionSetupResponse****/
+struct SessionSetupResponse_DIN70121
+{
+	enum ResponseCodeType_DIN70121		ResponseCode;
+	unsigned char							EVSEID[40];					//DIN70121=>Max length:32,	ISO15118=>min length:7, max length:37
+	unsigned int							EVSETimeStamp;				//EPOCH format, Optional
+};
+struct SessionSetupResponse_ISO15118_2014
+{
+	enum ResponseCodeType_ISO15118_2014	ResponseCode;
+	unsigned char							EVSEID[40];					//DIN70121=>Max length:32,	ISO15118=>min length:7, max length:37
+	unsigned int							EVSETimeStamp;				//EPOCH format, Optional
+};
+struct SessionSetupResponse_ISO15118_2018
+{
+	enum ResponseCodeType_ISO15118_2018	ResponseCode;
+	unsigned char							EVSEID[40];					//DIN70121=>Max length:32,	ISO15118=>min length:7, max length:37
+	struct EVSEStatusType					EVSEStatus;					//Optional
+};
+/****ServiceDiscoveryRequest****/
+struct ServiceDiscoveryRequest_DIN70121
+{
+	unsigned char				ServiceScope[32];		//Optional
+	enum ServiceCategoryType	ServiceCategory;		//Optional
+};
+struct ServiceDiscoveryRequest_ISO15118_2014
+{
+	unsigned char				ServiceScope[32];		//Optional
+	enum ServiceCategoryType	ServiceCategory;		//Optional
+};
+struct ServiceDiscoveryRequest_ISO15118_2018
+{
+	struct ServiceIDListType		SupportedServiceIDs;	//Optional
+};
+/****ServiceDiscoveryResponse****/
+struct ServiceDiscoveryResponse_DIN70121
+{
+	enum ResponseCodeType_DIN70121		ResponseCode;
+	struct PaymentOptionListType				PaymentOptions;
+	struct ServiceChargeType				ChargeService_DIN70121;
+};
+struct ServiceDiscoveryResponse_ISO15118_2014
+{
+	enum ResponseCodeType_ISO15118_2014	ResponseCode;
+	struct PaymentOptionListType				PaymentOptions;
+	struct ChargeServiceType				ChargeService;
+	struct ServiceListType					ServiceList;					//Optional
+};
+struct ServiceDiscoveryResponse_ISO15118_2018
+{
+	enum ResponseCodeType_ISO15118_2018	ResponseCode;
+	struct EVSEStatusType					EVSEStatus;					//Optional
+	struct IdentificationOptionListType			IdentificationOptionList;
+	struct ServiceListType					EnergyTransferServiceList;
+	struct ServiceListType					VASList;						//Optional
+};
+/****ServiceDetailRequest****/
+//Only in ISO15118_2014 and ISO15118_2018
+struct ServiceDetailRequest_ISO15118_2014
+{
+	unsigned short						ServiceID;
+};
+struct ServiceDetailRequest_ISO15118_2018
+{
+	unsigned short						ServiceID;
+	struct WPT_SDlEnergyTransferModeType	WPT_SDlEnergyTransferMode;
+};
+/****ServiceDetailResponse****/
+struct ServiceDetailResponse_ISO15118_2014
+{
+	enum ResponseCodeType_ISO15118_2014	ResponseCode;
+	unsigned short							ServiceID;
+	struct ServiceParameterListType 			ServiceParameterList;
+};
+struct ServiceDetailResponse_ISO15118_2018
+{
+	enum ResponseCodeType_ISO15118_2018	ResponseCode;
+	unsigned short							ServiceID;
+	struct ServiceParameterListType 			ServiceParameterList;
+	struct EVSEStatusType					EVSEStatus;					//Optional
+};
+/****ServiceAndPaymentSelectionRequest / ServiceSelectionRequest****/
+struct ServiceAndPaymentSelectionRequest_DIN70121
+{
+	enum PaymentOptionType		SelectedPaymentOption;
+	struct SelectedServiceListType		SelectedServiceList;
+};
+struct ServiceAndPaymentSelectionRequest_ISO15118_2014
+{
+	enum PaymentOptionType		SelectedPaymentOption;
+	struct SelectedServiceListType		SelectedServiceList;
+};
+struct ServiceSelectionRequest_ISO15118_2018
+{
+	enum PaymentOptionType			SelectedPaymentOption;
+	struct SelectedServiceType			SelectedEnergyTransferService;
+	struct SelectedServiceListType			SelectedVASList;
+	enum ProcessingType				EVProcessing;
+};
+/****ServiceAndPaymentSelectionResponse / ServiceSelectionResponse****/
+struct ServiceAndPaymentSelectionResponse_DIN70121
+{
+	enum ResponseCodeType_DIN70121		ResponseCode;
+};
+struct ServiceAndPaymentSelectionResponse_ISO15118_2014
+{
+	enum ResponseCodeType_ISO15118_2014	ResponseCode;
+};
+struct ServiceSelectionResponse_ISO15118_2018
+{
+	enum ResponseCodeType_ISO15118_2018	ResponseCode;
+	struct EVSEStatusType					EVSEStatus;					//Optional
+};
+/****PaymentDetailsRequest / IdentificationDetailsRequest****/
+struct PaymentDetailsRequest_ISO15118_2014
+{
+	unsigned char 					eMAID[16];
+	struct CertificateChainType		ContractSignatureCertChain;
+};
+struct IdentificationDetailsRequest_ISO15118_2018
+{
+	struct CertificateChainType		ContractSignatureCertChain;
+};
+/****PaymentDetailsResponse  / IdentificationDetailsResponse ****/
+struct PaymentDetailsResponse_ISO15118_2014
+{
+	enum ResponseCodeType_ISO15118_2014	ResponseCode;
+	unsigned char 							GenChallenge[16];
+	long 								EVSETimeStamp;
+};
+struct IdentificationDetailsResponse_ISO15118_2018
+{
+	enum ResponseCodeType_ISO15118_2018	ResponseCode;
+	struct EVSEStatusType					EVSEStatus;						//Optional
+	unsigned char 							GenChallenge[16];
+	enum ProcessingType					EVSEProcessing;
+};
+/****ContractAuthenticationRequest / AuthorizationRequest****/
+struct ContractAuthenticationRequest_DIN70121
+{
+	//None
+};
+struct AuthorizationRequest_ISO15118_2014
+{
+	unsigned char 			GenChallenge[16];					//Optional
+	unsigned char 			Id[32];							//Optional
+};
+struct AuthorizationRequest_ISO15118_2018
+{
+	struct PNC_AReqIdentificationModeType		PNC_AReqIdentificationMode;	//Optional
+};
+/****ContractAuthenticationResponse  / AuthorizationResponse****/
+struct ContractAuthenticationResponse_DIN70121
+{
+	enum ResponseCodeType_DIN70121		ResponseCode;
+	enum EVSEProcessingType_DIN70121		EVSEProcessing;
+};
+struct AuthorizationResponse_ISO15118_2014
+{
+	enum ResponseCodeType_ISO15118_2014	ResponseCode;
+	enum EVSEProcessingType_ISO15118_2014	EVSEProcessing;
+};
+struct AuthorizationResponse_ISO15118_2018
+{
+	enum ResponseCodeType_ISO15118_2018	ResponseCode;
+	enum ProcessingType					EVSEProcessing;
+	struct EVSEStatusType					EVSEStatus;						//Optional
+};
+/****ChargeParameterDiscoveryRequest****/
+struct ChargeParameterDiscoveryRequest_DIN70121
+{
+	enum EnergyTransferModeType					EVRequestedEnergyTransferType;
+	struct DC_EVChargeParameterType_DIN70121		DC_EVChargeParameter;
+};
+struct ChargeParameterDiscoveryRequest_ISO15118_2014
+{
+	unsigned short										MaxEntriesSAScheduleTuple;			//Optional
+	enum EnergyTransferModeType						RequestedEnergyTransferMode;
+	struct AC_EVChargeParameterType					AC_EVChargeParameter;
+	struct DC_EVChargeParameterType_ISO15118_2014		DC_EVChargeParameter;
+};
+struct ChargeParameterDiscoveryRequest_ISO15118_2018
+{
+	struct Dynamic_CPDReqControlModeType			Dynamic_CPDReqControlMode;
+	struct Scheduled_CPDReqControlModeType			Scheduled_CPDReqControlMode;
+	struct AC_CPDReqEnergyTransferModeType			AC_CPDReqEnergyTransferMode;
+	struct DC_CPDReqEnergyTransferModeType			DC_CPDReqEnergyTransferMode;
+	struct BPT_AC_CPDReqEnergyTransferModeType		BPT_AC_CPDReqEnergyTransferMode;
+	struct BPT_DC_CPDReqEnergyTransferModeType		BPT_DC_CPDReqEnergyTransferMode;
+	struct WPT_CPDReqEnergyTransferModeType			WPT_CPDReqEnergyTransferMode;
+	struct ACD_CPDReqEnergyTransferModeType			ACD_CPDReqEnergyTransferMode;
+};
+/****ChargeParameterDiscoveryResponse****/
+struct ChargeParameterDiscoveryResponse_DIN70121
+{
+	enum ResponseCodeType_DIN70121					ResponseCode;
+	enum EVSEProcessingType_DIN70121					EVSEProcessing;
+	struct SAScheduleListType 							SAScheduleList;
+	struct DC_EVSEChargeParameterType_DIN70121			DC_EVSEChargeParameter;
+};
+struct ChargeParameterDiscoveryResponse_ISO15118_2014
+{
+	enum EVSEProcessingType_ISO15118_2014				EVSEProcessing;
+	enum ResponseCodeType_ISO15118_2014				ResponseCode;
+	struct SAScheduleListType 							SAScheduleList;
+	struct AC_EVSEChargeParameterType					AC_EVSEChargeParameter;
+	struct DC_EVSEChargeParameterType_ISO15118_2014		DC_EVSEChargeParameter;
+};
+struct ChargeParameterDiscoveryResponse_ISO15118_2018
+{
+	enum ResponseCodeType_ISO15118_2018				ResponseCode;
+	struct EVSEStatusType								EVSEStatus;					//Optional
+	enum ProcessingType								EVSEProcessing;
+	struct Scheduled_CPDResControlModeType				Scheduled_CPDResControlMode;	//Optional
+	struct AC_CPDResEnergyTransferModeType				AC_CPDResEnergyTransferMode;
+	struct DC_CPDResEnergyTransferModeType				DC_CPDResEnergyTransferMode;
+	struct BPT_AC_CPDResEnergyTransferModeType			BPT_AC_CPDResEnergyTransferMode;
+	struct BPT_DC_CPDResEnergyTransferModeType			BPT_DC_CPDResEnergyTransferMode;
+	struct WPT_CPDResEnergyTransferModeType				WPT_CPDResEnergyTransferMode;
+	struct ACD_CPDResEnergyTransferModeType				ACD_CPDResEnergyTransferMode;
+};
+/****PowerDeliveryRequest****/
+struct PowerDeliveryRequest_DIN70121
+{
+	BOOL											ReadyToChargeState;
+	struct ChargingProfileType_DIN70121					ChargingProfile;
+	struct DC_EVPowerDeliveryParameterType_DIN70121		DC_EVPowerDeliveryParameter;
+};
+struct PowerDeliveryRequest_ISO15118_2014
+{
+	enum ChargeProgressType_ISO15118_2014				ChargeProgress;
+	short 											SAScheduleTupleID;
+	struct ChargingProfileType_ISO15118_2014 				ChargingProfile;
+	struct DC_EVPowerDeliveryParameterType_ISO15118_2014	DC_EVPowerDeliveryParameter;
+};
+struct PowerDeliveryRequest_ISO15118_2018
+{
+	enum ChargeProgressType_ISO15118_2018				ChargeProgress;
+	struct Scheduled_PDReqControlModeType				Scheduled_PDReqControlMode;
+	struct BPT_Scheduled_PDReqControlModeType			BPT_Scheduled_PDReqControlMode;
+};
+/****PowerDeliveryResponse****/
+struct PowerDeliveryResponse_DIN70121
+{
+	enum ResponseCodeType_DIN70121				ResponseCode;
+	struct DC_EVSEStatusType_DIN70121				DC_EVSEStatus;
+};
+struct PowerDeliveryResponse_ISO15118_2014
+{
+	enum ResponseCodeType_ISO15118_2014				ResponseCode;
+	struct AC_EVSEStatusType							AC_EVSEStatus;
+	struct DC_EVSEStatusType_ISO15118_2014				DC_EVSEStatus;
+};
+struct PowerDeliveryResponse_ISO15118_2018
+{
+	enum ResponseCodeType_ISO15118_2018				ResponseCode;
+	struct EVSEStatusType								EVSEStatus;			//Optional
+};
+/****CertificateUpdateRequest****/
+struct CertificateUpdateRequest_ISO15118_2014
+{
+	unsigned char 										Id[32];
+	struct CertificateChainType							ContractSignatureCertChain;
+	unsigned char 										eMAID[16];
+	struct ListOfRootCertificateIDsType						ListOfRootCertificateIDs;
+};
+/****CertificateUpdateResponse****/
+struct CertificateUpdateResponse_ISO15118_2014
+{
+	enum ResponseCodeType_ISO15118_2014				ResponseCode;
+	struct CertificateChainType							SAProvisioningCertificateChain;
+	struct CertificateChainType							ContractSignatureCertChain;
+	struct ContractSignatureEncryptedPrivateKeyType			ContractSignatureEncryptedPrivateKey;
+	struct DiffieHellmanPublickeyType						DHpublickey;
+	unsigned char 										eMAID[16];
+	short 											RetryCounter;							//Optional
+};
+/****CertificateInstallationRequest****/
+struct CertificateInstallationRequest_ISO15118_2014
+{
+	unsigned char 										Id[32];
+	unsigned char 										OEMProvisioningCert[800];
+	struct ListOfRootCertificateIDsType						ListOfRootCertificateIDs;
+};
+struct CertificateInstallationRequest_ISO15118_2018
+{
+	unsigned char 										Id[32];
+	struct CertificateChainType							OEMProvisioningCertChain;
+	struct ListOfRootCertificateIDsType						ListOfRootCertificateIDs;
+	unsigned short										MaxSupportedCerts;
+};
+/****CertificateInstallationResponse****/
+struct CertificateInstallationResponse_ISO15118_2014
+{
+	enum ResponseCodeType_ISO15118_2014				ResponseCode;
+	struct CertificateChainType							SAProvisioningCertificateChain;
+	struct CertificateChainType							ContractSignatureCertChain;
+	struct ContractSignatureEncryptedPrivateKeyType			ContractSignatureEncryptedPrivateKey;
+	struct DiffieHellmanPublickeyType						DHpublickey;
+	unsigned char 										eMAID[16];
+};
+struct CertificateInstallationResponse_ISO15118_2018
+{
+	enum ResponseCodeType_ISO15118_2018				ResponseCode;
+	struct EVSEStatusType								EVSEStatus;					//Optional
+	struct CertificateChainType							SAProvisioningCertificateChain;
+	struct CertificateChainType							ContractCertificateChain;
+	struct ContractCertificateEncryptedPrivateKeyType		ContractEncryptedPrivateKey;
+	struct DiffieHellmanPublickeyType						DHpublickey;
+	enum ProcessingType								EVSEProcessing;
+	unsigned short 									RemainingContractCertificateChains;
+};
+/****SystemStatusRequest****/
+struct SystemStatusRequest_ISO15118_2018
+{
+	enum mechanicalChargingDeviceStatusType			EVMechanicalChargingDeviceStatus;
+	struct EVTechnicalStatusType							EVTechnicalStatus;
+	unsigned char 										EV_OEMStatus[800];					//Optional
+};
+/****SystemStatusResponse****/
+struct SystemStatusResponse_ISO15118_2018
+{
+	enum ResponseCodeType_ISO15118_2018				ResponseCode;
+	enum mechanicalChargingDeviceStatusType			EVSEMechanicalChargingDeviceStatus;
+	BOOL											EVSE_ReadyToCharge;
+	enum IsolationStatusType							EVSE_IsolationStatus;
+	BOOL											EVSE_Disabled;
+	BOOL											EVSE_UtilityInterruptEvent;
+	BOOL											EVSE_EmergencyShutdown;
+	BOOL											EVSE_Malfunction;
+	BOOL											EV_InChargePosition;
+	BOOL											EV_AssociationStatus;
+};
+/****SessionStopRequest****/
+struct SessionStopRequest_DIN70121
+{
+	//No member in standard
+};
+struct SessionStopRequest_ISO15118_2014
+{
+	enum ChargingSessionType							ChargingSession;
+};
+struct SessionStopRequest_ISO15118_2018
+{
+	enum ChargingSessionType							ChargingSession;
+};
+/****SessionStopResponse****/
+struct SessionStopResponse_DIN70121
+{
+	enum ResponseCodeType_DIN70121					ResponseCode;
+};
+struct SessionStopResponse_ISO15118_2014
+{
+	enum ResponseCodeType_ISO15118_2014				ResponseCode;
+};
+struct SessionStopResponse_ISO15118_2018
+{
+	enum ResponseCodeType_ISO15118_2018				ResponseCode;
+	struct EVSEStatusType								EVSEStatus;					//Optional
+};
+/****MeteringReceiptRequest****/
+struct MeteringReceiptRequest_ISO15118_2014
+{
+	unsigned char 										Id[32];						//Optional
+	unsigned char 										SessionID[8];
+	short 											SAScheduleTupleID;				//Optional
+	struct MeterInfoType_ISO15118_2014					MeterInfo;
+};
+struct MeteringReceiptRequest_ISO15118_2018
+{
+	unsigned char 										Id[32];						//Optional
+	unsigned char 										SessionID[8];
+	struct Scheduled_MRReqControlModeType				Schedule_MRReqControlMode;
+	struct MeterInfoType_ISO15118_2018					MeterInfo;
+};
+/****MeteringReceiptResponse****/
+struct MeteringReceiptResponse_ISO15118_2014
+{
+	enum ResponseCodeType_ISO15118_2014				ResponseCode;
+	struct AC_EVSEStatusType							AC_EVSEStatus;
+	struct DC_EVSEStatusType_ISO15118_2014				DC_EVSEStatus;
+};
+struct MeteringReceiptResponse_ISO15118_2018
+{
+	enum ResponseCodeType_ISO15118_2018				ResponseCode;
+	struct EVSEStatusType								EVSEStatus;					//Optional
+};
+/****ChargingStatusRequest (AC Only)****/
+struct ChargingStatusRequest_ISO15118_2014
+{
+	//No member in standard
+};
+struct ChargingStatusRequest_ISO15118_2018
+{
+	struct PnC_CLReqIdentificationModeType				PnC_CLReqIdentificationMode;
+	struct Dynamic_CSReqControlModeType				Dynamic_CSReqControlMode;
+	struct Scheduled_CSReqControlModeType				Scheduled_CSReqControlMode;
+	struct DisplayParametersType							DisplayParameters;
+};
+/****ChargingStatusResponse (AC Only)****/
+struct ChargingStatusResponse_ISO15118_2014
+{
+	enum ResponseCodeType_ISO15118_2014				ResponseCode;
+	unsigned char										EVSEID[40];			//DIN70121=>Max length:32,	ISO15118=>min length:7, max length:37
+	short 											SAScheduleTupleID;
+	struct PhysicalValueType_ISO15118_2014					EVSEMaxCurrent;		//Optional
+	struct MeterInfoType_ISO15118_2014					MeterInfo;			//Optional
+	BOOL											ReceiptRequired;		//Optional
+	struct AC_EVSEStatusType							AC_EVSEStatus;
+};
+struct ChargingStatusResponse_ISO15118_2018
+{
+	enum ResponseCodeType_ISO15118_2018				ResponseCode;
+	struct EVSEStatusType								EVSEStatus;					//Optional
+	unsigned char										EVSEID[40];					//DIN70121=>Max length:32,	ISO15118=>min length:7, max length:37
+	struct PhysicalValueType_ISO15118_2018					EVSETargetFrequency;			//Optional
+	struct PnC_CLResIdentificationModeType				PnC_CLResIdentificationMode;
+	struct Dynamic_CSResControlModeType					Dynamic_CSResControlMode;
+	struct Scheduled_CSReqControlModeType				Scheduled_CSReqControlMode;
+};
+/****CableCheckRequest (DC Only)****/
+struct CableCheckRequest_DIN70121
+{
+	struct DC_EVStatusType_DIN70121						DC_EVStatus;
+};
+struct CableCheckRequest_ISO15118_2014
+{
+	struct DC_EVStatusType_ISO15118_2014 					DC_EVStatus;
+};
+struct CableCheckRequest_ISO15118_2018
+{
+	//No member in standard
+};
+/****CableCheckResponse (DC Only)****/
+struct CableCheckResponse_DIN70121
+{
+	enum ResponseCodeType_DIN70121					ResponseCode;
+	struct DC_EVSEStatusType_DIN70121					DC_EVSEStatus;
+	enum EVSEProcessingType_DIN70121					EVSEProcessing;
+};
+struct CableCheckResponse_ISO15118_2014
+{
+	enum ResponseCodeType_ISO15118_2014				ResponseCode;
+	struct DC_EVSEStatusType_ISO15118_2014				DC_EVSEStatus;
+	enum EVSEProcessingType_ISO15118_2014				EVSEProcessing;
+};
+struct CableCheckResponse_ISO15118_2018
+{
+	enum ResponseCodeType_ISO15118_2018				ResponseCode;
+	struct EVSEStatusType								EVSEStatus;					//Optional
+	enum ProcessingType								EVSEProcessing;
+};
+/****PreChargeRequest (DC Only)****/
+struct PreChargeRequest_DIN70121
+{
+	struct DC_EVStatusType_DIN70121						DC_EVStatus;
+	struct PhysicalValueType_DIN70121						EVTargetVoltage;
+	struct PhysicalValueType_DIN70121						EVTargetCurrent;
+};
+struct PreChargeRequest_ISO15118_2014
+{
+	struct DC_EVStatusType_ISO15118_2014 					DC_EVStatus;
+	struct PhysicalValueType_ISO15118_2014					EVTargetVoltage;
+	struct PhysicalValueType_ISO15118_2014					EVTargetCurrent;
+};
+struct PreChargeRequest_ISO15118_2018
+{
+	struct PhysicalValueType_ISO15118_2018					EVTargetVoltage;
+	struct PhysicalValueType_ISO15118_2018					EVTargetCurrent;
+};
+/****PreChargeResponse (DC Only)****/
+struct PreChargeResponse_DIN70121
+{
+	enum ResponseCodeType_DIN70121					ResponseCode;
+	struct DC_EVSEStatusType_DIN70121					DC_EVSEStatus;
+	struct PhysicalValueType_DIN70121						EVSEPresentVoltage;
+};
+struct PreChargeResponse_ISO15118_2014
+{
+	enum ResponseCodeType_ISO15118_2014				ResponseCode;
+	struct DC_EVSEStatusType_ISO15118_2014				DC_EVSEStatus;
+	struct PhysicalValueType_ISO15118_2014					EVSEPresentVoltage;
+};
+struct PreChargeResponse_ISO15118_2018
+{
+	enum ResponseCodeType_ISO15118_2018				ResponseCode;
+	struct EVSEStatusType								EVSEStatus;					//Optional
+	struct PhysicalValueType_ISO15118_2018					EVSEPresentVoltage;
+};
+/****CurrentDemandRequest (DC Only)****/
+struct CurrentDemandRequest_DIN70121
+{
+	struct DC_EVStatusType_DIN70121						DC_EVStatus;
+	struct PhysicalValueType_DIN70121						EVTargetCurrent;
+	struct PhysicalValueType_DIN70121						EVMaximumVoltageLimit;		//Optional
+	struct PhysicalValueType_DIN70121						EVMaximumCurrentLimit;		//Optional
+	struct PhysicalValueType_DIN70121						EVMaximumPowerLimit;			//Optional
+	BOOL											BulkChargingComplete;			//Optional
+	BOOL											ChargingComplete;
+	struct PhysicalValueType_DIN70121						RemainingTimeToFullSoC;		//Optional
+	struct PhysicalValueType_DIN70121						RemainingTimeToBulkSoC;		//Optional
+	struct PhysicalValueType_DIN70121						EVTargetVoltage;
+};
+struct CurrentDemandRequest_ISO15118_2014
+{
+	struct DC_EVStatusType_ISO15118_2014 					DC_EVStatus;
+	struct PhysicalValueType_ISO15118_2014					EVTargetCurrent;
+	struct PhysicalValueType_ISO15118_2014					EVMaximumVoltageLimit;		//Optional
+	struct PhysicalValueType_ISO15118_2014					EVMaximumCurrentLimit;		//Optional
+	struct PhysicalValueType_ISO15118_2014					EVMaximumPowerLimit;			//Optional
+	BOOL											BulkChargingComplete;			//Optional
+	BOOL											ChargingComplete;
+	struct PhysicalValueType_ISO15118_2014					RemainingTimeToFullSoC;		//Optional
+	struct PhysicalValueType_ISO15118_2014					RemainingTimeToBulkSoC;		//Optional
+	struct PhysicalValueType_ISO15118_2014					EVTargetVoltage;
+};
+struct CurrentDemandRequest_ISO15118_2018
+{
+	struct DisplayParametersType							DisplayParameters;				//Optional
+	struct PnC_CLReqIdentificationModeType				PnC_CLReqIdentificationMode;
+	struct Dynamic_CSReqControlModeType				Dynamic_CDReqControlMode;
+	struct Scheduled_CSReqControlModeType				Scheduled_CDReqControlMode;
+};
+/****CurrentDemandResponse (DC Only)****/
+struct CurrentDemandResponse_DIN70121
+{
+	enum ResponseCodeType_DIN70121					ResponseCode;
+	struct DC_EVSEStatusType_DIN70121					DC_EVSEStatus;
+	struct PhysicalValueType_DIN70121						EVSEPresentVoltage;
+	struct PhysicalValueType_DIN70121						EVSEPresentCurrent;
+	BOOL											EVSECurrentLimitAchieved;
+	BOOL											EVSEVoltageLimitAchieved;
+	BOOL											EVSEPowerLimitAchieved;
+	struct PhysicalValueType_DIN70121						EVSEMaximumVoltageLimit;		//Optional
+	struct PhysicalValueType_DIN70121						EVSEMaximumCurrentLimit;		//Optional
+	struct PhysicalValueType_DIN70121						EVSEMaximumPowerLimit;		//Optional
+};
+struct CurrentDemandResponse_ISO15118_2014
+{
+	enum ResponseCodeType_ISO15118_2014				ResponseCode;
+	struct DC_EVSEStatusType_ISO15118_2014				DC_EVSEStatus;
+	struct PhysicalValueType_ISO15118_2014					EVSEPresentVoltage;
+	struct PhysicalValueType_ISO15118_2014					EVSEPresentCurrent;
+	BOOL											EVSECurrentLimitAchieved;
+	BOOL											EVSEVoltageLimitAchieved;
+	BOOL											EVSEPowerLimitAchieved;
+	struct PhysicalValueType_ISO15118_2014					EVSEMaximumVoltageLimit;		//Optional
+	struct PhysicalValueType_ISO15118_2014					EVSEMaximumCurrentLimit;		//Optional
+	struct PhysicalValueType_ISO15118_2014					EVSEMaximumPowerLimit;		//Optional
+	unsigned char										EVSEID[40];			//DIN70121=>Max length:32,	ISO15118=>min length:7, max length:37
+	short 											SAScheduleTupleID;
+	struct MeterInfoType_ISO15118_2014					MeterInfo;			//Optional
+	BOOL											ReceiptRequired;		//Optional
+};
+struct CurrentDemandResponse_ISO15118_2018
+{
+	enum ResponseCodeType_ISO15118_2018				ResponseCode;
+	struct EVSEStatusType								EVSEStatus;						//Optional
+	struct PhysicalValueType_ISO15118_2018					EVSEPresentVoltage;
+	struct PhysicalValueType_ISO15118_2018					EVSEPresentCurrent;
+	BOOL											EVSECurrentLimitAchieved;
+	BOOL											EVSEVoltageLimitAchieved;
+	BOOL											EVSEPowerLimitAchieved;
+	struct PhysicalValueType_ISO15118_2018					EVSEMaximumChargeVoltage;		//Optional
+	struct PhysicalValueType_ISO15118_2018					EVSEMaximumChargeCurrent;		//Optional
+	struct PhysicalValueType_ISO15118_2018					EVSEMaximumChargePower;			//Optional
+	unsigned char										EVSEID[40];						//DIN70121=>Max length:32,	ISO15118=>min length:7, max length:37
+	struct PnC_CLResIdentificationModeType				PnC_CLResIdentificationMode;
+	struct Scheduled_CDResControlModeType				Scheduled_CDResControlMode;
+};
+/****WeldingDetectionRequest (DC Only)*****/
+struct WeldingDetectionRequest_DIN70121
+{
+	struct DC_EVStatusType_DIN70121						DC_EVStatus;
+};
+struct WeldingDetectionRequest_ISO15118_2014
+{
+	struct DC_EVStatusType_ISO15118_2014 					DC_EVStatus;
+};
+struct WeldingDetectionRequest_ISO15118_2018
+{
+	//No member in Standard
+};
+/****WeldingDetectionResponse (DC Only)****/
+struct WeldingDetectionResponse_DIN70121
+{
+	enum ResponseCodeType_DIN70121					ResponseCode;
+	struct DC_EVSEStatusType_DIN70121					DC_EVSEStatus;
+	struct PhysicalValueType_DIN70121						EVSEPresentVoltage;
+};
+struct WeldingDetectionResponse_ISO15118_2014
+{
+	enum ResponseCodeType_ISO15118_2014				ResponseCode;
+	struct DC_EVSEStatusType_ISO15118_2014				DC_EVSEStatus;
+	struct PhysicalValueType_ISO15118_2014					EVSEPresentVoltage;
+};
+struct WeldingDetectionResponse_ISO15118_2018
+{
+	enum ResponseCodeType_ISO15118_2018				ResponseCode;
+	struct EVSEStatusType								EVSEStatus;						//Optional
+	struct PhysicalValueType_ISO15118_2018					EVSEPresentVoltage;
+};
+/****FinePositioningSetupRequest (WPT Only)****/
+struct FinePositioningSetupRequest_ISO15118_2018
+{
+	struct LFA_EVFinePositioningSetupParametersType			LFA_EVFinePositioningSetupParameters;	//Optional
+};
+/****FinePositioningSetupResponse (WPT Only)****/
+struct FinePositioningSetupResponse_ISO15118_2018
+{
+	//NOT complete yet,  to be continue.....
+};
+
+
+struct V2GMessageType_DIN70121
+{
+	enum MsgFlowStatus									PresentMsgFlowStatus;
+														/* 0: Idle(wait B2 state), 1: CM_SLAC_PARM.REQ, 2: CM_SLAC_PARM.CNF, 3: CM_START_ATTEN_CHAR.IND
+														    4: CM_MNBC_SOUND.IND, 5: CM_ATTEN_CHAR.IND, 6: CM_ATTEN_CHAR.RSP, 7: CM_VALIDATE.REQ
+														    8: CM_VALIDATE.CNF, 9: CM_SLAC_MATCH.REQ, 10: CM_SLAC_MATCH.CNF, 11: CM_AMP_MAP.REQ
+														    12: CM_AMP_MAP.CNF, 13: SLACC/SDP/TCP connection,
+														    16: SupportedAppProtocolRequest, 17: SupportedAppProtocolResponse, 18: SessionSetupRequest
+														    19: SessionSetupResponse, 20: ServiceDiscoveryRequest, 21: ServiceDiscoveryResponse
+														    22: ServiceDetailRequest, 23: ServiceDetailResponse
+														    24: ServiceAndPaymentSelectionRequest/ServiceSelectionRequest, 25: ServiceAndPaymentSelectionResponse/ServiceSelectionResponse
+														    26: PaymentDetailsRequest/IdentificationDetailsRequest;, 27: PaymentDetailsResponse/IdentificationDetailsResponse,
+														     28: AuthorizationRequest, 29: AuthorizationResponse,
+														    30: CertificateUpdateRequest, 31: CertificateUpdateResponse, 32:CertificateInstallationRequest, 33: CertificateInstallationResponse
+														    34: ChargeParameterDiscoveryRequest, 35: ChargeParameterDiscoveryResponse
+														    36: CableCheckRequest, 37: CableCheckResponse, 38: PreChargeRequest, 39: PreChargeResponse
+														    40: PowerDeliveryRequest start, 41: PowerDeliveryResponse start, 42: ChargingStatusRequest, 43: ChargingStatusResponse
+														    44: CurrentDemandRequest, 45: CurrentDemandResponse, 46: MeteringReceiptRequest, 47: MeteringReceiptResponse
+														    48: PowerDeliveryRequest end, 49: PowerDeliveryRequest end, 50: WeldingDetectionRequest, 51: WeldingDetectionResponse,
+														    52: SessionStopRequest, 53: SessionStopResponse
+														   253: Performance Timeout, 254: Sequence Timeout, 255: Fault
+														*/
+	struct SupportedAppProtocolRequest_DIN70121 			SupportedAppProtocolRequest;
+	struct SupportedAppProtocolResponse_DIN70121 			SupportedAppProtocolResponse;
+	struct SessionSetupRequest_DIN70121  					SessionSetupRequest;
+	struct SessionSetupResponse_DIN70121   				SessionSetupResponse;
+	struct ServiceDiscoveryRequest_DIN70121    				ServiceDiscoveryRequest;
+	struct ServiceDiscoveryResponse_DIN70121    				ServiceDiscoveryResponse;
+	struct ServiceAndPaymentSelectionRequest_DIN70121		ServiceAndPaymentSelectionRequest;
+	struct ServiceAndPaymentSelectionResponse_DIN70121		ServiceAndPaymentSelectionResponse;
+	struct ContractAuthenticationRequest_DIN70121			ContractAuthenticationRequest;
+	struct ContractAuthenticationResponse_DIN70121	 		ContractAuthenticationResponse;
+	struct ChargeParameterDiscoveryRequest_DIN70121		ChargeParameterDiscoveryRequest;
+	struct ChargeParameterDiscoveryResponse_DIN70121		ChargeParameterDiscoveryResponse;
+	struct CableCheckRequest_DIN70121					CableCheckRequest;
+	struct CableCheckResponse_DIN70121					CableCheckResponse;
+	struct PreChargeRequest_DIN70121					PreChargeRequest;
+	struct PreChargeResponse_DIN70121 					PreChargeResponse;
+	struct PowerDeliveryRequest_DIN70121					PowerDeliveryRequest;
+	struct PowerDeliveryResponse_DIN70121	   				PowerDeliveryResponse;
+	struct CurrentDemandRequest_DIN70121 				CurrentDemandRequest;
+	struct CurrentDemandResponse_DIN70121				CurrentDemandResponse;
+	struct WeldingDetectionRequest_DIN70121 				WeldingDetectionRequest;
+	struct WeldingDetectionResponse_DIN70121  			WeldingDetectionResponse;
+	struct SessionStopRequest_DIN70121					SessionStopRequest;
+	struct SessionStopResponse_DIN70121	    				SessionStopResponse;
+};
+
+struct V2GMessageType_ISO15118_2014
+{
+	enum MsgFlowStatus									PresentMsgFlowStatus;
+														/* 0: Idle(wait B2 state), 1: CM_SLAC_PARM.REQ, 2: CM_SLAC_PARM.CNF, 3: CM_START_ATTEN_CHAR.IND
+														    4: CM_MNBC_SOUND.IND, 5: CM_ATTEN_CHAR.IND, 6: CM_ATTEN_CHAR.RSP, 7: CM_VALIDATE.REQ
+														    8: CM_VALIDATE.CNF, 9: CM_SLAC_MATCH.REQ, 10: CM_SLAC_MATCH.CNF, 11: CM_AMP_MAP.REQ
+														    12: CM_AMP_MAP.CNF, 13: SLACC/SDP/TCP connection,
+														    16: SupportedAppProtocolRequest, 17: SupportedAppProtocolResponse, 18: SessionSetupRequest
+														    19: SessionSetupResponse, 20: ServiceDiscoveryRequest, 21: ServiceDiscoveryResponse
+														    22: ServiceDetailRequest, 23: ServiceDetailResponse
+														    24: ServiceAndPaymentSelectionRequest/ServiceSelectionRequest, 25: ServiceAndPaymentSelectionResponse/ServiceSelectionResponse
+														    26: PaymentDetailsRequest/IdentificationDetailsRequest;, 27: PaymentDetailsResponse/IdentificationDetailsResponse,
+														     28: AuthorizationRequest, 29: AuthorizationResponse,
+														    30: CertificateUpdateRequest, 31: CertificateUpdateResponse, 32:CertificateInstallationRequest, 33: CertificateInstallationResponse
+														    34: ChargeParameterDiscoveryRequest, 35: ChargeParameterDiscoveryResponse
+														    36: CableCheckRequest, 37: CableCheckResponse, 38: PreChargeRequest, 39: PreChargeResponse
+														    40: PowerDeliveryRequest start, 41: PowerDeliveryResponse start, 42: ChargingStatusRequest, 43: ChargingStatusResponse
+														    44: CurrentDemandRequest, 45: CurrentDemandResponse, 46: MeteringReceiptRequest, 47: MeteringReceiptResponse
+														    48: PowerDeliveryRequest end, 49: PowerDeliveryRequest end, 50: WeldingDetectionRequest, 51: WeldingDetectionResponse,
+														    52: SessionStopRequest, 53: SessionStopResponse
+														   253: Performance Timeout, 254: Sequence Timeout, 255: Fault
+														*/
+	struct SupportedAppProtocolRequest_ISO15118_2014 			SupportedAppProtocolRequest;
+	struct SupportedAppProtocolResponse_ISO15118_2014 			SupportedAppProtocolResponse;
+	struct SessionSetupRequest_ISO15118_2014  					SessionSetupRequest;
+	struct SessionSetupResponse_ISO15118_2014   				SessionSetupResponse;
+	struct ServiceDiscoveryRequest_ISO15118_2014    				ServiceDiscoveryRequest;
+	struct ServiceDiscoveryResponse_ISO15118_2014    				ServiceDiscoveryResponse;
+	struct ServiceDetailRequest_ISO15118_2014 					ServiceDetailRequest;
+	struct ServiceDetailResponse_ISO15118_2014					ServiceDetailResponse;
+	struct ServiceAndPaymentSelectionRequest_ISO15118_2014 		ServiceAndPaymentSelectionRequest;
+	struct ServiceAndPaymentSelectionResponse_ISO15118_2014  	ServiceAndPaymentSelectionResponse;
+	struct PaymentDetailsRequest_ISO15118_2014 				PaymentDetailsRequest;
+	struct PaymentDetailsResponse_ISO15118_2014 				PaymentDetailsResponse;
+	struct AuthorizationRequest_ISO15118_2014					AuthorizationRequest;
+	struct AuthorizationResponse_ISO15118_2014					AuthorizationResponse;
+	struct CertificateUpdateRequest_ISO15118_2014				CertificateUpdateRequest;
+	struct CertificateUpdateResponse_ISO15118_2014				CertificateUpdateResponse;
+	struct CertificateInstallationRequest_ISO15118_2014			CertificateInstallationRequest;
+	struct CertificateInstallationResponse_ISO15118_2014			CertificateInstallationResponse;
+	struct ChargeParameterDiscoveryRequest_ISO15118_2014 		ChargeParameterDiscoveryRequest;
+	struct ChargeParameterDiscoveryResponse_ISO15118_2014  		ChargeParameterDiscoveryResponse;
+	struct CableCheckRequest_ISO15118_2014 					CableCheckRequest;
+	struct CableCheckResponse_ISO15118_2014  					CableCheckResponse;
+	struct PreChargeRequest_ISO15118_2014 					PreChargeRequest;
+	struct PreChargeResponse_ISO15118_2014					PreChargeResponse;
+	struct PowerDeliveryRequest_ISO15118_2014					PowerDeliveryRequest;
+	struct PowerDeliveryResponse_ISO15118_2014					PowerDeliveryResponse;
+	struct ChargingStatusRequest_ISO15118_2014	  				ChargingStatusRequest;
+	struct ChargingStatusResponse_ISO15118_2014				ChargingStatusResponse;
+	struct CurrentDemandRequest_ISO15118_2014	 			CurrentDemandRequest;
+	struct CurrentDemandResponse_ISO15118_2014				CurrentDemandResponse;
+	struct MeteringReceiptRequest_ISO15118_2014				MeteringReceiptRequest;
+	struct MeteringReceiptResponse_ISO15118_2014				MeteringReceiptResponse;
+	struct WeldingDetectionRequest_ISO15118_2014 				WeldingDetectionRequest;
+	struct WeldingDetectionResponse_ISO15118_2014  			WeldingDetectionResponse;
+	struct SessionStopRequest_ISO15118_2014 					SessionStopRequest;
+	struct SessionStopResponse_ISO15118_2014					SessionStopResponse;
+};
+struct V2GMessageType_ISO15118_2018
+{
+	enum MsgFlowStatus									PresentMsgFlowStatus;
+													/* 0: Idle(wait B2 state), 1: CM_SLAC_PARM.REQ, 2: CM_SLAC_PARM.CNF, 3: CM_START_ATTEN_CHAR.IND
+													    4: CM_MNBC_SOUND.IND, 5: CM_ATTEN_CHAR.IND, 6: CM_ATTEN_CHAR.RSP, 7: CM_VALIDATE.REQ
+													    8: CM_VALIDATE.CNF, 9: CM_SLAC_MATCH.REQ, 10: CM_SLAC_MATCH.CNF, 11: CM_AMP_MAP.REQ
+													    12: CM_AMP_MAP.CNF, 13: SLACC/SDP/TCP connection,
+													    16: SupportedAppProtocolRequest, 17: SupportedAppProtocolResponse, 18: SessionSetupRequest
+													    19: SessionSetupResponse, 20: ServiceDiscoveryRequest, 21: ServiceDiscoveryResponse
+													    22: ServiceDetailRequest, 23: ServiceDetailResponse
+													    24: ServiceAndPaymentSelectionRequest/ServiceSelectionRequest, 25: ServiceAndPaymentSelectionResponse/ServiceSelectionResponse
+													    26: PaymentDetailsRequest/IdentificationDetailsRequest;, 27: PaymentDetailsResponse/IdentificationDetailsResponse,
+													     28: AuthorizationRequest, 29: AuthorizationResponse,
+													    30: CertificateUpdateRequest, 31: CertificateUpdateResponse, 32:CertificateInstallationRequest, 33: CertificateInstallationResponse
+													    34: ChargeParameterDiscoveryRequest, 35: ChargeParameterDiscoveryResponse
+													    36: CableCheckRequest, 37: CableCheckResponse, 38: PreChargeRequest, 39: PreChargeResponse
+													    40: PowerDeliveryRequest start, 41: PowerDeliveryResponse start, 42: ChargingStatusRequest, 43: ChargingStatusResponse
+													    44: CurrentDemandRequest, 45: CurrentDemandResponse, 46: MeteringReceiptRequest, 47: MeteringReceiptResponse
+													    48: PowerDeliveryRequest end, 49: PowerDeliveryRequest end, 50: WeldingDetectionRequest, 51: WeldingDetectionResponse,
+													    52: SessionStopRequest, 53: SessionStopResponse
+													   253: Performance Timeout, 254: Sequence Timeout, 255: Fault
+													*/
+	struct SupportedAppProtocolRequest_ISO15118_2018			SupportedAppProtocolRequest;
+	struct SupportedAppProtocolResponse_ISO15118_2018 			SupportedAppProtocolResponse;
+	struct SessionSetupRequest_ISO15118_2018					SessionSetupRequest;
+	struct SessionSetupResponse_ISO15118_2018  					SessionSetupResponse;
+	struct ServiceDiscoveryRequest_ISO15118_2018    				ServiceDiscoveryRequest;
+	struct ServiceDiscoveryResponse_ISO15118_2018    				ServiceDiscoveryResponse;
+	struct ServiceDetailRequest_ISO15118_2018 					ServiceDetailRequest;
+	struct ServiceDetailResponse_ISO15118_2018					ServiceDetailResponse;
+	struct ServiceSelectionRequest_ISO15118_2018				ServiceSelectionRequest;
+	struct ServiceSelectionResponse_ISO15118_2018				ServiceSelectionResponse;
+	struct IdentificationDetailsRequest_ISO15118_2018  			IdentificationDetailsRequest;
+	struct IdentificationDetailsResponse_ISO15118_2018  			IdentificationDetailsResponse;
+	struct AuthorizationRequest_ISO15118_2018  					AuthorizationRequest;
+	struct AuthorizationResponse_ISO15118_2018					AuthorizationResponse;
+	struct CertificateInstallationRequest_ISO15118_2018			CertificateInstallationRequest;
+	struct CertificateInstallationResponse_ISO15118_2018			CertificateInstallationResponse;
+	struct ChargeParameterDiscoveryRequest_ISO15118_2018 		ChargeParameterDiscoveryRequest;
+	struct ChargeParameterDiscoveryResponse_ISO15118_2018  		ChargeParameterDiscoveryResponse;
+	struct CableCheckRequest_ISO15118_2018 					CableCheckRequest;
+	struct CableCheckResponse_ISO15118_2018 					CableCheckResponse;
+	struct PreChargeRequest_ISO15118_2018 					PreChargeRequest;
+	struct PreChargeResponse_ISO15118_2018					PreChargeResponse;
+	struct PowerDeliveryRequest_ISO15118_2018					PowerDeliveryRequest;
+	struct PowerDeliveryResponse_ISO15118_2018					PowerDeliveryResponse;
+	struct ChargingStatusRequest_ISO15118_2018	  				ChargingStatusRequest;
+	struct ChargingStatusResponse_ISO15118_2018				ChargingStatusResponse;
+	struct CurrentDemandRequest_ISO15118_2018	 			CurrentDemandRequest;
+	struct CurrentDemandResponse_ISO15118_2018				CurrentDemandResponse;
+	struct MeteringReceiptRequest_ISO15118_2018				MeteringReceiptRequest;
+	struct MeteringReceiptResponse_ISO15118_2018				MeteringReceiptResponse;
+	struct WeldingDetectionRequest_ISO15118_2018 				WeldingDetectionRequest;
+	struct WeldingDetectionResponse_ISO15118_2018  			WeldingDetectionResponse;
+	struct SessionStopRequest_ISO15118_2018 					SessionStopRequest;
+	struct SessionStopResponse_ISO15118_2018					SessionStopResponse;
+};
+
+struct CcsData
+{
+	unsigned char 							CommProtocol;	// 1: V2GMessage_DIN70121, 2:V2GMessage_ISO15118_2014, 3:V2GMessage_ISO15118_2018
+	struct V2GMessageType_DIN70121			V2GMessage_DIN70121;
+	struct V2GMessageType_ISO15118_2014  		V2GMessage_ISO15118_2014;
+	struct V2GMessageType_ISO15118_2018  		V2GMessage_ISO15118_2018;
+};
+
+struct InternalComm
+{
+	unsigned char 	ChargingPermission;
+	unsigned char 	SlaveAddress;
+	union
+	{
+		unsigned char InternalCommVal;
+		struct
+		{
+			//FaultVal[0]
+		    	unsigned char FwVersion:1;							//bit 0
+			unsigned char HwVersion:1;							//bit 1
+			unsigned char OutputRequirement:1;   					//bit 2
+			unsigned char EvBatteryInfo:1;						//bit 3
+			unsigned char MiscInfo:1;							//bit 4
+			unsigned char :3;									//bit 5 ~ 7
+		}bits;
+	}InternalCommUnion;
+};
+#endif // DEFINE_H_

+ 8 - 0
EVSE/Projects/CCS/Apps/exi_engine/api/api.c

@@ -0,0 +1,8 @@
+/*===========================================================================
+                    Combined Charging System (CCS): SECC
+                                 api.c
+
+                          initiated by Joseph
+                           (since 2019/08/07)
+=============================================================================*/
+#include "api.h"

+ 7 - 0
EVSE/Projects/CCS/Apps/exi_engine/api/api.h

@@ -0,0 +1,7 @@
+/*===========================================================================
+                    Combined Charging System (CCS): SECC
+                                 api.h
+
+                          initiated by Joseph
+                           (since 2019/08/07)
+=============================================================================*/

+ 64 - 0
EVSE/Projects/CCS/Apps/exi_engine/appHandshake/appHandEXIDatatypes.c

@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9.4
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_AppProtocol.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+#include <stdint.h>
+
+#include "appHandEXIDatatypes.h"
+#include "../codec/EXITypes.h"
+
+
+#ifndef EXI_appHand_DATATYPES_C
+#define EXI_appHand_DATATYPES_C
+
+
+
+void init_appHandEXIDocument(struct appHandEXIDocument* exiDoc) {
+	exiDoc->supportedAppProtocolReq_isUsed = 0u;
+	exiDoc->supportedAppProtocolRes_isUsed = 0u;
+}
+
+void init_appHandAppProtocolType(struct appHandAppProtocolType* appHandAppProtocolType) {
+}
+
+void init_appHandAnonType_supportedAppProtocolReq(struct appHandAnonType_supportedAppProtocolReq* appHandAnonType_supportedAppProtocolReq) {
+	appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen = 0u;
+}
+
+void init_appHandAnonType_supportedAppProtocolRes(struct appHandAnonType_supportedAppProtocolRes* appHandAnonType_supportedAppProtocolRes) {
+	appHandAnonType_supportedAppProtocolRes->SchemaID_isUsed = 0u;
+}
+
+
+
+
+
+#endif
+

+ 133 - 0
EVSE/Projects/CCS/Apps/exi_engine/appHandshake/appHandEXIDatatypes.h

@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9.4
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_AppProtocol.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+ * \file 	EXIDatatypes.h
+ * \brief 	Datatype definitions and structs for given XML Schema definitions and initialization methods
+ *
+ */
+
+#ifndef EXI_appHand_DATATYPES_H
+#define EXI_appHand_DATATYPES_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include <stdint.h>
+
+#include "../codec/EXITypes.h"
+
+
+/* Datatype definitions and structs for given XML Schema definitions */
+
+#define UNION_YES 1
+#define UNION_NO 2
+#define SAVE_MEMORY_WITH_UNNAMED_UNION UNION_YES
+
+/* Complex type name='urn:iso:15118:2:2010:AppProtocol,AppProtocolType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(ProtocolNamespace,VersionNumberMajor,VersionNumberMinor,SchemaID,Priority)',  derivedBy='RESTRICTION'.  */
+#define appHandAppProtocolType_ProtocolNamespace_CHARACTERS_SIZE 100 /* XML schema facet maxLength for urn:iso:15118:2:2010:AppProtocol,protocolNamespaceType is 100 */
+struct appHandAppProtocolType {
+	/* element: ProtocolNamespace, urn:iso:15118:2:2010:AppProtocol,protocolNamespaceType */
+	struct {
+		exi_string_character_t characters[appHandAppProtocolType_ProtocolNamespace_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ProtocolNamespace ;
+	/* element: VersionNumberMajor, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t VersionNumberMajor ;
+	/* element: VersionNumberMinor, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t VersionNumberMinor ;
+	/* element: SchemaID, urn:iso:15118:2:2010:AppProtocol,idType */
+	uint8_t SchemaID ;
+	/* element: Priority, urn:iso:15118:2:2010:AppProtocol,priorityType */
+	uint8_t Priority ;
+};
+
+typedef enum {
+	appHandresponseCodeType_OK_SuccessfulNegotiation = 0,
+	appHandresponseCodeType_OK_SuccessfulNegotiationWithMinorDeviation = 1,
+	appHandresponseCodeType_Failed_NoNegotiation = 2
+} appHandresponseCodeType;
+
+/* Complex type name='urn:iso:15118:2:2010:AppProtocol,#AnonType_supportedAppProtocolRes',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(ResponseCode,SchemaID{0-1})',  derivedBy='RESTRICTION'.  */
+struct appHandAnonType_supportedAppProtocolRes {
+	/* element: ResponseCode, urn:iso:15118:2:2010:AppProtocol,responseCodeType */
+	appHandresponseCodeType ResponseCode ;
+	/* element: SchemaID, urn:iso:15118:2:2010:AppProtocol,idType */
+	uint8_t SchemaID ;
+	unsigned int SchemaID_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:AppProtocol,#AnonType_supportedAppProtocolReq',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(AppProtocol{1-20})',  derivedBy='RESTRICTION'.  */
+#define appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE 5
+struct appHandAnonType_supportedAppProtocolReq {
+	/* element: AppProtocol, Complex type name='urn:iso:15118:2:2010:AppProtocol,AppProtocolType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(ProtocolNamespace,VersionNumberMajor,VersionNumberMinor,SchemaID,Priority)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct appHandAppProtocolType array[appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} AppProtocol;
+};
+
+
+
+
+
+/* Possible root elements of EXI Document */
+struct appHandEXIDocument {
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	union {
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */
+	struct appHandAnonType_supportedAppProtocolReq supportedAppProtocolReq ;
+	struct appHandAnonType_supportedAppProtocolRes supportedAppProtocolRes ;
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	};
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */
+	unsigned int supportedAppProtocolReq_isUsed:1;
+	unsigned int supportedAppProtocolRes_isUsed:1;
+
+
+	int _warning_;
+};
+
+/* Initialization methods for structs */
+
+void init_appHandEXIDocument(struct appHandEXIDocument* exiDoc);
+void init_appHandAppProtocolType(struct appHandAppProtocolType* appHandAppProtocolType);
+void init_appHandAnonType_supportedAppProtocolReq(struct appHandAnonType_supportedAppProtocolReq* appHandAnonType_supportedAppProtocolReq);
+void init_appHandAnonType_supportedAppProtocolRes(struct appHandAnonType_supportedAppProtocolRes* appHandAnonType_supportedAppProtocolRes);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

+ 896 - 0
EVSE/Projects/CCS/Apps/exi_engine/appHandshake/appHandEXIDatatypesDecoder.c

@@ -0,0 +1,896 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9.4
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_AppProtocol.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+
+#include "appHandEXIDatatypesDecoder.h"
+
+#include "../codec/DecoderChannel.h"
+#include "../codec/EXIHeaderDecoder.h"
+
+#include "appHandEXIDatatypes.h"
+#include "../codec/ErrorCodes.h"
+
+#ifndef EXI_appHand_DATATYPES_DECODER_C
+#define EXI_appHand_DATATYPES_DECODER_C
+
+/** event-code */
+static uint32_t eventCode;
+static int errn;
+static uint32_t uint32;
+
+
+/* Forward Declarations */
+static int decode_appHandAppProtocolType(bitstream_t* stream, struct appHandAppProtocolType* appHandAppProtocolType);
+static int decode_appHandAnonType_supportedAppProtocolReq(bitstream_t* stream, struct appHandAnonType_supportedAppProtocolReq* appHandAnonType_supportedAppProtocolReq);
+static int decode_appHandAnonType_supportedAppProtocolRes(bitstream_t* stream, struct appHandAnonType_supportedAppProtocolRes* appHandAnonType_supportedAppProtocolRes);
+
+/* Deviant data decoding (skip functions) */
+
+
+
/* Complex type name='urn:iso:15118:2:2010:AppProtocol,AppProtocolType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(ProtocolNamespace,VersionNumberMajor,VersionNumberMinor,SchemaID,Priority)',  derivedBy='RESTRICTION'.  */
+static int decode_appHandAppProtocolType(bitstream_t* stream, struct appHandAppProtocolType* appHandAppProtocolType) {
+	int grammarID = 0;
+	int done = 0;
+
+	init_appHandAppProtocolType(appHandAppProtocolType);
+
+	while(!done) {
+		switch(grammarID) {
+		case 0:
+			/* FirstStartTag[START_ELEMENT(ProtocolNamespace)] */
+			errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					/* FirstStartTag[CHARACTERS[STRING]] */
+					errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+					if(errn == 0) {
+						if(eventCode == 0) {
+							errn = decodeUnsignedInteger16(stream, &appHandAppProtocolType->ProtocolNamespace.charactersLen);
+							if (errn == 0) {
+								if (appHandAppProtocolType->ProtocolNamespace.charactersLen >= 2) {
+									appHandAppProtocolType->ProtocolNamespace.charactersLen = (uint16_t)(appHandAppProtocolType->ProtocolNamespace.charactersLen - 2); /* string table miss */
+									errn = decodeCharacters(stream, appHandAppProtocolType->ProtocolNamespace.charactersLen, appHandAppProtocolType->ProtocolNamespace.characters, appHandAppProtocolType_ProtocolNamespace_CHARACTERS_SIZE);
+								} else {
+									/* string table hit */
+									errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED;
+								}
+							}
+						} else {
+							/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+							errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+						}
+					}
+					if(errn == 0) {
+						/* valid EE for simple element START_ELEMENT(ProtocolNamespace) ? */
+						errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+						if(eventCode == 0) {
+						grammarID = 1;
+						} else {
+							errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */
+						}
+					}
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 1:
+			/* Element[START_ELEMENT(VersionNumberMajor)] */
+			errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					/* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */
+					errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+					if(errn == 0) {
+						if(eventCode == 0) {
+							errn = decodeUnsignedInteger32(stream, &appHandAppProtocolType->VersionNumberMajor);
+						} else {
+							/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+							errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+						}
+					}
+					if(errn == 0) {
+						/* valid EE for simple element START_ELEMENT(VersionNumberMajor) ? */
+						errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+						if(eventCode == 0) {
+						grammarID = 2;
+						} else {
+							errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */
+						}
+					}
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 2:
+			/* Element[START_ELEMENT(VersionNumberMinor)] */
+			errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					/* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */
+					errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+					if(errn == 0) {
+						if(eventCode == 0) {
+							errn = decodeUnsignedInteger32(stream, &appHandAppProtocolType->VersionNumberMinor);
+						} else {
+							/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+							errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+						}
+					}
+					if(errn == 0) {
+						/* valid EE for simple element START_ELEMENT(VersionNumberMinor) ? */
+						errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+						if(eventCode == 0) {
+						grammarID = 3;
+						} else {
+							errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */
+						}
+					}
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 3:
+			/* Element[START_ELEMENT(SchemaID)] */
+			errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					/* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
+					errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+					if(errn == 0) {
+						if(eventCode == 0) {
+							errn = decodeNBitUnsignedInteger(stream, 8, &(uint32));
+							appHandAppProtocolType->SchemaID = (uint8_t)(uint32 + 0);
+						} else {
+							/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+							errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+						}
+					}
+					if(errn == 0) {
+						/* valid EE for simple element START_ELEMENT(SchemaID) ? */
+						errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+						if(eventCode == 0) {
+						grammarID = 4;
+						} else {
+							errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */
+						}
+					}
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 4:
+			/* Element[START_ELEMENT(Priority)] */
+			errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					/* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
+					errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+					if(errn == 0) {
+						if(eventCode == 0) {
+							errn = decodeNBitUnsignedInteger(stream, 5, &(uint32));
+							appHandAppProtocolType->Priority = (uint8_t)(uint32 + 1);
+						} else {
+							/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+							errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+						}
+					}
+					if(errn == 0) {
+						/* valid EE for simple element START_ELEMENT(Priority) ? */
+						errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+						if(eventCode == 0) {
+						grammarID = 5;
+						} else {
+							errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */
+						}
+					}
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 5:
+			/* Element[END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		default:
+			errn = EXI_ERROR_UNKOWN_GRAMMAR_ID;
+			break;
+		}
+		if(errn) {
+			done = 1;
+		}
+	}
+	return errn;
+}
+
+/* Complex type name='urn:iso:15118:2:2010:AppProtocol,#AnonType_supportedAppProtocolReq',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(AppProtocol{1-20})',  derivedBy='RESTRICTION'.  */
+static int decode_appHandAnonType_supportedAppProtocolReq(bitstream_t* stream, struct appHandAnonType_supportedAppProtocolReq* appHandAnonType_supportedAppProtocolReq) {
+	int grammarID = 7;
+	int done = 0;
+
+	init_appHandAnonType_supportedAppProtocolReq(appHandAnonType_supportedAppProtocolReq);
+
+	while(!done) {
+		switch(grammarID) {
+		case 7:
+			/* FirstStartTag[START_ELEMENT(AppProtocol)] */
+			errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else {
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 8;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 8:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else {
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 9;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 9:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else {
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 10;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 10:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else {
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 11;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 11:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else {
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 12;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 12:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else {
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 13;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 13:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else {
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 14;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 14:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else {
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 15;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 15:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else {
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 16;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 16:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else {
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 17;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 17:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else {
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 18;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 18:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else {
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 19;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 19:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else {
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 20;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 20:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else {
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 21;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 21:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else {
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 22;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 22:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else {
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 23;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 23:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else {
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 24;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 24:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else {
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 25;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 25:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else {
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 26;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 26:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else {
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 5;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 5:
+			/* Element[END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		default:
+			errn = EXI_ERROR_UNKOWN_GRAMMAR_ID;
+			break;
+		}
+		if(errn) {
+			done = 1;
+		}
+	}
+	return errn;
+}
+
+/* Complex type name='urn:iso:15118:2:2010:AppProtocol,#AnonType_supportedAppProtocolRes',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(ResponseCode,SchemaID{0-1})',  derivedBy='RESTRICTION'.  */
+static int decode_appHandAnonType_supportedAppProtocolRes(bitstream_t* stream, struct appHandAnonType_supportedAppProtocolRes* appHandAnonType_supportedAppProtocolRes) {
+	int grammarID = 27;
+	int done = 0;
+
+	init_appHandAnonType_supportedAppProtocolRes(appHandAnonType_supportedAppProtocolRes);
+
+	while(!done) {
+		switch(grammarID) {
+		case 27:
+			/* FirstStartTag[START_ELEMENT(ResponseCode)] */
+			errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					/* FirstStartTag[CHARACTERS[ENUMERATION]] */
+					errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+					if(errn == 0) {
+						if(eventCode == 0) {
+							errn = decodeNBitUnsignedInteger(stream, 2, &uint32);
+							appHandAnonType_supportedAppProtocolRes->ResponseCode = (appHandresponseCodeType) uint32;
+						} else {
+							/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+							errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+						}
+					}
+					if(errn == 0) {
+						/* valid EE for simple element START_ELEMENT(ResponseCode) ? */
+						errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+						if(eventCode == 0) {
+						grammarID = 28;
+						} else {
+							errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */
+						}
+					}
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 28:
+			/* Element[START_ELEMENT(SchemaID), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					/* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
+					errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+					if(errn == 0) {
+						if(eventCode == 0) {
+							errn = decodeNBitUnsignedInteger(stream, 8, &(uint32));
+							appHandAnonType_supportedAppProtocolRes->SchemaID = (uint8_t)(uint32 + 0);
+							appHandAnonType_supportedAppProtocolRes->SchemaID_isUsed = 1u;
+						} else {
+							/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+							errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+						}
+					}
+					if(errn == 0) {
+						/* valid EE for simple element START_ELEMENT(SchemaID) ? */
+						errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+						if(eventCode == 0) {
+						grammarID = 5;
+						} else {
+							errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */
+						}
+					}
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 5:
+			/* Element[END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		default:
+			errn = EXI_ERROR_UNKOWN_GRAMMAR_ID;
+			break;
+		}
+		if(errn) {
+			done = 1;
+		}
+	}
+	return errn;
+}
+
+
+
+
+int decode_appHandExiDocument(bitstream_t* stream, struct appHandEXIDocument* exiDoc) {
+	errn = readEXIHeader(stream);
+
+	if(errn == 0) {
+		/* DocContent[START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC] */
+		init_appHandEXIDocument(exiDoc);
+		errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+		if(errn == 0) {
+			switch(eventCode) {
+			case 0:
+				/* START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq) */
+				errn = decode_appHandAnonType_supportedAppProtocolReq(stream, &exiDoc->supportedAppProtocolReq);
+				exiDoc->supportedAppProtocolReq_isUsed = 1u;
+				break;
+			case 1:
+				/* START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes) */
+				errn = decode_appHandAnonType_supportedAppProtocolRes(stream, &exiDoc->supportedAppProtocolRes);
+				exiDoc->supportedAppProtocolRes_isUsed = 1u;
+				break;
+			default:
+				errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1;
+				break;
+			}
+		}
+
+	}
+
+	return errn;
+}
+
+
+#endif
+

+ 57 - 0
EVSE/Projects/CCS/Apps/exi_engine/appHandshake/appHandEXIDatatypesDecoder.h

@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9.4
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_AppProtocol.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+ * \file 	EXIDatatypesDecoder.h
+ * \brief 	Decoder for datatype definitions
+ *
+ */
+
+#ifndef EXI_appHand_DATATYPES_DECODER_H
+#define EXI_appHand_DATATYPES_DECODER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include <stdint.h>
+
+#include "../codec/EXITypes.h"
+#include "appHandEXIDatatypes.h"
+
+int decode_appHandExiDocument(bitstream_t* stream, struct appHandEXIDocument* exiDoc);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

+ 671 - 0
EVSE/Projects/CCS/Apps/exi_engine/appHandshake/appHandEXIDatatypesEncoder.c

@@ -0,0 +1,671 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9.4
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_AppProtocol.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+
+#include "appHandEXIDatatypesEncoder.h"
+
+#include "../codec/EncoderChannel.h"
+#include "../codec/EXIHeaderEncoder.h"
+
+#include "appHandEXIDatatypes.h"
+#include "../codec/ErrorCodes.h"
+
+#ifndef EXI_appHand_DATATYPES_ENCODER_C
+#define EXI_appHand_DATATYPES_ENCODER_C
+
+static int errn;
+
+/* Forward Declarations */
+static int encode_appHandAppProtocolType(bitstream_t* stream, struct appHandAppProtocolType* appHandAppProtocolType);
+static int encode_appHandAnonType_supportedAppProtocolReq(bitstream_t* stream, struct appHandAnonType_supportedAppProtocolReq* appHandAnonType_supportedAppProtocolReq);
+static int encode_appHandAnonType_supportedAppProtocolRes(bitstream_t* stream, struct appHandAnonType_supportedAppProtocolRes* appHandAnonType_supportedAppProtocolRes);
+
+
+
/* Complex type name='urn:iso:15118:2:2010:AppProtocol,AppProtocolType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(ProtocolNamespace,VersionNumberMajor,VersionNumberMinor,SchemaID,Priority)',  derivedBy='RESTRICTION'.  */
+static int encode_appHandAppProtocolType(bitstream_t* stream, struct appHandAppProtocolType* appHandAppProtocolType) {
+	int grammarID = 0;
+	int done = 0;
+
+
+	while(!done) {
+		switch(grammarID) {
+		case 0:
+			/* FirstStartTag[START_ELEMENT(ProtocolNamespace)] */
+			if ( 1 == 1 ) {
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					/* FirstStartTag[CHARACTERS[STRING]] */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+					if(errn == 0) {
+						/* encode string as string table miss (+2 len)*/
+						errn = encodeUnsignedInteger16(stream, (uint16_t)(appHandAppProtocolType->ProtocolNamespace.charactersLen + 2));
+						if (errn == 0) {
+							errn = encodeCharacters(stream, appHandAppProtocolType->ProtocolNamespace.characters, appHandAppProtocolType->ProtocolNamespace.charactersLen);
+						}
+						/* valid EE */
+						errn = encodeNBitUnsignedInteger(stream, 1, 0);
+					}
+				}
+				grammarID = 1;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 1:
+			/* Element[START_ELEMENT(VersionNumberMajor)] */
+			if ( 1 == 1 ) {
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					/* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+					if(errn == 0) {
+						errn = encodeUnsignedInteger32(stream, appHandAppProtocolType->VersionNumberMajor);
+						/* valid EE */
+						errn = encodeNBitUnsignedInteger(stream, 1, 0);
+					}
+				}
+				grammarID = 2;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 2:
+			/* Element[START_ELEMENT(VersionNumberMinor)] */
+			if ( 1 == 1 ) {
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					/* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+					if(errn == 0) {
+						errn = encodeUnsignedInteger32(stream, appHandAppProtocolType->VersionNumberMinor);
+						/* valid EE */
+						errn = encodeNBitUnsignedInteger(stream, 1, 0);
+					}
+				}
+				grammarID = 3;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 3:
+			/* Element[START_ELEMENT(SchemaID)] */
+			if ( 1 == 1 ) {
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					/* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+					if(errn == 0) {
+						errn = encodeNBitUnsignedInteger(stream, 8, (uint32_t)(appHandAppProtocolType->SchemaID - 0));
+						/* valid EE */
+						errn = encodeNBitUnsignedInteger(stream, 1, 0);
+					}
+				}
+				grammarID = 4;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 4:
+			/* Element[START_ELEMENT(Priority)] */
+			if ( 1 == 1 ) {
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					/* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+					if(errn == 0) {
+						errn = encodeNBitUnsignedInteger(stream, 5, (uint32_t)(appHandAppProtocolType->Priority - 1));
+						/* valid EE */
+						errn = encodeNBitUnsignedInteger(stream, 1, 0);
+					}
+				}
+				grammarID = 5;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 5:
+			/* Element[END_ELEMENT] */
+			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		default:
+			errn = EXI_ERROR_UNKOWN_GRAMMAR_ID;
+			break;
+		}
+		if(errn) {
+			done = 1;
+		}
+	}
+	return errn;
+}
+
+/* Complex type name='urn:iso:15118:2:2010:AppProtocol,#AnonType_supportedAppProtocolReq',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(AppProtocol{1-20})',  derivedBy='RESTRICTION'.  */
+static int encode_appHandAnonType_supportedAppProtocolReq(bitstream_t* stream, struct appHandAnonType_supportedAppProtocolReq* appHandAnonType_supportedAppProtocolReq) {
+	int grammarID = 7;
+	int done = 0;
+
+	unsigned int appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex = 0;
+
+	while(!done) {
+		switch(grammarID) {
+		case 7:
+			/* FirstStartTag[START_ELEMENT(AppProtocol)] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 8;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 8:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 9;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 9:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 10;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 10:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 11;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 11:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 12;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 12:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 13;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 13:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 14;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 14:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 15;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 15:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 16;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 16:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 17;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 17:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 18;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 18:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 19;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 19:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 20;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 20:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 21;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 21:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 22;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 22:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 23;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 23:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 24;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 24:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 25;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 25:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 26;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 26:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 5;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 5:
+			/* Element[END_ELEMENT] */
+			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		default:
+			errn = EXI_ERROR_UNKOWN_GRAMMAR_ID;
+			break;
+		}
+		if(errn) {
+			done = 1;
+		}
+	}
+	return errn;
+}
+
+/* Complex type name='urn:iso:15118:2:2010:AppProtocol,#AnonType_supportedAppProtocolRes',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(ResponseCode,SchemaID{0-1})',  derivedBy='RESTRICTION'.  */
+static int encode_appHandAnonType_supportedAppProtocolRes(bitstream_t* stream, struct appHandAnonType_supportedAppProtocolRes* appHandAnonType_supportedAppProtocolRes) {
+	int grammarID = 27;
+	int done = 0;
+
+
+	while(!done) {
+		switch(grammarID) {
+		case 27:
+			/* FirstStartTag[START_ELEMENT(ResponseCode)] */
+			if ( 1 == 1 ) {
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					/* FirstStartTag[CHARACTERS[ENUMERATION]] */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+					if(errn == 0) {
+						errn = encodeNBitUnsignedInteger(stream, 2, appHandAnonType_supportedAppProtocolRes->ResponseCode);
+						/* valid EE */
+						errn = encodeNBitUnsignedInteger(stream, 1, 0);
+					}
+				}
+				grammarID = 28;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 28:
+			/* Element[START_ELEMENT(SchemaID), END_ELEMENT] */
+			if ( appHandAnonType_supportedAppProtocolRes->SchemaID_isUsed == 1u ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					/* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+					if(errn == 0) {
+						errn = encodeNBitUnsignedInteger(stream, 8, (uint32_t)(appHandAnonType_supportedAppProtocolRes->SchemaID - 0));
+						/* valid EE */
+						errn = encodeNBitUnsignedInteger(stream, 1, 0);
+					}
+				}
+				grammarID = 5;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 5:
+			/* Element[END_ELEMENT] */
+			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		default:
+			errn = EXI_ERROR_UNKOWN_GRAMMAR_ID;
+			break;
+		}
+		if(errn) {
+			done = 1;
+		}
+	}
+	return errn;
+}
+
+
+
+int encode_appHandExiDocument(bitstream_t* stream, struct appHandEXIDocument* exiDoc) {
+	errn = writeEXIHeader(stream);
+
+	if(errn == 0) {
+		/* DocContent[START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC] */
+		if ( exiDoc->supportedAppProtocolReq_isUsed == 1u ) {
+			/* START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq) */
+			errn = encodeNBitUnsignedInteger(stream, 2, 0);
+			if(errn == 0) {
+				errn = encode_appHandAnonType_supportedAppProtocolReq(stream, &exiDoc->supportedAppProtocolReq );
+			}
+		} else if ( exiDoc->supportedAppProtocolRes_isUsed == 1u ) {
+			/* START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes) */
+			errn = encodeNBitUnsignedInteger(stream, 2, 1);
+			if(errn == 0) {
+				errn = encode_appHandAnonType_supportedAppProtocolRes(stream, &exiDoc->supportedAppProtocolRes );
+			}
+		} else {
+			errn = EXI_ERROR_UNKOWN_EVENT;
+		}
+
+	}
+
+	if(errn == 0) {
+		/* flush any pending bits */
+		errn = encodeFinish(stream);
+	}
+
+	return errn;
+}
+
+
+#endif
+

+ 58 - 0
EVSE/Projects/CCS/Apps/exi_engine/appHandshake/appHandEXIDatatypesEncoder.h

@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9.4
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_AppProtocol.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+ * \file 	EXIDatatypesEncoder.h
+ * \brief 	Encoder for datatype definitions
+ *
+ */
+
+#ifndef EXI_appHand_DATATYPES_ENCODER_H
+#define EXI_appHand_DATATYPES_ENCODER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+
+#include "../codec/EXITypes.h"
+#include "appHandEXIDatatypes.h"
+
+
+int encode_appHandExiDocument(bitstream_t* stream, struct appHandEXIDocument* exiDoc);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

+ 105 - 0
EVSE/Projects/CCS/Apps/exi_engine/codec/BitInputStream.c

@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 2017-03-02 
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+#include "BitInputStream.h"
+#include "EXIConfig.h"
+#include "EXITypes.h"
+#include "ErrorCodes.h"
+
+#ifndef BIT_INPUT_STREAM_C
+#define BIT_INPUT_STREAM_C
+
+/* internal method to (re)fill buffer */
+static int readBuffer(bitstream_t* stream)
+{
+	int errn = 0;
+	if(stream->capacity==0)
+	{
+#if EXI_STREAM == BYTE_ARRAY
+		if ( (*stream->pos) < stream->size ) {
+			stream->buffer = stream->data[(*stream->pos)++];
+			stream->capacity = BITS_IN_BYTE;
+		} else {
+			errn = EXI_ERROR_INPUT_STREAM_EOF;
+		}
+#endif
+#if EXI_STREAM == FILE_STREAM
+		stream->buffer = (uint8_t)(getc(stream->file));
+		/* EOF cannot be used, 0xFF valid value */
+		if ( feof(stream->file) || ferror(stream->file) ) {
+			errn = EXI_ERROR_INPUT_STREAM_EOF;
+		} else {
+			stream->capacity = BITS_IN_BYTE;
+		}
+#endif
+	}
+	return errn;
+}
+
+int readBits(bitstream_t* stream, size_t num_bits, uint32_t* b)
+{
+	int errn = readBuffer(stream);
+	if (errn == 0) {
+		/* read the bits in one step */
+		if(num_bits <= stream->capacity) {
+			stream->capacity = (uint8_t)(stream->capacity - num_bits);
+			*b = (uint32_t)((stream->buffer >> stream->capacity) & (0xff >> (BITS_IN_BYTE - num_bits)));
+		} else {
+			/* read bits as much as possible */
+			*b = (uint32_t)(stream->buffer & (0xff >> (BITS_IN_BYTE - stream->capacity)));
+			num_bits = (num_bits - stream->capacity);
+			stream->capacity = 0;
+
+			/* read whole bytes */
+			while(errn == 0 && num_bits >= 8)
+			{
+				errn = readBuffer(stream);
+				*b = ((*b) << BITS_IN_BYTE) | stream->buffer;
+				num_bits = (num_bits - BITS_IN_BYTE);
+				stream->capacity = 0;
+			}
+
+			/* read the spare bits in the buffer */
+			if(errn == 0 && num_bits > 0)
+			{
+				errn = readBuffer(stream);
+				if (errn == 0) {
+					*b = ( (*b) << num_bits) | (uint8_t)(stream->buffer  >> (BITS_IN_BYTE - num_bits)) ;
+					stream->capacity = (uint8_t)(BITS_IN_BYTE - num_bits);
+				}
+			}
+		}
+	}
+
+	return errn;
+}
+
+#endif

+ 67 - 0
EVSE/Projects/CCS/Apps/exi_engine/codec/BitInputStream.h

@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 2017-03-02 
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+ * \file 	BitInputStream.h
+ * \brief 	Bit Input Stream
+ *
+ * 			Read bits and bytes from an underlying input stream.
+ *
+ */
+
+#ifndef BIT_INPUT_STREAM_H
+#define BIT_INPUT_STREAM_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "EXITypes.h"
+
+/**
+ * \brief 		Read bits
+ *
+ * 				Read the next num_bits bits and returns result an integer.
+ *
+ * \param       stream   		Input Stream
+ * \param       num_bits		Number of bits
+ * \param       b		   		Integer value (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int readBits(bitstream_t* stream, size_t num_bits, uint32_t* b);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

+ 124 - 0
EVSE/Projects/CCS/Apps/exi_engine/codec/BitOutputStream.c

@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 2017-03-02 
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+#include "BitOutputStream.h"
+#include "EXIConfig.h"
+#include "EXITypes.h"
+#include "ErrorCodes.h"
+
+#ifndef BIT_OUTPUT_STREAM_C
+#define BIT_OUTPUT_STREAM_C
+
+int writeBits(bitstream_t* stream, size_t nbits, uint32_t val) {
+	int errn = 0;
+	/*  is there enough space in the buffer */
+	if (nbits <= stream->capacity) {
+		/* all bits fit into the current buffer */
+		stream->buffer = (uint8_t)(stream->buffer << (nbits)) | (uint8_t)(val & (uint32_t)(0xff >> (uint32_t)(BITS_IN_BYTE - nbits)));
+		stream->capacity = (uint8_t)(stream->capacity - nbits);
+		/* if the buffer is full write byte */
+		if (stream->capacity == 0) {
+#if EXI_STREAM == BYTE_ARRAY
+			if ((*stream->pos) >= stream->size) {
+				errn = EXI_ERROR_OUTPUT_STREAM_EOF;
+			} else {
+				stream->data[(*stream->pos)++] = stream->buffer;
+			}
+#endif
+#if EXI_STREAM == FILE_STREAM
+			if ( putc(stream->buffer, stream->file) == EOF ) {
+				errn = EXI_ERROR_OUTPUT_STREAM_EOF;
+			}
+#endif
+			stream->capacity = BITS_IN_BYTE;
+			stream->buffer = 0;
+		}
+	} else {
+		/* the buffer is not enough
+		 * fill the buffer */
+		stream->buffer = (uint8_t)(stream->buffer << stream->capacity) |
+				( (uint8_t)(val >> (nbits - stream->capacity)) & (uint8_t)(0xff >> (BITS_IN_BYTE - stream->capacity)) );
+
+		nbits = (nbits - stream->capacity);
+#if EXI_STREAM == BYTE_ARRAY
+		if ((*stream->pos) >= stream->size) {
+			errn = EXI_ERROR_OUTPUT_STREAM_EOF;
+		} else {
+			stream->data[(*stream->pos)++] = stream->buffer;
+		}
+#endif
+#if EXI_STREAM == FILE_STREAM
+		if ( putc(stream->buffer, stream->file) == EOF ) {
+			errn = EXI_ERROR_OUTPUT_STREAM_EOF;
+		}
+#endif
+		stream->buffer = 0;
+
+		/* write whole bytes */
+		while (errn == 0 && nbits >= BITS_IN_BYTE) {
+			nbits = (nbits - BITS_IN_BYTE);
+#if EXI_STREAM == BYTE_ARRAY
+			if ((*stream->pos) >= stream->size) {
+				errn = EXI_ERROR_OUTPUT_STREAM_EOF;
+			} else {
+				stream->data[(*stream->pos)++] = (uint8_t)(val >> (nbits));
+			}
+#endif
+#if EXI_STREAM == FILE_STREAM
+			if ( putc((int)(val >> (nbits)), stream->file) == EOF ) {
+				errn = EXI_ERROR_OUTPUT_STREAM_EOF;
+			}
+#endif
+		}
+
+		/* spared bits are kept in the buffer */
+		stream->buffer = (uint8_t)val; /* Note: the high bits will be shifted out during further filling */
+		stream->capacity = (uint8_t)(BITS_IN_BYTE - (nbits));
+	}
+
+	return errn;
+}
+
+/**
+ * Flush output
+ */
+int flush(bitstream_t* stream) {
+	int errn = 0;
+	if (stream->capacity == BITS_IN_BYTE) {
+		/* nothing to do, no bits in buffer */
+	} else {
+		errn = writeBits(stream, stream->capacity, 0);
+	}
+	return errn;
+}
+
+#endif
+

+ 85 - 0
EVSE/Projects/CCS/Apps/exi_engine/codec/BitOutputStream.h

@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 2017-03-02 
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+ * \file 	BitOutputStream.h
+ * \brief 	Bit Output Stream
+ *
+ * 			Write bits and bytes to an underlying output stream.
+ *
+ */
+
+#ifndef BIT_OUTPUT_STREAM_H
+#define BIT_OUTPUT_STREAM_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+
+#include "EXITypes.h"
+
+/**
+ * \brief 		Write bits
+ *
+ * 				Write the n least significant bits of parameter b starting
+ * 				with the most significant, i.e. from left to right.
+ *
+ * \param       stream   		Output Stream
+ * \param       nbits			Number of bits
+ * \param       bits		   	value
+ * \return                  	Error-Code <> 0
+ *
+ */
+int writeBits(bitstream_t* stream, size_t nbits, uint32_t bits);
+
+
+/**
+ * \brief 		Flush output
+ *
+ * 				If there are some unwritten bits, pad them if necessary and
+ * 				write them out. Note that this method does flush the
+ * 				underlying stream.
+ *
+ * \param       stream   		Output Stream
+ * \return                  	Error-Code <> 0
+ *
+ */
+int flush(bitstream_t* stream);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+

+ 88 - 0
EVSE/Projects/CCS/Apps/exi_engine/codec/ByteStream.c

@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 2017-03-02 
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/* Avoid VS warning, put before your included header files */
+/* warning C4996: ‘fopen’: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. */
+#define _CRT_SECURE_NO_DEPRECATE
+
+#include <stdio.h>
+
+#include "EXITypes.h"
+#include "ErrorCodes.h"
+
+#ifndef BYTE_STREAM_C
+#define BYTE_STREAM_C
+
+int readBytesFromFile(const char * filename, uint8_t* data, size_t size, size_t* pos) {
+	FILE* f;
+	int character;
+	int errn = 0;
+
+	f = fopen(filename, "rb");
+
+	if (f == NULL) {
+		errn = EXI_ERROR_INPUT_FILE_HANDLE;
+	} else {
+		/* read bytes */
+		while (errn == 0 && (character = getc(f)) != EOF) {
+			if (*pos >= size) {
+				errn = EXI_ERROR_OUT_OF_BYTE_BUFFER;
+			} else {
+				data[(*pos)++] = (uint8_t) character;
+			}
+		}
+		fclose(f);
+	}
+
+	return errn;
+}
+
+int writeBytesToFile(uint8_t* data, size_t len, const char * filename) {
+	size_t rlen;
+	FILE* f = fopen(filename, "wb+");
+
+	if (f == NULL) {
+		return -1;
+	} else {
+		rlen = fwrite(data, sizeof(uint8_t), len, f);
+		fflush(f);
+		fclose(f);
+		if(rlen == len) {
+			return 0;
+		} else {
+			return EXI_ERROR_OUTPUT_FILE;
+		}
+	}
+}
+
+
+#endif /* BYTE_STREAM_C */
+

+ 75 - 0
EVSE/Projects/CCS/Apps/exi_engine/codec/ByteStream.h

@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 2017-03-02 
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+ * \file 	ByteStream.h
+ * \brief 	Byte Stream utilities
+ *
+ */
+
+#ifndef BYTE_STREAM_H
+#define BYTE_STREAM_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "EXITypes.h"
+
+/**
+ * \brief 		Write bytes to file
+ *
+ * \param       data	   		byte array
+ * \param       len				length
+ * \param       filename		File name
+ * \return                  	Error-Code <> 0
+ *
+ */
+int writeBytesToFile(uint8_t* data, size_t len, const char * filename);
+
+
+/**
+ * \brief 		Read bytes from file
+ *
+ * \param       filename   		File name
+ * \param       data			byte array
+ * \param       size		   	byte array size
+ * \param       pos			   	byte array position
+ * \return                  	Error-Code <> 0
+ *
+ */
+int readBytesFromFile(const char * filename, uint8_t* data, size_t size, size_t* pos);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* BYTE_STREAM_H */

+ 930 - 0
EVSE/Projects/CCS/Apps/exi_engine/codec/DecoderChannel.c

@@ -0,0 +1,930 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 2017-03-02 
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+#include "DecoderChannel.h"
+
+#include "EXIConfig.h"
+#include "EXIOptions.h"
+#include "BitInputStream.h"
+#include "EXITypes.h"
+#include "MethodsBag.h"
+/*#include "v2gEXICoder.h"*/
+#include "ErrorCodes.h"
+
+#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
+#include "DynamicMemory.h"
+#endif /* DYNAMIC_ALLOCATION */
+
+#ifndef DECODER_CHANNEL_C
+#define DECODER_CHANNEL_C
+
+/* unsigned long == 64 bits, 10 * 7bits = 70 bits */
+#define MAX_OCTETS_FOR_UNSIGNED_INTEGER_64 10
+/* unsigned int == 32 bits, 5 * 7bits = 35 bits */
+#define MAX_OCTETS_FOR_UNSIGNED_INTEGER_32 5
+
+/* buffer for reading (arbitrary) large integer values */
+static uint8_t maskedOctets[MAX_OCTETS_FOR_UNSIGNED_INTEGER_64];
+
+
+static int _decodeUnsignedInteger(bitstream_t* stream, exi_integer_t* iv, int negative) {
+	int errn = 0;
+	int i = 0;
+	uint8_t b;
+	int k;
+
+	do {
+		/* Read the next octet */
+		errn = decode(stream, &b);
+		if (errn == 0) {
+			if(i < MAX_OCTETS_FOR_UNSIGNED_INTEGER_64) {
+				/* the 7 least significant bits hold the actual value */
+				maskedOctets[i++] = (b & 127);
+			} else {
+				errn = EXI_UNSUPPORTED_INTEGER_VALUE;
+			}
+		}
+	} while( errn == 0 && b >= 128 ); /* no more octets ? */
+
+	if ( errn == 0 ) {
+		/* For negative values, the Unsigned Integer holds the
+		 * magnitude of the value minus 1 */
+
+		switch(i) {
+		case 1: /* 7 bits */
+			if (negative) {
+				iv->val.int8 =  (int8_t)(-( b + 1));
+				iv->type = EXI_INTEGER_8;
+			} else {
+				iv->val.uint8 = b;
+				iv->type = EXI_UNSIGNED_INTEGER_8;
+			}
+			break;
+		case 2: /* 14 bits */
+			iv->val.uint16 = 0;
+			for (k = i-1; k >= 0 ; k--) {
+				iv->val.uint16  = (uint16_t)((iv->val.uint16 << 7) | maskedOctets[k]);
+			}
+			if (negative) {
+				iv->val.int16 = (int16_t)( -( iv->val.uint16 + 1 ));
+				iv->type = EXI_INTEGER_16;
+			} else {
+				iv->type = EXI_UNSIGNED_INTEGER_16;
+			}
+			break;
+		case 3: /* 21 bits */
+		case 4: /* 28 bits */
+			iv->val.uint32 = 0;
+			for (k = i-1; k >= 0 ; k--) {
+				iv->val.uint32 = (iv->val.uint32 << 7) | maskedOctets[k];
+			}
+			if (negative) {
+				iv->val.int32 = (-(int32_t)(iv->val.uint32 + 1));
+				if (iv->val.int32 <= INT16_MAX && iv->val.int32 >= INT16_MIN ) {
+					iv->type = EXI_INTEGER_16;
+				} else {
+					iv->type = EXI_INTEGER_32;
+				}
+			} else {
+				if (iv->val.uint32 <= UINT16_MAX) {
+					iv->type = EXI_UNSIGNED_INTEGER_16;
+				} else {
+					iv->type = EXI_UNSIGNED_INTEGER_32;
+				}
+			}
+			break;
+		case 5: /* 35 bits */
+		case 6: /* 42 bits */
+		case 7: /* 49 bits */
+		case 8: /* 56 bits */
+		case 9: /* 63 bits */
+		case 10: /* 70 bits */
+			iv->val.uint64 = 0;
+			for (k = i-1; k >= 0 ; k--) {
+				iv->val.uint64  = (iv->val.uint64 << 7) | maskedOctets[k];
+			}
+			if (negative) {
+				if (i > 9) {
+					/* too large */
+					return EXI_UNSUPPORTED_INTEGER_VALUE;
+				}
+				iv->val.int64 = (-(int64_t)(iv->val.uint64 + 1));
+				if (iv->val.int64 <= INT32_MAX && iv->val.int64 >= INT32_MIN ) {
+					iv->type = EXI_INTEGER_32;
+				} else {
+					iv->type = EXI_INTEGER_64;
+				}
+			} else {
+				if (iv->val.uint64 <= UINT32_MAX) {
+					iv->type = EXI_UNSIGNED_INTEGER_32;
+					/* iv->val.uint32 = iv->val.uint64;*/
+				} else {
+					iv->type = EXI_UNSIGNED_INTEGER_64;
+				}
+			}
+			break;
+		default:
+			errn = EXI_UNSUPPORTED_INTEGER_VALUE;
+			break;
+		}
+	}
+
+	return errn;
+}
+
+int decodeUnsignedInteger(bitstream_t* stream, exi_integer_t* iv) {
+	return _decodeUnsignedInteger(stream, iv, 0);
+}
+
+int decodeUnsignedInteger16(bitstream_t* stream, uint16_t* uint16) {
+	unsigned int mShift = 0;
+	int errn = 0;
+	uint8_t b = 0;
+	*uint16 = 0;
+
+	do {
+		/* 1. Read the next octet */
+		errn = decode(stream, &b);
+		/* 2. Multiply the value of the unsigned number represented by the 7
+		 * least significant
+		 * bits of the octet by the current multiplier and add the result to
+		 * the current value */
+		*uint16 = (uint16_t)(*uint16 + ((b & 127) << mShift));
+		/* 3. Multiply the multiplier by 128 */
+		mShift += 7;
+		/* 4. If the most significant bit of the octet was 1, go back to step 1 */
+	} while (errn == 0 && (b >> 7) == 1);
+
+	return errn;
+}
+
+int decodeUnsignedInteger32(bitstream_t* stream, uint32_t* uint32) {
+	/* 0XXXXXXX ... 1XXXXXXX 1XXXXXXX */
+	unsigned int mShift = 0;
+	int errn = 0;
+	uint8_t b = 0;
+	*uint32 = 0;
+
+	do {
+		/* 1. Read the next octet */
+		errn = decode(stream, &b);
+		/* 2. Multiply the value of the unsigned number represented by the 7
+		 * least significant
+		 * bits of the octet by the current multiplier and add the result to
+		 * the current value */
+		*uint32 += (uint32_t)((b & 127) << mShift);
+		/* 3. Multiply the multiplier by 128 */
+		mShift += 7;
+		/* 4. If the most significant bit of the octet was 1, go back to step 1 */
+	} while (errn == 0 && (b >> 7) == 1);
+
+	return errn;
+}
+
+int decodeUnsignedIntegerSizeT(bitstream_t* stream, size_t* sizeT) {
+	int errn = 0;
+
+	/* TODO is there a better way to detect the actual size of size_t */
+	if(SIZE_MAX == UINT16_MAX) {
+		/* 16bit */
+		uint16_t uint16;
+		errn = decodeUnsignedInteger16(stream, &uint16);
+		if(errn == 0) {
+			*sizeT = (size_t)uint16;
+		}
+	} else if(SIZE_MAX == UINT32_MAX) {
+		/* 32bit */
+		uint32_t uint32;
+		errn = decodeUnsignedInteger32(stream, &uint32);
+		if(errn == 0) {
+			*sizeT = (size_t)uint32;
+		}
+	} else {
+		/* 64bit */
+		uint64_t uint64;
+		errn = decodeUnsignedInteger64(stream, &uint64);
+		if(errn == 0) {
+			*sizeT = (size_t)uint64;
+		}
+	}
+
+	return errn;
+}
+
+
+
+/**
+ * Decode an arbitrary precision non negative integer using a sequence of
+ * octets. The most significant bit of the last octet is set to zero to
+ * indicate sequence termination. Only seven bits per octet are used to
+ * store the integer's value.
+ */
+int decodeUnsignedInteger64(bitstream_t* stream, uint64_t* uint64) {
+	unsigned int mShift = 0;
+	int errn = 0;
+	uint8_t b;
+	*uint64 = 0L;
+
+	do {
+		errn = decode(stream, &b);
+		*uint64 += ((uint64_t) (b & 127)) << mShift;
+		mShift += 7;
+	} while (errn == 0 && (b >> 7) == 1);
+
+	return errn;
+}
+
+
+void _reverseArray(uint8_t *array, int number) {
+    int x, t;
+    number--;
+
+    for(x = 0; x < number; x ++, number --) {
+        t = array[x];
+        array[x] = array[number];
+        array[number] = t;
+    }
+}
+
+/**
+ * Decode an arbitrary precision non negative integer using a sequence of
+ * octets. The most significant bit of the last octet is set to zero to
+ * indicate sequence termination. Only seven bits per octet are used to
+ * store the integer's value.
+ */
+int decodeUnsignedIntegerBig(bitstream_t* stream, size_t size, uint8_t* data, size_t* len) {
+	int errn = 0;
+	uint8_t b = 0;
+	unsigned int mShift1 = 0;
+	unsigned int mShift2 = 0;
+	unsigned int mShift3 = 0;
+	unsigned int mShift4 = 0;
+	unsigned int nBytesRead = 0;
+	unsigned int nBitsAvailable = 0;
+	uint64_t uint64_1 = 0;
+	uint64_t uint64_2 = 0;
+	uint64_t uint64_3 = 0;
+	uint64_t uint64_4 = 0;
+
+	*len = 0;
+
+	do {
+		errn = decode(stream, &b);
+		nBytesRead++;
+		nBitsAvailable += 7;
+
+		if(nBytesRead <= 8) {
+			uint64_1 += ((uint64_t) (b & 127)) << mShift1;
+			mShift1 += 7;
+		} else if(nBytesRead <= 16) {
+			uint64_2 += ((uint64_t) (b & 127)) << mShift2;
+			mShift2 += 7;
+		} else if(nBytesRead <= 24) {
+			uint64_3 += ((uint64_t) (b & 127)) << mShift3;
+			mShift3 += 7;
+		} else if(nBytesRead <= 32) {
+			uint64_4 += ((uint64_t) (b & 127)) << mShift4;
+			mShift4 += 7;
+		} else {
+			return -1; // too large
+		}
+	} while (errn == 0 && (b >> 7) == 1);
+
+	// shift actual data into array
+	if(uint64_4 != 0) {
+		// 7 octets for uint64_1
+		data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); // 1
+		uint64_1 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); // 2
+		uint64_1 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); // 3
+		uint64_1 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); // 4
+		uint64_1 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); // 5
+		uint64_1 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); // 6
+		uint64_1 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); // 7
+
+		// 7 octets for uint64_2
+		data[(*len)++] = (uint8_t)(uint64_2 & 0xFF); // 1
+		uint64_2 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_2 & 0xFF); // 2
+		uint64_2 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_2 & 0xFF); // 3
+		uint64_2 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_2 & 0xFF); // 4
+		uint64_2 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_2 & 0xFF); // 5
+		uint64_2 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_2 & 0xFF); // 6
+		uint64_2 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_2 & 0xFF); // 7
+
+		// 7 octets for uint64_3
+		data[(*len)++] = (uint8_t)(uint64_3 & 0xFF); // 1
+		uint64_3 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_3 & 0xFF); // 2
+		uint64_3 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_3 & 0xFF); // 3
+		uint64_3 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_3 & 0xFF); // 4
+		uint64_3 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_3 & 0xFF); // 5
+		uint64_3 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_3 & 0xFF); // 6
+		uint64_3 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_3 & 0xFF); // 7
+
+		// remaining octets of uint64_4
+		while (uint64_4 != 0 && errn == 0) {
+			data[(*len)++] = uint64_4 & 0xFF;
+			uint64_4 >>= 8;
+		}
+	} else if(uint64_3 != 0) {
+		// 7 octets for uint64_1
+		data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); // 1
+		uint64_1 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); // 2
+		uint64_1 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); // 3
+		uint64_1 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); // 4
+		uint64_1 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); // 5
+		uint64_1 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); // 6
+		uint64_1 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); // 7
+
+		// 7 octets for uint64_2
+		data[(*len)++] = (uint8_t)(uint64_2 & 0xFF); // 1
+		uint64_2 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_2 & 0xFF); // 2
+		uint64_2 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_2 & 0xFF); // 3
+		uint64_2 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_2 & 0xFF); // 4
+		uint64_2 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_2 & 0xFF); // 5
+		uint64_2 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_2 & 0xFF); // 6
+		uint64_2 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_2 & 0xFF); // 7
+
+		// remaining octets of uint64_3
+		while (uint64_3 != 0 && errn == 0) {
+			data[(*len)++] = uint64_3 & 0xFF;
+			uint64_3 >>= 8;
+		}
+
+	} else if(uint64_2 != 0) {
+		// 7 octets for uint64_1
+		data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); // 1
+		uint64_1 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); // 2
+		uint64_1 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); // 3
+		uint64_1 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); // 4
+		uint64_1 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); // 5
+		uint64_1 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); // 6
+		uint64_1 >>= 8;
+		data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); // 7
+		// remaining octets of uint64_2
+		while (uint64_2 != 0 && errn == 0) {
+			data[(*len)++] = uint64_2 & 0xFF;
+			uint64_2 >>= 8;
+		}
+	} else if(uint64_1 != 0) {
+		while (uint64_1 != 0 && errn == 0) {
+			data[(*len)++] = uint64_1 & 0xFF;
+			uint64_1 >>= 8;
+		}
+	}
+
+	_reverseArray(data, *len);
+
+	return errn;
+}
+
+int decodeInteger(bitstream_t* stream, exi_integer_t* iv) {
+	int b;
+	int errn = decodeBoolean(stream, &b);
+	if (errn == 0) {
+		errn = _decodeUnsignedInteger(stream, iv, b);
+	}
+
+	return errn;
+}
+
+
+/**
+ * Decode an arbitrary precision integer using a sign bit followed by a
+ * sequence of octets. The most significant bit of the last octet is set to
+ * zero to indicate sequence termination. Only seven bits per octet are used
+ * to store the integer's value.
+ */
+int decodeInteger16(bitstream_t* stream, int16_t* int16) {
+	int b;
+	uint16_t uint16;
+	int errn = decodeBoolean(stream, &b);
+
+	if (errn == 0) {
+		if (b) {
+			/* For negative values, the Unsigned Integer holds the
+			 * magnitude of the value minus 1 */
+			errn = decodeUnsignedInteger16(stream, &uint16);
+			*int16 = (int16_t)(-(uint16 + 1));
+		} else {
+			/* positive */
+			errn = decodeUnsignedInteger16(stream, &uint16);
+			*int16 = (int16_t)(uint16);
+		}
+	}
+
+	return errn;
+}
+
+/**
+ * Decode an arbitrary precision integer using a sign bit followed by a
+ * sequence of octets. The most significant bit of the last octet is set to
+ * zero to indicate sequence termination. Only seven bits per octet are used
+ * to store the integer's value.
+ */
+int decodeInteger32(bitstream_t* stream, int32_t* int32) {
+	int b;
+	uint32_t uint32;
+	int errn = decodeBoolean(stream, &b);
+
+	if (errn == 0) {
+		if (b) {
+			/* For negative values, the Unsigned Integer holds the
+			 * magnitude of the value minus 1 */
+			errn = decodeUnsignedInteger32(stream, &uint32);
+			*int32 = (-(int32_t)(uint32 + 1));
+		} else {
+			/* positive */
+			errn = decodeUnsignedInteger32(stream, &uint32);
+			*int32 = (int32_t)(uint32);
+		}
+	}
+
+	return errn;
+}
+
+/**
+ * Decode an arbitrary precision integer using a sign bit followed by a
+ * sequence of octets. The most significant bit of the last octet is set to
+ * zero to indicate sequence termination. Only seven bits per octet are used
+ * to store the integer's value.
+ */
+int decodeInteger64(bitstream_t* stream, int64_t* int64) {
+	int b;
+	uint64_t uint64;
+	int errn = decodeBoolean(stream, &b);
+
+	if (errn == 0) {
+		if (b) {
+			/* For negative values, the Unsigned Integer holds the
+			 * magnitude of the value minus 1 */
+			errn = decodeUnsignedInteger64(stream, &uint64);
+			*int64 = (-(int64_t)(uint64 + 1));
+		} else {
+			/* positive */
+			errn = decodeUnsignedInteger64(stream, &uint64);
+			*int64 = (int64_t)(uint64);
+		}
+	}
+
+	return errn;
+}
+
+/**
+ * Decode an arbitrary precision integer using a sign bit followed by a
+ * sequence of octets. The most significant bit of the last octet is set to
+ * zero to indicate sequence termination. Only seven bits per octet are used
+ * to store the integer's value.
+ */
+int decodeIntegerBig(bitstream_t* stream, int* negative, size_t size, uint8_t* data, size_t* len) {
+	int errn = decodeBoolean(stream, negative);
+
+	if (errn == 0) {
+		if (*negative) {
+			/* For negative values, the Unsigned Integer holds the
+			 * magnitude of the value minus 1 */
+		} else {
+			/* positive */
+		}
+		errn = decodeUnsignedIntegerBig(stream, size, data, len);
+	}
+
+	return errn;
+}
+
+/**
+ * Decode a Float datatype as two consecutive Integers.
+ * The first Integer represents the mantissa of the floating point
+ * number and the second Integer represents the base-10 exponent
+ * of the floating point number.
+ */
+int decodeFloat(bitstream_t* stream, exi_float_me_t* f) {
+	int errn = decodeInteger64(stream, &f->mantissa);
+	if (errn == 0) {
+		errn = decodeInteger16(stream, &f->exponent);
+	}
+	return errn;
+}
+
+/**
+ * Decode a decimal represented as a Boolean sign followed by two Unsigned
+ * Integers. A sign value of zero (0) is used to represent positive Decimal
+ * values and a sign value of one (1) is used to represent negative Decimal
+ * values The first Integer represents the integral portion of the Decimal
+ * value. The second positive integer represents the fractional portion of
+ * the decimal with the digits in reverse order to preserve leading zeros.
+ */
+int decodeDecimal(bitstream_t* stream, exi_decimal_t* d) {
+	int errn = decodeBoolean(stream, &d->negative);
+	if (errn == 0) {
+		errn = decodeUnsignedInteger(stream, &d->integral);
+		if (errn == 0) {
+			errn = decodeUnsignedInteger(stream, &d->reverseFraction);
+		}
+	}
+
+	return errn;
+}
+
+/**
+ * Decode a sequence of characters for a given length.
+ */
+int decodeStringOnly(bitstream_t* stream, size_t len, exi_string_t* s) {
+	int errn = 0;
+	unsigned int extraChar = 0;
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_ASCII
+	extraChar = 1; /* null terminator */
+#endif /* STRING_REPRESENTATION_ASCII */
+
+	if ( (len + extraChar) > s->size) {
+#if MEMORY_ALLOCATION == STATIC_ALLOCATION
+		errn = EXI_ERROR_OUT_OF_STRING_BUFFER;
+#endif /* STATIC_ALLOCATION */
+#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
+		if(s->size > 0) {
+			errn = exiFreeDynamicStringMemory(s);
+			if(errn) {
+				return errn;
+			}
+		}
+		errn = exiAllocateDynamicStringMemory(s, (len + extraChar)); /*s->len*/
+#endif /* DYNAMIC_ALLOCATION */
+	}
+	if(errn == 0) {
+		errn = decodeCharacters(stream, len, s->characters, s->size);
+		s->len = len;
+	}
+
+	return errn;
+}
+
+/**
+ * Decode a length prefixed sequence of characters.
+ */
+int decodeString(bitstream_t* stream, exi_string_t* s) {
+	int errn = decodeUnsignedIntegerSizeT(stream, &s->len);
+	if (errn == 0) {
+		errn = decodeStringOnly(stream, s->len, s);
+	}
+	return errn;
+}
+
+/**
+ * Decode a sequence of characters according to a given length.
+ * Each character is represented by its UCS [ISO/IEC 10646]
+ * code point encoded as an Unsigned Integer
+ */
+int decodeCharacters(bitstream_t* stream, size_t len, exi_string_character_t* chars, size_t charsSize) {
+	unsigned int i;
+	int errn = 0;
+
+	unsigned int extraChar = 0;
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_ASCII
+	extraChar = 1; /* null terminator */
+#endif /* STRING_REPRESENTATION_ASCII */
+
+	if ( (len + extraChar) > charsSize) {
+		errn = EXI_ERROR_OUT_OF_STRING_BUFFER;
+		return errn;
+	}
+
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_ASCII
+	uint8_t b;
+	for (i = 0; i < len && errn == 0; i++) {
+		errn = decode(stream, &b);
+		if(b < 128) {
+			chars[i] = (exi_string_character_t)b;
+		} else {
+			errn = EXI_ERROR_STRINGVALUES_CHARACTER;
+		}
+	}
+	/* null terminator \0 */
+	chars[i] = '\0';
+
+#endif /* STRING_REPRESENTATION_ASCII */
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_UCS
+	for (i = 0; i < len && errn == 0; i++) {
+		errn = decodeUnsignedInteger32(stream, &chars[i]);
+	}
+#endif /* STRING_REPRESENTATION_UCS */
+
+
+
+
+	return errn;
+}
+
+int decodeRCSCharacters(bitstream_t* stream, size_t len, exi_string_character_t* chars, size_t charsSize, size_t rcsCodeLength, size_t rcsSize, const exi_string_character_t rcsSet[]) {
+	unsigned int i;
+	int errn = 0;
+	uint32_t uint32;
+	unsigned int extraChar = 0;
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_ASCII
+	uint8_t b;
+	extraChar = 1; /* null terminator */
+#endif /* STRING_REPRESENTATION_ASCII */
+
+	if ( (len + extraChar) > charsSize) {
+		errn = EXI_ERROR_OUT_OF_STRING_BUFFER;
+		return errn;
+	}
+
+
+	for (i = 0; i < len && errn == 0; i++) {
+		errn = decodeNBitUnsignedInteger(stream, rcsCodeLength, &uint32);
+		if(errn == 0) {
+			if ( uint32 == rcsSize ) {
+				/* RCS deviation */
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_ASCII
+				errn = decode(stream, &b);
+				if(b < 128) {
+					chars[i] = (exi_string_character_t)b;
+				} else {
+					errn = EXI_ERROR_STRINGVALUES_CHARACTER;
+				}
+#endif /* STRING_REPRESENTATION_ASCII */
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_UCS
+				errn = decodeUnsignedInteger32(stream, &chars[i]);
+#endif /* STRING_REPRESENTATION_UCS */
+
+			} else {
+				/* RCS match */
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_ASCII
+				chars[i] = rcsSet[uint32];
+#endif /* STRING_REPRESENTATION_ASCII */
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_UCS
+				chars[i] = rcsSet[uint32];
+#endif /* STRING_REPRESENTATION_UCS */
+			}
+		}
+	}
+
+	return errn;
+}
+
+
+/**
+ * Decode a binary value as a length-prefixed sequence of octets.
+ */
+int decodeBinary(bitstream_t* stream, exi_bytes_t* bytes) {
+	int errn = decodeUnsignedIntegerSizeT(stream, &bytes->len);
+	if (errn == 0) {
+		if (bytes->len > bytes->size) {
+#if MEMORY_ALLOCATION == STATIC_ALLOCATION
+			errn = EXI_ERROR_OUT_OF_BYTE_BUFFER;
+#endif /* STATIC_ALLOCATION */
+#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
+			errn = exiFreeDynamicBinaryMemory(bytes);
+			if(errn == 0) {
+				errn = exiAllocateDynamicBinaryMemory(bytes, bytes->len);
+			}
+#endif /* DYNAMIC_ALLOCATION */
+		}
+
+		errn = decodeBytes(stream, bytes->len, bytes->data);
+	}
+
+	return errn;
+}
+
+
+int decodeBytes(bitstream_t* stream, size_t len, uint8_t* data) {
+	unsigned int i;
+	int errn = 0;
+	uint8_t b = 0;
+
+	for (i = 0; i < len && errn == 0; i++) {
+		errn = decode(stream, &b);
+		data[i] = (uint8_t)b;
+	}
+
+	return errn;
+}
+
+/**
+ * Decode Date-Time as sequence of values representing the individual
+ * components of the Date-Time.
+ */
+int decodeDateTime(bitstream_t* stream, exi_datetime_type_t type, exi_datetime_t* datetime) {
+	int errn = 0;
+
+	datetime->type = type;
+
+	datetime->year = 0;
+	datetime->monthDay = 0;
+	datetime->time = 0;
+	datetime->presenceFractionalSecs = 0;
+	datetime->fractionalSecs = 0;
+	datetime->presenceTimezone = 0;
+	datetime->timezone = 0;
+
+	switch (type) {
+	case EXI_DATETIME_GYEAR: /* Year, [Time-Zone] */
+		errn = decodeInteger32(stream, &datetime->year);
+		if (errn == 0) {
+			datetime->year += DATETIME_YEAR_OFFSET;
+		}
+		break;
+	case EXI_DATETIME_GYEARMONTH: /* Year, MonthDay, [TimeZone] */
+	case EXI_DATETIME_DATE:
+		errn = decodeInteger32(stream, &datetime->year);
+		if (errn == 0) {
+			datetime->year += DATETIME_YEAR_OFFSET;
+			errn = decodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY, &datetime->monthDay);
+		}
+		break;
+	case EXI_DATETIME_DATETIME: /* Year, MonthDay, Time, [FractionalSecs], [TimeZone] */
+		/* e.g. "0001-01-01T00:00:00.111+00:33"  */
+		errn = decodeInteger32(stream, &datetime->year);
+		if (errn == 0) {
+			datetime->year += DATETIME_YEAR_OFFSET;
+			errn = decodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY, &datetime->monthDay);
+			if (errn != 0) {
+				break;
+			}
+		}
+		/* no break */
+	case EXI_DATETIME_TIME: /* Time, [FractionalSecs], [TimeZone] */
+		/* e.g. "12:34:56.135"  */
+		errn = decodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_TIME, &datetime->time);
+		if (errn == 0) {
+			errn = decodeBoolean(stream, &datetime->presenceFractionalSecs);
+			if (errn == 0) {
+				if (datetime->presenceFractionalSecs) {
+					errn = decodeUnsignedInteger32(stream, &datetime->fractionalSecs);
+				}
+			}
+		}
+		break;
+	case EXI_DATETIME_GMONTH: /* MonthDay, [TimeZone] */
+		/* e.g. "--12" */
+	case EXI_DATETIME_GMONTHDAY: /* MonthDay, [TimeZone] */
+		/* e.g. "--01-28"  */
+	case EXI_DATETIME_GDAY: /* MonthDay, [TimeZone] */
+		/* "---16"  */
+		errn = decodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY, &datetime->monthDay );
+		break;
+	default:
+		errn = EXI_UNSUPPORTED_DATETIME_TYPE;
+		break;
+	}
+
+	if(errn == 0) {
+		errn = decodeBoolean(stream, &datetime->presenceTimezone );
+		if (errn == 0 && datetime->presenceTimezone) {
+			errn = decodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_TIMEZONE, &datetime->timezone);
+			datetime->timezone -= DATETIME_TIMEZONE_OFFSET_IN_MINUTES;
+		}
+	}
+
+	return errn;
+}
+
+
+
+int decode(bitstream_t* stream, uint8_t* b) {
+#if EXI_OPTION_ALIGNMENT == BIT_PACKED
+	uint32_t bb;
+	int errn =  readBits(stream, 8, &bb);
+	if (errn == 0) {
+		if (bb > 256) {
+			errn = EXI_ERROR_UNEXPECTED_BYTE_VALUE;
+		} else {
+			*b = (uint8_t)bb;
+		}
+	}
+
+	return errn;
+#endif /* EXI_OPTION_ALIGNMENT == BIT_PACKED */
+#if EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT
+	int errn = 0;
+#if EXI_STREAM == BYTE_ARRAY
+	if ( (*stream->pos) < stream->size ) {
+		*b = stream->data[(*stream->pos)++];
+	} else {
+		errn = EXI_ERROR_INPUT_STREAM_EOF;
+	}
+#endif /* EXI_STREAM == BYTE_ARRAY */
+#if EXI_STREAM == FILE_STREAM
+	*b = (uint8_t)(getc(stream->file));
+	/* EOF cannot be used, 0xFF valid value */
+	if ( feof(stream->file) || ferror(stream->file) ) {
+		errn = EXI_ERROR_INPUT_STREAM_EOF;
+	}
+#endif /* EXI_STREAM == FILE_STREAM */
+
+	return errn;
+#endif /* EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT */
+}
+
+int decodeBoolean(bitstream_t* stream, int* b) {
+#if EXI_OPTION_ALIGNMENT == BIT_PACKED
+	uint32_t ub;
+	int errn = readBits(stream, 1, &ub);
+	*b = (ub == 0) ? 0 : 1;
+	return errn;
+#endif /* EXI_OPTION_ALIGNMENT == BIT_PACKED */
+#if EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT
+	uint8_t bb;
+	int errn = decode(stream, &bb);
+	*b = (bb == 0) ? 0 : 1;
+	return errn;
+#endif /* EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT */
+
+}
+
+/**
+ * Decodes and returns an n-bit unsigned integer using the minimum number of
+ * bytes required for n bits.
+ */
+int decodeNBitUnsignedInteger(bitstream_t* stream, size_t nbits, uint32_t* uint32) {
+#if EXI_OPTION_ALIGNMENT == BIT_PACKED
+	int errn = 0;
+	if (nbits == 0) {
+		*uint32 = 0;
+	} else {
+		errn= readBits(stream, nbits, uint32);
+	}
+	return errn;
+#endif /* EXI_OPTION_ALIGNMENT == BIT_PACKED */
+#if EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT
+	size_t bitsRead = 0;
+	uint8_t b;
+	int errn = 0;
+	*uint32 = 0;
+
+	while (errn == 0 && bitsRead < nbits) {
+		errn = decode(stream, &b);
+		*uint32 = *uint32 + (uint32_t)(b << bitsRead);
+		bitsRead = (bitsRead + 8);
+	}
+
+	return errn;
+#endif /* EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT */
+}
+
+
+
+#endif
+

+ 441 - 0
EVSE/Projects/CCS/Apps/exi_engine/codec/DecoderChannel.h

@@ -0,0 +1,441 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 2017-03-02 
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+ * \file 	DecoderChannel.h
+ * \brief 	EXI Decoder Channel
+ *
+ */
+
+#ifndef DECODER_CHANNEL_H
+#define DECODER_CHANNEL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "EXIOptions.h"
+#include "EXITypes.h"
+
+/**
+ * \brief 		Decode byte value
+ *
+ * \param       stream   		Input Stream
+ * \param       b		   		byte (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decode(bitstream_t* stream, uint8_t* b);
+
+
+/**
+ * \brief 		Decode boolean
+ *
+ * 				Decode a single boolean value. The value false is
+ * 				represented by 0, and the value true is represented by 1.
+ *
+ * \param       stream   		Input Stream
+ * \param       b		   		boolean (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeBoolean(bitstream_t* stream, int* b);
+
+
+/**
+ * \brief 		Decode n-bit unsigned integer
+ *
+ * 				Decodes and returns an n-bit unsigned integer.
+ *
+ * \param       stream   		Input Stream
+ * \param       nbits		   	Number of bits
+ * \param       uint32		   	Value (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeNBitUnsignedInteger(bitstream_t* stream, size_t nbits, uint32_t* uint32);
+
+
+/**
+ * \brief 		Decode unsigned integer
+ *
+ * 				Decode an arbitrary precision non negative integer using
+ * 				a sequence of octets. The most significant bit of the last
+ * 				octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Input Stream
+ * \param       iv		   		Unsigned Integer Value (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeUnsignedInteger(bitstream_t* stream, exi_integer_t* iv);
+
+
+/**
+ * \brief 		Decode unsigned integer
+ *
+ * 				Decode an arbitrary precision non negative integer using
+ * 				a sequence of octets. The most significant bit of the last
+ * 				octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Input Stream
+ * \param       uint16		   	Unsigned Integer Value 16 bits (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeUnsignedInteger16(bitstream_t* stream, uint16_t* uint16);
+
+
+/**
+ * \brief 		Decode unsigned integer
+ *
+ * 				Decode an arbitrary precision non negative integer using
+ * 				a sequence of octets. The most significant bit of the last
+ * 				octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Input Stream
+ * \param       uint32		   	Unsigned Integer Value 32 bits (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeUnsignedInteger32(bitstream_t* stream, uint32_t* uint32);
+
+
+/**
+ * \brief 		Decode unsigned integer
+ *
+ * 				Decode an arbitrary precision non negative integer using
+ * 				a sequence of octets. The most significant bit of the last
+ * 				octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Input Stream
+ * \param       sizeT			Unsigned Integer Value (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeUnsignedIntegerSizeT(bitstream_t* stream, size_t* sizeT);
+
+
+/**
+ * \brief 		Decode unsigned integer
+ *
+ * 				Decode an arbitrary precision non negative integer using
+ * 				a sequence of octets. The most significant bit of the last
+ * 				octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Input Stream
+ * \param       uint64		   	Unsigned Integer Value 64 bits (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeUnsignedInteger64(bitstream_t* stream, uint64_t* uint64);
+
+/**
+ * \brief 		Decode unsigned integer
+ *
+ * 				Decode an arbitrary precision non negative integer using
+ * 				a sequence of octets. The most significant bit of the last
+ * 				octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Input Stream
+ * \param       size		   	size array
+ * \param       data		   	data array
+ * \param       len		   		length array
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeUnsignedIntegerBig(bitstream_t* stream, size_t size, uint8_t* data, size_t* len);
+
+
+/**
+ * \brief 		Decode integer
+ *
+ * 				Decode an arbitrary precision integer using a sign bit
+ * 				followed by a sequence of octets. The most significant bit
+ * 				of the last octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Input Stream
+ * \param       iv		   		Integer Value 64 bits (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeInteger(bitstream_t* stream, exi_integer_t* iv);
+
+
+/**
+ * \brief 		Decode integer
+ *
+ * 				Decode an arbitrary precision integer using a sign bit
+ * 				followed by a sequence of octets. The most significant bit
+ * 				of the last octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Input Stream
+ * \param       int16		   	Integer Value 16 bits (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeInteger16(bitstream_t* stream, int16_t* int16);
+
+
+/**
+ * \brief 		Decode integer
+ *
+ * 				Decode an arbitrary precision integer using a sign bit
+ * 				followed by a sequence of octets. The most significant bit
+ * 				of the last octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Input Stream
+ * \param       int32		   	Integer Value 32 bits (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeInteger32(bitstream_t* stream, int32_t* int32);
+
+
+/**
+ * \brief 		Decode integer
+ *
+ * 				Decode an arbitrary precision integer using a sign bit
+ * 				followed by a sequence of octets. The most significant bit
+ * 				of the last octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Input Stream
+ * \param       int64		   	Integer Value 64 bits (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeInteger64(bitstream_t* stream, int64_t* int64);
+
+/**
+ * \brief 		Decode integer
+ *
+ * 				Decode an arbitrary precision integer using a sign bit
+ * 				followed by a sequence of octets. The most significant bit
+ * 				of the last octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Input Stream
+ * \param       negative		negative integer
+ * \param       size		   	size array
+ * \param       data		   	data array
+ * \param       len		   		length array
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeIntegerBig(bitstream_t* stream, int* negative, size_t size, uint8_t* data, size_t* len);
+
+/**
+ * \brief 		Decode float
+ *
+ * 				Decode a Float datatype as two consecutive Integers. The
+ * 				first Integer represents the mantissa of the floating point
+ * 				number and the second Integer represents the base-10 exponent
+ * 				of the floating point number.
+ *
+ * \param       stream   		Input Stream
+ * \param       f			   	Float Value (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeFloat(bitstream_t* stream, exi_float_me_t* f);
+
+
+/**
+ * \brief 		Decode decimal
+ *
+ * 				Decode a decimal represented as a Boolean sign followed by two
+ * 				Unsigned Integers. A sign value of zero (0) is used to represent
+ * 				positive Decimal values and a sign value of one (1) is used to
+ * 				represent negative Decimal values The first Integer represents
+ * 				the integral portion of the Decimal value. The second positive
+ * 				integer represents the fractional portion of the decimal with
+ * 				the digits in reverse order to preserve leading zeros.
+ *
+ * \param       stream   		Input Stream
+ * \param       d			   	Decimal Value (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeDecimal(bitstream_t* stream, exi_decimal_t* d);
+
+
+/**
+ * \brief 		Decode String (no length prefix)
+ *
+ * 				Decode a sequence of characters for a given length.
+ *
+ * \param       stream   		Input Stream
+ * \param       len			   	Characters length
+ * \param       s			   	String Value (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeStringOnly(bitstream_t* stream, size_t len, exi_string_t* s);
+
+
+/**
+ * \brief 		Decode String
+ *
+ * 				Decode a length prefixed sequence of characters.
+ *
+ * \param       stream   		Input Stream
+ * \param       s			   	String Value (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeString(bitstream_t* stream, exi_string_t* s);
+
+
+
+/**
+ * \brief 		Decode String value
+ *
+ * 				Decode a length prefixed sequence of characters in the sense of string tables.
+ * 				length == 0: local value partition hit.
+ * 				length == 1: global value partition hit.
+ * 				length > 1: string literal is encoded as a String with the length incremented by two
+ *
+ * \param       stream   		Input Stream
+ * \param       stringTable   	String Table
+ * \param       qnameID   		Qualified Name ID
+ * \param       namespaceUriID  Qualified Namespace ID
+ * \param       localNameID  	Qualified LocalName ID
+ * \param       s			   	String Value (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeStringValue(bitstream_t* stream, exi_value_string_table_t* stringTable, size_t namespaceUriID, size_t localNameID, exi_string_value_t* s);
+
+
+/**
+ * \brief 		Decode Restricted characters set string value
+ *
+ * \param       stream   		Input Stream
+ * \param       stringTable   	StringTable
+ * \param       namespaceUriID  qualified namespace ID
+ * \param       localNameID   	qualified localName ID
+ * \param       rcs		   		Restricted character set
+ * \param       s			   	String Value (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeRCSStringValue(bitstream_t* stream, exi_value_string_table_t* stringTable, size_t namespaceUriID, size_t localNameID, exi_rcs_t* rcs, exi_string_value_t* s);
+
+
+/**
+ * \brief 		Decode characters
+ *
+ * 				Decode a sequence of characters according to a given length.
+ *
+ * \param       stream   		Input Stream
+ * \param       len		   		Length
+ * \param       chars   		Characters (out)
+ * \param       charsSize		Size of possible characters
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeCharacters(bitstream_t* stream, size_t len, exi_string_character_t* chars, size_t charsSize);
+
+
+/**
+ * \brief 		Decode restricted character set characters
+ *
+ * 				Decode a sequence of characters according to a given length and rcs code-length, size and set.
+ *
+ * \param       stream   		Input Stream
+ * \param       len		   		Length
+ * \param       chars   		Characters (out)
+ * \param       charsSize		Size of possible characters
+ * \param       rcsCodeLength   RCS code-length
+ * \param       rcsCodeLength   RCS size
+ * \param       rcsCodeLength   RCS set
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeRCSCharacters(bitstream_t* stream, size_t len, exi_string_character_t* chars, size_t charsSize, size_t rcsCodeLength, size_t rcsSize, const exi_string_character_t rcsSet[]);
+
+
+
+/**
+ * \brief 		Decode Binary
+ *
+ * 				Decode a binary value as a length-prefixed sequence of octets.
+ *
+ * \param       stream   		Input Stream
+ * \param       bytes   		Bytes (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeBinary(bitstream_t* stream, exi_bytes_t* bytes);
+
+/**
+ * \brief 		Decode Binary data
+ *
+ * 				Decode a sequence of octets.
+ *
+ * \param       stream   		Input Stream
+ * \param       len		   		Length
+ * \param       data	   		Bytes (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeBytes(bitstream_t* stream, size_t len, uint8_t* data);
+
+/**
+ * \brief 		Decode DateTime
+ *
+ * 				Decode Date-Time as sequence of values representing the
+ * 				individual components of the Date-Time.
+ *
+ * \param       stream   		Input Stream
+ * \param       type   			Datetime type
+ * \param       datetime   		Datetime (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeDateTime(bitstream_t* stream, exi_datetime_type_t type, exi_datetime_t* datetime);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

+ 106 - 0
EVSE/Projects/CCS/Apps/exi_engine/codec/EXIConfig.h

@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 2017-03-23
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+ * \file 	EXIConfig.h
+ * \brief 	EXI Configurations for the EXI Codec
+ *
+ */
+
+#ifndef EXI_CONFIG_H
+#define EXI_CONFIG_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** EXI stream - Option Byte Array */
+#define BYTE_ARRAY 1
+/** EXI stream - Option File */
+#define FILE_STREAM 2
+/** \brief 	EXI stream
+ *
+ * 			Byte array or file
+ * */
+#define EXI_STREAM BYTE_ARRAY
+
+
+
+
+
+/** Memory allocation - static */
+#define STATIC_ALLOCATION 1
+/** Memory allocation - dynamic */
+#define DYNAMIC_ALLOCATION  2
+/** */
+/** \brief 	Memory allocation mode
+ *
+ * 			static or dynamic memory allocation
+ * */
+#define MEMORY_ALLOCATION STATIC_ALLOCATION
+
+
+
+/** String representation ASCII */
+#define STRING_REPRESENTATION_ASCII 1
+/** String representation Universal Character Set (UCS) */
+#define STRING_REPRESENTATION_UCS 2
+/** */
+/** \brief 	String representation mode
+ *
+ * 			ASCII or UCS
+ * */
+#define STRING_REPRESENTATION STRING_REPRESENTATION_UCS
+
+
+/* in the case of ASCII an extra char (null terminator) for printf and other functions is useful */
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_ASCII
+#define EXTRA_CHAR 1
+#endif /* STRING_REPRESENTATION_ASCII */
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_UCS
+#define EXTRA_CHAR 0
+#endif /* STRING_REPRESENTATION_UCS */
+
+
+
+
+
+/** Maximum number of cascading elements, XML tree depth */
+#define EXI_ELEMENT_STACK_SIZE 24
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EXI_CONFIG_H */
+

+ 68 - 0
EVSE/Projects/CCS/Apps/exi_engine/codec/EXIHeaderDecoder.c

@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 2017-03-02 
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+#include "EXIHeaderDecoder.h"
+#include "BitInputStream.h"
+#include "DecoderChannel.h"
+#include "ErrorCodes.h"
+
+#ifndef EXI_HEADER_DECODER_C
+#define EXI_HEADER_DECODER_C
+
+int readEXIHeader(bitstream_t* stream) {
+	int errn;
+	uint32_t header = 0;
+
+	/* init stream */
+	stream->buffer = 0;
+	stream->capacity = 0;
+
+	errn = readBits(stream, 8, &header);
+	if (errn == 0) {
+		if(header == '$') {
+			/*	we do not support "EXI Cookie" */
+			errn = EXI_UNSUPPORTED_HEADER_COOKIE;
+		} else if ( header & 0x20 ) {
+			/* we do not support "Presence Bit for EXI Options" */
+			errn = EXI_UNSUPPORTED_HEADER_OPTIONS;
+		} else {
+			/* Yes, a *simple* header */
+			errn = 0;
+		}
+	}
+
+	return errn;
+}
+
+
+#endif
+
+

+ 60 - 0
EVSE/Projects/CCS/Apps/exi_engine/codec/EXIHeaderDecoder.h

@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 2017-03-02 
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+ * \file 	EXIHeaderDecoder.h
+ * \brief 	EXI Header Decoder
+ *
+ */
+
+#ifndef EXI_HEADER_DECODER_H
+#define EXI_HEADER_DECODER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "EXITypes.h"
+
+/**
+ * \brief 		Reads EXI header
+ *
+ * \param       stream   		Input Stream
+ * \return                  	Error-Code <> 0
+ *
+ */
+int readEXIHeader(bitstream_t* stream);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

+ 50 - 0
EVSE/Projects/CCS/Apps/exi_engine/codec/EXIHeaderEncoder.c

@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 2017-03-02 
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+#include "EXIHeaderEncoder.h"
+#include "BitOutputStream.h"
+#include "EncoderChannel.h"
+
+#ifndef EXI_HEADER_ENCODER_C
+#define EXI_HEADER_ENCODER_C
+
+int writeEXIHeader(bitstream_t* stream) {
+	/* init stream */
+	stream->buffer = 0;
+	stream->capacity = 8;
+
+	return writeBits(stream, 8, 128);
+}
+
+
+#endif
+
+

+ 61 - 0
EVSE/Projects/CCS/Apps/exi_engine/codec/EXIHeaderEncoder.h

@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 2017-03-02 
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+ * \file 	EXIHeaderEncoder.h
+ * \brief 	EXI Header Encoder
+ *
+ */
+
+#ifndef EXI_HEADER_ENCODER_H
+#define EXI_HEADER_ENCODER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "EXITypes.h"
+
+
+/**
+ * \brief 		Writes EXI header
+ *
+ * \param       stream   		Output Stream
+ * \return                  	Error-Code <> 0
+ *
+ */
+int writeEXIHeader(bitstream_t* stream);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

+ 93 - 0
EVSE/Projects/CCS/Apps/exi_engine/codec/EXIOptions.h

@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 2017-03-02 
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+ * \file 	EXIOptions.h
+ * \brief 	EXI Options for the EXI Codec
+ *
+ */
+
+#ifndef EXI_OPTIONS_H
+#define EXI_OPTIONS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** EXI alignment - Option bit-packed */
+#define BIT_PACKED 1
+/** EXI alignment - Option byte-packed */
+#define BYTE_ALIGNMENT  2
+/** EXI alignment */
+/**
+ * \brief 		EXI Option 'alignment'
+ *
+ *				The alignment option is used to control the alignment of event codes and content items.
+ *				Default Value: bit-packed
+ */
+#define EXI_OPTION_ALIGNMENT BIT_PACKED
+
+
+
+/**
+ * \brief 		EXI Option 'strict'
+ *
+ *				Strict interpretation of schemas is used to achieve better compactness.
+ *				Default Value: false
+ */
+#define EXI_OPTION_STRICT 0
+
+
+/**
+ * \brief 		EXI Option 'valueMaxLength'
+ *
+ *				Specifies the maximum string length of value content items to be
+ *				considered for addition to the string table.
+ *				Default Value: unbounded (-1)
+ */
+#define EXI_OPTION_VALUE_MAX_LENGTH -1
+
+
+/**
+ * \brief 		EXI Option 'valuePartitionCapacity'
+ *
+ *				Specifies the total capacity of value partitions in a string table.
+ *				Default Value: unbounded (-1)
+ */
+#define EXI_OPTION_VALUE_PARTITION_CAPACITY 0
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EXI_OPTIONS_H */

+ 591 - 0
EVSE/Projects/CCS/Apps/exi_engine/codec/EXITypes.h

@@ -0,0 +1,591 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 2017-03-02 
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+ * \file 	EXITypes.h
+ * \brief 	Basic type definitions and structs
+ *
+ */
+
+#ifndef EXI_TYPES_H
+#define EXI_TYPES_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+#include <stdio.h>
+#include "EXIConfig.h"
+#if EXI_STREAM == FILE_STREAM
+#include <stdio.h>
+#endif
+
+
+/** Number of bits for each byte */
+#define BITS_IN_BYTE 8
+
+/** EXI Date-Time offset for year */
+#define DATETIME_YEAR_OFFSET 2000
+/** EXI Date-Time number of bits for monthDay */
+#define DATETIME_NUMBER_BITS_MONTHDAY 9
+/** EXI Date-Time number of bits for time */
+#define DATETIME_NUMBER_BITS_TIME 17
+/** EXI Date-Time number of bits for timezone */
+#define DATETIME_NUMBER_BITS_TIMEZONE 11
+/** EXI Date-Time month multiplicator */
+#define DATETIME_MONTH_MULTIPLICATOR 32
+/** EXI Date-Time offset for timzone minutes */
+#define DATETIME_TIMEZONE_OFFSET_IN_MINUTES 896
+
+/** Maximum integer value for uint */
+#define UINT_MAX_VALUE 65535
+
+
+/** EXI Float exponent special values */
+#define FLOAT_EXPONENT_SPECIAL_VALUES -16384
+/** EXI Float mantissa infinity */
+#define FLOAT_MANTISSA_INFINITY 1
+/** EXI Float minus mantissa infinity */
+#define FLOAT_MANTISSA_MINUS_INFINITY -1
+/** EXI Float not a number */
+#define FLOAT_MANTISSA_NOT_A_NUMBER 0
+
+/** \brief EXI Events */
+typedef enum {
+	/** Start Document SD */
+	EXI_EVENT_START_DOCUMENT,
+	/** End Document ED */
+	EXI_EVENT_END_DOCUMENT,
+	/** Start Element SE(qname) */
+	EXI_EVENT_START_ELEMENT,
+	/** Start Element SE(uri:*) */
+	EXI_EVENT_START_ELEMENT_NS,
+	/** Start Element SE(*) generic */
+	EXI_EVENT_START_ELEMENT_GENERIC,
+	/** Start Element SE(*) generic undeclared */
+	EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED,
+	/** End Element EE */
+	EXI_EVENT_END_ELEMENT,
+	/** End Element EE undeclared*/
+	EXI_EVENT_END_ELEMENT_UNDECLARED,
+	/** Characters CH */
+	EXI_EVENT_CHARACTERS,
+	/** Characters CH generic */
+	EXI_EVENT_CHARACTERS_GENERIC,
+	/** Characters CH generic undeclared */
+	EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED,
+	/** Attribute AT(xsi:type) */
+	EXI_EVENT_ATTRIBUTE_XSI_TYPE,
+	/** Attribute AT(xsi:nil) */
+	EXI_EVENT_ATTRIBUTE_XSI_NIL,
+	/** Attribute AT(qname) */
+	EXI_EVENT_ATTRIBUTE,
+	/** Attribute AT(uri:*) */
+	EXI_EVENT_ATTRIBUTE_NS,
+	/** Attribute AT(*) generic */
+	EXI_EVENT_ATTRIBUTE_GENERIC,
+	/** Attribute AT(*) invalid value */
+	EXI_EVENT_ATTRIBUTE_INVALID_VALUE,
+	/** Attribute AT(*) any invalid value */
+	EXI_EVENT_ATTRIBUTE_ANY_INVALID_VALUE,
+	/** Attribute AT(*) generic undeclared */
+	EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED,
+	/* error state */
+	EXI_EVENT_ERROR
+} exi_event_t;
+
+
+/**
+ * \brief 	Bit stream container
+ *
+ *	Structure for byteArray/file stream.
+ *
+ *	# General
+ *	.size defines the maximum size of the byte array (see .data)
+ *
+ *	.data points to the input/output array of bytes (unsigned char*).
+ *
+ *	.pos has to be set to an pointer to an 32 bit long unsigned integer (uint32_t *)
+ *	 as this variable is read/write.
+ *	 Therefore it is best practice to declare the variable itself and use the &-operator
+ *	 to assign the address. The value of that variable points to the position inside the
+ *	 buffer where the stream begins. Which is usually the first (0th) byte but can also be
+ *	 another value if there more information transferred in that stream.
+ *	 After processing .pos points to the next "available" byte (if any left).
+ *
+ *	.buffer has to be set to 0 for internal use only (single byte buffer)
+ *
+ *	# Receiving data (input)
+ *	.capacity is used for addressing single bits in the actual byte (see .buffer)
+ *	 and has to be set to 0, which means there are 0 bits read so far and a new
+ *	 byte needs to be read from the input stream/data-array to the current byte buffer.
+ *
+ *	# Sending data (output)
+ *	.capacity is used for addressing single bits in the actual byte (see .buffer)
+ *	 and has to be set to 8, which means there are still 8 bits left to fill up
+ *	 the current byte buffer before writing the final byte to the output stream/data-array.
+ *
+ */
+typedef struct {
+#if EXI_STREAM == BYTE_ARRAY
+	/**	byte array size */
+	size_t size;
+	/**	byte array data */
+	uint8_t* data;
+	/**	byte array next position in array */
+	size_t* pos;
+#endif
+#if EXI_STREAM == FILE_STREAM
+	/** file pointer */
+	FILE *file;
+#endif
+	/** Current byte buffer*/
+	uint8_t buffer;
+	/** Remaining bit capacity in current byte buffer*/
+	uint8_t capacity;
+} bitstream_t;
+
+
+/** \brief EXI Value Datatypes */
+typedef enum {
+	/** Binary Base64 */
+	EXI_DATATYPE_BINARY_BASE64,
+	/** Binary Hex */
+	EXI_DATATYPE_BINARY_HEX,
+	/** Boolean */
+	EXI_DATATYPE_BOOLEAN,
+	/** Boolean with Facets */
+	EXI_DATATYPE_BOOLEAN_FACET,
+	/** Decimal */
+	EXI_DATATYPE_DECIMAL,
+	/** Float & Double */
+	EXI_DATATYPE_FLOAT,
+	/** N-Bit Unsigned Integer */
+	EXI_DATATYPE_NBIT_UNSIGNED_INTEGER,
+	/** Unsigned Integer */
+	EXI_DATATYPE_UNSIGNED_INTEGER,
+	/** (Signed) Integer */
+	EXI_DATATYPE_INTEGER,
+	/** Datetime */
+	EXI_DATATYPE_DATETIME,
+	/** String */
+	EXI_DATATYPE_STRING,
+	/** Restricted Character Set String */
+	EXI_DATATYPE_RCS_STRING,
+	/** Enumeration */
+	EXI_DATATYPE_ENUMERATION,
+	/** List */
+	EXI_DATATYPE_LIST,
+	/** QName (e.g. xsi:type) */
+	EXI_DATATYPE_QNAME
+} exi_datatype_t;
+
+
+/** \brief EXI Integer Value types */
+typedef enum {
+	/** Unsigned Integer 8 bits */
+	EXI_UNSIGNED_INTEGER_8,
+	/** Unsigned Integer 16 bits */
+	EXI_UNSIGNED_INTEGER_16,
+	/** Unsigned Integer 32 bits */
+	EXI_UNSIGNED_INTEGER_32,
+	/** Unsigned Integer 64 bits */
+	EXI_UNSIGNED_INTEGER_64,
+	/** (Signed) Integer 8 bits */
+	EXI_INTEGER_8,
+	/** (Signed) Integer 16 bits */
+	EXI_INTEGER_16,
+	/** (Signed) Integer 32 bits */
+	EXI_INTEGER_32,
+	/** (Signed) Integer 64 bits */
+	EXI_INTEGER_64
+} exi_integer_type_t;
+
+
+/** \brief EXI Datetime types */
+typedef enum {
+	/** gYear */
+	EXI_DATETIME_GYEAR,
+	/** gYearMonth */
+	EXI_DATETIME_GYEARMONTH,
+	/** date */
+	EXI_DATETIME_DATE,
+	/** datetime */
+	EXI_DATETIME_DATETIME,
+	/** gMonth */
+	EXI_DATETIME_GMONTH,
+	/** gMonthDay */
+	EXI_DATETIME_GMONTHDAY,
+	/** gDay */
+	EXI_DATETIME_GDAY,
+	/** time */
+	EXI_DATETIME_TIME
+} exi_datetime_type_t;
+
+
+/** \brief String value type */
+typedef enum {
+	/** value miss */
+	EXI_STRING_VALUE_MISS,
+	/** value local-hit */
+	EXI_STRING_VALUE_LOCAL_HIT,
+	/** value global-hit */
+	EXI_STRING_VALUE_GLOBAL_HIT
+} exi_string_value_type_t;
+
+/** \brief EXI string character */
+/* Note: define whether you wan't to support ASCII only or UCS */
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_ASCII
+typedef char exi_string_character_t;
+#endif /* STRING_REPRESENTATION_ASCII */
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_UCS
+typedef uint32_t exi_string_character_t;
+#endif /* STRING_REPRESENTATION_UCS */
+
+
+
+/** \brief Universal Character Set (UCS) strings */
+typedef struct {
+	/** container size  */
+	size_t size;
+	/** string character container */
+	exi_string_character_t* characters;
+	/** current string length == number of code-points, (len <= size) */
+	size_t len;
+} exi_string_t;
+
+
+/** \brief String value */
+typedef struct {
+	/** value type (e.g., miss, local-hit, global-hit) */
+	exi_string_value_type_t type;
+	/** miss entry */
+	exi_string_t miss;
+	/** (local) hit entry */
+	size_t localID;
+	/** (global) hit entry */
+	size_t globalID;
+} exi_string_value_t;
+
+
+/** \brief Restricted Characeter Set */
+typedef struct {
+	/** size */
+	size_t size;
+	/** rcs codepoints */
+	exi_string_character_t* characters;
+	/** character coding length (less than 256 characters) */
+	uint8_t codingLength;
+} exi_rcs_t;
+
+
+/** \brief Byte value container */
+typedef struct {
+	/** bytes array size */
+	size_t size;
+	/** bytes array data container */
+	uint8_t* data;
+	/** bytes array length (len <= size) */
+	size_t len;
+} exi_bytes_t;
+
+
+/** \brief Integer value container */
+typedef struct {
+	/** type */
+	exi_integer_type_t type;
+	union {
+		/* (signed) values */
+		/** (signed) int 8 bits */
+		int8_t int8;
+		/** (signed) int 16 bits */
+		int16_t int16;
+		/** (signed) int 32 bits */
+		int32_t int32;
+		/** (signed) int 64 bits */
+		int64_t int64;
+		/* unsigned values */
+		/** unsigned int 8 bits */
+		uint8_t uint8;
+		/** unsigned int 16 bits */
+		uint16_t uint16;
+		/** unsigned int 32 bits */
+		uint32_t uint32;
+		/** unsigned int 64 bits */
+		uint64_t uint64;
+	} val;
+} exi_integer_t;
+
+
+/** \brief Float value container */
+typedef struct {
+	/** range of the mantissa is -(2^63) to 2^63-1 */
+	int64_t mantissa;
+	/** range of the exponent is - (2^14-1) to 2^14-1 */
+	int16_t exponent; /* base-10 */
+} exi_float_me_t;
+
+
+/** \brief Decimal value container */
+typedef struct {
+	/** a sign value */
+	int negative;
+	/** represents the integral portion of the Decimal */
+	exi_integer_t integral;
+	/** represents the fractional portion of the Decimal with the digits in reverse order to preserve leading zeros */
+	exi_integer_t reverseFraction;
+} exi_decimal_t;
+
+
+/** \brief Datetime value container */
+typedef struct {
+	/** datetime type */
+	exi_datetime_type_t type;
+	/** Datetime value for year */
+	int32_t year;
+	/** Datetime value for monthDay */
+	uint32_t monthDay;
+	/** Datetime value for time */
+	uint32_t time;
+	/** Datetime value for presenceFractionalSecs */
+	int presenceFractionalSecs;
+	/** Datetime value for fractionalSecs */
+	uint32_t fractionalSecs;
+	/** Datetime value for presenceTimezone */
+	int presenceTimezone;
+	/** Datetime value for timezone */
+	uint32_t timezone;
+} exi_datetime_t;
+
+
+/** \brief List value container */
+typedef struct {
+	/** list item type */
+	exi_datatype_t type;
+	/** number of items */
+	size_t len;
+	/* Special datatype: integer */
+	/* exi_integer_type_t intType;*/
+	/** Special datatype: datetime */
+	exi_datetime_type_t datetimeType;
+} exi_list_t;
+
+
+/** \brief Efficient qname */
+typedef struct {
+	/** namespace URI ID*/
+	size_t namespaceURI;
+	/** local name ID*/
+	size_t localPart;
+} exi_eqname_t;
+
+
+/** \brief Name entry type */
+typedef enum {
+	/** As known IDs */
+	EXI_NAME_ENTRY_TYPE_ID,
+	/** As String */
+	EXI_NAME_ENTRY_TYPE_STRING_AND_ID
+} exi_name_entry_type_t;
+
+
+/** \brief Name entry */
+typedef struct {
+	/** type */
+	exi_name_entry_type_t type;
+	/** entry ID */
+	size_t id;
+	/** entry string */
+	exi_string_t str;
+} exi_name_entry_t;
+
+
+/** \brief Qualified name */
+typedef struct {
+	/** Uri */
+	exi_name_entry_t uri;
+	/** LocalName */
+	exi_name_entry_t localName;
+} exi_qname_t;
+
+/*TODO Doxygen Documentation */
+
+
+/* ==================================== */
+/* URI and LocalName Entries */
+typedef struct exiNameTablePrepopulated {
+	/* number of namespaces AND length name-partitions array */
+	size_t len;
+	/* number of localName entries divided by URI */
+	size_t* localNames;
+} exi_name_table_prepopulated_t;
+
+#define EXI_MAXIMUM_NUMBER_OF_NAME_PARTITION_ENTRIES 25
+
+typedef enum {
+	EXI_NAME_PARTITION_URI, EXI_NAME_PARTITION_LOCALNAME
+} exi_name_partition_type_t;
+
+typedef struct {
+	char* uri;
+	size_t uriID;
+} exi_uri_partition_t;
+
+typedef struct {
+	char* localName;
+	size_t localNameID;
+	size_t uriID;
+} exi_localname_partition_t;
+
+typedef struct {
+	exi_name_partition_type_t namePartitionType;
+	struct {
+		exi_uri_partition_t uriPartition;
+		exi_localname_partition_t localNamePartition;
+	} entry;
+} exi_name_partition_t;
+
+typedef struct exiNameTableRuntime {
+	/* maximum number of characters in the name partitions entries PLUS null terminators */
+	/* char characters[EXI_MAXIMUM_NUMBER_OF_NAME_PARTITION_CHARACTERS + EXI_MAXIMUM_NUMBER_OF_NAME_PARTITION_ENTRIES]; */
+	/* uint16_t numberOfUsedCharacters; *//* initially zero <= EXI_MAXIMUM_NUMBER_OF_NAME_PARTITION_CHARACTERS */
+	/* maximum number of name partitions entries. Name partitions entries consist in all uri, and local-name partition entries */
+	exi_name_partition_t
+			namePartitionsEntries[EXI_MAXIMUM_NUMBER_OF_NAME_PARTITION_ENTRIES];
+	/* uint16_t numberOfUsedNamePartitions; *//* initially zero */
+	/* added entries */
+	size_t addedUriEntries; /* initially zero */
+	size_t addedLocalNameEntries; /* initially zero */
+} exi_name_table_runtime_t;
+
+
+/* StartTagContent grammar initially empty */
+/* ElementContent grammar has EE per default */
+typedef struct {
+	size_t namespaceUriID;
+	size_t localNameID;
+	size_t numberOfProductions;
+	int hasXsiType; /* StartTagContent only */
+	int hasEE; /* ElementContentper default TRUE */
+} exi_runtime_element_t;
+
+/* Note: We do have twice as many runtime grammars (StartTagContent and ElementContent)*/
+#define MAX_NUMBER_OF_RUNTIME_ELEMENTS 80
+
+
+
+/* ==================================== */
+/* Value string table */
+typedef struct exiValueStringTableEntry {
+	/** Qualified namespace URI */
+	size_t namespaceUriID;
+	/** Qualified localName */
+	size_t localNameID;
+	/** Local Value ID */
+	size_t localValueID;
+	/** String */
+	exi_string_t str;
+} exi_value_string_table_entry_t;
+
+typedef struct exiValueStringTable {
+	/** maximum number of global string table entry size */
+	size_t size;
+	/** string table entry array container */
+	exi_value_string_table_entry_t* strs;
+	/** current number of string table entries (len <= size) */
+	size_t len;
+} exi_value_string_table_t;
+
+/* typedef struct { */
+	/** number of global strings */
+	/* uint16_t numberOfGlobalStrings; */
+	/** size of local-names container */
+	/* uint16_t sizeLocalStrings; */
+	/** number of local strings container */
+	/* uint16_t* numberOfLocalStrings; */
+	/** string values */
+/*	exi_value_string_table_t* valueStringTable;
+} exi_value_table_t;*/
+
+typedef struct {
+	/** stack of grammar states */
+	int16_t grammarStack[EXI_ELEMENT_STACK_SIZE];
+	/** stack of grammar elements / qnameIDs */
+	exi_eqname_t elementStack[EXI_ELEMENT_STACK_SIZE];
+	/** stack index for both stacks */
+	size_t stackIndex;
+
+	/** event-code */
+	uint32_t eventCode;
+
+	/** name table entries, pre-populated */
+	exi_name_table_prepopulated_t* nameTablePrepopulated;
+	/** name table entries, at runtime */
+	exi_name_table_runtime_t* nameTableRuntime;
+
+	/** next qname ID */
+	size_t nextQNameID;
+
+	/** string table entries */
+	exi_value_string_table_t* stringTable;
+
+	/** runtime built-in element grammars - numbers */
+	size_t numberOfRuntimeGrammars;
+	/** runtime built-in element grammars */
+	exi_runtime_element_t runtimeGrammars[MAX_NUMBER_OF_RUNTIME_ELEMENTS * 2];
+} exi_state_t;
+
+typedef struct {
+	/* type of value */
+	exi_datatype_t type;
+
+	/* base types */
+	int boolean;
+	uint32_t enumeration;
+
+	/* complex types: Integers, Bytes, Strings and Lists are not native types anymore */
+	exi_integer_t integer;
+	exi_bytes_t binary;
+	exi_string_value_t str;
+	exi_float_me_t float_me;
+	exi_decimal_t decimal;
+	exi_datetime_t datetime;
+	exi_list_t list;
+	exi_eqname_t eqname;
+} exi_value_t;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

+ 704 - 0
EVSE/Projects/CCS/Apps/exi_engine/codec/EncoderChannel.c

@@ -0,0 +1,704 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 2017-03-02 
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+#include "EncoderChannel.h"
+#include "EXIOptions.h"
+#include "BitOutputStream.h"
+#include "EXITypes.h"
+#include "ErrorCodes.h"
+#include "MethodsBag.h"
+/*#include "v2gEXICoder.h"*/
+
+#ifndef ENCODER_CHANNEL_C
+#define ENCODER_CHANNEL_C
+
+int encodeUnsignedInteger(bitstream_t* stream, exi_integer_t* iv) {
+	int errn = 0;
+	switch (iv->type) {
+	/* Unsigned Integer */
+	case EXI_UNSIGNED_INTEGER_8:
+		errn = encodeUnsignedInteger32(stream, iv->val.uint8);
+		break;
+	case EXI_UNSIGNED_INTEGER_16:
+		errn = encodeUnsignedInteger32(stream, iv->val.uint16);
+		break;
+	case EXI_UNSIGNED_INTEGER_32:
+		errn = encodeUnsignedInteger32(stream, iv->val.uint32);
+		break;
+	case EXI_UNSIGNED_INTEGER_64:
+		errn = encodeUnsignedInteger64(stream, iv->val.uint64);
+		break;
+		/* (Signed) Integer */
+	case EXI_INTEGER_8:
+		if (iv->val.int8 < 0) {
+			return EXI_NEGATIVE_UNSIGNED_INTEGER_VALUE;
+		}
+		errn = encodeUnsignedInteger32(stream, (uint32_t)(iv->val.int8));
+		break;
+	case EXI_INTEGER_16:
+		if (iv->val.int16 < 0) {
+			return EXI_NEGATIVE_UNSIGNED_INTEGER_VALUE;
+		}
+		errn = encodeUnsignedInteger32(stream, (uint32_t)(iv->val.int16));
+		break;
+	case EXI_INTEGER_32:
+		if (iv->val.int32 < 0) {
+			return EXI_NEGATIVE_UNSIGNED_INTEGER_VALUE;
+		}
+		errn = encodeUnsignedInteger32(stream, (uint32_t)(iv->val.int32));
+		break;
+	case EXI_INTEGER_64:
+		if (iv->val.int64 < 0) {
+			return EXI_NEGATIVE_UNSIGNED_INTEGER_VALUE;
+		}
+		errn = encodeUnsignedInteger64(stream, (uint64_t)(iv->val.int64));
+		break;
+	default:
+		errn = EXI_UNSUPPORTED_INTEGER_VALUE_TYPE;
+		break;
+	}
+
+	return errn;
+}
+
+/**
+ * Encode an arbitrary precision non negative integer using a sequence of
+ * octets. The most significant bit of the last octet is set to zero to
+ * indicate sequence termination. Only seven bits per octet are used to
+ * store the integer's value.
+ */
+int encodeUnsignedInteger16(bitstream_t* stream, uint16_t n) {
+	int errn = 0;
+	if (n < 128) {
+		/* write byte as is */
+		errn = encode(stream, (uint8_t) n);
+	} else {
+		uint8_t n7BitBlocks = numberOf7BitBlocksToRepresent(n);
+
+		switch (n7BitBlocks) {
+		case 3:
+			errn = encode(stream, (uint8_t) (128 | n));
+			n = n >> 7;
+			if (errn != 0) {
+				break;
+			}
+			/* no break */
+		case 2:
+			errn = encode(stream, (uint8_t) (128 | n));
+			n = n >> 7;
+			if (errn != 0) {
+				break;
+			}
+			/* no break */
+		case 1:
+			/* 0 .. 7 (last byte) */
+			errn = encode(stream, (uint8_t) (0 | n));
+			/* no break */
+		}
+	}
+
+	return errn;
+}
+
+/**
+ * Encode an arbitrary precision non negative integer using a sequence of
+ * octets. The most significant bit of the last octet is set to zero to
+ * indicate sequence termination. Only seven bits per octet are used to
+ * store the integer's value.
+ */
+int encodeUnsignedInteger32(bitstream_t* stream, uint32_t n) {
+	int errn = 0;
+	if (n < 128) {
+		/* write byte as is */
+		errn = encode(stream, (uint8_t) n);
+	} else {
+		uint8_t n7BitBlocks = numberOf7BitBlocksToRepresent(n);
+
+		switch (n7BitBlocks) {
+		case 5:
+			errn = encode(stream, (uint8_t) (128 | n));
+			n = n >> 7;
+			if (errn != 0) {
+				break;
+			}
+			/* no break */
+		case 4:
+			errn = encode(stream, (uint8_t) (128 | n));
+			n = n >> 7;
+			if (errn != 0) {
+				break;
+			}
+			/* no break */
+		case 3:
+			errn = encode(stream, (uint8_t) (128 | n));
+			n = n >> 7;
+			if (errn != 0) {
+				break;
+			}
+			/* no break */
+		case 2:
+			errn = encode(stream, (uint8_t) (128 | n));
+			n = n >> 7;
+			if (errn != 0) {
+				break;
+			}
+			/* no break */
+		case 1:
+			/* 0 .. 7 (last byte) */
+			errn = encode(stream, (uint8_t) (0 | n));
+			/* no break */
+		}
+	}
+
+	return errn;
+}
+
+/**
+ * Encode an arbitrary precision non negative integer using a sequence of
+ * octets. The most significant bit of the last octet is set to zero to
+ * indicate sequence termination. Only seven bits per octet are used to
+ * store the integer's value.
+ */
+int encodeUnsignedInteger64(bitstream_t* stream, uint64_t n) {
+	int errn = 0;
+	uint8_t lastEncode = (uint8_t) n;
+	n >>= 7;
+
+	while (n != 0 && errn == 0) {
+		errn = encode(stream, lastEncode | 128);
+		lastEncode = (uint8_t) n;
+		n >>= 7;
+	}
+
+	if (errn == 0) {
+		errn = encode(stream, lastEncode);
+	}
+
+	return errn;
+}
+
+void _shiftRight7(uint8_t* buf, int len) {
+	const int shift = 7;
+    unsigned char tmp = 0x00, tmp2 = 0x00;
+    for (int k = 0; k <= len; k++) {
+        if (k == 0) {
+            tmp = buf[k];
+            buf[k] >>= shift;
+        } else {
+            tmp2 = buf[k];
+            buf[k] >>= shift;
+            buf[k] |= ((tmp & 0x7F) << (8 - shift));
+
+            if (k != len) {
+                tmp = tmp2;
+            }
+        }
+    }
+}
+
+/**
+ * Encode an arbitrary precision non negative integer using a sequence of
+ * octets. The most significant bit of the last octet is set to zero to
+ * indicate sequence termination. Only seven bits per octet are used to
+ * store the integer's value.
+ */
+int encodeUnsignedIntegerBig(bitstream_t* stream, size_t size, uint8_t* data, size_t len) {
+	int errn = 0;
+	int i;
+	int lenM1 = len - 1;
+	const int MAX_BIGINT_ARRAY = 25;
+	uint8_t lastEncode = 0;
+	uint8_t bytesToShift[MAX_BIGINT_ARRAY]; // MAXIMUM
+	size_t bitsToEncode = len * 8;
+
+	if(MAX_BIGINT_ARRAY <= len) {
+		return -1;
+	}
+
+	/* init */
+	for(i=0; i<MAX_BIGINT_ARRAY; i++) {
+		bytesToShift[i] = 0;
+	}
+
+	/* copy bytes first in same order for shifting */
+	for(i=0; i < len; i++) {
+		bytesToShift[i] = data[i];
+	}
+
+	while(bitsToEncode > 7) {
+		lastEncode = bytesToShift[lenM1];
+		lastEncode = lastEncode | 128;
+		errn = encode(stream, lastEncode);
+		_shiftRight7(bytesToShift, len);
+		bitsToEncode -= 7;
+	}
+
+	if (errn == 0) {
+		errn = encode(stream, bytesToShift[lenM1]);
+	}
+
+	return errn;
+}
+
+int encodeInteger(bitstream_t* stream, exi_integer_t* iv) {
+	int errn = 0;
+	switch (iv->type) {
+	/* Unsigned Integer */
+	case EXI_UNSIGNED_INTEGER_8:
+		errn = encodeInteger32(stream, iv->val.uint8);
+		break;
+	case EXI_UNSIGNED_INTEGER_16:
+		errn = encodeInteger32(stream, iv->val.uint16);
+		break;
+	case EXI_UNSIGNED_INTEGER_32:
+		errn = encodeInteger64(stream, iv->val.uint32);
+		break;
+	case EXI_UNSIGNED_INTEGER_64:
+		errn = encodeInteger64(stream, (int64_t)(iv->val.uint64));
+		break;
+		/* (Signed) Integer */
+	case EXI_INTEGER_8:
+		errn = encodeInteger32(stream, iv->val.int8);
+		break;
+	case EXI_INTEGER_16:
+		errn = encodeInteger32(stream, iv->val.int16);
+		break;
+	case EXI_INTEGER_32:
+		errn = encodeInteger32(stream, iv->val.int32);
+		break;
+	case EXI_INTEGER_64:
+		errn = encodeInteger64(stream, iv->val.int64);
+		break;
+	default:
+		errn = EXI_UNSUPPORTED_INTEGER_VALUE_TYPE;
+		break;
+	}
+
+	return errn;
+}
+
+
+/**
+ * Encode an arbitrary precision integer using a sign bit followed by a
+ * sequence of octets. The most significant bit of the last octet is set to
+ * zero to indicate sequence termination. Only seven bits per octet are used
+ * to store the integer's value.
+ */
+int encodeInteger16(bitstream_t* stream, int16_t n) {
+	int errn;
+	/* signalize sign */
+	if (n < 0) {
+		errn = encodeBoolean(stream, 1);
+		/* For negative values, the Unsigned Integer holds the
+		 * magnitude of the value minus 1 */
+		n = (int16_t)((-n) - 1);
+	} else {
+		errn = encodeBoolean(stream, 0);
+	}
+	if (errn == 0) {
+		errn = encodeUnsignedInteger16(stream, (uint16_t)n);
+	}
+	return errn;
+}
+
+
+
+/**
+ * Encode an arbitrary precision integer using a sign bit followed by a
+ * sequence of octets. The most significant bit of the last octet is set to
+ * zero to indicate sequence termination. Only seven bits per octet are used
+ * to store the integer's value.
+ */
+int encodeInteger32(bitstream_t* stream, int32_t n) {
+	int errn;
+	/* signalize sign */
+	if (n < 0) {
+		errn = encodeBoolean(stream, 1);
+		/* For negative values, the Unsigned Integer holds the
+		 * magnitude of the value minus 1 */
+		n = (-n) - 1;
+	} else {
+		errn = encodeBoolean(stream, 0);
+	}
+	if (errn == 0) {
+		errn = encodeUnsignedInteger32(stream, (uint32_t)n);
+	}
+	return errn;
+}
+
+/**
+ * Encode an arbitrary precision integer using a sign bit followed by a
+ * sequence of octets. The most significant bit of the last octet is set to
+ * zero to indicate sequence termination. Only seven bits per octet are used
+ * to store the integer's value.
+ */
+int encodeInteger64(bitstream_t* stream, int64_t n) {
+	int errn;
+	/* signalize sign */
+	if (n < 0) {
+		errn = encodeBoolean(stream, 1);
+		/* For negative values, the Unsigned Integer holds the
+		 * magnitude of the value minus 1 */
+		n = (-n) - 1;
+	} else {
+		errn = encodeBoolean(stream, 0);
+	}
+	if (errn == 0) {
+		errn = encodeUnsignedInteger64(stream, (uint64_t)n);
+	}
+	return errn;
+}
+
+
+/**
+ * Encode an arbitrary precision integer using a sign bit followed by a
+ * sequence of octets. The most significant bit of the last octet is set to
+ * zero to indicate sequence termination. Only seven bits per octet are used
+ * to store the integer's value.
+ */
+int encodeIntegerBig(bitstream_t* stream, int negative, size_t size, uint8_t* data, size_t len) {
+	int errn;
+	/* signalize sign */
+	if (negative) {
+		errn = encodeBoolean(stream, 1);
+		/* For negative values, the Unsigned Integer holds the
+		 * magnitude of the value minus 1 */
+		/* n = (-n) - 1; */
+	} else {
+		errn = encodeBoolean(stream, 0);
+	}
+	if (errn == 0) {
+		errn = encodeUnsignedIntegerBig(stream, size, data, len);
+	}
+	return errn;
+}
+
+/**
+ * The Float datatype representation is two consecutive Integers.
+ * The first Integer represents the mantissa of the floating point
+ * number and the second Integer represents the base-10 exponent
+ * of the floating point number.
+ */
+int encodeFloat(bitstream_t* stream, exi_float_me_t* f) {
+	int errn = encodeInteger64(stream, f->mantissa);
+	if (errn == 0) {
+		errn = encodeInteger32(stream, f->exponent);
+	}
+	return errn;
+}
+
+/**
+ * Encode a decimal represented as a Boolean sign followed by two Unsigned
+ * Integers. A sign value of zero (0) is used to represent positive Decimal
+ * values and a sign value of one (1) is used to represent negative Decimal
+ * values The first Integer represents the integral portion of the Decimal
+ * value. The second positive integer represents the fractional portion of
+ * the decimal with the digits in reverse order to preserve leading zeros.
+ */
+int encodeDecimal(bitstream_t* stream, exi_decimal_t* d) {
+	/* sign, integral, reverse fractional */
+	int errn = encodeBoolean(stream, d->negative);
+	if (errn == 0) {
+		errn = encodeUnsignedInteger(stream, &d->integral);
+		if (errn == 0) {
+			errn = encodeUnsignedInteger(stream, &d->reverseFraction);
+		}
+	}
+	return errn;
+}
+
+/**
+ * Encode a length prefixed sequence of characters.
+ */
+int encodeString(bitstream_t* stream, exi_string_t* string) {
+	int errn = encodeUnsignedInteger32(stream, string->len);
+	if (errn == 0) {
+		errn = encodeCharacters(stream, string->characters, string->len);
+	}
+	return errn;
+}
+
+/**
+ * Encode a sequence of characters according to a given length.
+ * Each character is represented by its UCS [ISO/IEC 10646]
+ * code point encoded as an Unsigned Integer
+ */
+int encodeCharacters(bitstream_t* stream, exi_string_character_t* chars, size_t len) {
+	unsigned int i;
+	int errn = 0;
+	for (i = 0; i < len && errn == 0; i++) {
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_ASCII
+		errn = encode(stream, (uint8_t)chars[i]);
+#endif /* STRING_REPRESENTATION_ASCII */
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_UCS
+		errn = encodeUnsignedInteger32(stream, chars[i]);
+#endif /* STRING_REPRESENTATION_UCS */
+	}
+	return errn;
+}
+
+
+int encodeRCSCharacters(bitstream_t* stream, exi_string_character_t* chars, size_t len, size_t rcsCodeLength, size_t rcsSize, const exi_string_character_t rcsSet[]) {
+	unsigned int i;
+	unsigned int k;
+	int errn = 0;
+	size_t rcsCode = SIZE_MAX;
+
+	for (i = 0; i < len && errn == 0; i++) {
+		/* try to find short code */
+		rcsCode = SIZE_MAX;
+		for(k=0; k<rcsSize && rcsCode == SIZE_MAX; k++) {
+			if(rcsSet[k] == chars[i]) {
+				rcsCode = k;
+			}
+		}
+
+		if( rcsCode == SIZE_MAX) {
+			/* RCS mis-match */
+			errn = encodeNBitUnsignedInteger(stream, rcsCodeLength, rcsSize);
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_ASCII
+			errn = encode(stream, (uint8_t)chars[i]);
+#endif /* STRING_REPRESENTATION_ASCII */
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_UCS
+			errn = encodeUnsignedInteger32(stream, chars[i]);
+#endif /* STRING_REPRESENTATION_UCS */
+
+		} else {
+			/* RCS match */
+			errn = encodeNBitUnsignedInteger(stream, rcsCodeLength, (uint32_t)rcsCode);
+		}
+	}
+	return errn;
+}
+
+/**
+ * Encode a binary value as a length-prefixed sequence of octets.
+ */
+int encodeBinary(bitstream_t* stream, exi_bytes_t* bytes) {
+	int errn = encodeUnsignedInteger32(stream, bytes->len);
+
+	if(errn == 0) {
+		errn = encodeBytes(stream, bytes->data, bytes->len);
+	}
+
+	return errn;
+}
+
+int encodeBytes(bitstream_t* stream, uint8_t* data, size_t len) {
+	unsigned int i;
+	int errn = 0;
+
+	for (i = 0; i < len && errn == 0; i++) {
+		errn = encode(stream, data[i]);
+	}
+	return errn;
+}
+
+/**
+ * Encode a datetime representation which is a sequence of values
+ * representing the individual components of the Date-Time
+ */
+int encodeDateTime(bitstream_t* stream, exi_datetime_t* datetime) {
+	int errn = 0;
+	switch (datetime->type) {
+	case EXI_DATETIME_GYEAR: /* Year, [Time-Zone] */
+		errn = encodeInteger32(stream, datetime->year - DATETIME_YEAR_OFFSET);
+		break;
+	case EXI_DATETIME_GYEARMONTH: /* Year, MonthDay, [TimeZone] */
+	case EXI_DATETIME_DATE: /* Year, MonthDay, [TimeZone] */
+		errn = encodeInteger32(stream, datetime->year - DATETIME_YEAR_OFFSET);
+		if (errn == 0) {
+			errn = encodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY,
+					datetime->monthDay);
+		}
+		break;
+	case EXI_DATETIME_DATETIME: /* Year, MonthDay, Time, [FractionalSecs], [TimeZone] */
+		errn = encodeInteger32(stream, datetime->year - DATETIME_YEAR_OFFSET);
+		if (errn == 0) {
+			errn = encodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY,
+					datetime->monthDay);
+			if (errn != 0) {
+				break;
+			}
+		}
+		/* no break */
+	case EXI_DATETIME_TIME: /* Time, [FractionalSecs], [TimeZone] */
+		errn = encodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_TIME,
+				datetime->time);
+		if (errn == 0) {
+			if (datetime->presenceFractionalSecs) {
+				errn = encodeBoolean(stream, 1);
+				if (errn == 0) {
+					errn = encodeUnsignedInteger32(stream, datetime->fractionalSecs);
+				}
+			} else {
+				errn = encodeBoolean(stream, 0);
+			}
+		}
+		break;
+	case EXI_DATETIME_GMONTH: /* MonthDay, [TimeZone] */
+	case EXI_DATETIME_GMONTHDAY: /* MonthDay, [TimeZone] */
+	case EXI_DATETIME_GDAY: /* MonthDay, [TimeZone] */
+		errn = encodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY,
+				datetime->monthDay);
+		break;
+	default:
+		errn = EXI_UNSUPPORTED_DATETIME_TYPE;
+		break;
+	}
+	if (errn == 0) {
+		/* [TimeZone] */
+		if (datetime->presenceTimezone) {
+			errn = encodeBoolean(stream, 1);
+			if (errn == 0) {
+				errn = encodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_TIMEZONE,
+						datetime->timezone + DATETIME_TIMEZONE_OFFSET_IN_MINUTES);
+			}
+		} else {
+			errn = encodeBoolean(stream, 0);
+		}
+	}
+
+	return errn;
+}
+
+
+
+
+int encode(bitstream_t* stream, uint8_t b) {
+#if EXI_OPTION_ALIGNMENT == BIT_PACKED
+	return writeBits(stream, 8, b);
+#endif /* EXI_OPTION_ALIGNMENT == BIT_PACKED */
+#if EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT
+	int errn = 0;
+#if EXI_STREAM == BYTE_ARRAY
+	if ( (*stream->pos) < stream->size ) {
+		stream->data[(*stream->pos)++] = b;
+	} else {
+		errn = EXI_ERROR_OUTPUT_STREAM_EOF;
+	}
+#endif /* EXI_STREAM == BYTE_ARRAY */
+#if EXI_STREAM == FILE_STREAM
+	if ( putc(b, stream->file) == EOF ) {
+		errn = EXI_ERROR_OUTPUT_STREAM_EOF;
+	}
+#endif /* EXI_STREAM == FILE_STREAM */
+	return errn;
+#endif /* EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT */
+}
+
+/**
+ * Encode a single boolean value. A false value is encoded as bit 0 and true
+ * value is encode as bit 1.
+ */
+int encodeBoolean(bitstream_t* stream, int b) {
+#if EXI_OPTION_ALIGNMENT == BIT_PACKED
+	uint8_t val = b ? 1 : 0;
+	return writeBits(stream, 1, val);
+#endif /* EXI_OPTION_ALIGNMENT == BIT_PACKED */
+#if EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT
+	uint8_t val = b ? 1 : 0;
+	return encode(stream, val);
+#endif /* EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT */
+}
+
+
+/**
+ * Encode n-bit unsigned integer. The n least significant bits of parameter
+ * b starting with the most significant, i.e. from left to right.
+ */
+int encodeNBitUnsignedInteger(bitstream_t* stream, size_t nbits, uint32_t val)  {
+#if EXI_OPTION_ALIGNMENT == BIT_PACKED
+	int errn = 0;
+	if (nbits > 0) {
+		errn = writeBits(stream, nbits, val);
+	}
+	return errn;
+#endif /* EXI_OPTION_ALIGNMENT == BIT_PACKED */
+#if EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT
+	int errn = 0;
+	if (nbits > 0) {
+		if (nbits < 9) {
+			/* 1 byte */
+			errn = encode(stream, val & 0xff);
+		} else if (nbits < 17) {
+			/* 2 bytes */
+			errn = encode(stream, val & 0x00ff);
+			if(errn == 0) {
+				errn = encode(stream, (uint8_t)((val & 0xff00) >> 8));
+			}
+		} else if (nbits < 25) {
+			/* 3 bytes */
+			errn = encode(stream, val & 0x0000ff);
+			if(errn == 0) {
+				errn = encode(stream, (uint8_t)((val & 0x00ff00) >> 8));
+				if(errn == 0) {
+					errn = encode(stream, (uint8_t)((val & 0xff0000) >> 16));
+				}
+			}
+		} else if (nbits < 33) {
+			/* 4 bytes */
+			errn = encode(stream, val & 0x000000ff);
+			if(errn == 0) {
+				errn = encode(stream, (uint8_t)((val & 0x0000ff00) >> 8));
+				if(errn == 0) {
+					errn = encode(stream, (uint8_t)((val & 0x00ff0000) >> 16));
+					if(errn == 0) {
+						errn = encode(stream, (uint8_t)((val & 0xff000000) >> 24));
+					}
+				}
+			}
+		} else {
+			/* TODO Currently not more than 4 Bytes allowed for NBitUnsignedInteger */
+			errn = EXI_UNSUPPORTED_NBIT_INTEGER_LENGTH;
+		}
+	}
+	return errn;
+#endif /* EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT */
+}
+
+/**
+ * Flush underlying output stream.
+ */
+int encodeFinish(bitstream_t* stream) {
+#if EXI_OPTION_ALIGNMENT == BIT_PACKED
+#endif /* EXI_OPTION_ALIGNMENT == BIT_PACKED */
+	return flush(stream);
+#if EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT
+	/* no pending bits in byte-aligned mode */
+	return 0;
+#endif /* EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT */
+}
+
+
+
+#endif
+

+ 423 - 0
EVSE/Projects/CCS/Apps/exi_engine/codec/EncoderChannel.h

@@ -0,0 +1,423 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 2017-03-02 
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+ * \file 	EncoderChannel.h
+ * \brief 	EXI Encoder Channel
+ *
+ */
+
+#ifndef ENCODER_CHANNEL_H
+#define ENCODER_CHANNEL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "EXITypes.h"
+
+
+/**
+ * \brief 		Encode byte value
+ *
+ * \param       stream   		Output Stream
+ * \param       b		   		byte
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encode(bitstream_t* stream, uint8_t b);
+
+
+/**
+ * \brief 		Encode a single boolean value
+ *
+ * 				A false value is encoded as 0 and true value is encode as 1.
+ *
+ * \param       stream   		Output Stream
+ * \param       b		   		boolean
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeBoolean(bitstream_t* stream, int b);
+
+
+/**
+ * \brief 		Encode n-bit unsigned integer
+ *
+ * 				The n least significant bits of parameter b starting with the
+ * 				most significant, i.e. from left to right.
+ *
+ * \param       stream   		Output Stream
+ * \param       nbits		   	number of bits
+ * \param       val		   		value
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeNBitUnsignedInteger(bitstream_t* stream, size_t nbits, uint32_t val);
+
+
+/**
+ * \brief 		Encode unsigned integer
+ *
+ * 				Encode an arbitrary precision non negative integer using
+ * 				a sequence of octets. The most significant bit of the last
+ * 				octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Output Stream
+ * \param       iv		   		Unsigned integer value
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeUnsignedInteger(bitstream_t* stream, exi_integer_t* iv);
+
+
+/**
+ * \brief 		Encode unsigned integer
+ *
+ * 				Encode an arbitrary precision non negative integer using
+ * 				a sequence of octets. The most significant bit of the last
+ * 				octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Output Stream
+ * \param       n		   		Unsigned integer value 16 bits
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeUnsignedInteger16(bitstream_t* stream, uint16_t n);
+
+
+
+/**
+ * \brief 		Encode unsigned integer
+ *
+ * 				Encode an arbitrary precision non negative integer using
+ * 				a sequence of octets. The most significant bit of the last
+ * 				octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Output Stream
+ * \param       n		   		Unsigned integer value 32 bits
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeUnsignedInteger32(bitstream_t* stream, uint32_t n);
+
+
+/**
+ * \brief 		Encode unsigned integer
+ *
+ * 				Encode an arbitrary precision non negative integer using
+ * 				a sequence of octets. The most significant bit of the last
+ * 				octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Output Stream
+ * \param       n		   		Unsigned integer value 64 bits
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeUnsignedInteger64(bitstream_t* stream, uint64_t n);
+
+/**
+ * \brief 		Encode unsigned integer
+ *
+ * 				Encode an arbitrary precision non negative integer using
+ * 				a sequence of octets. The most significant bit of the last
+ * 				octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Output Stream
+ * \param       size		   	size array
+ * \param       data		   	data array
+ * \param       len		   		length array
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeUnsignedIntegerBig(bitstream_t* stream, size_t size, uint8_t* data, size_t len);
+
+
+/**
+ * \brief 		Encode integer
+ *
+ * 				Encode an arbitrary precision integer using a sign boolean
+ * 				followed by a sequence of octets. The most significant bit
+ * 				of the last octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Output Stream
+ * \param       iv		   		Integer value
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeInteger(bitstream_t* stream, exi_integer_t* iv);
+
+
+/**
+ * \brief 		Encode integer
+ *
+ * 				Encode an arbitrary precision integer using a sign boolean
+ * 				followed by a sequence of octets. The most significant bit
+ * 				of the last octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Output Stream
+ * \param       n		   		Integer value 16 bits
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeInteger16(bitstream_t* stream, int16_t n);
+
+/**
+ * \brief 		Encode integer
+ *
+ * 				Encode an arbitrary precision integer using a sign boolean
+ * 				followed by a sequence of octets. The most significant bit
+ * 				of the last octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Output Stream
+ * \param       n		   		Integer value 32 bits
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeInteger32(bitstream_t* stream, int32_t n);
+
+
+/**
+ * \brief 		Encode integer
+ *
+ * 				Encode an arbitrary precision integer using a sign boolean
+ * 				followed by a sequence of octets. The most significant bit
+ * 				of the last octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Output Stream
+ * \param       n		   		Integer value 64 bits
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeInteger64(bitstream_t* stream, int64_t n);
+
+/**
+ * \brief 		Encode integer
+ *
+ * 				Encode an arbitrary precision integer using a sign boolean
+ * 				followed by a sequence of octets. The most significant bit
+ * 				of the last octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Output Stream
+ * \param       negative		negative integer
+ * \param       size		   	size array
+ * \param       data		   	data array
+ * \param       len		   		length array
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeIntegerBig(bitstream_t* stream, int negative, size_t size, uint8_t* data, size_t len);
+
+/**
+ * \brief 		Encode float
+ *
+ * 				Encode a Float datatype as two consecutive Integers. The first
+ * 				Integer represents the mantissa of the floating point number
+ * 				and the second Integer represents the base-10 exponent of the
+ * 				floating point number.
+ *
+ * \param       stream   		Output Stream
+ * \param       f		   		Float value
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeFloat(bitstream_t* stream, exi_float_me_t* f);
+
+
+/**
+ * \brief 		Encode decimal
+ *
+ * 				Encode a decimal represented as a Boolean sign followed by two
+ * 				Unsigned Integers. A sign value of zero (0) is used to represent
+ * 				positive Decimal values and a sign value of one (1) is used to
+ * 				represent negative Decimal values The first Integer represents
+ * 				the integral portion of the Decimal value. The second positive
+ * 				integer represents the fractional portion of the decimal with
+ * 				the digits in reverse order to preserve leading zeros.
+ *
+ * \param       stream   		Output Stream
+ * \param       d		   		Decimal value
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeDecimal(bitstream_t* stream, exi_decimal_t* d);
+
+
+/**
+ * \brief 		Encode string
+ *
+ * 				Encode a length prefixed sequence of characters.
+ *
+ * \param       stream   		Output Stream
+ * \param       string		   	String
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeString(bitstream_t* stream, exi_string_t* string);
+
+
+/**
+ * \brief 		Encode string value
+ *
+ * 				 Encode a length prefixed sequence of characters
+ * 				 in the sense of string tables
+ *
+ * \param       stream   		Output Stream
+ * \param       stringTable   	String Table
+ * \param       namespaceUriID  Qualified Namespace ID
+ * \param       localNameID  	Qualified LocalName ID
+ * \param       string		   	String value
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeStringValue(bitstream_t* stream, exi_value_string_table_t* stringTable, size_t namespaceUriID, size_t localNameID,
+		exi_string_value_t* string);
+
+
+/**
+ * \brief 		Encode restricted character set value
+ *
+ * 				 Encode a length prefixed sequence of characters
+ * 				 in the sense of string tables
+ *
+ * \param       stream   		Output Stream
+ * \param       StringTable   	StringTable
+ * \param       namespaceUriID  Qualified Namespace ID
+ * \param       localNameID  	Qualified LocalName ID
+ * \param       rcs   			Restricted character set
+ * \param       string		   	String value
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeRCSStringValue(bitstream_t* stream, exi_value_string_table_t* stringTable,
+		size_t namespaceUriID, size_t localNameID, exi_rcs_t* rcs, exi_string_value_t* string);
+
+
+/**
+ * \brief 		Encode characters
+ *
+ * 				Encode a sequence of characters according to a given length.
+ * 				Each character is represented by its UCS [ISO/IEC 10646]
+ * 				code point encoded as an Unsigned Integer.
+ *
+ * \param       stream   		Output Stream
+ * \param       chars   		Characters
+ * \param       len				Numbr of characters
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeCharacters(bitstream_t* stream, exi_string_character_t* chars, size_t len);
+
+
+/**
+ * \brief 		Encode characters
+ *
+ * 				Encode a sequence of characters according to a given length.
+ * 				Each character is represented by its UCS [ISO/IEC 10646]
+ * 				code point encoded as an Unsigned Integer.
+ *
+ * \param       stream   		Output Stream
+ * \param       chars   		Characters
+ * \param       len				Numbr of characters
+ *  \param       rcsCodeLength   RCS code-length
+ * \param       rcsCodeLength   RCS size
+ * \param       rcsCodeLength   RCS set
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeRCSCharacters(bitstream_t* stream, exi_string_character_t* chars, size_t len, size_t rcsCodeLength, size_t rcsSize, const exi_string_character_t rcsSet[]);
+
+
+
+/**
+ * \brief 		Encode binary
+ *
+ * 				Encode a binary value as a length-prefixed sequence of octets.
+ *
+ * \param       stream   		Output Stream
+ * \param       bytes   		Byte values
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeBinary(bitstream_t* stream, exi_bytes_t* bytes);
+
+
+/**
+ * \brief 		Encode binary data
+ *
+ * 				Encode a sequence of octets.
+ *
+ * \param       stream   		Output Stream
+ * \param       data	   		Byte values
+ * \param       len		   		Length
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeBytes(bitstream_t* stream, uint8_t* data, size_t len);
+
+/**
+ * \brief 		Encode datetime
+ *
+ * 				Encode a datetime representation which is a sequence of values
+ * 				representing the individual components of the Date-Time.
+ *
+ * \param       stream   		Output Stream
+ * \param       datetime   		Datetime values
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeDateTime(bitstream_t* stream, exi_datetime_t* datetime);
+
+
+/**
+ * \brief 		Flush underlying bit output stream
+ *
+ * \param       stream   		Output Stream
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeFinish(bitstream_t* stream);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

+ 120 - 0
EVSE/Projects/CCS/Apps/exi_engine/codec/ErrorCodes.h

@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 2017-03-02 
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+ * \file 	ErrorCodes.h
+ * \brief 	Error Codes descriptions
+ *
+ */
+
+#ifndef EXI_ERROR_CODES_H
+#define EXI_ERROR_CODES_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define EXI_ERROR_INPUT_STREAM_EOF -10
+#define EXI_ERROR_OUTPUT_STREAM_EOF -11
+#define EXI_ERROR_INPUT_FILE_HANDLE -12
+#define EXI_ERROR_OUTPUT_FILE -13
+
+#define EXI_ERROR_OUT_OF_BOUNDS -100
+#define EXI_ERROR_OUT_OF_STRING_BUFFER -101
+/*#define EXI_ERROR_OUT_OF_ASCII_BUFFER -102 */
+#define EXI_ERROR_OUT_OF_BYTE_BUFFER -103
+#define EXI_ERROR_OUT_OF_GRAMMAR_STACK -104
+#define EXI_ERROR_OUT_OF_RUNTIME_GRAMMAR_STACK -105
+#define EXI_ERROR_OUT_OF_QNAMES -106
+
+#define EXI_ERROR_UNKOWN_GRAMMAR_ID -108
+#define EXI_ERROR_UNKOWN_EVENT -109
+#define EXI_ERROR_UNKOWN_EVENT_CODE -110
+#define EXI_ERROR_UNEXPECTED_EVENT_LEVEL1 -111
+#define EXI_ERROR_UNEXPECTED_EVENT_LEVEL2 -112
+
+#define EXI_ERROR_UNEXPECTED_START_DOCUMENT -113
+#define EXI_ERROR_UNEXPECTED_END_DOCUMENT -114
+#define EXI_ERROR_UNEXPECTED_START_ELEMENT -115
+#define EXI_ERROR_UNEXPECTED_START_ELEMENT_NS -116
+#define EXI_ERROR_UNEXPECTED_START_ELEMENT_GENERIC -117
+#define EXI_ERROR_UNEXPECTED_START_ELEMENT_GENERIC_UNDECLARED -118
+#define EXI_ERROR_UNEXPECTED_END_ELEMENT -119
+#define EXI_ERROR_UNEXPECTED_CHARACTERS -120
+#define EXI_ERROR_UNEXPECTED_ATTRIBUTE -121
+#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_NS -122
+#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_GENERIC -123
+#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_GENERIC_UNDECLARED -124
+#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_XSI_TYPE -125
+#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_XSI_NIL -126
+#define EXI_ERROR_UNEXPECTED_GRAMMAR_ID -127
+#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_MOVE_TO_CONTENT_RULE -128
+
+#define EXI_UNSUPPORTED_NBIT_INTEGER_LENGTH -132
+#define EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS -133
+#define EXI_UNSUPPORTED_INTEGER_VALUE -134
+#define EXI_NEGATIVE_UNSIGNED_INTEGER_VALUE -135
+#define EXI_UNSUPPORTED_LIST_VALUE_TYPE -136
+#define EXI_UNSUPPORTED_HEADER_COOKIE -137
+#define EXI_UNSUPPORTED_HEADER_OPTIONS -138
+
+#define EXI_UNSUPPORTED_GLOBAL_ATTRIBUTE_VALUE_TYPE -139
+#define EXI_UNSUPPORTED_DATATYPE -140
+#define EXI_UNSUPPORTED_STRING_VALUE_TYPE -141
+#define EXI_UNSUPPORTED_INTEGER_VALUE_TYPE -142
+#define EXI_UNSUPPORTED_DATETIME_TYPE -143
+#define EXI_UNSUPPORTED_FRAGMENT_ELEMENT -144
+
+#define EXI_UNSUPPORTED_GRAMMAR_LEARNING_CH -150
+
+/* string values */
+#define EXI_ERROR_STRINGVALUES_NOT_SUPPORTED -160
+#define EXI_ERROR_STRINGVALUES_OUT_OF_ENTRIES -161
+#define EXI_ERROR_STRINGVALUES_OUT_OF_MEMORY -162
+#define EXI_ERROR_STRINGVALUES_OUT_OF_BOUND -163
+#define EXI_ERROR_STRINGVALUES_CHARACTER -164
+
+#define EXI_ERROR_UNEXPECTED_BYTE_VALUE -200
+
+
+#define EXI_ERROR_CONVERSION_NO_ASCII_CHARACTERS -300
+#define EXI_ERROR_CONVERSION_TYPE_TO_STRING -301
+
+
+#define EXI_DEVIANT_SUPPORT_NOT_DEPLOYED -500
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* EXI_ERROR_CODES_H */
+

+ 117 - 0
EVSE/Projects/CCS/Apps/exi_engine/codec/MethodsBag.c

@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 2017-03-02 
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+#ifndef METHODS_BAG_C
+#define METHODS_BAG_C
+
+#include "MethodsBag.h"
+#include "ErrorCodes.h"
+
+static const uint16_t smallLengths[] = { 0, 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4,
+		4, 4, 4 };
+
+int exiGetCodingLength(size_t characteristics, size_t* codingLength) {
+	/* Note: we could use range expressions in switch statements but those are non-standard */
+	/* e.g., case 1 ... 5: */
+	int errn = 0;
+	if (characteristics < 17) {
+		*codingLength = smallLengths[characteristics];
+	} else if (characteristics < 33) {
+		/* 17 .. 32 */
+		*codingLength = 5;
+	} else if (characteristics < 65) {
+		/* 33 .. 64 */
+		*codingLength = 6;
+	} else if (characteristics < 129) {
+		/* 65 .. 128 */
+		*codingLength = 7;
+	} else if (characteristics < 257) {
+		/* 129 .. 256 */
+		*codingLength = 8;
+	} else if (characteristics < 513) {
+		/* 257 .. 512 */
+		*codingLength = 9;
+	} else if (characteristics < 1025) {
+		/* 513 .. 1024 */
+		*codingLength = 10;
+	} else if (characteristics < 2049) {
+		/* 1025 .. 2048 */
+		*codingLength = 11;
+	} else if (characteristics < 4097) {
+		/* 2049 .. 4096 */
+		*codingLength = 12;
+	} else if (characteristics < 8193) {
+		/* 4097 .. 8192 */
+		*codingLength = 13;
+	} else if (characteristics < 16385) {
+		/* 8193 .. 16384 */
+		*codingLength = 14;
+	} else if (characteristics < 32769) {
+		/* 16385 .. 32768 */
+		*codingLength = 15;
+	} else {
+		/* 32769 .. 65536 */
+		*codingLength = 16;
+	}
+	return errn;
+}
+
+
+uint8_t numberOf7BitBlocksToRepresent(uint32_t n) {
+	/* assert (n >= 0); */
+
+	/* 7 bits */
+	if (n < 128) {
+		return 1;
+	}
+	/* 14 bits */
+	else if (n < 16384) {
+		return 2;
+	}
+	/* 21 bits */
+	else if (n < 2097152) {
+		return 3;
+	}
+	/* 28 bits */
+	else if (n < 268435456) {
+		return 4;
+	}
+	/* 35 bits */
+	else {
+		/* int, 32 bits */
+		return 5;
+	}
+}
+
+
+
+#endif
+

+ 70 - 0
EVSE/Projects/CCS/Apps/exi_engine/codec/MethodsBag.h

@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 2017-03-02 
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+* \file 	MethodsBag.h
+* \brief 	Method bag for bit and octet functions
+*
+*/
+
+#ifndef METHODS_BAG_H
+#define METHODS_BAG_H
+
+
+
+#include <stdint.h>
+#include <stddef.h>
+
+/**
+ * \brief  	Returns the number of bits to identify the characteristics.
+ *
+ * \param       characteristics	number of characteristics
+ * \param       codingLength   	number of bits
+ * \return                  	Error-Code <> 0
+ *
+ */
+int exiGetCodingLength(size_t characteristics, size_t* codingLength);
+
+
+/**
+ * \brief  	Returns the least number of 7 bit-blocks that is needed to represent the passed integer value
+ *
+ *			Note: Returns 1 if passed parameter is 0.
+ *
+ * \param       n				integer value
+ * \return                  	Error-Code <> 0
+ *
+ */
+uint8_t numberOf7BitBlocksToRepresent(uint32_t n);
+
+
+#endif
+

+ 969 - 0
EVSE/Projects/CCS/Apps/exi_engine/din/dinEXIDatatypes.c

@@ -0,0 +1,969 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9.4
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+#include <stdint.h>
+
+#include "dinEXIDatatypes.h"
+#include "../codec/EXITypes.h"
+
+
+#ifndef EXI_din_DATATYPES_C
+#define EXI_din_DATATYPES_C
+
+#if DEPLOY_DIN_CODEC == SUPPORT_YES
+
+
+void init_dinEXIDocument(struct dinEXIDocument* exiDoc) {
+	exiDoc->BodyElement_isUsed = 0u;
+	exiDoc->V2G_Message_isUsed = 0u;
+	exiDoc->SignatureProperty_isUsed = 0u;
+	exiDoc->DSAKeyValue_isUsed = 0u;
+	exiDoc->SignatureProperties_isUsed = 0u;
+	exiDoc->KeyValue_isUsed = 0u;
+	exiDoc->Transforms_isUsed = 0u;
+	exiDoc->DigestMethod_isUsed = 0u;
+	exiDoc->Signature_isUsed = 0u;
+	exiDoc->RetrievalMethod_isUsed = 0u;
+	exiDoc->Manifest_isUsed = 0u;
+	exiDoc->Reference_isUsed = 0u;
+	exiDoc->CanonicalizationMethod_isUsed = 0u;
+	exiDoc->RSAKeyValue_isUsed = 0u;
+	exiDoc->Transform_isUsed = 0u;
+	exiDoc->PGPData_isUsed = 0u;
+	exiDoc->MgmtData_isUsed = 0u;
+	exiDoc->SignatureMethod_isUsed = 0u;
+	exiDoc->KeyInfo_isUsed = 0u;
+	exiDoc->SPKIData_isUsed = 0u;
+	exiDoc->X509Data_isUsed = 0u;
+	exiDoc->SignatureValue_isUsed = 0u;
+	exiDoc->KeyName_isUsed = 0u;
+	exiDoc->DigestValue_isUsed = 0u;
+	exiDoc->SignedInfo_isUsed = 0u;
+	exiDoc->Object_isUsed = 0u;
+	exiDoc->DC_EVSEStatus_isUsed = 0u;
+	exiDoc->RelativeTimeInterval_isUsed = 0u;
+	exiDoc->SalesTariffEntry_isUsed = 0u;
+	exiDoc->DC_EVPowerDeliveryParameter_isUsed = 0u;
+	exiDoc->SASchedules_isUsed = 0u;
+	exiDoc->AC_EVChargeParameter_isUsed = 0u;
+	exiDoc->SAScheduleList_isUsed = 0u;
+	exiDoc->DC_EVStatus_isUsed = 0u;
+	exiDoc->ServiceCharge_isUsed = 0u;
+	exiDoc->EVStatus_isUsed = 0u;
+	exiDoc->DC_EVChargeParameter_isUsed = 0u;
+	exiDoc->DC_EVSEChargeParameter_isUsed = 0u;
+	exiDoc->EVSEStatus_isUsed = 0u;
+	exiDoc->TimeInterval_isUsed = 0u;
+	exiDoc->EVPowerDeliveryParameter_isUsed = 0u;
+	exiDoc->EVSEChargeParameter_isUsed = 0u;
+	exiDoc->AC_EVSEStatus_isUsed = 0u;
+	exiDoc->Entry_isUsed = 0u;
+	exiDoc->AC_EVSEChargeParameter_isUsed = 0u;
+	exiDoc->PMaxScheduleEntry_isUsed = 0u;
+	exiDoc->EVChargeParameter_isUsed = 0u;
+	exiDoc->ServiceDiscoveryReq_isUsed = 0u;
+	exiDoc->ServiceDiscoveryRes_isUsed = 0u;
+	exiDoc->MeteringReceiptReq_isUsed = 0u;
+	exiDoc->PaymentDetailsReq_isUsed = 0u;
+	exiDoc->MeteringReceiptRes_isUsed = 0u;
+	exiDoc->PaymentDetailsRes_isUsed = 0u;
+	exiDoc->SessionSetupReq_isUsed = 0u;
+	exiDoc->SessionSetupRes_isUsed = 0u;
+	exiDoc->CableCheckReq_isUsed = 0u;
+	exiDoc->CableCheckRes_isUsed = 0u;
+	exiDoc->ContractAuthenticationReq_isUsed = 0u;
+	exiDoc->CertificateInstallationReq_isUsed = 0u;
+	exiDoc->ContractAuthenticationRes_isUsed = 0u;
+	exiDoc->CertificateInstallationRes_isUsed = 0u;
+	exiDoc->WeldingDetectionReq_isUsed = 0u;
+	exiDoc->WeldingDetectionRes_isUsed = 0u;
+	exiDoc->CertificateUpdateReq_isUsed = 0u;
+	exiDoc->CertificateUpdateRes_isUsed = 0u;
+	exiDoc->PowerDeliveryReq_isUsed = 0u;
+	exiDoc->PowerDeliveryRes_isUsed = 0u;
+	exiDoc->ChargingStatusReq_isUsed = 0u;
+	exiDoc->ChargingStatusRes_isUsed = 0u;
+	exiDoc->CurrentDemandReq_isUsed = 0u;
+	exiDoc->PreChargeReq_isUsed = 0u;
+	exiDoc->CurrentDemandRes_isUsed = 0u;
+	exiDoc->PreChargeRes_isUsed = 0u;
+	exiDoc->ServicePaymentSelectionReq_isUsed = 0u;
+	exiDoc->SessionStopReq_isUsed = 0u;
+	exiDoc->ServicePaymentSelectionRes_isUsed = 0u;
+	exiDoc->SessionStopRes_isUsed = 0u;
+	exiDoc->ChargeParameterDiscoveryReq_isUsed = 0u;
+	exiDoc->ChargeParameterDiscoveryRes_isUsed = 0u;
+	exiDoc->ServiceDetailReq_isUsed = 0u;
+	exiDoc->ServiceDetailRes_isUsed = 0u;
+}
+
+
+#if DEPLOY_DIN_CODEC_FRAGMENT == SUPPORT_YES
+void init_dinEXIFragment(struct dinEXIFragment* exiFrag) {
+	exiFrag->Unit_isUsed = 0u;
+	exiFrag->EVSEMaximumCurrentLimit_isUsed = 0u;
+	exiFrag->EVPowerDeliveryParameter_isUsed = 0u;
+	exiFrag->ChargingProfileEntryMaxPower_isUsed = 0u;
+	exiFrag->TMeter_isUsed = 0u;
+	exiFrag->EVSEPowerLimitAchieved_isUsed = 0u;
+	exiFrag->duration_isUsed = 0u;
+	exiFrag->EVMaximumCurrentLimit_isUsed = 0u;
+	exiFrag->Parameter_isUsed = 0u;
+	exiFrag->EVSEProcessing_isUsed = 0u;
+	exiFrag->AC_EVChargeParameter_isUsed = 0u;
+	exiFrag->EVSEProcessing_isUsed = 0u;
+	exiFrag->PMaxScheduleEntry_isUsed = 0u;
+	exiFrag->EVSEProcessing_isUsed = 0u;
+	exiFrag->EVSEMaximumVoltageLimit_isUsed = 0u;
+	exiFrag->SelectedService_isUsed = 0u;
+	exiFrag->Certificate_isUsed = 0u;
+	exiFrag->Certificate_isUsed = 0u;
+	exiFrag->EVSEMaximumPowerLimit_isUsed = 0u;
+	exiFrag->EVReady_isUsed = 0u;
+	exiFrag->X509SerialNumber_isUsed = 0u;
+	exiFrag->RetrievalMethod_isUsed = 0u;
+	exiFrag->RetryCounter_isUsed = 0u;
+	exiFrag->DC_EVSEStatus_isUsed = 0u;
+	exiFrag->DC_EVSEStatus_isUsed = 0u;
+	exiFrag->DC_EVSEStatus_isUsed = 0u;
+	exiFrag->DC_EVSEStatus_isUsed = 0u;
+	exiFrag->MeteringReceiptReq_isUsed = 0u;
+	exiFrag->ReadyToChargeState_isUsed = 0u;
+	exiFrag->Multiplier_isUsed = 0u;
+	exiFrag->EPriceLevel_isUsed = 0u;
+	exiFrag->stringValue_isUsed = 0u;
+	exiFrag->ServiceDiscoveryReq_isUsed = 0u;
+	exiFrag->Transforms_isUsed = 0u;
+	exiFrag->MeteringReceiptRes_isUsed = 0u;
+	exiFrag->PreChargeReq_isUsed = 0u;
+	exiFrag->OEMProvisioningCert_isUsed = 0u;
+	exiFrag->ServiceDiscoveryRes_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ContractAuthenticationReq_isUsed = 0u;
+	exiFrag->ContractSignatureCertChain_isUsed = 0u;
+	exiFrag->ContractSignatureCertChain_isUsed = 0u;
+	exiFrag->ContractSignatureCertChain_isUsed = 0u;
+	exiFrag->ContractSignatureCertChain_isUsed = 0u;
+	exiFrag->ContractAuthenticationRes_isUsed = 0u;
+	exiFrag->HMACOutputLength_isUsed = 0u;
+	exiFrag->BulkChargingComplete_isUsed = 0u;
+	exiFrag->Exponent_isUsed = 0u;
+	exiFrag->DC_EVStatus_isUsed = 0u;
+	exiFrag->SAScheduleTuple_isUsed = 0u;
+	exiFrag->DC_EVStatus_isUsed = 0u;
+	exiFrag->DC_EVStatus_isUsed = 0u;
+	exiFrag->DepartureTime_isUsed = 0u;
+	exiFrag->X509IssuerSerial_isUsed = 0u;
+	exiFrag->SAScheduleTupleID_isUsed = 0u;
+	exiFrag->SAScheduleTupleID_isUsed = 0u;
+	exiFrag->SPKIData_isUsed = 0u;
+	exiFrag->RelativeTimeInterval_isUsed = 0u;
+	exiFrag->EVEnergyRequest_isUsed = 0u;
+	exiFrag->PreChargeRes_isUsed = 0u;
+	exiFrag->SessionID_isUsed = 0u;
+	exiFrag->PMaxSchedule_isUsed = 0u;
+	exiFrag->ServiceCharge_isUsed = 0u;
+	exiFrag->PgenCounter_isUsed = 0u;
+	exiFrag->ChargingStatusReq_isUsed = 0u;
+	exiFrag->X509Data_isUsed = 0u;
+	exiFrag->SalesTariffEntry_isUsed = 0u;
+	exiFrag->KeyValue_isUsed = 0u;
+	exiFrag->ChargingStatusRes_isUsed = 0u;
+	exiFrag->V2G_Message_isUsed = 0u;
+	exiFrag->DC_EVStatus_isUsed = 0u;
+	exiFrag->DC_EVStatus_isUsed = 0u;
+	exiFrag->DC_EVStatus_isUsed = 0u;
+	exiFrag->ServicePaymentSelectionReq_isUsed = 0u;
+	exiFrag->DC_EVStatus_isUsed = 0u;
+	exiFrag->EVSEIsolationStatus_isUsed = 0u;
+	exiFrag->ServicePaymentSelectionRes_isUsed = 0u;
+	exiFrag->EVSEPresentVoltage_isUsed = 0u;
+	exiFrag->EVSEPresentVoltage_isUsed = 0u;
+	exiFrag->EVSEPresentVoltage_isUsed = 0u;
+	exiFrag->BodyElement_isUsed = 0u;
+	exiFrag->EVCCID_isUsed = 0u;
+	exiFrag->PGPData_isUsed = 0u;
+	exiFrag->RootCertificateID_isUsed = 0u;
+	exiFrag->FaultCode_isUsed = 0u;
+	exiFrag->CableCheckReq_isUsed = 0u;
+	exiFrag->EVSEVoltageLimitAchieved_isUsed = 0u;
+	exiFrag->EVRESSConditioning_isUsed = 0u;
+	exiFrag->MeterInfo_isUsed = 0u;
+	exiFrag->MeterInfo_isUsed = 0u;
+	exiFrag->CableCheckRes_isUsed = 0u;
+	exiFrag->ChargingProfileEntryStart_isUsed = 0u;
+	exiFrag->SignatureProperty_isUsed = 0u;
+	exiFrag->EVMaxCurrent_isUsed = 0u;
+	exiFrag->PGPKeyPacket_isUsed = 0u;
+	exiFrag->PGPKeyPacket_isUsed = 0u;
+	exiFrag->Seed_isUsed = 0u;
+	exiFrag->RSAKeyValue_isUsed = 0u;
+	exiFrag->costKind_isUsed = 0u;
+	exiFrag->EAmount_isUsed = 0u;
+	exiFrag->EVSEPresentCurrent_isUsed = 0u;
+	exiFrag->PowerDeliveryRes_isUsed = 0u;
+	exiFrag->NumEPriceLevels_isUsed = 0u;
+	exiFrag->SessionStopRes_isUsed = 0u;
+	exiFrag->PowerDeliveryReq_isUsed = 0u;
+	exiFrag->SessionStopReq_isUsed = 0u;
+	exiFrag->XPath_isUsed = 0u;
+	exiFrag->BulkSOC_isUsed = 0u;
+	exiFrag->PMax_isUsed = 0u;
+	exiFrag->ParameterSetID_isUsed = 0u;
+	exiFrag->ParameterSetID_isUsed = 0u;
+	exiFrag->ContractID_isUsed = 0u;
+	exiFrag->ContractID_isUsed = 0u;
+	exiFrag->ContractID_isUsed = 0u;
+	exiFrag->ContractID_isUsed = 0u;
+	exiFrag->Signature_isUsed = 0u;
+	exiFrag->EVMaxVoltage_isUsed = 0u;
+	exiFrag->ReceiptRequired_isUsed = 0u;
+	exiFrag->ChargingComplete_isUsed = 0u;
+	exiFrag->ChargingProfile_isUsed = 0u;
+	exiFrag->PaymentOptions_isUsed = 0u;
+	exiFrag->SessionSetupRes_isUsed = 0u;
+	exiFrag->EVSEMaximumVoltageLimit_isUsed = 0u;
+	exiFrag->ServiceDetailRes_isUsed = 0u;
+	exiFrag->DC_EVPowerDeliveryParameter_isUsed = 0u;
+	exiFrag->PaymentDetailsRes_isUsed = 0u;
+	exiFrag->PaymentDetailsReq_isUsed = 0u;
+	exiFrag->MgmtData_isUsed = 0u;
+	exiFrag->Value_isUsed = 0u;
+	exiFrag->EVSENotification_isUsed = 0u;
+	exiFrag->EVSENotification_isUsed = 0u;
+	exiFrag->EVSEMaximumPowerLimit_isUsed = 0u;
+	exiFrag->EVTargetCurrent_isUsed = 0u;
+	exiFrag->RemainingTimeToBulkSoC_isUsed = 0u;
+	exiFrag->EVTargetCurrent_isUsed = 0u;
+	exiFrag->SessionSetupReq_isUsed = 0u;
+	exiFrag->EVSECurrentLimitAchieved_isUsed = 0u;
+	exiFrag->ServiceDetailReq_isUsed = 0u;
+	exiFrag->byteValue_isUsed = 0u;
+	exiFrag->EVMaximumPowerLimit_isUsed = 0u;
+	exiFrag->PowerSwitchClosed_isUsed = 0u;
+	exiFrag->Manifest_isUsed = 0u;
+	exiFrag->P_isUsed = 0u;
+	exiFrag->SAScheduleList_isUsed = 0u;
+	exiFrag->Q_isUsed = 0u;
+	exiFrag->X509SubjectName_isUsed = 0u;
+	exiFrag->G_isUsed = 0u;
+	exiFrag->SessionID_isUsed = 0u;
+	exiFrag->J_isUsed = 0u;
+	exiFrag->CertificateInstallationRes_isUsed = 0u;
+	exiFrag->CertificateInstallationReq_isUsed = 0u;
+	exiFrag->SalesTariff_isUsed = 0u;
+	exiFrag->Header_isUsed = 0u;
+	exiFrag->EVSEMinimumCurrentLimit_isUsed = 0u;
+	exiFrag->X509CRL_isUsed = 0u;
+	exiFrag->EVMaximumCurrentLimit_isUsed = 0u;
+	exiFrag->Y_isUsed = 0u;
+	exiFrag->DigestValue_isUsed = 0u;
+	exiFrag->DC_EVChargeParameter_isUsed = 0u;
+	exiFrag->ContractSignatureEncryptedPrivateKey_isUsed = 0u;
+	exiFrag->ContractSignatureEncryptedPrivateKey_isUsed = 0u;
+	exiFrag->DigestMethod_isUsed = 0u;
+	exiFrag->SPKISexp_isUsed = 0u;
+	exiFrag->ChargeService_isUsed = 0u;
+	exiFrag->EVSEEnergyToBeDelivered_isUsed = 0u;
+	exiFrag->SignatureProperties_isUsed = 0u;
+	exiFrag->EVSEMaxCurrent_isUsed = 0u;
+	exiFrag->EVMaximumPowerLimit_isUsed = 0u;
+	exiFrag->EVSEStatus_isUsed = 0u;
+	exiFrag->Service_isUsed = 0u;
+	exiFrag->DHParams_isUsed = 0u;
+	exiFrag->DHParams_isUsed = 0u;
+	exiFrag->DHParams_isUsed = 0u;
+	exiFrag->DHParams_isUsed = 0u;
+	exiFrag->PGPKeyID_isUsed = 0u;
+	exiFrag->DSAKeyValue_isUsed = 0u;
+	exiFrag->EnergyTransferType_isUsed = 0u;
+	exiFrag->WeldingDetectionRes_isUsed = 0u;
+	exiFrag->FreeService_isUsed = 0u;
+	exiFrag->SelectedServiceList_isUsed = 0u;
+	exiFrag->WeldingDetectionReq_isUsed = 0u;
+	exiFrag->EVTargetVoltage_isUsed = 0u;
+	exiFrag->EVTargetVoltage_isUsed = 0u;
+	exiFrag->CanonicalizationMethod_isUsed = 0u;
+	exiFrag->X509Certificate_isUsed = 0u;
+	exiFrag->CertificateUpdateRes_isUsed = 0u;
+	exiFrag->CertificateUpdateReq_isUsed = 0u;
+	exiFrag->EVSEMaxVoltage_isUsed = 0u;
+	exiFrag->SignedInfo_isUsed = 0u;
+	exiFrag->AC_EVSEChargeParameter_isUsed = 0u;
+	exiFrag->EVEnergyCapacity_isUsed = 0u;
+	exiFrag->ServiceID_isUsed = 0u;
+	exiFrag->ServiceID_isUsed = 0u;
+	exiFrag->EVSECurrentRegulationTolerance_isUsed = 0u;
+	exiFrag->ServiceParameterList_isUsed = 0u;
+	exiFrag->ListOfRootCertificateIDs_isUsed = 0u;
+	exiFrag->ListOfRootCertificateIDs_isUsed = 0u;
+	exiFrag->ProfileEntry_isUsed = 0u;
+	exiFrag->EVSEMinimumVoltageLimit_isUsed = 0u;
+	exiFrag->CurrentDemandRes_isUsed = 0u;
+	exiFrag->EVRESSSOC_isUsed = 0u;
+	exiFrag->MeterReading_isUsed = 0u;
+	exiFrag->CurrentDemandReq_isUsed = 0u;
+	exiFrag->physicalValue_isUsed = 0u;
+	exiFrag->ChargingComplete_isUsed = 0u;
+	exiFrag->TimeInterval_isUsed = 0u;
+	exiFrag->AC_EVSEStatus_isUsed = 0u;
+	exiFrag->AC_EVSEStatus_isUsed = 0u;
+	exiFrag->EVMaximumVoltageLimit_isUsed = 0u;
+	exiFrag->SignatureValue_isUsed = 0u;
+	exiFrag->DateTimeNow_isUsed = 0u;
+	exiFrag->DateTimeNow_isUsed = 0u;
+	exiFrag->ServiceTag_isUsed = 0u;
+	exiFrag->intValue_isUsed = 0u;
+	exiFrag->SelectedPaymentOption_isUsed = 0u;
+	exiFrag->ServiceName_isUsed = 0u;
+	exiFrag->EVCabinConditioning_isUsed = 0u;
+	exiFrag->EVSEID_isUsed = 0u;
+	exiFrag->ServiceScope_isUsed = 0u;
+	exiFrag->EVSEID_isUsed = 0u;
+	exiFrag->MeterStatus_isUsed = 0u;
+	exiFrag->EVRequestedEnergyTransferType_isUsed = 0u;
+	exiFrag->ServiceCategory_isUsed = 0u;
+	exiFrag->GenChallenge_isUsed = 0u;
+	exiFrag->GenChallenge_isUsed = 0u;
+	exiFrag->SalesTariffDescription_isUsed = 0u;
+	exiFrag->NotificationMaxDelay_isUsed = 0u;
+	exiFrag->NotificationMaxDelay_isUsed = 0u;
+	exiFrag->boolValue_isUsed = 0u;
+	exiFrag->EVSEStatusCode_isUsed = 0u;
+	exiFrag->ServiceScope_isUsed = 0u;
+	exiFrag->FaultMsg_isUsed = 0u;
+	exiFrag->SAScheduleTupleID_isUsed = 0u;
+	exiFrag->SAScheduleTupleID_isUsed = 0u;
+	exiFrag->BulkChargingComplete_isUsed = 0u;
+	exiFrag->KeyName_isUsed = 0u;
+	exiFrag->ParameterSet_isUsed = 0u;
+	exiFrag->SigMeterReading_isUsed = 0u;
+	exiFrag->EVSEChargeParameter_isUsed = 0u;
+	exiFrag->Body_isUsed = 0u;
+	exiFrag->SASchedules_isUsed = 0u;
+	exiFrag->ServiceCategory_isUsed = 0u;
+	exiFrag->KeyInfo_isUsed = 0u;
+	exiFrag->PMaxScheduleID_isUsed = 0u;
+	exiFrag->RemainingTimeToFullSoC_isUsed = 0u;
+	exiFrag->EVStatus_isUsed = 0u;
+	exiFrag->SubCertificates_isUsed = 0u;
+	exiFrag->PaymentOption_isUsed = 0u;
+	exiFrag->X509SKI_isUsed = 0u;
+	exiFrag->EVMaximumVoltageLimit_isUsed = 0u;
+	exiFrag->ServiceList_isUsed = 0u;
+	exiFrag->Cost_isUsed = 0u;
+	exiFrag->AC_EVSEStatus_isUsed = 0u;
+	exiFrag->AC_EVSEStatus_isUsed = 0u;
+	exiFrag->SignatureMethod_isUsed = 0u;
+	exiFrag->EVSEMinCurrent_isUsed = 0u;
+	exiFrag->ConsumptionCost_isUsed = 0u;
+	exiFrag->EVSEPeakCurrentRipple_isUsed = 0u;
+	exiFrag->EVErrorCode_isUsed = 0u;
+	exiFrag->EVChargeParameter_isUsed = 0u;
+	exiFrag->start_isUsed = 0u;
+	exiFrag->X509IssuerName_isUsed = 0u;
+	exiFrag->Reference_isUsed = 0u;
+	exiFrag->EVMinCurrent_isUsed = 0u;
+	exiFrag->FullSOC_isUsed = 0u;
+	exiFrag->amount_isUsed = 0u;
+	exiFrag->DC_EVSEStatus_isUsed = 0u;
+	exiFrag->DC_EVSEStatus_isUsed = 0u;
+	exiFrag->shortValue_isUsed = 0u;
+	exiFrag->DC_EVSEChargeParameter_isUsed = 0u;
+	exiFrag->Entry_isUsed = 0u;
+	exiFrag->ServiceID_isUsed = 0u;
+	exiFrag->ServiceID_isUsed = 0u;
+	exiFrag->SalesTariffID_isUsed = 0u;
+	exiFrag->MeterID_isUsed = 0u;
+	exiFrag->EVSEMaximumCurrentLimit_isUsed = 0u;
+	exiFrag->ChargeParameterDiscoveryReq_isUsed = 0u;
+	exiFrag->amountMultiplier_isUsed = 0u;
+	exiFrag->ChargeParameterDiscoveryRes_isUsed = 0u;
+	exiFrag->Transform_isUsed = 0u;
+	exiFrag->Object_isUsed = 0u;
+	exiFrag->RCD_isUsed = 0u;
+	exiFrag->Notification_isUsed = 0u;
+	exiFrag->startValue_isUsed = 0u;
+	exiFrag->Modulus_isUsed = 0u;
+	exiFrag->EVSEMaxCurrent_isUsed = 0u;
+}
+#endif /* DEPLOY_DIN_CODEC_FRAGMENT */
+
+void init_dinMeteringReceiptReqType(struct dinMeteringReceiptReqType* dinMeteringReceiptReqType) {
+	dinMeteringReceiptReqType->Id_isUsed = 0u;
+	dinMeteringReceiptReqType->SAScheduleTupleID_isUsed = 0u;
+}
+
+void init_dinBodyType(struct dinBodyType* dinBodyType) {
+	dinBodyType->BodyElement_isUsed = 0u;
+	dinBodyType->SessionSetupReq_isUsed = 0u;
+	dinBodyType->SessionSetupRes_isUsed = 0u;
+	dinBodyType->ServiceDiscoveryReq_isUsed = 0u;
+	dinBodyType->ServiceDiscoveryRes_isUsed = 0u;
+	dinBodyType->ServiceDetailReq_isUsed = 0u;
+	dinBodyType->ServiceDetailRes_isUsed = 0u;
+	dinBodyType->ServicePaymentSelectionReq_isUsed = 0u;
+	dinBodyType->ServicePaymentSelectionRes_isUsed = 0u;
+	dinBodyType->PaymentDetailsReq_isUsed = 0u;
+	dinBodyType->PaymentDetailsRes_isUsed = 0u;
+	dinBodyType->ContractAuthenticationReq_isUsed = 0u;
+	dinBodyType->ContractAuthenticationRes_isUsed = 0u;
+	dinBodyType->ChargeParameterDiscoveryReq_isUsed = 0u;
+	dinBodyType->ChargeParameterDiscoveryRes_isUsed = 0u;
+	dinBodyType->PowerDeliveryReq_isUsed = 0u;
+	dinBodyType->PowerDeliveryRes_isUsed = 0u;
+	dinBodyType->ChargingStatusReq_isUsed = 0u;
+	dinBodyType->ChargingStatusRes_isUsed = 0u;
+	dinBodyType->MeteringReceiptReq_isUsed = 0u;
+	dinBodyType->MeteringReceiptRes_isUsed = 0u;
+	dinBodyType->SessionStopReq_isUsed = 0u;
+	dinBodyType->SessionStopRes_isUsed = 0u;
+	dinBodyType->CertificateUpdateReq_isUsed = 0u;
+	dinBodyType->CertificateUpdateRes_isUsed = 0u;
+	dinBodyType->CertificateInstallationReq_isUsed = 0u;
+	dinBodyType->CertificateInstallationRes_isUsed = 0u;
+	dinBodyType->CableCheckReq_isUsed = 0u;
+	dinBodyType->CableCheckRes_isUsed = 0u;
+	dinBodyType->PreChargeReq_isUsed = 0u;
+	dinBodyType->PreChargeRes_isUsed = 0u;
+	dinBodyType->CurrentDemandReq_isUsed = 0u;
+	dinBodyType->CurrentDemandRes_isUsed = 0u;
+	dinBodyType->WeldingDetectionReq_isUsed = 0u;
+	dinBodyType->WeldingDetectionRes_isUsed = 0u;
+}
+
+void init_dinSessionSetupReqType(struct dinSessionSetupReqType* dinSessionSetupReqType) {
+	(void)dinSessionSetupReqType; /* avoid unused warning */
+}
+
+void init_dinPowerDeliveryResType(struct dinPowerDeliveryResType* dinPowerDeliveryResType) {
+	dinPowerDeliveryResType->EVSEStatus_isUsed = 0u;
+	dinPowerDeliveryResType->AC_EVSEStatus_isUsed = 0u;
+	dinPowerDeliveryResType->DC_EVSEStatus_isUsed = 0u;
+}
+
+void init_dinServiceDetailResType(struct dinServiceDetailResType* dinServiceDetailResType) {
+	dinServiceDetailResType->ServiceParameterList_isUsed = 0u;
+}
+
+void init_dinWeldingDetectionResType(struct dinWeldingDetectionResType* dinWeldingDetectionResType) {
+	(void)dinWeldingDetectionResType; /* avoid unused warning */
+}
+
+void init_dinContractAuthenticationResType(struct dinContractAuthenticationResType* dinContractAuthenticationResType) {
+	(void)dinContractAuthenticationResType; /* avoid unused warning */
+}
+
+void init_dinCanonicalizationMethodType(struct dinCanonicalizationMethodType* dinCanonicalizationMethodType) {
+	dinCanonicalizationMethodType->ANY_isUsed = 0u;
+}
+
+void init_dinSPKIDataType(struct dinSPKIDataType* dinSPKIDataType) {
+	dinSPKIDataType->SPKISexp.arrayLen = 0u;
+	dinSPKIDataType->ANY_isUsed = 0u;
+}
+
+void init_dinListOfRootCertificateIDsType(struct dinListOfRootCertificateIDsType* dinListOfRootCertificateIDsType) {
+	dinListOfRootCertificateIDsType->RootCertificateID.arrayLen = 0u;
+}
+
+void init_dinSelectedServiceListType(struct dinSelectedServiceListType* dinSelectedServiceListType) {
+	dinSelectedServiceListType->SelectedService.arrayLen = 0u;
+}
+
+void init_dinCurrentDemandResType(struct dinCurrentDemandResType* dinCurrentDemandResType) {
+	dinCurrentDemandResType->EVSEMaximumVoltageLimit_isUsed = 0u;
+	dinCurrentDemandResType->EVSEMaximumCurrentLimit_isUsed = 0u;
+	dinCurrentDemandResType->EVSEMaximumPowerLimit_isUsed = 0u;
+}
+
+void init_dinTransformType(struct dinTransformType* dinTransformType) {
+	dinTransformType->ANY_isUsed = 0u;
+	dinTransformType->XPath.arrayLen = 0u;
+}
+
+void init_dinAC_EVChargeParameterType(struct dinAC_EVChargeParameterType* dinAC_EVChargeParameterType) {
+	(void)dinAC_EVChargeParameterType; /* avoid unused warning */
+}
+
+void init_dinX509DataType(struct dinX509DataType* dinX509DataType) {
+	dinX509DataType->X509IssuerSerial.arrayLen = 0u;
+	dinX509DataType->X509SKI.arrayLen = 0u;
+	dinX509DataType->X509SubjectName.arrayLen = 0u;
+	dinX509DataType->X509Certificate.arrayLen = 0u;
+	dinX509DataType->X509CRL.arrayLen = 0u;
+	dinX509DataType->ANY_isUsed = 0u;
+}
+
+void init_dinChargingStatusResType(struct dinChargingStatusResType* dinChargingStatusResType) {
+	dinChargingStatusResType->EVSEMaxCurrent_isUsed = 0u;
+	dinChargingStatusResType->MeterInfo_isUsed = 0u;
+}
+
+void init_dinWeldingDetectionReqType(struct dinWeldingDetectionReqType* dinWeldingDetectionReqType) {
+	(void)dinWeldingDetectionReqType; /* avoid unused warning */
+}
+
+void init_dinSignaturePropertiesType(struct dinSignaturePropertiesType* dinSignaturePropertiesType) {
+	dinSignaturePropertiesType->Id_isUsed = 0u;
+	dinSignaturePropertiesType->SignatureProperty.arrayLen = 0u;
+}
+
+void init_dinContractAuthenticationReqType(struct dinContractAuthenticationReqType* dinContractAuthenticationReqType) {
+	dinContractAuthenticationReqType->Id_isUsed = 0u;
+	dinContractAuthenticationReqType->GenChallenge_isUsed = 0u;
+}
+
+void init_dinDC_EVPowerDeliveryParameterType(struct dinDC_EVPowerDeliveryParameterType* dinDC_EVPowerDeliveryParameterType) {
+	dinDC_EVPowerDeliveryParameterType->BulkChargingComplete_isUsed = 0u;
+}
+
+void init_dinEVSEChargeParameterType(struct dinEVSEChargeParameterType* dinEVSEChargeParameterType) {
+	(void)dinEVSEChargeParameterType; /* avoid unused warning */
+}
+
+void init_dinCableCheckReqType(struct dinCableCheckReqType* dinCableCheckReqType) {
+	(void)dinCableCheckReqType; /* avoid unused warning */
+}
+
+void init_dinDC_EVChargeParameterType(struct dinDC_EVChargeParameterType* dinDC_EVChargeParameterType) {
+	dinDC_EVChargeParameterType->EVMaximumPowerLimit_isUsed = 0u;
+	dinDC_EVChargeParameterType->EVEnergyCapacity_isUsed = 0u;
+	dinDC_EVChargeParameterType->EVEnergyRequest_isUsed = 0u;
+	dinDC_EVChargeParameterType->FullSOC_isUsed = 0u;
+	dinDC_EVChargeParameterType->BulkSOC_isUsed = 0u;
+}
+
+void init_dinSAScheduleListType(struct dinSAScheduleListType* dinSAScheduleListType) {
+	dinSAScheduleListType->SAScheduleTuple.arrayLen = 0u;
+}
+
+void init_dinPMaxScheduleType(struct dinPMaxScheduleType* dinPMaxScheduleType) {
+	dinPMaxScheduleType->PMaxScheduleEntry.arrayLen = 0u;
+}
+
+void init_dinServicePaymentSelectionReqType(struct dinServicePaymentSelectionReqType* dinServicePaymentSelectionReqType) {
+	(void)dinServicePaymentSelectionReqType; /* avoid unused warning */
+}
+
+void init_dinRelativeTimeIntervalType(struct dinRelativeTimeIntervalType* dinRelativeTimeIntervalType) {
+	dinRelativeTimeIntervalType->duration_isUsed = 0u;
+}
+
+void init_dinEVStatusType(struct dinEVStatusType* dinEVStatusType) {
+	(void)dinEVStatusType; /* avoid unused warning */
+}
+
+void init_dinPreChargeResType(struct dinPreChargeResType* dinPreChargeResType) {
+	(void)dinPreChargeResType; /* avoid unused warning */
+}
+
+void init_dinDC_EVSEChargeParameterType(struct dinDC_EVSEChargeParameterType* dinDC_EVSEChargeParameterType) {
+	dinDC_EVSEChargeParameterType->EVSEMaximumPowerLimit_isUsed = 0u;
+	dinDC_EVSEChargeParameterType->EVSECurrentRegulationTolerance_isUsed = 0u;
+	dinDC_EVSEChargeParameterType->EVSEEnergyToBeDelivered_isUsed = 0u;
+}
+
+void init_dinPaymentDetailsResType(struct dinPaymentDetailsResType* dinPaymentDetailsResType) {
+	(void)dinPaymentDetailsResType; /* avoid unused warning */
+}
+
+void init_dinDSAKeyValueType(struct dinDSAKeyValueType* dinDSAKeyValueType) {
+	dinDSAKeyValueType->P_isUsed = 0u;
+	dinDSAKeyValueType->Q_isUsed = 0u;
+	dinDSAKeyValueType->G_isUsed = 0u;
+	dinDSAKeyValueType->J_isUsed = 0u;
+	dinDSAKeyValueType->Seed_isUsed = 0u;
+	dinDSAKeyValueType->PgenCounter_isUsed = 0u;
+}
+
+void init_dinSASchedulesType(struct dinSASchedulesType* dinSASchedulesType) {
+	(void)dinSASchedulesType; /* avoid unused warning */
+}
+
+void init_dinCertificateUpdateResType(struct dinCertificateUpdateResType* dinCertificateUpdateResType) {
+	(void)dinCertificateUpdateResType; /* avoid unused warning */
+}
+
+void init_dinEVChargeParameterType(struct dinEVChargeParameterType* dinEVChargeParameterType) {
+	(void)dinEVChargeParameterType; /* avoid unused warning */
+}
+
+void init_dinMessageHeaderType(struct dinMessageHeaderType* dinMessageHeaderType) {
+	dinMessageHeaderType->Notification_isUsed = 0u;
+	dinMessageHeaderType->Signature_isUsed = 0u;
+}
+
+void init_dinBodyBaseType(struct dinBodyBaseType* dinBodyBaseType) {
+	(void)dinBodyBaseType; /* avoid unused warning */
+}
+
+void init_dinKeyValueType(struct dinKeyValueType* dinKeyValueType) {
+	dinKeyValueType->DSAKeyValue_isUsed = 0u;
+	dinKeyValueType->RSAKeyValue_isUsed = 0u;
+	dinKeyValueType->ANY_isUsed = 0u;
+}
+
+void init_dinIntervalType(struct dinIntervalType* dinIntervalType) {
+	(void)dinIntervalType; /* avoid unused warning */
+}
+
+void init_dinChargeParameterDiscoveryResType(struct dinChargeParameterDiscoveryResType* dinChargeParameterDiscoveryResType) {
+	dinChargeParameterDiscoveryResType->SASchedules_isUsed = 0u;
+	dinChargeParameterDiscoveryResType->SAScheduleList_isUsed = 0u;
+	dinChargeParameterDiscoveryResType->EVSEChargeParameter_isUsed = 0u;
+	dinChargeParameterDiscoveryResType->AC_EVSEChargeParameter_isUsed = 0u;
+	dinChargeParameterDiscoveryResType->DC_EVSEChargeParameter_isUsed = 0u;
+}
+
+void init_dinPowerDeliveryReqType(struct dinPowerDeliveryReqType* dinPowerDeliveryReqType) {
+	dinPowerDeliveryReqType->ChargingProfile_isUsed = 0u;
+	dinPowerDeliveryReqType->EVPowerDeliveryParameter_isUsed = 0u;
+	dinPowerDeliveryReqType->DC_EVPowerDeliveryParameter_isUsed = 0u;
+}
+
+void init_dinCertificateChainType(struct dinCertificateChainType* dinCertificateChainType) {
+	dinCertificateChainType->SubCertificates_isUsed = 0u;
+}
+
+void init_dinTransformsType(struct dinTransformsType* dinTransformsType) {
+	dinTransformsType->Transform.arrayLen = 0u;
+}
+
+void init_dinEntryType(struct dinEntryType* dinEntryType) {
+	dinEntryType->TimeInterval_isUsed = 0u;
+	dinEntryType->RelativeTimeInterval_isUsed = 0u;
+}
+
+void init_dinSessionStopType(struct dinSessionStopType* dinSessionStopType) {
+	(void)dinSessionStopType; /* avoid unused warning */
+}
+
+void init_dinServiceDetailReqType(struct dinServiceDetailReqType* dinServiceDetailReqType) {
+	(void)dinServiceDetailReqType; /* avoid unused warning */
+}
+
+void init_dinDigestMethodType(struct dinDigestMethodType* dinDigestMethodType) {
+	dinDigestMethodType->ANY_isUsed = 0u;
+}
+
+void init_dinParameterType(struct dinParameterType* dinParameterType) {
+	dinParameterType->boolValue_isUsed = 0u;
+	dinParameterType->byteValue_isUsed = 0u;
+	dinParameterType->shortValue_isUsed = 0u;
+	dinParameterType->intValue_isUsed = 0u;
+	dinParameterType->physicalValue_isUsed = 0u;
+	dinParameterType->stringValue_isUsed = 0u;
+}
+
+void init_dinChargingStatusReqType(struct dinChargingStatusReqType* dinChargingStatusReqType) {
+	(void)dinChargingStatusReqType; /* avoid unused warning */
+}
+
+void init_dinSignatureMethodType(struct dinSignatureMethodType* dinSignatureMethodType) {
+	dinSignatureMethodType->HMACOutputLength_isUsed = 0u;
+	dinSignatureMethodType->ANY_isUsed = 0u;
+}
+
+void init_dinCertificateInstallationReqType(struct dinCertificateInstallationReqType* dinCertificateInstallationReqType) {
+	dinCertificateInstallationReqType->Id_isUsed = 0u;
+}
+
+void init_dinSalesTariffEntryType(struct dinSalesTariffEntryType* dinSalesTariffEntryType) {
+	dinSalesTariffEntryType->TimeInterval_isUsed = 0u;
+	dinSalesTariffEntryType->RelativeTimeInterval_isUsed = 0u;
+	dinSalesTariffEntryType->ConsumptionCost.arrayLen = 0u;
+}
+
+void init_dinServiceDiscoveryResType(struct dinServiceDiscoveryResType* dinServiceDiscoveryResType) {
+	dinServiceDiscoveryResType->ServiceList_isUsed = 0u;
+}
+
+void init_dinParameterSetType(struct dinParameterSetType* dinParameterSetType) {
+	dinParameterSetType->Parameter.arrayLen = 0u;
+}
+
+void init_dinCurrentDemandReqType(struct dinCurrentDemandReqType* dinCurrentDemandReqType) {
+	dinCurrentDemandReqType->EVMaximumVoltageLimit_isUsed = 0u;
+	dinCurrentDemandReqType->EVMaximumCurrentLimit_isUsed = 0u;
+	dinCurrentDemandReqType->EVMaximumPowerLimit_isUsed = 0u;
+	dinCurrentDemandReqType->BulkChargingComplete_isUsed = 0u;
+	dinCurrentDemandReqType->RemainingTimeToFullSoC_isUsed = 0u;
+	dinCurrentDemandReqType->RemainingTimeToBulkSoC_isUsed = 0u;
+}
+
+void init_dinPreChargeReqType(struct dinPreChargeReqType* dinPreChargeReqType) {
+	(void)dinPreChargeReqType; /* avoid unused warning */
+}
+
+void init_dinSignatureType(struct dinSignatureType* dinSignatureType) {
+	dinSignatureType->Id_isUsed = 0u;
+	dinSignatureType->KeyInfo_isUsed = 0u;
+	dinSignatureType->Object.arrayLen = 0u;
+}
+
+void init_dinReferenceType(struct dinReferenceType* dinReferenceType) {
+	dinReferenceType->Id_isUsed = 0u;
+	dinReferenceType->URI_isUsed = 0u;
+	dinReferenceType->Type_isUsed = 0u;
+	dinReferenceType->Transforms_isUsed = 0u;
+}
+
+void init_dinProfileEntryType(struct dinProfileEntryType* dinProfileEntryType) {
+	(void)dinProfileEntryType; /* avoid unused warning */
+}
+
+void init_dinAnonType_V2G_Message(struct dinAnonType_V2G_Message* dinAnonType_V2G_Message) {
+	(void)dinAnonType_V2G_Message; /* avoid unused warning */
+}
+
+void init_dinChargeParameterDiscoveryReqType(struct dinChargeParameterDiscoveryReqType* dinChargeParameterDiscoveryReqType) {
+	dinChargeParameterDiscoveryReqType->EVChargeParameter_isUsed = 0u;
+	dinChargeParameterDiscoveryReqType->AC_EVChargeParameter_isUsed = 0u;
+	dinChargeParameterDiscoveryReqType->DC_EVChargeParameter_isUsed = 0u;
+}
+
+void init_dinConsumptionCostType(struct dinConsumptionCostType* dinConsumptionCostType) {
+	dinConsumptionCostType->Cost.arrayLen = 0u;
+}
+
+void init_dinRSAKeyValueType(struct dinRSAKeyValueType* dinRSAKeyValueType) {
+	(void)dinRSAKeyValueType; /* avoid unused warning */
+}
+
+void init_dinServiceType(struct dinServiceType* dinServiceType) {
+	(void)dinServiceType; /* avoid unused warning */
+}
+
+void init_dinServiceTagListType(struct dinServiceTagListType* dinServiceTagListType) {
+	dinServiceTagListType->Service.arrayLen = 0u;
+}
+
+void init_dinEVSEStatusType(struct dinEVSEStatusType* dinEVSEStatusType) {
+	(void)dinEVSEStatusType; /* avoid unused warning */
+}
+
+void init_dinSessionSetupResType(struct dinSessionSetupResType* dinSessionSetupResType) {
+	dinSessionSetupResType->DateTimeNow_isUsed = 0u;
+}
+
+void init_dinEVPowerDeliveryParameterType(struct dinEVPowerDeliveryParameterType* dinEVPowerDeliveryParameterType) {
+	(void)dinEVPowerDeliveryParameterType; /* avoid unused warning */
+}
+
+void init_dinX509IssuerSerialType(struct dinX509IssuerSerialType* dinX509IssuerSerialType) {
+	(void)dinX509IssuerSerialType; /* avoid unused warning */
+}
+
+void init_dinSelectedServiceType(struct dinSelectedServiceType* dinSelectedServiceType) {
+	dinSelectedServiceType->ParameterSetID_isUsed = 0u;
+}
+
+void init_dinMeteringReceiptResType(struct dinMeteringReceiptResType* dinMeteringReceiptResType) {
+	(void)dinMeteringReceiptResType; /* avoid unused warning */
+}
+
+void init_dinDC_EVStatusType(struct dinDC_EVStatusType* dinDC_EVStatusType) {
+	dinDC_EVStatusType->EVCabinConditioning_isUsed = 0u;
+	dinDC_EVStatusType->EVRESSConditioning_isUsed = 0u;
+}
+
+void init_dinPhysicalValueType(struct dinPhysicalValueType* dinPhysicalValueType) {
+	dinPhysicalValueType->Unit_isUsed = 0u;
+}
+
+void init_dinManifestType(struct dinManifestType* dinManifestType) {
+	dinManifestType->Id_isUsed = 0u;
+	dinManifestType->Reference.arrayLen = 0u;
+}
+
+void init_dinPMaxScheduleEntryType(struct dinPMaxScheduleEntryType* dinPMaxScheduleEntryType) {
+	dinPMaxScheduleEntryType->TimeInterval_isUsed = 0u;
+	dinPMaxScheduleEntryType->RelativeTimeInterval_isUsed = 0u;
+}
+
+void init_dinServiceParameterListType(struct dinServiceParameterListType* dinServiceParameterListType) {
+	dinServiceParameterListType->ParameterSet.arrayLen = 0u;
+}
+
+void init_dinSignatureValueType(struct dinSignatureValueType* dinSignatureValueType) {
+	dinSignatureValueType->Id_isUsed = 0u;
+}
+
+void init_dinPaymentOptionsType(struct dinPaymentOptionsType* dinPaymentOptionsType) {
+	dinPaymentOptionsType->PaymentOption.arrayLen = 0u;
+}
+
+void init_dinServiceTagType(struct dinServiceTagType* dinServiceTagType) {
+	dinServiceTagType->ServiceName_isUsed = 0u;
+	dinServiceTagType->ServiceScope_isUsed = 0u;
+}
+
+void init_dinAC_EVSEStatusType(struct dinAC_EVSEStatusType* dinAC_EVSEStatusType) {
+	(void)dinAC_EVSEStatusType; /* avoid unused warning */
+}
+
+void init_dinCertificateUpdateReqType(struct dinCertificateUpdateReqType* dinCertificateUpdateReqType) {
+	dinCertificateUpdateReqType->Id_isUsed = 0u;
+}
+
+void init_dinServicePaymentSelectionResType(struct dinServicePaymentSelectionResType* dinServicePaymentSelectionResType) {
+	(void)dinServicePaymentSelectionResType; /* avoid unused warning */
+}
+
+void init_dinSAScheduleTupleType(struct dinSAScheduleTupleType* dinSAScheduleTupleType) {
+	dinSAScheduleTupleType->SalesTariff_isUsed = 0u;
+}
+
+void init_dinChargingProfileType(struct dinChargingProfileType* dinChargingProfileType) {
+	dinChargingProfileType->ProfileEntry.arrayLen = 0u;
+}
+
+void init_dinServiceDiscoveryReqType(struct dinServiceDiscoveryReqType* dinServiceDiscoveryReqType) {
+	dinServiceDiscoveryReqType->ServiceScope_isUsed = 0u;
+	dinServiceDiscoveryReqType->ServiceCategory_isUsed = 0u;
+}
+
+void init_dinAC_EVSEChargeParameterType(struct dinAC_EVSEChargeParameterType* dinAC_EVSEChargeParameterType) {
+	(void)dinAC_EVSEChargeParameterType; /* avoid unused warning */
+}
+
+void init_dinKeyInfoType(struct dinKeyInfoType* dinKeyInfoType) {
+	dinKeyInfoType->Id_isUsed = 0u;
+	dinKeyInfoType->KeyName.arrayLen = 0u;
+	dinKeyInfoType->KeyValue.arrayLen = 0u;
+	dinKeyInfoType->RetrievalMethod.arrayLen = 0u;
+	dinKeyInfoType->X509Data.arrayLen = 0u;
+	dinKeyInfoType->PGPData.arrayLen = 0u;
+	dinKeyInfoType->SPKIData.arrayLen = 0u;
+	dinKeyInfoType->MgmtData.arrayLen = 0u;
+	dinKeyInfoType->ANY_isUsed = 0u;
+}
+
+void init_dinPaymentDetailsReqType(struct dinPaymentDetailsReqType* dinPaymentDetailsReqType) {
+	(void)dinPaymentDetailsReqType; /* avoid unused warning */
+}
+
+void init_dinCableCheckResType(struct dinCableCheckResType* dinCableCheckResType) {
+	(void)dinCableCheckResType; /* avoid unused warning */
+}
+
+void init_dinObjectType(struct dinObjectType* dinObjectType) {
+	dinObjectType->Id_isUsed = 0u;
+	dinObjectType->MimeType_isUsed = 0u;
+	dinObjectType->Encoding_isUsed = 0u;
+	dinObjectType->ANY_isUsed = 0u;
+}
+
+void init_dinSessionStopResType(struct dinSessionStopResType* dinSessionStopResType) {
+	(void)dinSessionStopResType; /* avoid unused warning */
+}
+
+void init_dinSignedInfoType(struct dinSignedInfoType* dinSignedInfoType) {
+	dinSignedInfoType->Id_isUsed = 0u;
+	dinSignedInfoType->Reference.arrayLen = 0u;
+}
+
+void init_dinSalesTariffType(struct dinSalesTariffType* dinSalesTariffType) {
+	dinSalesTariffType->SalesTariffDescription_isUsed = 0u;
+	dinSalesTariffType->SalesTariffEntry.arrayLen = 0u;
+}
+
+void init_dinCostType(struct dinCostType* dinCostType) {
+	dinCostType->amountMultiplier_isUsed = 0u;
+}
+
+void init_dinServiceChargeType(struct dinServiceChargeType* dinServiceChargeType) {
+	(void)dinServiceChargeType; /* avoid unused warning */
+}
+
+void init_dinDC_EVSEStatusType(struct dinDC_EVSEStatusType* dinDC_EVSEStatusType) {
+	dinDC_EVSEStatusType->EVSEIsolationStatus_isUsed = 0u;
+}
+
+void init_dinRetrievalMethodType(struct dinRetrievalMethodType* dinRetrievalMethodType) {
+	dinRetrievalMethodType->URI_isUsed = 0u;
+	dinRetrievalMethodType->Type_isUsed = 0u;
+	dinRetrievalMethodType->Transforms_isUsed = 0u;
+}
+
+void init_dinNotificationType(struct dinNotificationType* dinNotificationType) {
+	dinNotificationType->FaultMsg_isUsed = 0u;
+}
+
+void init_dinPGPDataType(struct dinPGPDataType* dinPGPDataType) {
+	dinPGPDataType->PGPKeyID_isUsed = 0u;
+	dinPGPDataType->PGPKeyPacket_isUsed = 0u;
+	dinPGPDataType->ANY_isUsed = 0u;
+}
+
+void init_dinCertificateInstallationResType(struct dinCertificateInstallationResType* dinCertificateInstallationResType) {
+	(void)dinCertificateInstallationResType; /* avoid unused warning */
+}
+
+void init_dinSignaturePropertyType(struct dinSignaturePropertyType* dinSignaturePropertyType) {
+	dinSignaturePropertyType->Id_isUsed = 0u;
+	dinSignaturePropertyType->ANY_isUsed = 0u;
+}
+
+void init_dinMeterInfoType(struct dinMeterInfoType* dinMeterInfoType) {
+	dinMeterInfoType->MeterReading_isUsed = 0u;
+	dinMeterInfoType->SigMeterReading_isUsed = 0u;
+	dinMeterInfoType->MeterStatus_isUsed = 0u;
+	dinMeterInfoType->TMeter_isUsed = 0u;
+}
+
+void init_dinSubCertificatesType(struct dinSubCertificatesType* dinSubCertificatesType) {
+	dinSubCertificatesType->Certificate.arrayLen = 0u;
+}
+
+
+
+#endif /* DEPLOY_DIN_CODEC */
+
+#endif
+

+ 2934 - 0
EVSE/Projects/CCS/Apps/exi_engine/din/dinEXIDatatypes.h

@@ -0,0 +1,2934 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9.4
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+ * \file 	EXIDatatypes.h
+ * \brief 	Datatype definitions and structs for given XML Schema definitions and initialization methods
+ *
+ */
+
+#ifndef EXI_din_DATATYPES_H
+#define EXI_din_DATATYPES_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define SUPPORT_YES 1
+#define SUPPORT_NO 2
+#define DEPLOY_DIN_CODEC SUPPORT_YES
+#define DEPLOY_DIN_CODEC_FRAGMENT SUPPORT_NO
+
+#if DEPLOY_DIN_CODEC == SUPPORT_YES
+
+#include <stdint.h>
+
+#include "../codec/EXITypes.h"
+
+
+/* Datatype definitions and structs for given XML Schema definitions */
+
+#define UNION_YES 1
+#define UNION_NO 2
+#define SAVE_MEMORY_WITH_UNNAMED_UNION UNION_YES
+
+/* Note: Please find below a list of occurrence limits that have been applied */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":SPKISexp from unbounded to 1 (see #define dinSPKIDataType_SPKISexp_ARRAY_SIZE) */
+/* Limit occurrence of element "urn:iso:15118:2:2010:MsgDataTypes":RootCertificateID from unbounded to 5 (see #define dinListOfRootCertificateIDsType_RootCertificateID_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":XPath from unbounded to 1 (see #define dinTransformType_XPath_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":Transform from unbounded to 1 (see #define dinTransformsType_Transform_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":Reference from unbounded to 1 (see #define dinManifestType_Reference_ARRAY_SIZE) */
+/* Limit occurrence of element "urn:iso:15118:2:2010:MsgDataTypes":PaymentOption from unbounded to 5 (see #define dinPaymentOptionsType_PaymentOption_ARRAY_SIZE) */
+/* Limit occurrence of element "urn:iso:15118:2:2010:MsgDataTypes":ProfileEntry from unbounded to 24 (see #define dinChargingProfileType_ProfileEntry_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":Reference from unbounded to 1 (see #define dinSignedInfoType_Reference_ARRAY_SIZE) */
+/* Limit occurrence of element "urn:iso:15118:2:2010:MsgDataTypes":Certificate from unbounded to 5 (see #define dinSubCertificatesType_Certificate_ARRAY_SIZE) */
+/* Limit occurrence of element "urn:iso:15118:2:2010:MsgDataTypes":SelectedService from unbounded to 16 (see #define dinSelectedServiceListType_SelectedService_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":X509IssuerSerial from unbounded to 1 (see #define dinX509DataType_X509IssuerSerial_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":X509SKI from unbounded to 1 (see #define dinX509DataType_X509SKI_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":X509SubjectName from unbounded to 1 (see #define dinX509DataType_X509SubjectName_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":X509Certificate from unbounded to 1 (see #define dinX509DataType_X509Certificate_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":X509CRL from unbounded to 1 (see #define dinX509DataType_X509CRL_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":SignatureProperty from unbounded to 1 (see #define dinSignaturePropertiesType_SignatureProperty_ARRAY_SIZE) */
+/* Limit occurrence of element "urn:iso:15118:2:2010:MsgDataTypes":PMaxScheduleEntry from unbounded to 5 (see #define dinPMaxScheduleType_PMaxScheduleEntry_ARRAY_SIZE) */
+/* Limit occurrence of element "urn:iso:15118:2:2010:MsgDataTypes":Parameter from unbounded to 16 (see #define dinParameterSetType_Parameter_ARRAY_SIZE) */
+/* Limit occurrence of element "urn:iso:15118:2:2010:MsgDataTypes":Cost from unbounded to 5 (see #define dinConsumptionCostType_Cost_ARRAY_SIZE) */
+/* Limit occurrence of element "urn:iso:15118:2:2010:MsgDataTypes":Service from unbounded to 8 (see #define dinServiceTagListType_Service_ARRAY_SIZE) */
+/* Limit occurrence of element "urn:iso:15118:2:2010:MsgDataTypes":ParameterSet from unbounded to 5 (see #define dinServiceParameterListType_ParameterSet_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":KeyName from unbounded to 1 (see #define dinKeyInfoType_KeyName_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":KeyValue from unbounded to 1 (see #define dinKeyInfoType_KeyValue_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":RetrievalMethod from unbounded to 1 (see #define dinKeyInfoType_RetrievalMethod_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":X509Data from unbounded to 1 (see #define dinKeyInfoType_X509Data_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":PGPData from unbounded to 1 (see #define dinKeyInfoType_PGPData_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":SPKIData from unbounded to 1 (see #define dinKeyInfoType_SPKIData_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":MgmtData from unbounded to 1 (see #define dinKeyInfoType_MgmtData_ARRAY_SIZE) */
+/* Limit occurrence of element "urn:iso:15118:2:2010:MsgDataTypes":ConsumptionCost from unbounded to 5 (see #define dinSalesTariffEntryType_ConsumptionCost_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":Object from unbounded to 1 (see #define dinSignatureType_Object_ARRAY_SIZE) */
+/* Limit occurrence of element "urn:iso:15118:2:2010:MsgDataTypes":SalesTariffEntry from unbounded to 5 (see #define dinSalesTariffType_SalesTariffEntry_ARRAY_SIZE) */
+/* Limit occurrence of element "urn:iso:15118:2:2010:MsgDataTypes":SAScheduleTuple from unbounded to 5 (see #define dinSAScheduleListType_SAScheduleTuple_ARRAY_SIZE) */
+
+
+typedef enum {
+	dinDC_EVSEStatusCodeType_EVSE_NotReady = 0,
+	dinDC_EVSEStatusCodeType_EVSE_Ready = 1,
+	dinDC_EVSEStatusCodeType_EVSE_Shutdown = 2,
+	dinDC_EVSEStatusCodeType_EVSE_UtilityInterruptEvent = 3,
+	dinDC_EVSEStatusCodeType_EVSE_IsolationMonitoringActive = 4,
+	dinDC_EVSEStatusCodeType_EVSE_EmergencyShutdown = 5,
+	dinDC_EVSEStatusCodeType_EVSE_Malfunction = 6,
+	dinDC_EVSEStatusCodeType_Reserved_8 = 7,
+	dinDC_EVSEStatusCodeType_Reserved_9 = 8,
+	dinDC_EVSEStatusCodeType_Reserved_A = 9,
+	dinDC_EVSEStatusCodeType_Reserved_B = 10,
+	dinDC_EVSEStatusCodeType_Reserved_C = 11
+} dinDC_EVSEStatusCodeType;
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,SessionSetupReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":EVCCID)',  derivedBy='EXTENSION'.  */
+#define dinSessionSetupReqType_EVCCID_BYTES_SIZE 8 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,evccIDType is 8 */
+struct dinSessionSetupReqType {
+	/* element: "urn:iso:15118:2:2010:MsgBody":EVCCID, urn:iso:15118:2:2010:MsgDataTypes,evccIDType */
+	struct {
+		uint8_t bytes[dinSessionSetupReqType_EVCCID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  EVCCID ;
+};
+
+typedef enum {
+	dinEVSEProcessingType_Finished = 0,
+	dinEVSEProcessingType_Ongoing = 1
+} dinEVSEProcessingType;
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,CanonicalizationMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##any]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define dinCanonicalizationMethodType_Algorithm_CHARACTERS_SIZE 65 + EXTRA_CHAR
+#define dinCanonicalizationMethodType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR
+struct dinCanonicalizationMethodType {
+	/* attribute: Algorithm {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[dinCanonicalizationMethodType_Algorithm_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Algorithm ;
+	/* element: WC[##any] */
+	struct {
+		exi_string_character_t characters[dinCanonicalizationMethodType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SPKIDataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":SPKISexp,(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-1}){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define dinSPKIDataType_SPKISexp_BYTES_SIZE 350
+#define dinSPKIDataType_SPKISexp_ARRAY_SIZE 1
+#define dinSPKIDataType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR
+struct dinSPKIDataType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SPKISexp, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		struct {
+			uint8_t bytes[dinSPKIDataType_SPKISexp_BYTES_SIZE];
+			uint16_t bytesLen;
+		}  array[dinSPKIDataType_SPKISexp_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SPKISexp;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[dinSPKIDataType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ListOfRootCertificateIDsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":RootCertificateID{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define dinListOfRootCertificateIDsType_RootCertificateID_CHARACTERS_SIZE 40 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,rootCertificateIDType is 40 */
+#define dinListOfRootCertificateIDsType_RootCertificateID_ARRAY_SIZE 5
+struct dinListOfRootCertificateIDsType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":RootCertificateID, urn:iso:15118:2:2010:MsgDataTypes,rootCertificateIDType */
+	struct {
+		struct {
+			exi_string_character_t characters[dinListOfRootCertificateIDsType_RootCertificateID_CHARACTERS_SIZE];
+			uint16_t charactersLen;
+		}  array[dinListOfRootCertificateIDsType_RootCertificateID_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} RootCertificateID;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"])|"http://www.w3.org/2000/09/xmldsig#":XPath){0-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define dinTransformType_Algorithm_CHARACTERS_SIZE 65 + EXTRA_CHAR
+#define dinTransformType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinTransformType_XPath_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinTransformType_XPath_ARRAY_SIZE 1
+struct dinTransformType {
+	/* attribute: Algorithm {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[dinTransformType_Algorithm_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Algorithm ;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[dinTransformType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":XPath, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		struct {
+			exi_string_character_t characters[dinTransformType_XPath_CHARACTERS_SIZE];
+			uint16_t charactersLen;
+		}  array[dinTransformType_XPath_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} XPath;
+};
+
+typedef enum {
+	dinDC_EVErrorCodeType_NO_ERROR = 0,
+	dinDC_EVErrorCodeType_FAILED_RESSTemperatureInhibit = 1,
+	dinDC_EVErrorCodeType_FAILED_EVShiftPosition = 2,
+	dinDC_EVErrorCodeType_FAILED_ChargerConnectorLockFault = 3,
+	dinDC_EVErrorCodeType_FAILED_EVRESSMalfunction = 4,
+	dinDC_EVErrorCodeType_FAILED_ChargingCurrentdifferential = 5,
+	dinDC_EVErrorCodeType_FAILED_ChargingVoltageOutOfRange = 6,
+	dinDC_EVErrorCodeType_Reserved_A = 7,
+	dinDC_EVErrorCodeType_Reserved_B = 8,
+	dinDC_EVErrorCodeType_Reserved_C = 9,
+	dinDC_EVErrorCodeType_FAILED_ChargingSystemIncompatibility = 10,
+	dinDC_EVErrorCodeType_NoData = 11
+} dinDC_EVErrorCodeType;
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,ContractAuthenticationReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":GenChallenge{0-1})',  derivedBy='EXTENSION'.  */
+#define dinContractAuthenticationReqType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinContractAuthenticationReqType_GenChallenge_CHARACTERS_SIZE 50 + EXTRA_CHAR
+struct dinContractAuthenticationReqType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,IDREF} */
+	struct {
+		exi_string_character_t characters[dinContractAuthenticationReqType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgBody":GenChallenge, urn:iso:15118:2:2010:MsgDataTypes,genChallengeType */
+	struct {
+		exi_string_character_t characters[dinContractAuthenticationReqType_GenChallenge_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  GenChallenge ;
+	unsigned int GenChallenge_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EVSEChargeParameterType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+struct dinEVSEChargeParameterType {
+	int noContent; /* avoid warning */
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,RelativeTimeIntervalType',  base type name='IntervalType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":start,"urn:iso:15118:2:2010:MsgDataTypes":duration{0-1})',  derivedBy='EXTENSION'.  */
+struct dinRelativeTimeIntervalType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":start, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t start ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":duration, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t duration ;
+	unsigned int duration_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EVStatusType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+struct dinEVStatusType {
+	int noContent; /* avoid warning */
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,DSAKeyValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":P,"http://www.w3.org/2000/09/xmldsig#":Q){0-1},"http://www.w3.org/2000/09/xmldsig#":G{0-1},"http://www.w3.org/2000/09/xmldsig#":Y,"http://www.w3.org/2000/09/xmldsig#":J{0-1},("http://www.w3.org/2000/09/xmldsig#":Seed,"http://www.w3.org/2000/09/xmldsig#":PgenCounter){0-1})',  derivedBy='RESTRICTION'.  */
+#define dinDSAKeyValueType_P_BYTES_SIZE 350
+#define dinDSAKeyValueType_Q_BYTES_SIZE 350
+#define dinDSAKeyValueType_G_BYTES_SIZE 350
+#define dinDSAKeyValueType_Y_BYTES_SIZE 350
+#define dinDSAKeyValueType_J_BYTES_SIZE 350
+#define dinDSAKeyValueType_Seed_BYTES_SIZE 350
+#define dinDSAKeyValueType_PgenCounter_BYTES_SIZE 350
+struct dinDSAKeyValueType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":P, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[dinDSAKeyValueType_P_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  P ;
+	unsigned int P_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Q, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[dinDSAKeyValueType_Q_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Q ;
+	unsigned int Q_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":G, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[dinDSAKeyValueType_G_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  G ;
+	unsigned int G_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Y, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[dinDSAKeyValueType_Y_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Y ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":J, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[dinDSAKeyValueType_J_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  J ;
+	unsigned int J_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Seed, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[dinDSAKeyValueType_Seed_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Seed ;
+	unsigned int Seed_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":PgenCounter, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[dinDSAKeyValueType_PgenCounter_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  PgenCounter ;
+	unsigned int PgenCounter_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SASchedulesType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+struct dinSASchedulesType {
+	int noContent; /* avoid warning */
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EVChargeParameterType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+struct dinEVChargeParameterType {
+	int noContent; /* avoid warning */
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDef,BodyBaseType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+struct dinBodyBaseType {
+	int noContent; /* avoid warning */
+};
+
+typedef enum {
+	dinunitSymbolType_h = 0,
+	dinunitSymbolType_m = 1,
+	dinunitSymbolType_s = 2,
+	dinunitSymbolType_A = 3,
+	dinunitSymbolType_Ah = 4,
+	dinunitSymbolType_V = 5,
+	dinunitSymbolType_VA = 6,
+	dinunitSymbolType_W = 7,
+	dinunitSymbolType_W_s = 8,
+	dinunitSymbolType_Wh = 9
+} dinunitSymbolType;
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,IntervalType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+struct dinIntervalType {
+	int noContent; /* avoid warning */
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transform{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define dinTransformsType_Transform_ARRAY_SIZE 1
+struct dinTransformsType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Transform, Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"])|"http://www.w3.org/2000/09/xmldsig#":XPath){0-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct dinTransformType array[dinTransformsType_Transform_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Transform;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EntryType',  base type name='anyType',  content type='ELEMENT',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":TimeInterval)',  derivedBy='RESTRICTION'.  */
+struct dinEntryType {
+	/* substitutionGroup */
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	union {
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */
+		/* element: "urn:iso:15118:2:2010:MsgDataTypes":TimeInterval, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,IntervalType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+		struct dinIntervalType TimeInterval ;
+		/* element: "urn:iso:15118:2:2010:MsgDataTypes":RelativeTimeInterval, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,RelativeTimeIntervalType',  base type name='IntervalType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":start,"urn:iso:15118:2:2010:MsgDataTypes":duration{0-1})',  derivedBy='EXTENSION'.  */
+		struct dinRelativeTimeIntervalType RelativeTimeInterval ;
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	};
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */
+		unsigned int TimeInterval_isUsed:1;
+		unsigned int RelativeTimeInterval_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,SessionStopType',  base type name='BodyBaseType',  content type='EMPTY',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+struct dinSessionStopType {
+	int noContent; /* avoid warning */
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,ServiceDetailReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ServiceID)',  derivedBy='EXTENSION'.  */
+struct dinServiceDetailReqType {
+	/* element: "urn:iso:15118:2:2010:MsgBody":ServiceID, urn:iso:15118:2:2010:MsgDataTypes,serviceIDType */
+	uint16_t ServiceID ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,DigestMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define dinDigestMethodType_Algorithm_CHARACTERS_SIZE 65 + EXTRA_CHAR
+#define dinDigestMethodType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR
+struct dinDigestMethodType {
+	/* attribute: Algorithm {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[dinDigestMethodType_Algorithm_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Algorithm ;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[dinDigestMethodType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+typedef enum {
+	dinvalueType_bool = 0,
+	dinvalueType_byte = 1,
+	dinvalueType_short = 2,
+	dinvalueType_int = 3,
+	dinvalueType_physicalValue = 4,
+	dinvalueType_string = 5
+} dinvalueType;
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,ChargingStatusReqType',  base type name='BodyBaseType',  content type='EMPTY',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+struct dinChargingStatusReqType {
+	int noContent; /* avoid warning */
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":HMACOutputLength{0-1},(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define dinSignatureMethodType_Algorithm_CHARACTERS_SIZE 65 + EXTRA_CHAR
+#define dinSignatureMethodType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR
+struct dinSignatureMethodType {
+	/* attribute: Algorithm {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[dinSignatureMethodType_Algorithm_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Algorithm ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":HMACOutputLength, http://www.w3.org/2000/09/xmldsig#,HMACOutputLengthType */
+	int64_t HMACOutputLength ;
+	unsigned int HMACOutputLength_isUsed:1;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[dinSignatureMethodType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,CertificateInstallationReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":OEMProvisioningCert,"urn:iso:15118:2:2010:MsgBody":ListOfRootCertificateIDs,"urn:iso:15118:2:2010:MsgBody":DHParams)',  derivedBy='EXTENSION'.  */
+#define dinCertificateInstallationReqType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinCertificateInstallationReqType_OEMProvisioningCert_BYTES_SIZE 1200 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,certificateType is 1200 */
+#define dinCertificateInstallationReqType_DHParams_BYTES_SIZE 256 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,dHParamsType is 256 */
+struct dinCertificateInstallationReqType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,IDREF} */
+	struct {
+		exi_string_character_t characters[dinCertificateInstallationReqType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgBody":OEMProvisioningCert, urn:iso:15118:2:2010:MsgDataTypes,certificateType */
+	struct {
+		uint8_t bytes[dinCertificateInstallationReqType_OEMProvisioningCert_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  OEMProvisioningCert ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":ListOfRootCertificateIDs, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ListOfRootCertificateIDsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":RootCertificateID{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct dinListOfRootCertificateIDsType ListOfRootCertificateIDs ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":DHParams, urn:iso:15118:2:2010:MsgDataTypes,dHParamsType */
+	struct {
+		uint8_t bytes[dinCertificateInstallationReqType_DHParams_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  DHParams ;
+};
+
+typedef enum {
+	dinEVRequestedEnergyTransferType_AC_single_phase_core = 0,
+	dinEVRequestedEnergyTransferType_AC_three_phase_core = 1,
+	dinEVRequestedEnergyTransferType_DC_core = 2,
+	dinEVRequestedEnergyTransferType_DC_extended = 3,
+	dinEVRequestedEnergyTransferType_DC_combo_core = 4,
+	dinEVRequestedEnergyTransferType_DC_unique = 5
+} dinEVRequestedEnergyTransferType;
+
+typedef enum {
+	dinpaymentOptionType_Contract = 0,
+	dinpaymentOptionType_ExternalPayment = 1
+} dinpaymentOptionType;
+
+typedef enum {
+	dinEVSESupportedEnergyTransferType_AC_single_phase_core = 0,
+	dinEVSESupportedEnergyTransferType_AC_three_phase_core = 1,
+	dinEVSESupportedEnergyTransferType_DC_core = 2,
+	dinEVSESupportedEnergyTransferType_DC_extended = 3,
+	dinEVSESupportedEnergyTransferType_DC_combo_core = 4,
+	dinEVSESupportedEnergyTransferType_DC_dual = 5,
+	dinEVSESupportedEnergyTransferType_AC_core1p_DC_extended = 6,
+	dinEVSESupportedEnergyTransferType_AC_single_DC_core = 7,
+	dinEVSESupportedEnergyTransferType_AC_single_phase_three_phase_core_DC_extended = 8,
+	dinEVSESupportedEnergyTransferType_AC_core3p_DC_extended = 9
+} dinEVSESupportedEnergyTransferType;
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,ReferenceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1},"http://www.w3.org/2000/09/xmldsig#":DigestMethod,"http://www.w3.org/2000/09/xmldsig#":DigestValue)',  derivedBy='RESTRICTION'.  */
+#define dinReferenceType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinReferenceType_URI_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinReferenceType_Type_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinReferenceType_DigestValue_BYTES_SIZE 350
+struct dinReferenceType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[dinReferenceType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* attribute: URI {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[dinReferenceType_URI_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  URI ;
+	unsigned int URI_isUsed:1;
+	/* attribute: Type {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[dinReferenceType_Type_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Type ;
+	unsigned int Type_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Transforms, Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transform{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct dinTransformsType Transforms ;
+	unsigned int Transforms_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":DigestMethod, Complex type name='http://www.w3.org/2000/09/xmldsig#,DigestMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct dinDigestMethodType DigestMethod ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":DigestValue, http://www.w3.org/2000/09/xmldsig#,DigestValueType */
+	struct {
+		uint8_t bytes[dinReferenceType_DigestValue_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  DigestValue ;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ProfileEntryType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":ChargingProfileEntryStart,"urn:iso:15118:2:2010:MsgDataTypes":ChargingProfileEntryMaxPower)',  derivedBy='RESTRICTION'.  */
+struct dinProfileEntryType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":ChargingProfileEntryStart, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t ChargingProfileEntryStart ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":ChargingProfileEntryMaxPower, urn:iso:15118:2:2010:MsgDataTypes,PMaxType */
+	int16_t ChargingProfileEntryMaxPower ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,RSAKeyValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Modulus,"http://www.w3.org/2000/09/xmldsig#":Exponent)',  derivedBy='RESTRICTION'.  */
+#define dinRSAKeyValueType_Modulus_BYTES_SIZE 350
+#define dinRSAKeyValueType_Exponent_BYTES_SIZE 350
+struct dinRSAKeyValueType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Modulus, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[dinRSAKeyValueType_Modulus_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Modulus ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Exponent, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[dinRSAKeyValueType_Exponent_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Exponent ;
+};
+
+typedef enum {
+	dinfaultCodeType_ParsingError = 0,
+	dinfaultCodeType_NoTLSRootCertificatAvailable = 1,
+	dinfaultCodeType_UnknownError = 2
+} dinfaultCodeType;
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+struct dinEVSEStatusType {
+	int noContent; /* avoid warning */
+};
+
+typedef enum {
+	dinserviceCategoryType_EVCharging = 0,
+	dinserviceCategoryType_Internet = 1,
+	dinserviceCategoryType_ContractCertificate = 2,
+	dinserviceCategoryType_OtherCustom = 3
+} dinserviceCategoryType;
+
+typedef enum {
+	dinEVSENotificationType_None = 0,
+	dinEVSENotificationType_StopCharging = 1,
+	dinEVSENotificationType_ReNegotiation = 2
+} dinEVSENotificationType;
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EVPowerDeliveryParameterType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+struct dinEVPowerDeliveryParameterType {
+	int noContent; /* avoid warning */
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,X509IssuerSerialType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":X509IssuerName,"http://www.w3.org/2000/09/xmldsig#":X509SerialNumber)',  derivedBy='RESTRICTION'.  */
+#define dinX509IssuerSerialType_X509IssuerName_CHARACTERS_SIZE 50 + EXTRA_CHAR
+struct dinX509IssuerSerialType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509IssuerName, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		exi_string_character_t characters[dinX509IssuerSerialType_X509IssuerName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  X509IssuerName ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509SerialNumber, http://www.w3.org/2001/XMLSchema,integer */
+	int64_t X509SerialNumber ;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SelectedServiceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":ServiceID,"urn:iso:15118:2:2010:MsgDataTypes":ParameterSetID{0-1})',  derivedBy='RESTRICTION'.  */
+struct dinSelectedServiceType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":ServiceID, urn:iso:15118:2:2010:MsgDataTypes,serviceIDType */
+	uint16_t ServiceID ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":ParameterSetID, http://www.w3.org/2001/XMLSchema,short */
+	int16_t ParameterSetID ;
+	unsigned int ParameterSetID_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVStatusType',  base type name='EVStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":EVReady,"urn:iso:15118:2:2010:MsgDataTypes":EVCabinConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVRESSConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2010:MsgDataTypes":EVRESSSOC)',  derivedBy='EXTENSION'.  */
+struct dinDC_EVStatusType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVReady, http://www.w3.org/2001/XMLSchema,boolean */
+	int EVReady ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVCabinConditioning, http://www.w3.org/2001/XMLSchema,boolean */
+	int EVCabinConditioning ;
+	unsigned int EVCabinConditioning_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVRESSConditioning, http://www.w3.org/2001/XMLSchema,boolean */
+	int EVRESSConditioning ;
+	unsigned int EVRESSConditioning_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVErrorCode, urn:iso:15118:2:2010:MsgDataTypes,DC_EVErrorCodeType */
+	dinDC_EVErrorCodeType EVErrorCode ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVRESSSOC, urn:iso:15118:2:2010:MsgDataTypes,percentValueType */
+	int8_t EVRESSSOC ;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+struct dinPhysicalValueType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":Multiplier, urn:iso:15118:2:2010:MsgDataTypes,unitMultiplierType */
+	int8_t Multiplier ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":Unit, urn:iso:15118:2:2010:MsgDataTypes,unitSymbolType */
+	dinunitSymbolType Unit ;
+	unsigned int Unit_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":Value, http://www.w3.org/2001/XMLSchema,short */
+	int16_t Value ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,ManifestType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Reference{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define dinManifestType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinManifestType_Reference_ARRAY_SIZE 1
+struct dinManifestType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[dinManifestType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Reference, Complex type name='http://www.w3.org/2000/09/xmldsig#,ReferenceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1},"http://www.w3.org/2000/09/xmldsig#":DigestMethod,"http://www.w3.org/2000/09/xmldsig#":DigestValue)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct dinReferenceType array[dinManifestType_Reference_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Reference;
+};
+
+typedef enum {
+	dincostKindType_relativePricePercentage = 0,
+	dincostKindType_RenewableGenerationPercentage = 1,
+	dincostKindType_CarbonDioxideEmission = 2
+} dincostKindType;
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PMaxScheduleEntryType',  base type name='EntryType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2010:MsgDataTypes":TimeInterval),("urn:iso:15118:2:2010:MsgDataTypes":PMax))',  derivedBy='EXTENSION'.  */
+struct dinPMaxScheduleEntryType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":TimeInterval, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,IntervalType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+	struct dinIntervalType TimeInterval ;
+	unsigned int TimeInterval_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":RelativeTimeInterval, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,RelativeTimeIntervalType',  base type name='IntervalType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":start,"urn:iso:15118:2:2010:MsgDataTypes":duration{0-1})',  derivedBy='EXTENSION'.  */
+	struct dinRelativeTimeIntervalType RelativeTimeInterval ;
+	unsigned int RelativeTimeInterval_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":PMax, urn:iso:15118:2:2010:MsgDataTypes,PMaxType */
+	int16_t PMax ;
+};
+
+typedef enum {
+	dinisolationLevelType_Invalid = 0,
+	dinisolationLevelType_Valid = 1,
+	dinisolationLevelType_Warning = 2,
+	dinisolationLevelType_Fault = 3
+} dinisolationLevelType;
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureValueType',  base type name='base64Binary',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+#define dinSignatureValueType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinSignatureValueType_CONTENT_BYTES_SIZE 350
+struct dinSignatureValueType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[dinSignatureValueType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* simple content: http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		uint8_t bytes[dinSignatureValueType_CONTENT_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  CONTENT ;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PaymentOptionsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":PaymentOption{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define dinPaymentOptionsType_PaymentOption_ARRAY_SIZE 5
+struct dinPaymentOptionsType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":PaymentOption, urn:iso:15118:2:2010:MsgDataTypes,paymentOptionType */
+	struct {
+		dinpaymentOptionType array[dinPaymentOptionsType_PaymentOption_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} PaymentOption;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceTagType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":ServiceID,"urn:iso:15118:2:2010:MsgDataTypes":ServiceName{0-1},"urn:iso:15118:2:2010:MsgDataTypes":ServiceCategory,"urn:iso:15118:2:2010:MsgDataTypes":ServiceScope{0-1})',  derivedBy='RESTRICTION'.  */
+#define dinServiceTagType_ServiceName_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,serviceNameType is 32 */
+#define dinServiceTagType_ServiceScope_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,serviceScopeType is 32 */
+struct dinServiceTagType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":ServiceID, urn:iso:15118:2:2010:MsgDataTypes,serviceIDType */
+	uint16_t ServiceID ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":ServiceName, urn:iso:15118:2:2010:MsgDataTypes,serviceNameType */
+	struct {
+		exi_string_character_t characters[dinServiceTagType_ServiceName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ServiceName ;
+	unsigned int ServiceName_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":ServiceCategory, urn:iso:15118:2:2010:MsgDataTypes,serviceCategoryType */
+	dinserviceCategoryType ServiceCategory ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":ServiceScope, urn:iso:15118:2:2010:MsgDataTypes,serviceScopeType */
+	struct {
+		exi_string_character_t characters[dinServiceTagType_ServiceScope_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ServiceScope ;
+	unsigned int ServiceScope_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,AC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":PowerSwitchClosed,"urn:iso:15118:2:2010:MsgDataTypes":RCD,"urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2010:MsgDataTypes":EVSENotification)',  derivedBy='EXTENSION'.  */
+struct dinAC_EVSEStatusType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":PowerSwitchClosed, http://www.w3.org/2001/XMLSchema,boolean */
+	int PowerSwitchClosed ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":RCD, http://www.w3.org/2001/XMLSchema,boolean */
+	int RCD ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t NotificationMaxDelay ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSENotification, urn:iso:15118:2:2010:MsgDataTypes,EVSENotificationType */
+	dinEVSENotificationType EVSENotification ;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ChargingProfileType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":SAScheduleTupleID,"urn:iso:15118:2:2010:MsgDataTypes":ProfileEntry{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define dinChargingProfileType_ProfileEntry_ARRAY_SIZE 24
+struct dinChargingProfileType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":SAScheduleTupleID, urn:iso:15118:2:2010:MsgDataTypes,SAIDType */
+	int16_t SAScheduleTupleID ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":ProfileEntry, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ProfileEntryType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":ChargingProfileEntryStart,"urn:iso:15118:2:2010:MsgDataTypes":ChargingProfileEntryMaxPower)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct dinProfileEntryType array[dinChargingProfileType_ProfileEntry_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} ProfileEntry;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,ServiceDiscoveryReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ServiceScope{0-1},"urn:iso:15118:2:2010:MsgBody":ServiceCategory{0-1})',  derivedBy='EXTENSION'.  */
+#define dinServiceDiscoveryReqType_ServiceScope_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,serviceScopeType is 32 */
+struct dinServiceDiscoveryReqType {
+	/* element: "urn:iso:15118:2:2010:MsgBody":ServiceScope, urn:iso:15118:2:2010:MsgDataTypes,serviceScopeType */
+	struct {
+		exi_string_character_t characters[dinServiceDiscoveryReqType_ServiceScope_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ServiceScope ;
+	unsigned int ServiceScope_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgBody":ServiceCategory, urn:iso:15118:2:2010:MsgDataTypes,serviceCategoryType */
+	dinserviceCategoryType ServiceCategory ;
+	unsigned int ServiceCategory_isUsed:1;
+};
+
+typedef enum {
+	dinresponseCodeType_OK = 0,
+	dinresponseCodeType_OK_NewSessionEstablished = 1,
+	dinresponseCodeType_OK_OldSessionJoined = 2,
+	dinresponseCodeType_OK_CertificateExpiresSoon = 3,
+	dinresponseCodeType_FAILED = 4,
+	dinresponseCodeType_FAILED_SequenceError = 5,
+	dinresponseCodeType_FAILED_ServiceIDInvalid = 6,
+	dinresponseCodeType_FAILED_UnknownSession = 7,
+	dinresponseCodeType_FAILED_ServiceSelectionInvalid = 8,
+	dinresponseCodeType_FAILED_PaymentSelectionInvalid = 9,
+	dinresponseCodeType_FAILED_CertificateExpired = 10,
+	dinresponseCodeType_FAILED_SignatureError = 11,
+	dinresponseCodeType_FAILED_NoCertificateAvailable = 12,
+	dinresponseCodeType_FAILED_CertChainError = 13,
+	dinresponseCodeType_FAILED_ChallengeInvalid = 14,
+	dinresponseCodeType_FAILED_ContractCanceled = 15,
+	dinresponseCodeType_FAILED_WrongChargeParameter = 16,
+	dinresponseCodeType_FAILED_PowerDeliveryNotApplied = 17,
+	dinresponseCodeType_FAILED_TariffSelectionInvalid = 18,
+	dinresponseCodeType_FAILED_ChargingProfileInvalid = 19,
+	dinresponseCodeType_FAILED_EVSEPresentVoltageToLow = 20,
+	dinresponseCodeType_FAILED_MeteringSignatureNotValid = 21,
+	dinresponseCodeType_FAILED_WrongEnergyTransferType = 22
+} dinresponseCodeType;
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,AC_EVSEChargeParameterType',  base type name='EVSEChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":AC_EVSEStatus,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaxVoltage,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaxCurrent,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMinCurrent)',  derivedBy='EXTENSION'.  */
+struct dinAC_EVSEChargeParameterType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":AC_EVSEStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,AC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":PowerSwitchClosed,"urn:iso:15118:2:2010:MsgDataTypes":RCD,"urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2010:MsgDataTypes":EVSENotification)',  derivedBy='EXTENSION'.  */
+	struct dinAC_EVSEStatusType AC_EVSEStatus ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSEMaxVoltage, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVSEMaxVoltage ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSEMaxCurrent, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVSEMaxCurrent ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSEMinCurrent, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVSEMinCurrent ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,ObjectType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##any])){0-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define dinObjectType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinObjectType_MimeType_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinObjectType_Encoding_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinObjectType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR
+struct dinObjectType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[dinObjectType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* attribute: MimeType {http://www.w3.org/2001/XMLSchema,string} */
+	struct {
+		exi_string_character_t characters[dinObjectType_MimeType_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  MimeType ;
+	unsigned int MimeType_isUsed:1;
+	/* attribute: Encoding {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[dinObjectType_Encoding_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Encoding ;
+	unsigned int Encoding_isUsed:1;
+	/* element: WC[##any] */
+	struct {
+		exi_string_character_t characters[dinObjectType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,SessionStopResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode)',  derivedBy='EXTENSION'.  */
+struct dinSessionStopResType {
+	/* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */
+	dinresponseCodeType ResponseCode ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignedInfoType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":CanonicalizationMethod,"http://www.w3.org/2000/09/xmldsig#":SignatureMethod,"http://www.w3.org/2000/09/xmldsig#":Reference{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define dinSignedInfoType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinSignedInfoType_Reference_ARRAY_SIZE 1
+struct dinSignedInfoType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[dinSignedInfoType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":CanonicalizationMethod, Complex type name='http://www.w3.org/2000/09/xmldsig#,CanonicalizationMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##any]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct dinCanonicalizationMethodType CanonicalizationMethod ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SignatureMethod, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":HMACOutputLength{0-1},(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct dinSignatureMethodType SignatureMethod ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Reference, Complex type name='http://www.w3.org/2000/09/xmldsig#,ReferenceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1},"http://www.w3.org/2000/09/xmldsig#":DigestMethod,"http://www.w3.org/2000/09/xmldsig#":DigestValue)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct dinReferenceType array[dinSignedInfoType_Reference_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Reference;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,CostType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":costKind,"urn:iso:15118:2:2010:MsgDataTypes":amount,"urn:iso:15118:2:2010:MsgDataTypes":amountMultiplier{0-1})',  derivedBy='RESTRICTION'.  */
+struct dinCostType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":costKind, urn:iso:15118:2:2010:MsgDataTypes,costKindType */
+	dincostKindType costKind ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":amount, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t amount ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":amountMultiplier, urn:iso:15118:2:2010:MsgDataTypes,unitMultiplierType */
+	int8_t amountMultiplier ;
+	unsigned int amountMultiplier_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceChargeType',  base type name='ServiceType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2010:MsgDataTypes":ServiceTag,"urn:iso:15118:2:2010:MsgDataTypes":FreeService),("urn:iso:15118:2:2010:MsgDataTypes":EnergyTransferType))',  derivedBy='EXTENSION'.  */
+struct dinServiceChargeType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":ServiceTag, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceTagType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":ServiceID,"urn:iso:15118:2:2010:MsgDataTypes":ServiceName{0-1},"urn:iso:15118:2:2010:MsgDataTypes":ServiceCategory,"urn:iso:15118:2:2010:MsgDataTypes":ServiceScope{0-1})',  derivedBy='RESTRICTION'.  */
+	struct dinServiceTagType ServiceTag ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":FreeService, http://www.w3.org/2001/XMLSchema,boolean */
+	int FreeService ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EnergyTransferType, urn:iso:15118:2:2010:MsgDataTypes,EVSESupportedEnergyTransferType */
+	dinEVSESupportedEnergyTransferType EnergyTransferType ;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVSEStatusCode,"urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2010:MsgDataTypes":EVSENotification)',  derivedBy='EXTENSION'.  */
+struct dinDC_EVSEStatusType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSEIsolationStatus, urn:iso:15118:2:2010:MsgDataTypes,isolationLevelType */
+	dinisolationLevelType EVSEIsolationStatus ;
+	unsigned int EVSEIsolationStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSEStatusCode, urn:iso:15118:2:2010:MsgDataTypes,DC_EVSEStatusCodeType */
+	dinDC_EVSEStatusCodeType EVSEStatusCode ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t NotificationMaxDelay ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSENotification, urn:iso:15118:2:2010:MsgDataTypes,EVSENotificationType */
+	dinEVSENotificationType EVSENotification ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,RetrievalMethodType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1})',  derivedBy='RESTRICTION'.  */
+#define dinRetrievalMethodType_URI_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinRetrievalMethodType_Type_CHARACTERS_SIZE 50 + EXTRA_CHAR
+struct dinRetrievalMethodType {
+	/* attribute: URI {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[dinRetrievalMethodType_URI_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  URI ;
+	unsigned int URI_isUsed:1;
+	/* attribute: Type {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[dinRetrievalMethodType_Type_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Type ;
+	unsigned int Type_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Transforms, Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transform{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct dinTransformsType Transforms ;
+	unsigned int Transforms_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,NotificationType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":FaultCode,"urn:iso:15118:2:2010:MsgDataTypes":FaultMsg{0-1})',  derivedBy='RESTRICTION'.  */
+#define dinNotificationType_FaultMsg_CHARACTERS_SIZE 64 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,faultMsgType is 64 */
+struct dinNotificationType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":FaultCode, urn:iso:15118:2:2010:MsgDataTypes,faultCodeType */
+	dinfaultCodeType FaultCode ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":FaultMsg, urn:iso:15118:2:2010:MsgDataTypes,faultMsgType */
+	struct {
+		exi_string_character_t characters[dinNotificationType_FaultMsg_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  FaultMsg ;
+	unsigned int FaultMsg_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,PGPDataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":PGPKeyID,"http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket{0-1},(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})|("http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket,(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED}))',  derivedBy='RESTRICTION'.  */
+#define dinPGPDataType_PGPKeyID_BYTES_SIZE 350
+#define dinPGPDataType_PGPKeyPacket_BYTES_SIZE 350
+#define dinPGPDataType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR
+struct dinPGPDataType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":PGPKeyID, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		uint8_t bytes[dinPGPDataType_PGPKeyID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  PGPKeyID ;
+	unsigned int PGPKeyID_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		uint8_t bytes[dinPGPDataType_PGPKeyPacket_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  PGPKeyPacket ;
+	unsigned int PGPKeyPacket_isUsed:1;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[dinPGPDataType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignaturePropertyType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"])){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define dinSignaturePropertyType_Target_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinSignaturePropertyType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinSignaturePropertyType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR
+struct dinSignaturePropertyType {
+	/* attribute: Target {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[dinSignaturePropertyType_Target_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Target ;
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[dinSignaturePropertyType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[dinSignaturePropertyType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,MeterInfoType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":MeterID,"urn:iso:15118:2:2010:MsgDataTypes":MeterReading{0-1},"urn:iso:15118:2:2010:MsgDataTypes":SigMeterReading{0-1},"urn:iso:15118:2:2010:MsgDataTypes":MeterStatus{0-1},"urn:iso:15118:2:2010:MsgDataTypes":TMeter{0-1})',  derivedBy='RESTRICTION'.  */
+#define dinMeterInfoType_MeterID_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,meterIDType is 32 */
+#define dinMeterInfoType_SigMeterReading_BYTES_SIZE 32 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,sigMeterReadingType is 32 */
+struct dinMeterInfoType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":MeterID, urn:iso:15118:2:2010:MsgDataTypes,meterIDType */
+	struct {
+		exi_string_character_t characters[dinMeterInfoType_MeterID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  MeterID ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":MeterReading, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType MeterReading ;
+	unsigned int MeterReading_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":SigMeterReading, urn:iso:15118:2:2010:MsgDataTypes,sigMeterReadingType */
+	struct {
+		uint8_t bytes[dinMeterInfoType_SigMeterReading_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  SigMeterReading ;
+	unsigned int SigMeterReading_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":MeterStatus, urn:iso:15118:2:2010:MsgDataTypes,meterStatusType */
+	int16_t MeterStatus ;
+	unsigned int MeterStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":TMeter, http://www.w3.org/2001/XMLSchema,long */
+	int64_t TMeter ;
+	unsigned int TMeter_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SubCertificatesType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Certificate{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define dinSubCertificatesType_Certificate_BYTES_SIZE 1200 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,certificateType is 1200 */
+#define dinSubCertificatesType_Certificate_ARRAY_SIZE 5
+struct dinSubCertificatesType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":Certificate, urn:iso:15118:2:2010:MsgDataTypes,certificateType */
+	struct {
+		struct {
+			uint8_t bytes[dinSubCertificatesType_Certificate_BYTES_SIZE];
+			uint16_t bytesLen;
+		}  array[dinSubCertificatesType_Certificate_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Certificate;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,MeteringReceiptReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":SessionID,"urn:iso:15118:2:2010:MsgBody":SAScheduleTupleID{0-1},"urn:iso:15118:2:2010:MsgBody":MeterInfo)',  derivedBy='EXTENSION'.  */
+#define dinMeteringReceiptReqType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinMeteringReceiptReqType_SessionID_BYTES_SIZE 8 /* XML schema facet length for urn:iso:15118:2:2010:MsgDataTypes,sessionIDType is 8 */
+struct dinMeteringReceiptReqType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,IDREF} */
+	struct {
+		exi_string_character_t characters[dinMeteringReceiptReqType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgBody":SessionID, urn:iso:15118:2:2010:MsgDataTypes,sessionIDType */
+	struct {
+		uint8_t bytes[dinMeteringReceiptReqType_SessionID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  SessionID ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":SAScheduleTupleID, urn:iso:15118:2:2010:MsgDataTypes,SAIDType */
+	int16_t SAScheduleTupleID ;
+	unsigned int SAScheduleTupleID_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgBody":MeterInfo, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,MeterInfoType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":MeterID,"urn:iso:15118:2:2010:MsgDataTypes":MeterReading{0-1},"urn:iso:15118:2:2010:MsgDataTypes":SigMeterReading{0-1},"urn:iso:15118:2:2010:MsgDataTypes":MeterStatus{0-1},"urn:iso:15118:2:2010:MsgDataTypes":TMeter{0-1})',  derivedBy='RESTRICTION'.  */
+	struct dinMeterInfoType MeterInfo ;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,PowerDeliveryResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgDataTypes":EVSEStatus)',  derivedBy='EXTENSION'.  */
+struct dinPowerDeliveryResType {
+	/* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */
+	dinresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSEStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+	struct dinEVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":AC_EVSEStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,AC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":PowerSwitchClosed,"urn:iso:15118:2:2010:MsgDataTypes":RCD,"urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2010:MsgDataTypes":EVSENotification)',  derivedBy='EXTENSION'.  */
+	struct dinAC_EVSEStatusType AC_EVSEStatus ;
+	unsigned int AC_EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":DC_EVSEStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVSEStatusCode,"urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2010:MsgDataTypes":EVSENotification)',  derivedBy='EXTENSION'.  */
+	struct dinDC_EVSEStatusType DC_EVSEStatus ;
+	unsigned int DC_EVSEStatus_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,WeldingDetectionResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgBody":EVSEPresentVoltage)',  derivedBy='EXTENSION'.  */
+struct dinWeldingDetectionResType {
+	/* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */
+	dinresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVSEStatusCode,"urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2010:MsgDataTypes":EVSENotification)',  derivedBy='EXTENSION'.  */
+	struct dinDC_EVSEStatusType DC_EVSEStatus ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":EVSEPresentVoltage, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVSEPresentVoltage ;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,ContractAuthenticationResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":EVSEProcessing)',  derivedBy='EXTENSION'.  */
+struct dinContractAuthenticationResType {
+	/* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */
+	dinresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":EVSEProcessing, urn:iso:15118:2:2010:MsgDataTypes,EVSEProcessingType */
+	dinEVSEProcessingType EVSEProcessing ;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SelectedServiceListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":SelectedService{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define dinSelectedServiceListType_SelectedService_ARRAY_SIZE 16
+struct dinSelectedServiceListType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":SelectedService, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SelectedServiceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":ServiceID,"urn:iso:15118:2:2010:MsgDataTypes":ParameterSetID{0-1})',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct dinSelectedServiceType array[dinSelectedServiceListType_SelectedService_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SelectedService;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,CurrentDemandResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgBody":EVSEPresentVoltage,"urn:iso:15118:2:2010:MsgBody":EVSEPresentCurrent,"urn:iso:15118:2:2010:MsgBody":EVSECurrentLimitAchieved,"urn:iso:15118:2:2010:MsgBody":EVSEVoltageLimitAchieved,"urn:iso:15118:2:2010:MsgBody":EVSEPowerLimitAchieved,"urn:iso:15118:2:2010:MsgBody":EVSEMaximumVoltageLimit{0-1},"urn:iso:15118:2:2010:MsgBody":EVSEMaximumCurrentLimit{0-1},"urn:iso:15118:2:2010:MsgBody":EVSEMaximumPowerLimit{0-1})',  derivedBy='EXTENSION'.  */
+struct dinCurrentDemandResType {
+	/* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */
+	dinresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVSEStatusCode,"urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2010:MsgDataTypes":EVSENotification)',  derivedBy='EXTENSION'.  */
+	struct dinDC_EVSEStatusType DC_EVSEStatus ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":EVSEPresentVoltage, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVSEPresentVoltage ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":EVSEPresentCurrent, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVSEPresentCurrent ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":EVSECurrentLimitAchieved, http://www.w3.org/2001/XMLSchema,boolean */
+	int EVSECurrentLimitAchieved ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":EVSEVoltageLimitAchieved, http://www.w3.org/2001/XMLSchema,boolean */
+	int EVSEVoltageLimitAchieved ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":EVSEPowerLimitAchieved, http://www.w3.org/2001/XMLSchema,boolean */
+	int EVSEPowerLimitAchieved ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":EVSEMaximumVoltageLimit, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVSEMaximumVoltageLimit ;
+	unsigned int EVSEMaximumVoltageLimit_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgBody":EVSEMaximumCurrentLimit, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVSEMaximumCurrentLimit ;
+	unsigned int EVSEMaximumCurrentLimit_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgBody":EVSEMaximumPowerLimit, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVSEMaximumPowerLimit ;
+	unsigned int EVSEMaximumPowerLimit_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,AC_EVChargeParameterType',  base type name='EVChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":DepartureTime,"urn:iso:15118:2:2010:MsgDataTypes":EAmount,"urn:iso:15118:2:2010:MsgDataTypes":EVMaxVoltage,"urn:iso:15118:2:2010:MsgDataTypes":EVMaxCurrent,"urn:iso:15118:2:2010:MsgDataTypes":EVMinCurrent)',  derivedBy='EXTENSION'.  */
+struct dinAC_EVChargeParameterType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":DepartureTime, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t DepartureTime ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EAmount, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EAmount ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVMaxVoltage, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVMaxVoltage ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVMaxCurrent, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVMaxCurrent ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVMinCurrent, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVMinCurrent ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,X509DataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":X509IssuerSerial|"http://www.w3.org/2000/09/xmldsig#":X509SKI|"http://www.w3.org/2000/09/xmldsig#":X509SubjectName|"http://www.w3.org/2000/09/xmldsig#":X509Certificate|"http://www.w3.org/2000/09/xmldsig#":X509CRL|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]))){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define dinX509DataType_X509IssuerSerial_ARRAY_SIZE 1
+#define dinX509DataType_X509SKI_BYTES_SIZE 350
+#define dinX509DataType_X509SKI_ARRAY_SIZE 1
+#define dinX509DataType_X509SubjectName_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinX509DataType_X509SubjectName_ARRAY_SIZE 1
+#define dinX509DataType_X509Certificate_BYTES_SIZE 350
+#define dinX509DataType_X509Certificate_ARRAY_SIZE 1
+#define dinX509DataType_X509CRL_BYTES_SIZE 350
+#define dinX509DataType_X509CRL_ARRAY_SIZE 1
+#define dinX509DataType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR
+struct dinX509DataType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509IssuerSerial, Complex type name='http://www.w3.org/2000/09/xmldsig#,X509IssuerSerialType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":X509IssuerName,"http://www.w3.org/2000/09/xmldsig#":X509SerialNumber)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct dinX509IssuerSerialType array[dinX509DataType_X509IssuerSerial_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509IssuerSerial;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509SKI, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		struct {
+			uint8_t bytes[dinX509DataType_X509SKI_BYTES_SIZE];
+			uint16_t bytesLen;
+		}  array[dinX509DataType_X509SKI_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509SKI;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509SubjectName, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		struct {
+			exi_string_character_t characters[dinX509DataType_X509SubjectName_CHARACTERS_SIZE];
+			uint16_t charactersLen;
+		}  array[dinX509DataType_X509SubjectName_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509SubjectName;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509Certificate, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		struct {
+			uint8_t bytes[dinX509DataType_X509Certificate_BYTES_SIZE];
+			uint16_t bytesLen;
+		}  array[dinX509DataType_X509Certificate_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509Certificate;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509CRL, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		struct {
+			uint8_t bytes[dinX509DataType_X509CRL_BYTES_SIZE];
+			uint16_t bytesLen;
+		}  array[dinX509DataType_X509CRL_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509CRL;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[dinX509DataType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,ChargingStatusResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":EVSEID,"urn:iso:15118:2:2010:MsgBody":SAScheduleTupleID,"urn:iso:15118:2:2010:MsgBody":EVSEMaxCurrent{0-1},"urn:iso:15118:2:2010:MsgBody":MeterInfo{0-1},"urn:iso:15118:2:2010:MsgBody":ReceiptRequired,"urn:iso:15118:2:2010:MsgBody":AC_EVSEStatus)',  derivedBy='EXTENSION'.  */
+#define dinChargingStatusResType_EVSEID_BYTES_SIZE 32 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,evseIDType is 32 */
+struct dinChargingStatusResType {
+	/* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */
+	dinresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":EVSEID, urn:iso:15118:2:2010:MsgDataTypes,evseIDType */
+	struct {
+		uint8_t bytes[dinChargingStatusResType_EVSEID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  EVSEID ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":SAScheduleTupleID, urn:iso:15118:2:2010:MsgDataTypes,SAIDType */
+	int16_t SAScheduleTupleID ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":EVSEMaxCurrent, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVSEMaxCurrent ;
+	unsigned int EVSEMaxCurrent_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgBody":MeterInfo, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,MeterInfoType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":MeterID,"urn:iso:15118:2:2010:MsgDataTypes":MeterReading{0-1},"urn:iso:15118:2:2010:MsgDataTypes":SigMeterReading{0-1},"urn:iso:15118:2:2010:MsgDataTypes":MeterStatus{0-1},"urn:iso:15118:2:2010:MsgDataTypes":TMeter{0-1})',  derivedBy='RESTRICTION'.  */
+	struct dinMeterInfoType MeterInfo ;
+	unsigned int MeterInfo_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgBody":ReceiptRequired, http://www.w3.org/2001/XMLSchema,boolean */
+	int ReceiptRequired ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":AC_EVSEStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,AC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":PowerSwitchClosed,"urn:iso:15118:2:2010:MsgDataTypes":RCD,"urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2010:MsgDataTypes":EVSENotification)',  derivedBy='EXTENSION'.  */
+	struct dinAC_EVSEStatusType AC_EVSEStatus ;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,WeldingDetectionReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":DC_EVStatus)',  derivedBy='EXTENSION'.  */
+struct dinWeldingDetectionReqType {
+	/* element: "urn:iso:15118:2:2010:MsgBody":DC_EVStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVStatusType',  base type name='EVStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":EVReady,"urn:iso:15118:2:2010:MsgDataTypes":EVCabinConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVRESSConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2010:MsgDataTypes":EVRESSSOC)',  derivedBy='EXTENSION'.  */
+	struct dinDC_EVStatusType DC_EVStatus ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignaturePropertiesType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":SignatureProperty{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define dinSignaturePropertiesType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinSignaturePropertiesType_SignatureProperty_ARRAY_SIZE 1
+struct dinSignaturePropertiesType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[dinSignaturePropertiesType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SignatureProperty, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignaturePropertyType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"])){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct dinSignaturePropertyType array[dinSignaturePropertiesType_SignatureProperty_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SignatureProperty;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVPowerDeliveryParameterType',  base type name='EVPowerDeliveryParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":DC_EVStatus,"urn:iso:15118:2:2010:MsgDataTypes":BulkChargingComplete{0-1},"urn:iso:15118:2:2010:MsgDataTypes":ChargingComplete)',  derivedBy='EXTENSION'.  */
+struct dinDC_EVPowerDeliveryParameterType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":DC_EVStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVStatusType',  base type name='EVStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":EVReady,"urn:iso:15118:2:2010:MsgDataTypes":EVCabinConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVRESSConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2010:MsgDataTypes":EVRESSSOC)',  derivedBy='EXTENSION'.  */
+	struct dinDC_EVStatusType DC_EVStatus ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":BulkChargingComplete, http://www.w3.org/2001/XMLSchema,boolean */
+	int BulkChargingComplete ;
+	unsigned int BulkChargingComplete_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":ChargingComplete, http://www.w3.org/2001/XMLSchema,boolean */
+	int ChargingComplete ;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,CableCheckReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":DC_EVStatus)',  derivedBy='EXTENSION'.  */
+struct dinCableCheckReqType {
+	/* element: "urn:iso:15118:2:2010:MsgBody":DC_EVStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVStatusType',  base type name='EVStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":EVReady,"urn:iso:15118:2:2010:MsgDataTypes":EVCabinConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVRESSConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2010:MsgDataTypes":EVRESSSOC)',  derivedBy='EXTENSION'.  */
+	struct dinDC_EVStatusType DC_EVStatus ;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVChargeParameterType',  base type name='EVChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":DC_EVStatus,"urn:iso:15118:2:2010:MsgDataTypes":EVMaximumCurrentLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVMaximumPowerLimit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVMaximumVoltageLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVEnergyCapacity{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVEnergyRequest{0-1},"urn:iso:15118:2:2010:MsgDataTypes":FullSOC{0-1},"urn:iso:15118:2:2010:MsgDataTypes":BulkSOC{0-1})',  derivedBy='EXTENSION'.  */
+struct dinDC_EVChargeParameterType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":DC_EVStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVStatusType',  base type name='EVStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":EVReady,"urn:iso:15118:2:2010:MsgDataTypes":EVCabinConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVRESSConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2010:MsgDataTypes":EVRESSSOC)',  derivedBy='EXTENSION'.  */
+	struct dinDC_EVStatusType DC_EVStatus ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVMaximumCurrentLimit, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVMaximumCurrentLimit ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVMaximumPowerLimit, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVMaximumPowerLimit ;
+	unsigned int EVMaximumPowerLimit_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVMaximumVoltageLimit, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVMaximumVoltageLimit ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVEnergyCapacity, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVEnergyCapacity ;
+	unsigned int EVEnergyCapacity_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVEnergyRequest, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVEnergyRequest ;
+	unsigned int EVEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":FullSOC, urn:iso:15118:2:2010:MsgDataTypes,percentValueType */
+	int8_t FullSOC ;
+	unsigned int FullSOC_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":BulkSOC, urn:iso:15118:2:2010:MsgDataTypes,percentValueType */
+	int8_t BulkSOC ;
+	unsigned int BulkSOC_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PMaxScheduleType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":PMaxScheduleID,"urn:iso:15118:2:2010:MsgDataTypes":PMaxScheduleEntry{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define dinPMaxScheduleType_PMaxScheduleEntry_ARRAY_SIZE 5
+struct dinPMaxScheduleType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":PMaxScheduleID, urn:iso:15118:2:2010:MsgDataTypes,SAIDType */
+	int16_t PMaxScheduleID ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":PMaxScheduleEntry, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PMaxScheduleEntryType',  base type name='EntryType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2010:MsgDataTypes":TimeInterval),("urn:iso:15118:2:2010:MsgDataTypes":PMax))',  derivedBy='EXTENSION'.  */
+	struct {
+		struct dinPMaxScheduleEntryType array[dinPMaxScheduleType_PMaxScheduleEntry_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} PMaxScheduleEntry;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,ServicePaymentSelectionReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":SelectedPaymentOption,"urn:iso:15118:2:2010:MsgBody":SelectedServiceList)',  derivedBy='EXTENSION'.  */
+struct dinServicePaymentSelectionReqType {
+	/* element: "urn:iso:15118:2:2010:MsgBody":SelectedPaymentOption, urn:iso:15118:2:2010:MsgDataTypes,paymentOptionType */
+	dinpaymentOptionType SelectedPaymentOption ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":SelectedServiceList, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SelectedServiceListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":SelectedService{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct dinSelectedServiceListType SelectedServiceList ;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,PreChargeResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgBody":EVSEPresentVoltage)',  derivedBy='EXTENSION'.  */
+struct dinPreChargeResType {
+	/* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */
+	dinresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVSEStatusCode,"urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2010:MsgDataTypes":EVSENotification)',  derivedBy='EXTENSION'.  */
+	struct dinDC_EVSEStatusType DC_EVSEStatus ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":EVSEPresentVoltage, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVSEPresentVoltage ;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVSEChargeParameterType',  base type name='EVSEChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaximumCurrentLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaximumPowerLimit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaximumVoltageLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMinimumCurrentLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMinimumVoltageLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVSECurrentRegulationTolerance{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVSEPeakCurrentRipple,"urn:iso:15118:2:2010:MsgDataTypes":EVSEEnergyToBeDelivered{0-1})',  derivedBy='EXTENSION'.  */
+struct dinDC_EVSEChargeParameterType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":DC_EVSEStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVSEStatusCode,"urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2010:MsgDataTypes":EVSENotification)',  derivedBy='EXTENSION'.  */
+	struct dinDC_EVSEStatusType DC_EVSEStatus ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSEMaximumCurrentLimit, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVSEMaximumCurrentLimit ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSEMaximumPowerLimit, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVSEMaximumPowerLimit ;
+	unsigned int EVSEMaximumPowerLimit_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSEMaximumVoltageLimit, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVSEMaximumVoltageLimit ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSEMinimumCurrentLimit, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVSEMinimumCurrentLimit ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSEMinimumVoltageLimit, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVSEMinimumVoltageLimit ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSECurrentRegulationTolerance, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVSECurrentRegulationTolerance ;
+	unsigned int EVSECurrentRegulationTolerance_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSEPeakCurrentRipple, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVSEPeakCurrentRipple ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSEEnergyToBeDelivered, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVSEEnergyToBeDelivered ;
+	unsigned int EVSEEnergyToBeDelivered_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,PaymentDetailsResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":GenChallenge,"urn:iso:15118:2:2010:MsgBody":DateTimeNow)',  derivedBy='EXTENSION'.  */
+#define dinPaymentDetailsResType_GenChallenge_CHARACTERS_SIZE 50 + EXTRA_CHAR
+struct dinPaymentDetailsResType {
+	/* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */
+	dinresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":GenChallenge, urn:iso:15118:2:2010:MsgDataTypes,genChallengeType */
+	struct {
+		exi_string_character_t characters[dinPaymentDetailsResType_GenChallenge_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  GenChallenge ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":DateTimeNow, http://www.w3.org/2001/XMLSchema,long */
+	int64_t DateTimeNow ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,KeyValueType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":DSAKeyValue|"http://www.w3.org/2000/09/xmldsig#":RSAKeyValue|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]))',  derivedBy='RESTRICTION'.  */
+#define dinKeyValueType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR
+struct dinKeyValueType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":DSAKeyValue, Complex type name='http://www.w3.org/2000/09/xmldsig#,DSAKeyValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":P,"http://www.w3.org/2000/09/xmldsig#":Q){0-1},"http://www.w3.org/2000/09/xmldsig#":G{0-1},"http://www.w3.org/2000/09/xmldsig#":Y,"http://www.w3.org/2000/09/xmldsig#":J{0-1},("http://www.w3.org/2000/09/xmldsig#":Seed,"http://www.w3.org/2000/09/xmldsig#":PgenCounter){0-1})',  derivedBy='RESTRICTION'.  */
+	struct dinDSAKeyValueType DSAKeyValue ;
+	unsigned int DSAKeyValue_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":RSAKeyValue, Complex type name='http://www.w3.org/2000/09/xmldsig#,RSAKeyValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Modulus,"http://www.w3.org/2000/09/xmldsig#":Exponent)',  derivedBy='RESTRICTION'.  */
+	struct dinRSAKeyValueType RSAKeyValue ;
+	unsigned int RSAKeyValue_isUsed:1;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[dinKeyValueType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,PowerDeliveryReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ReadyToChargeState,"urn:iso:15118:2:2010:MsgBody":ChargingProfile{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVPowerDeliveryParameter{0-1})',  derivedBy='EXTENSION'.  */
+struct dinPowerDeliveryReqType {
+	/* element: "urn:iso:15118:2:2010:MsgBody":ReadyToChargeState, http://www.w3.org/2001/XMLSchema,boolean */
+	int ReadyToChargeState ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":ChargingProfile, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ChargingProfileType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":SAScheduleTupleID,"urn:iso:15118:2:2010:MsgDataTypes":ProfileEntry{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct dinChargingProfileType ChargingProfile ;
+	unsigned int ChargingProfile_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVPowerDeliveryParameter, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EVPowerDeliveryParameterType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+	struct dinEVPowerDeliveryParameterType EVPowerDeliveryParameter ;
+	unsigned int EVPowerDeliveryParameter_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":DC_EVPowerDeliveryParameter, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVPowerDeliveryParameterType',  base type name='EVPowerDeliveryParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":DC_EVStatus,"urn:iso:15118:2:2010:MsgDataTypes":BulkChargingComplete{0-1},"urn:iso:15118:2:2010:MsgDataTypes":ChargingComplete)',  derivedBy='EXTENSION'.  */
+	struct dinDC_EVPowerDeliveryParameterType DC_EVPowerDeliveryParameter ;
+	unsigned int DC_EVPowerDeliveryParameter_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,CertificateChainType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Certificate,"urn:iso:15118:2:2010:MsgDataTypes":SubCertificates{0-1})',  derivedBy='RESTRICTION'.  */
+#define dinCertificateChainType_Certificate_BYTES_SIZE 1200 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,certificateType is 1200 */
+struct dinCertificateChainType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":Certificate, urn:iso:15118:2:2010:MsgDataTypes,certificateType */
+	struct {
+		uint8_t bytes[dinCertificateChainType_Certificate_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Certificate ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":SubCertificates, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SubCertificatesType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Certificate{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct dinSubCertificatesType SubCertificates ;
+	unsigned int SubCertificates_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ParameterType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":boolValue|"urn:iso:15118:2:2010:MsgDataTypes":byteValue|"urn:iso:15118:2:2010:MsgDataTypes":shortValue|"urn:iso:15118:2:2010:MsgDataTypes":intValue|"urn:iso:15118:2:2010:MsgDataTypes":physicalValue|"urn:iso:15118:2:2010:MsgDataTypes":stringValue)',  derivedBy='RESTRICTION'.  */
+#define dinParameterType_Name_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinParameterType_stringValue_CHARACTERS_SIZE 50 + EXTRA_CHAR
+struct dinParameterType {
+	/* attribute: Name {http://www.w3.org/2001/XMLSchema,string} */
+	struct {
+		exi_string_character_t characters[dinParameterType_Name_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Name ;
+	/* attribute: ValueType {urn:iso:15118:2:2010:MsgDataTypes,valueType} */
+	dinvalueType ValueType ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":boolValue, http://www.w3.org/2001/XMLSchema,boolean */
+	int boolValue ;
+	unsigned int boolValue_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":byteValue, http://www.w3.org/2001/XMLSchema,byte */
+	int8_t byteValue ;
+	unsigned int byteValue_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":shortValue, http://www.w3.org/2001/XMLSchema,short */
+	int16_t shortValue ;
+	unsigned int shortValue_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":intValue, http://www.w3.org/2001/XMLSchema,int */
+	int32_t intValue ;
+	unsigned int intValue_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":physicalValue, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType physicalValue ;
+	unsigned int physicalValue_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":stringValue, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		exi_string_character_t characters[dinParameterType_stringValue_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  stringValue ;
+	unsigned int stringValue_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ParameterSetType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":ParameterSetID,"urn:iso:15118:2:2010:MsgDataTypes":Parameter{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define dinParameterSetType_Parameter_ARRAY_SIZE 16
+struct dinParameterSetType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":ParameterSetID, http://www.w3.org/2001/XMLSchema,short */
+	int16_t ParameterSetID ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":Parameter, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ParameterType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":boolValue|"urn:iso:15118:2:2010:MsgDataTypes":byteValue|"urn:iso:15118:2:2010:MsgDataTypes":shortValue|"urn:iso:15118:2:2010:MsgDataTypes":intValue|"urn:iso:15118:2:2010:MsgDataTypes":physicalValue|"urn:iso:15118:2:2010:MsgDataTypes":stringValue)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct dinParameterType array[dinParameterSetType_Parameter_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Parameter;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,CurrentDemandReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":DC_EVStatus,"urn:iso:15118:2:2010:MsgBody":EVTargetCurrent,"urn:iso:15118:2:2010:MsgBody":EVMaximumVoltageLimit{0-1},"urn:iso:15118:2:2010:MsgBody":EVMaximumCurrentLimit{0-1},"urn:iso:15118:2:2010:MsgBody":EVMaximumPowerLimit{0-1},"urn:iso:15118:2:2010:MsgBody":BulkChargingComplete{0-1},"urn:iso:15118:2:2010:MsgBody":ChargingComplete,"urn:iso:15118:2:2010:MsgBody":RemainingTimeToFullSoC{0-1},"urn:iso:15118:2:2010:MsgBody":RemainingTimeToBulkSoC{0-1},"urn:iso:15118:2:2010:MsgBody":EVTargetVoltage)',  derivedBy='EXTENSION'.  */
+struct dinCurrentDemandReqType {
+	/* element: "urn:iso:15118:2:2010:MsgBody":DC_EVStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVStatusType',  base type name='EVStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":EVReady,"urn:iso:15118:2:2010:MsgDataTypes":EVCabinConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVRESSConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2010:MsgDataTypes":EVRESSSOC)',  derivedBy='EXTENSION'.  */
+	struct dinDC_EVStatusType DC_EVStatus ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":EVTargetCurrent, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVTargetCurrent ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":EVMaximumVoltageLimit, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVMaximumVoltageLimit ;
+	unsigned int EVMaximumVoltageLimit_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgBody":EVMaximumCurrentLimit, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVMaximumCurrentLimit ;
+	unsigned int EVMaximumCurrentLimit_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgBody":EVMaximumPowerLimit, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVMaximumPowerLimit ;
+	unsigned int EVMaximumPowerLimit_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgBody":BulkChargingComplete, http://www.w3.org/2001/XMLSchema,boolean */
+	int BulkChargingComplete ;
+	unsigned int BulkChargingComplete_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgBody":ChargingComplete, http://www.w3.org/2001/XMLSchema,boolean */
+	int ChargingComplete ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":RemainingTimeToFullSoC, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType RemainingTimeToFullSoC ;
+	unsigned int RemainingTimeToFullSoC_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgBody":RemainingTimeToBulkSoC, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType RemainingTimeToBulkSoC ;
+	unsigned int RemainingTimeToBulkSoC_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgBody":EVTargetVoltage, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVTargetVoltage ;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,PreChargeReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":DC_EVStatus,"urn:iso:15118:2:2010:MsgBody":EVTargetVoltage,"urn:iso:15118:2:2010:MsgBody":EVTargetCurrent)',  derivedBy='EXTENSION'.  */
+struct dinPreChargeReqType {
+	/* element: "urn:iso:15118:2:2010:MsgBody":DC_EVStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVStatusType',  base type name='EVStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":EVReady,"urn:iso:15118:2:2010:MsgDataTypes":EVCabinConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVRESSConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2010:MsgDataTypes":EVRESSSOC)',  derivedBy='EXTENSION'.  */
+	struct dinDC_EVStatusType DC_EVStatus ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":EVTargetVoltage, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVTargetVoltage ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":EVTargetCurrent, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct dinPhysicalValueType EVTargetCurrent ;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,ChargeParameterDiscoveryReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":EVRequestedEnergyTransferType,"urn:iso:15118:2:2010:MsgDataTypes":EVChargeParameter)',  derivedBy='EXTENSION'.  */
+struct dinChargeParameterDiscoveryReqType {
+	/* element: "urn:iso:15118:2:2010:MsgBody":EVRequestedEnergyTransferType, urn:iso:15118:2:2010:MsgDataTypes,EVRequestedEnergyTransferType */
+	dinEVRequestedEnergyTransferType EVRequestedEnergyTransferType ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVChargeParameter, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EVChargeParameterType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+	struct dinEVChargeParameterType EVChargeParameter ;
+	unsigned int EVChargeParameter_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":AC_EVChargeParameter, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,AC_EVChargeParameterType',  base type name='EVChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":DepartureTime,"urn:iso:15118:2:2010:MsgDataTypes":EAmount,"urn:iso:15118:2:2010:MsgDataTypes":EVMaxVoltage,"urn:iso:15118:2:2010:MsgDataTypes":EVMaxCurrent,"urn:iso:15118:2:2010:MsgDataTypes":EVMinCurrent)',  derivedBy='EXTENSION'.  */
+	struct dinAC_EVChargeParameterType AC_EVChargeParameter ;
+	unsigned int AC_EVChargeParameter_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":DC_EVChargeParameter, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVChargeParameterType',  base type name='EVChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":DC_EVStatus,"urn:iso:15118:2:2010:MsgDataTypes":EVMaximumCurrentLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVMaximumPowerLimit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVMaximumVoltageLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVEnergyCapacity{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVEnergyRequest{0-1},"urn:iso:15118:2:2010:MsgDataTypes":FullSOC{0-1},"urn:iso:15118:2:2010:MsgDataTypes":BulkSOC{0-1})',  derivedBy='EXTENSION'.  */
+	struct dinDC_EVChargeParameterType DC_EVChargeParameter ;
+	unsigned int DC_EVChargeParameter_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ConsumptionCostType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":startValue,"urn:iso:15118:2:2010:MsgDataTypes":Cost{0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define dinConsumptionCostType_Cost_ARRAY_SIZE 5
+struct dinConsumptionCostType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":startValue, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t startValue ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":Cost, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,CostType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":costKind,"urn:iso:15118:2:2010:MsgDataTypes":amount,"urn:iso:15118:2:2010:MsgDataTypes":amountMultiplier{0-1})',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct dinCostType array[dinConsumptionCostType_Cost_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Cost;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":ServiceTag,"urn:iso:15118:2:2010:MsgDataTypes":FreeService)',  derivedBy='RESTRICTION'.  */
+struct dinServiceType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":ServiceTag, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceTagType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":ServiceID,"urn:iso:15118:2:2010:MsgDataTypes":ServiceName{0-1},"urn:iso:15118:2:2010:MsgDataTypes":ServiceCategory,"urn:iso:15118:2:2010:MsgDataTypes":ServiceScope{0-1})',  derivedBy='RESTRICTION'.  */
+	struct dinServiceTagType ServiceTag ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":FreeService, http://www.w3.org/2001/XMLSchema,boolean */
+	int FreeService ;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceTagListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Service{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define dinServiceTagListType_Service_ARRAY_SIZE 8
+struct dinServiceTagListType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":Service, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":ServiceTag,"urn:iso:15118:2:2010:MsgDataTypes":FreeService)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct dinServiceType array[dinServiceTagListType_Service_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Service;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,SessionSetupResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":EVSEID,"urn:iso:15118:2:2010:MsgBody":DateTimeNow{0-1})',  derivedBy='EXTENSION'.  */
+#define dinSessionSetupResType_EVSEID_BYTES_SIZE 32 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,evseIDType is 32 */
+struct dinSessionSetupResType {
+	/* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */
+	dinresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":EVSEID, urn:iso:15118:2:2010:MsgDataTypes,evseIDType */
+	struct {
+		uint8_t bytes[dinSessionSetupResType_EVSEID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  EVSEID ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":DateTimeNow, http://www.w3.org/2001/XMLSchema,long */
+	int64_t DateTimeNow ;
+	unsigned int DateTimeNow_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,MeteringReceiptResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":AC_EVSEStatus)',  derivedBy='EXTENSION'.  */
+struct dinMeteringReceiptResType {
+	/* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */
+	dinresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":AC_EVSEStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,AC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":PowerSwitchClosed,"urn:iso:15118:2:2010:MsgDataTypes":RCD,"urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2010:MsgDataTypes":EVSENotification)',  derivedBy='EXTENSION'.  */
+	struct dinAC_EVSEStatusType AC_EVSEStatus ;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceParameterListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":ParameterSet{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define dinServiceParameterListType_ParameterSet_ARRAY_SIZE 5
+struct dinServiceParameterListType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":ParameterSet, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ParameterSetType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":ParameterSetID,"urn:iso:15118:2:2010:MsgDataTypes":Parameter{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct dinParameterSetType array[dinServiceParameterListType_ParameterSet_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} ParameterSet;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,CertificateUpdateReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2010:MsgBody":ContractID,"urn:iso:15118:2:2010:MsgBody":ListOfRootCertificateIDs,"urn:iso:15118:2:2010:MsgBody":DHParams)',  derivedBy='EXTENSION'.  */
+#define dinCertificateUpdateReqType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinCertificateUpdateReqType_ContractID_CHARACTERS_SIZE 24 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,contractIDType is 24 */
+#define dinCertificateUpdateReqType_DHParams_BYTES_SIZE 256 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,dHParamsType is 256 */
+struct dinCertificateUpdateReqType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,IDREF} */
+	struct {
+		exi_string_character_t characters[dinCertificateUpdateReqType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,CertificateChainType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Certificate,"urn:iso:15118:2:2010:MsgDataTypes":SubCertificates{0-1})',  derivedBy='RESTRICTION'.  */
+	struct dinCertificateChainType ContractSignatureCertChain ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":ContractID, urn:iso:15118:2:2010:MsgDataTypes,contractIDType */
+	struct {
+		exi_string_character_t characters[dinCertificateUpdateReqType_ContractID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ContractID ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":ListOfRootCertificateIDs, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ListOfRootCertificateIDsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":RootCertificateID{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct dinListOfRootCertificateIDsType ListOfRootCertificateIDs ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":DHParams, urn:iso:15118:2:2010:MsgDataTypes,dHParamsType */
+	struct {
+		uint8_t bytes[dinCertificateUpdateReqType_DHParams_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  DHParams ;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,ServicePaymentSelectionResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode)',  derivedBy='EXTENSION'.  */
+struct dinServicePaymentSelectionResType {
+	/* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */
+	dinresponseCodeType ResponseCode ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,KeyInfoType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":KeyName|"http://www.w3.org/2000/09/xmldsig#":KeyValue|"http://www.w3.org/2000/09/xmldsig#":RetrievalMethod|"http://www.w3.org/2000/09/xmldsig#":X509Data|"http://www.w3.org/2000/09/xmldsig#":PGPData|"http://www.w3.org/2000/09/xmldsig#":SPKIData|"http://www.w3.org/2000/09/xmldsig#":MgmtData|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"])){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define dinKeyInfoType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinKeyInfoType_KeyName_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinKeyInfoType_KeyName_ARRAY_SIZE 1
+#define dinKeyInfoType_KeyValue_ARRAY_SIZE 1
+#define dinKeyInfoType_RetrievalMethod_ARRAY_SIZE 1
+#define dinKeyInfoType_X509Data_ARRAY_SIZE 1
+#define dinKeyInfoType_PGPData_ARRAY_SIZE 1
+#define dinKeyInfoType_SPKIData_ARRAY_SIZE 1
+#define dinKeyInfoType_MgmtData_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinKeyInfoType_MgmtData_ARRAY_SIZE 1
+#define dinKeyInfoType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR
+struct dinKeyInfoType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[dinKeyInfoType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":KeyName, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		struct {
+			exi_string_character_t characters[dinKeyInfoType_KeyName_CHARACTERS_SIZE];
+			uint16_t charactersLen;
+		}  array[dinKeyInfoType_KeyName_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} KeyName;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":KeyValue, Complex type name='http://www.w3.org/2000/09/xmldsig#,KeyValueType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":DSAKeyValue|"http://www.w3.org/2000/09/xmldsig#":RSAKeyValue|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]))',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct dinKeyValueType array[dinKeyInfoType_KeyValue_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} KeyValue;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":RetrievalMethod, Complex type name='http://www.w3.org/2000/09/xmldsig#,RetrievalMethodType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1})',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct dinRetrievalMethodType array[dinKeyInfoType_RetrievalMethod_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} RetrievalMethod;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509Data, Complex type name='http://www.w3.org/2000/09/xmldsig#,X509DataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":X509IssuerSerial|"http://www.w3.org/2000/09/xmldsig#":X509SKI|"http://www.w3.org/2000/09/xmldsig#":X509SubjectName|"http://www.w3.org/2000/09/xmldsig#":X509Certificate|"http://www.w3.org/2000/09/xmldsig#":X509CRL|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]))){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct dinX509DataType array[dinKeyInfoType_X509Data_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509Data;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":PGPData, Complex type name='http://www.w3.org/2000/09/xmldsig#,PGPDataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":PGPKeyID,"http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket{0-1},(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})|("http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket,(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED}))',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct dinPGPDataType array[dinKeyInfoType_PGPData_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} PGPData;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SPKIData, Complex type name='http://www.w3.org/2000/09/xmldsig#,SPKIDataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":SPKISexp,(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-1}){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct dinSPKIDataType array[dinKeyInfoType_SPKIData_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SPKIData;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":MgmtData, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		struct {
+			exi_string_character_t characters[dinKeyInfoType_MgmtData_CHARACTERS_SIZE];
+			uint16_t charactersLen;
+		}  array[dinKeyInfoType_MgmtData_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} MgmtData;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[dinKeyInfoType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,PaymentDetailsReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ContractID,"urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain)',  derivedBy='EXTENSION'.  */
+#define dinPaymentDetailsReqType_ContractID_CHARACTERS_SIZE 24 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,contractIDType is 24 */
+struct dinPaymentDetailsReqType {
+	/* element: "urn:iso:15118:2:2010:MsgBody":ContractID, urn:iso:15118:2:2010:MsgDataTypes,contractIDType */
+	struct {
+		exi_string_character_t characters[dinPaymentDetailsReqType_ContractID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ContractID ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,CertificateChainType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Certificate,"urn:iso:15118:2:2010:MsgDataTypes":SubCertificates{0-1})',  derivedBy='RESTRICTION'.  */
+	struct dinCertificateChainType ContractSignatureCertChain ;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,CableCheckResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgBody":EVSEProcessing)',  derivedBy='EXTENSION'.  */
+struct dinCableCheckResType {
+	/* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */
+	dinresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVSEStatusCode,"urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2010:MsgDataTypes":EVSENotification)',  derivedBy='EXTENSION'.  */
+	struct dinDC_EVSEStatusType DC_EVSEStatus ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":EVSEProcessing, urn:iso:15118:2:2010:MsgDataTypes,EVSEProcessingType */
+	dinEVSEProcessingType EVSEProcessing ;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,CertificateInstallationResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2010:MsgBody":ContractSignatureEncryptedPrivateKey,"urn:iso:15118:2:2010:MsgBody":DHParams,"urn:iso:15118:2:2010:MsgBody":ContractID)',  derivedBy='EXTENSION'.  */
+#define dinCertificateInstallationResType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinCertificateInstallationResType_ContractSignatureEncryptedPrivateKey_BYTES_SIZE 128 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,privateKeyType is 128 */
+#define dinCertificateInstallationResType_DHParams_BYTES_SIZE 256 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,dHParamsType is 256 */
+#define dinCertificateInstallationResType_ContractID_CHARACTERS_SIZE 24 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,contractIDType is 24 */
+struct dinCertificateInstallationResType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,IDREF} */
+	struct {
+		exi_string_character_t characters[dinCertificateInstallationResType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */
+	dinresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,CertificateChainType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Certificate,"urn:iso:15118:2:2010:MsgDataTypes":SubCertificates{0-1})',  derivedBy='RESTRICTION'.  */
+	struct dinCertificateChainType ContractSignatureCertChain ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":ContractSignatureEncryptedPrivateKey, urn:iso:15118:2:2010:MsgDataTypes,privateKeyType */
+	struct {
+		uint8_t bytes[dinCertificateInstallationResType_ContractSignatureEncryptedPrivateKey_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  ContractSignatureEncryptedPrivateKey ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":DHParams, urn:iso:15118:2:2010:MsgDataTypes,dHParamsType */
+	struct {
+		uint8_t bytes[dinCertificateInstallationResType_DHParams_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  DHParams ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":ContractID, urn:iso:15118:2:2010:MsgDataTypes,contractIDType */
+	struct {
+		exi_string_character_t characters[dinCertificateInstallationResType_ContractID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ContractID ;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,ServiceDetailResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":ServiceID,"urn:iso:15118:2:2010:MsgBody":ServiceParameterList{0-1})',  derivedBy='EXTENSION'.  */
+struct dinServiceDetailResType {
+	/* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */
+	dinresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":ServiceID, urn:iso:15118:2:2010:MsgDataTypes,serviceIDType */
+	uint16_t ServiceID ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":ServiceParameterList, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceParameterListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":ParameterSet{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct dinServiceParameterListType ServiceParameterList ;
+	unsigned int ServiceParameterList_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,CertificateUpdateResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2010:MsgBody":ContractSignatureEncryptedPrivateKey,"urn:iso:15118:2:2010:MsgBody":DHParams,"urn:iso:15118:2:2010:MsgBody":ContractID,"urn:iso:15118:2:2010:MsgBody":RetryCounter)',  derivedBy='EXTENSION'.  */
+#define dinCertificateUpdateResType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinCertificateUpdateResType_ContractSignatureEncryptedPrivateKey_BYTES_SIZE 128 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,privateKeyType is 128 */
+#define dinCertificateUpdateResType_DHParams_BYTES_SIZE 256 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,dHParamsType is 256 */
+#define dinCertificateUpdateResType_ContractID_CHARACTERS_SIZE 24 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,contractIDType is 24 */
+struct dinCertificateUpdateResType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,IDREF} */
+	struct {
+		exi_string_character_t characters[dinCertificateUpdateResType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */
+	dinresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,CertificateChainType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Certificate,"urn:iso:15118:2:2010:MsgDataTypes":SubCertificates{0-1})',  derivedBy='RESTRICTION'.  */
+	struct dinCertificateChainType ContractSignatureCertChain ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":ContractSignatureEncryptedPrivateKey, urn:iso:15118:2:2010:MsgDataTypes,privateKeyType */
+	struct {
+		uint8_t bytes[dinCertificateUpdateResType_ContractSignatureEncryptedPrivateKey_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  ContractSignatureEncryptedPrivateKey ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":DHParams, urn:iso:15118:2:2010:MsgDataTypes,dHParamsType */
+	struct {
+		uint8_t bytes[dinCertificateUpdateResType_DHParams_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  DHParams ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":ContractID, urn:iso:15118:2:2010:MsgDataTypes,contractIDType */
+	struct {
+		exi_string_character_t characters[dinCertificateUpdateResType_ContractID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ContractID ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":RetryCounter, http://www.w3.org/2001/XMLSchema,short */
+	int16_t RetryCounter ;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SalesTariffEntryType',  base type name='EntryType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2010:MsgDataTypes":TimeInterval),("urn:iso:15118:2:2010:MsgDataTypes":EPriceLevel,"urn:iso:15118:2:2010:MsgDataTypes":ConsumptionCost{0-UNBOUNDED}))',  derivedBy='EXTENSION'.  */
+#define dinSalesTariffEntryType_ConsumptionCost_ARRAY_SIZE 5
+struct dinSalesTariffEntryType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":TimeInterval, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,IntervalType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+	struct dinIntervalType TimeInterval ;
+	unsigned int TimeInterval_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":RelativeTimeInterval, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,RelativeTimeIntervalType',  base type name='IntervalType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":start,"urn:iso:15118:2:2010:MsgDataTypes":duration{0-1})',  derivedBy='EXTENSION'.  */
+	struct dinRelativeTimeIntervalType RelativeTimeInterval ;
+	unsigned int RelativeTimeInterval_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EPriceLevel, http://www.w3.org/2001/XMLSchema,unsignedByte */
+	uint8_t EPriceLevel ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":ConsumptionCost, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ConsumptionCostType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":startValue,"urn:iso:15118:2:2010:MsgDataTypes":Cost{0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct dinConsumptionCostType array[dinSalesTariffEntryType_ConsumptionCost_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} ConsumptionCost;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,ServiceDiscoveryResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":PaymentOptions,"urn:iso:15118:2:2010:MsgBody":ChargeService,"urn:iso:15118:2:2010:MsgBody":ServiceList{0-1})',  derivedBy='EXTENSION'.  */
+struct dinServiceDiscoveryResType {
+	/* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */
+	dinresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":PaymentOptions, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PaymentOptionsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":PaymentOption{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct dinPaymentOptionsType PaymentOptions ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":ChargeService, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceChargeType',  base type name='ServiceType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2010:MsgDataTypes":ServiceTag,"urn:iso:15118:2:2010:MsgDataTypes":FreeService),("urn:iso:15118:2:2010:MsgDataTypes":EnergyTransferType))',  derivedBy='EXTENSION'.  */
+	struct dinServiceChargeType ChargeService ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":ServiceList, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceTagListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":Service{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct dinServiceTagListType ServiceList ;
+	unsigned int ServiceList_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":SignedInfo,"http://www.w3.org/2000/09/xmldsig#":SignatureValue,"http://www.w3.org/2000/09/xmldsig#":KeyInfo{0-1},"http://www.w3.org/2000/09/xmldsig#":Object{0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define dinSignatureType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinSignatureType_Object_ARRAY_SIZE 1
+struct dinSignatureType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[dinSignatureType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SignedInfo, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignedInfoType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":CanonicalizationMethod,"http://www.w3.org/2000/09/xmldsig#":SignatureMethod,"http://www.w3.org/2000/09/xmldsig#":Reference{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct dinSignedInfoType SignedInfo ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SignatureValue, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureValueType',  base type name='base64Binary',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+	struct dinSignatureValueType SignatureValue ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":KeyInfo, Complex type name='http://www.w3.org/2000/09/xmldsig#,KeyInfoType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":KeyName|"http://www.w3.org/2000/09/xmldsig#":KeyValue|"http://www.w3.org/2000/09/xmldsig#":RetrievalMethod|"http://www.w3.org/2000/09/xmldsig#":X509Data|"http://www.w3.org/2000/09/xmldsig#":PGPData|"http://www.w3.org/2000/09/xmldsig#":SPKIData|"http://www.w3.org/2000/09/xmldsig#":MgmtData|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"])){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct dinKeyInfoType KeyInfo ;
+	unsigned int KeyInfo_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Object, Complex type name='http://www.w3.org/2000/09/xmldsig#,ObjectType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##any])){0-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct dinObjectType array[dinSignatureType_Object_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Object;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SalesTariffType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":SalesTariffID,"urn:iso:15118:2:2010:MsgDataTypes":SalesTariffDescription{0-1},"urn:iso:15118:2:2010:MsgDataTypes":NumEPriceLevels,"urn:iso:15118:2:2010:MsgDataTypes":SalesTariffEntry{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define dinSalesTariffType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinSalesTariffType_SalesTariffDescription_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,tariffDescriptionType is 32 */
+#define dinSalesTariffType_SalesTariffEntry_ARRAY_SIZE 5
+struct dinSalesTariffType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,IDREF} */
+	struct {
+		exi_string_character_t characters[dinSalesTariffType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":SalesTariffID, urn:iso:15118:2:2010:MsgDataTypes,SAIDType */
+	int16_t SalesTariffID ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":SalesTariffDescription, urn:iso:15118:2:2010:MsgDataTypes,tariffDescriptionType */
+	struct {
+		exi_string_character_t characters[dinSalesTariffType_SalesTariffDescription_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  SalesTariffDescription ;
+	unsigned int SalesTariffDescription_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":NumEPriceLevels, http://www.w3.org/2001/XMLSchema,unsignedByte */
+	uint8_t NumEPriceLevels ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":SalesTariffEntry, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SalesTariffEntryType',  base type name='EntryType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2010:MsgDataTypes":TimeInterval),("urn:iso:15118:2:2010:MsgDataTypes":EPriceLevel,"urn:iso:15118:2:2010:MsgDataTypes":ConsumptionCost{0-UNBOUNDED}))',  derivedBy='EXTENSION'.  */
+	struct {
+		struct dinSalesTariffEntryType array[dinSalesTariffType_SalesTariffEntry_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SalesTariffEntry;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgHeader,MessageHeaderType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgHeader":SessionID,"urn:iso:15118:2:2010:MsgHeader":Notification{0-1},"http://www.w3.org/2000/09/xmldsig#":Signature{0-1})',  derivedBy='RESTRICTION'.  */
+#define dinMessageHeaderType_SessionID_BYTES_SIZE 8 /* XML schema facet length for urn:iso:15118:2:2010:MsgDataTypes,sessionIDType is 8 */
+struct dinMessageHeaderType {
+	/* element: "urn:iso:15118:2:2010:MsgHeader":SessionID, urn:iso:15118:2:2010:MsgDataTypes,sessionIDType */
+	struct {
+		uint8_t bytes[dinMessageHeaderType_SessionID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  SessionID ;
+	/* element: "urn:iso:15118:2:2010:MsgHeader":Notification, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,NotificationType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":FaultCode,"urn:iso:15118:2:2010:MsgDataTypes":FaultMsg{0-1})',  derivedBy='RESTRICTION'.  */
+	struct dinNotificationType Notification ;
+	unsigned int Notification_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Signature, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":SignedInfo,"http://www.w3.org/2000/09/xmldsig#":SignatureValue,"http://www.w3.org/2000/09/xmldsig#":KeyInfo{0-1},"http://www.w3.org/2000/09/xmldsig#":Object{0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct dinSignatureType Signature ;
+	unsigned int Signature_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SAScheduleTupleType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":SAScheduleTupleID,"urn:iso:15118:2:2010:MsgDataTypes":PMaxSchedule,"urn:iso:15118:2:2010:MsgDataTypes":SalesTariff{0-1})',  derivedBy='RESTRICTION'.  */
+struct dinSAScheduleTupleType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":SAScheduleTupleID, urn:iso:15118:2:2010:MsgDataTypes,SAIDType */
+	int16_t SAScheduleTupleID ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":PMaxSchedule, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PMaxScheduleType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":PMaxScheduleID,"urn:iso:15118:2:2010:MsgDataTypes":PMaxScheduleEntry{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct dinPMaxScheduleType PMaxSchedule ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":SalesTariff, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SalesTariffType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":SalesTariffID,"urn:iso:15118:2:2010:MsgDataTypes":SalesTariffDescription{0-1},"urn:iso:15118:2:2010:MsgDataTypes":NumEPriceLevels,"urn:iso:15118:2:2010:MsgDataTypes":SalesTariffEntry{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct dinSalesTariffType SalesTariff ;
+	unsigned int SalesTariff_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SAScheduleListType',  base type name='SASchedulesType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":SAScheduleTuple{1-UNBOUNDED})',  derivedBy='EXTENSION'.  */
+#define dinSAScheduleListType_SAScheduleTuple_ARRAY_SIZE 5
+struct dinSAScheduleListType {
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":SAScheduleTuple, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SAScheduleTupleType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":SAScheduleTupleID,"urn:iso:15118:2:2010:MsgDataTypes":PMaxSchedule,"urn:iso:15118:2:2010:MsgDataTypes":SalesTariff{0-1})',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct dinSAScheduleTupleType array[dinSAScheduleListType_SAScheduleTuple_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SAScheduleTuple;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgBody,ChargeParameterDiscoveryResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":EVSEProcessing,"urn:iso:15118:2:2010:MsgDataTypes":SASchedules,"urn:iso:15118:2:2010:MsgDataTypes":EVSEChargeParameter)',  derivedBy='EXTENSION'.  */
+struct dinChargeParameterDiscoveryResType {
+	/* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */
+	dinresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2010:MsgBody":EVSEProcessing, urn:iso:15118:2:2010:MsgDataTypes,EVSEProcessingType */
+	dinEVSEProcessingType EVSEProcessing ;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":SASchedules, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SASchedulesType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+	struct dinSASchedulesType SASchedules ;
+	unsigned int SASchedules_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":SAScheduleList, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SAScheduleListType',  base type name='SASchedulesType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":SAScheduleTuple{1-UNBOUNDED})',  derivedBy='EXTENSION'.  */
+	struct dinSAScheduleListType SAScheduleList ;
+	unsigned int SAScheduleList_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSEChargeParameter, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EVSEChargeParameterType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+	struct dinEVSEChargeParameterType EVSEChargeParameter ;
+	unsigned int EVSEChargeParameter_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":AC_EVSEChargeParameter, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,AC_EVSEChargeParameterType',  base type name='EVSEChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":AC_EVSEStatus,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaxVoltage,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaxCurrent,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMinCurrent)',  derivedBy='EXTENSION'.  */
+	struct dinAC_EVSEChargeParameterType AC_EVSEChargeParameter ;
+	unsigned int AC_EVSEChargeParameter_isUsed:1;
+	/* element: "urn:iso:15118:2:2010:MsgDataTypes":DC_EVSEChargeParameter, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVSEChargeParameterType',  base type name='EVSEChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDataTypes":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaximumCurrentLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaximumPowerLimit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaximumVoltageLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMinimumCurrentLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMinimumVoltageLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVSECurrentRegulationTolerance{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVSEPeakCurrentRipple,"urn:iso:15118:2:2010:MsgDataTypes":EVSEEnergyToBeDelivered{0-1})',  derivedBy='EXTENSION'.  */
+	struct dinDC_EVSEChargeParameterType DC_EVSEChargeParameter ;
+	unsigned int DC_EVSEChargeParameter_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDef,BodyType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDef":BodyElement{0-1})',  derivedBy='RESTRICTION'.  */
+struct dinBodyType {
+	/* substitutionGroup */
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	union {
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */
+		/* element: "urn:iso:15118:2:2010:MsgDef":BodyElement, Complex type name='urn:iso:15118:2:2010:MsgDef,BodyBaseType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+		struct dinBodyBaseType BodyElement ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":SessionSetupReq, Complex type name='urn:iso:15118:2:2010:MsgBody,SessionSetupReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":EVCCID)',  derivedBy='EXTENSION'.  */
+		struct dinSessionSetupReqType SessionSetupReq ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":SessionSetupRes, Complex type name='urn:iso:15118:2:2010:MsgBody,SessionSetupResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":EVSEID,"urn:iso:15118:2:2010:MsgBody":DateTimeNow{0-1})',  derivedBy='EXTENSION'.  */
+		struct dinSessionSetupResType SessionSetupRes ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":ServiceDiscoveryReq, Complex type name='urn:iso:15118:2:2010:MsgBody,ServiceDiscoveryReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ServiceScope{0-1},"urn:iso:15118:2:2010:MsgBody":ServiceCategory{0-1})',  derivedBy='EXTENSION'.  */
+		struct dinServiceDiscoveryReqType ServiceDiscoveryReq ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":ServiceDiscoveryRes, Complex type name='urn:iso:15118:2:2010:MsgBody,ServiceDiscoveryResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":PaymentOptions,"urn:iso:15118:2:2010:MsgBody":ChargeService,"urn:iso:15118:2:2010:MsgBody":ServiceList{0-1})',  derivedBy='EXTENSION'.  */
+		struct dinServiceDiscoveryResType ServiceDiscoveryRes ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":ServiceDetailReq, Complex type name='urn:iso:15118:2:2010:MsgBody,ServiceDetailReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ServiceID)',  derivedBy='EXTENSION'.  */
+		struct dinServiceDetailReqType ServiceDetailReq ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":ServiceDetailRes, Complex type name='urn:iso:15118:2:2010:MsgBody,ServiceDetailResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":ServiceID,"urn:iso:15118:2:2010:MsgBody":ServiceParameterList{0-1})',  derivedBy='EXTENSION'.  */
+		struct dinServiceDetailResType ServiceDetailRes ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":ServicePaymentSelectionReq, Complex type name='urn:iso:15118:2:2010:MsgBody,ServicePaymentSelectionReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":SelectedPaymentOption,"urn:iso:15118:2:2010:MsgBody":SelectedServiceList)',  derivedBy='EXTENSION'.  */
+		struct dinServicePaymentSelectionReqType ServicePaymentSelectionReq ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":ServicePaymentSelectionRes, Complex type name='urn:iso:15118:2:2010:MsgBody,ServicePaymentSelectionResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode)',  derivedBy='EXTENSION'.  */
+		struct dinServicePaymentSelectionResType ServicePaymentSelectionRes ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":PaymentDetailsReq, Complex type name='urn:iso:15118:2:2010:MsgBody,PaymentDetailsReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ContractID,"urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain)',  derivedBy='EXTENSION'.  */
+		struct dinPaymentDetailsReqType PaymentDetailsReq ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":PaymentDetailsRes, Complex type name='urn:iso:15118:2:2010:MsgBody,PaymentDetailsResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":GenChallenge,"urn:iso:15118:2:2010:MsgBody":DateTimeNow)',  derivedBy='EXTENSION'.  */
+		struct dinPaymentDetailsResType PaymentDetailsRes ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":ContractAuthenticationReq, Complex type name='urn:iso:15118:2:2010:MsgBody,ContractAuthenticationReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":GenChallenge{0-1})',  derivedBy='EXTENSION'.  */
+		struct dinContractAuthenticationReqType ContractAuthenticationReq ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":ContractAuthenticationRes, Complex type name='urn:iso:15118:2:2010:MsgBody,ContractAuthenticationResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":EVSEProcessing)',  derivedBy='EXTENSION'.  */
+		struct dinContractAuthenticationResType ContractAuthenticationRes ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":ChargeParameterDiscoveryReq, Complex type name='urn:iso:15118:2:2010:MsgBody,ChargeParameterDiscoveryReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":EVRequestedEnergyTransferType,"urn:iso:15118:2:2010:MsgDataTypes":EVChargeParameter)',  derivedBy='EXTENSION'.  */
+		struct dinChargeParameterDiscoveryReqType ChargeParameterDiscoveryReq ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":ChargeParameterDiscoveryRes, Complex type name='urn:iso:15118:2:2010:MsgBody,ChargeParameterDiscoveryResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":EVSEProcessing,"urn:iso:15118:2:2010:MsgDataTypes":SASchedules,"urn:iso:15118:2:2010:MsgDataTypes":EVSEChargeParameter)',  derivedBy='EXTENSION'.  */
+		struct dinChargeParameterDiscoveryResType ChargeParameterDiscoveryRes ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":PowerDeliveryReq, Complex type name='urn:iso:15118:2:2010:MsgBody,PowerDeliveryReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ReadyToChargeState,"urn:iso:15118:2:2010:MsgBody":ChargingProfile{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVPowerDeliveryParameter{0-1})',  derivedBy='EXTENSION'.  */
+		struct dinPowerDeliveryReqType PowerDeliveryReq ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":PowerDeliveryRes, Complex type name='urn:iso:15118:2:2010:MsgBody,PowerDeliveryResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgDataTypes":EVSEStatus)',  derivedBy='EXTENSION'.  */
+		struct dinPowerDeliveryResType PowerDeliveryRes ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":ChargingStatusReq, Complex type name='urn:iso:15118:2:2010:MsgBody,ChargingStatusReqType',  base type name='BodyBaseType',  content type='EMPTY',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+		struct dinChargingStatusReqType ChargingStatusReq ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":ChargingStatusRes, Complex type name='urn:iso:15118:2:2010:MsgBody,ChargingStatusResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":EVSEID,"urn:iso:15118:2:2010:MsgBody":SAScheduleTupleID,"urn:iso:15118:2:2010:MsgBody":EVSEMaxCurrent{0-1},"urn:iso:15118:2:2010:MsgBody":MeterInfo{0-1},"urn:iso:15118:2:2010:MsgBody":ReceiptRequired,"urn:iso:15118:2:2010:MsgBody":AC_EVSEStatus)',  derivedBy='EXTENSION'.  */
+		struct dinChargingStatusResType ChargingStatusRes ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":MeteringReceiptReq, Complex type name='urn:iso:15118:2:2010:MsgBody,MeteringReceiptReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":SessionID,"urn:iso:15118:2:2010:MsgBody":SAScheduleTupleID{0-1},"urn:iso:15118:2:2010:MsgBody":MeterInfo)',  derivedBy='EXTENSION'.  */
+		struct dinMeteringReceiptReqType MeteringReceiptReq ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":MeteringReceiptRes, Complex type name='urn:iso:15118:2:2010:MsgBody,MeteringReceiptResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":AC_EVSEStatus)',  derivedBy='EXTENSION'.  */
+		struct dinMeteringReceiptResType MeteringReceiptRes ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":SessionStopReq, Complex type name='urn:iso:15118:2:2010:MsgBody,SessionStopType',  base type name='BodyBaseType',  content type='EMPTY',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+		struct dinSessionStopType SessionStopReq ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":SessionStopRes, Complex type name='urn:iso:15118:2:2010:MsgBody,SessionStopResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode)',  derivedBy='EXTENSION'.  */
+		struct dinSessionStopResType SessionStopRes ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":CertificateUpdateReq, Complex type name='urn:iso:15118:2:2010:MsgBody,CertificateUpdateReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2010:MsgBody":ContractID,"urn:iso:15118:2:2010:MsgBody":ListOfRootCertificateIDs,"urn:iso:15118:2:2010:MsgBody":DHParams)',  derivedBy='EXTENSION'.  */
+		struct dinCertificateUpdateReqType CertificateUpdateReq ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":CertificateUpdateRes, Complex type name='urn:iso:15118:2:2010:MsgBody,CertificateUpdateResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2010:MsgBody":ContractSignatureEncryptedPrivateKey,"urn:iso:15118:2:2010:MsgBody":DHParams,"urn:iso:15118:2:2010:MsgBody":ContractID,"urn:iso:15118:2:2010:MsgBody":RetryCounter)',  derivedBy='EXTENSION'.  */
+		struct dinCertificateUpdateResType CertificateUpdateRes ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":CertificateInstallationReq, Complex type name='urn:iso:15118:2:2010:MsgBody,CertificateInstallationReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":OEMProvisioningCert,"urn:iso:15118:2:2010:MsgBody":ListOfRootCertificateIDs,"urn:iso:15118:2:2010:MsgBody":DHParams)',  derivedBy='EXTENSION'.  */
+		struct dinCertificateInstallationReqType CertificateInstallationReq ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":CertificateInstallationRes, Complex type name='urn:iso:15118:2:2010:MsgBody,CertificateInstallationResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2010:MsgBody":ContractSignatureEncryptedPrivateKey,"urn:iso:15118:2:2010:MsgBody":DHParams,"urn:iso:15118:2:2010:MsgBody":ContractID)',  derivedBy='EXTENSION'.  */
+		struct dinCertificateInstallationResType CertificateInstallationRes ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":CableCheckReq, Complex type name='urn:iso:15118:2:2010:MsgBody,CableCheckReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":DC_EVStatus)',  derivedBy='EXTENSION'.  */
+		struct dinCableCheckReqType CableCheckReq ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":CableCheckRes, Complex type name='urn:iso:15118:2:2010:MsgBody,CableCheckResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgBody":EVSEProcessing)',  derivedBy='EXTENSION'.  */
+		struct dinCableCheckResType CableCheckRes ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":PreChargeReq, Complex type name='urn:iso:15118:2:2010:MsgBody,PreChargeReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":DC_EVStatus,"urn:iso:15118:2:2010:MsgBody":EVTargetVoltage,"urn:iso:15118:2:2010:MsgBody":EVTargetCurrent)',  derivedBy='EXTENSION'.  */
+		struct dinPreChargeReqType PreChargeReq ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":PreChargeRes, Complex type name='urn:iso:15118:2:2010:MsgBody,PreChargeResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgBody":EVSEPresentVoltage)',  derivedBy='EXTENSION'.  */
+		struct dinPreChargeResType PreChargeRes ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":CurrentDemandReq, Complex type name='urn:iso:15118:2:2010:MsgBody,CurrentDemandReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":DC_EVStatus,"urn:iso:15118:2:2010:MsgBody":EVTargetCurrent,"urn:iso:15118:2:2010:MsgBody":EVMaximumVoltageLimit{0-1},"urn:iso:15118:2:2010:MsgBody":EVMaximumCurrentLimit{0-1},"urn:iso:15118:2:2010:MsgBody":EVMaximumPowerLimit{0-1},"urn:iso:15118:2:2010:MsgBody":BulkChargingComplete{0-1},"urn:iso:15118:2:2010:MsgBody":ChargingComplete,"urn:iso:15118:2:2010:MsgBody":RemainingTimeToFullSoC{0-1},"urn:iso:15118:2:2010:MsgBody":RemainingTimeToBulkSoC{0-1},"urn:iso:15118:2:2010:MsgBody":EVTargetVoltage)',  derivedBy='EXTENSION'.  */
+		struct dinCurrentDemandReqType CurrentDemandReq ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":CurrentDemandRes, Complex type name='urn:iso:15118:2:2010:MsgBody,CurrentDemandResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgBody":EVSEPresentVoltage,"urn:iso:15118:2:2010:MsgBody":EVSEPresentCurrent,"urn:iso:15118:2:2010:MsgBody":EVSECurrentLimitAchieved,"urn:iso:15118:2:2010:MsgBody":EVSEVoltageLimitAchieved,"urn:iso:15118:2:2010:MsgBody":EVSEPowerLimitAchieved,"urn:iso:15118:2:2010:MsgBody":EVSEMaximumVoltageLimit{0-1},"urn:iso:15118:2:2010:MsgBody":EVSEMaximumCurrentLimit{0-1},"urn:iso:15118:2:2010:MsgBody":EVSEMaximumPowerLimit{0-1})',  derivedBy='EXTENSION'.  */
+		struct dinCurrentDemandResType CurrentDemandRes ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":WeldingDetectionReq, Complex type name='urn:iso:15118:2:2010:MsgBody,WeldingDetectionReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":DC_EVStatus)',  derivedBy='EXTENSION'.  */
+		struct dinWeldingDetectionReqType WeldingDetectionReq ;
+		/* element: "urn:iso:15118:2:2010:MsgBody":WeldingDetectionRes, Complex type name='urn:iso:15118:2:2010:MsgBody,WeldingDetectionResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgBody":EVSEPresentVoltage)',  derivedBy='EXTENSION'.  */
+		struct dinWeldingDetectionResType WeldingDetectionRes ;
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	};
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */
+		unsigned int BodyElement_isUsed:1;
+		unsigned int SessionSetupReq_isUsed:1;
+		unsigned int SessionSetupRes_isUsed:1;
+		unsigned int ServiceDiscoveryReq_isUsed:1;
+		unsigned int ServiceDiscoveryRes_isUsed:1;
+		unsigned int ServiceDetailReq_isUsed:1;
+		unsigned int ServiceDetailRes_isUsed:1;
+		unsigned int ServicePaymentSelectionReq_isUsed:1;
+		unsigned int ServicePaymentSelectionRes_isUsed:1;
+		unsigned int PaymentDetailsReq_isUsed:1;
+		unsigned int PaymentDetailsRes_isUsed:1;
+		unsigned int ContractAuthenticationReq_isUsed:1;
+		unsigned int ContractAuthenticationRes_isUsed:1;
+		unsigned int ChargeParameterDiscoveryReq_isUsed:1;
+		unsigned int ChargeParameterDiscoveryRes_isUsed:1;
+		unsigned int PowerDeliveryReq_isUsed:1;
+		unsigned int PowerDeliveryRes_isUsed:1;
+		unsigned int ChargingStatusReq_isUsed:1;
+		unsigned int ChargingStatusRes_isUsed:1;
+		unsigned int MeteringReceiptReq_isUsed:1;
+		unsigned int MeteringReceiptRes_isUsed:1;
+		unsigned int SessionStopReq_isUsed:1;
+		unsigned int SessionStopRes_isUsed:1;
+		unsigned int CertificateUpdateReq_isUsed:1;
+		unsigned int CertificateUpdateRes_isUsed:1;
+		unsigned int CertificateInstallationReq_isUsed:1;
+		unsigned int CertificateInstallationRes_isUsed:1;
+		unsigned int CableCheckReq_isUsed:1;
+		unsigned int CableCheckRes_isUsed:1;
+		unsigned int PreChargeReq_isUsed:1;
+		unsigned int PreChargeRes_isUsed:1;
+		unsigned int CurrentDemandReq_isUsed:1;
+		unsigned int CurrentDemandRes_isUsed:1;
+		unsigned int WeldingDetectionReq_isUsed:1;
+		unsigned int WeldingDetectionRes_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:MsgDef,#AnonType_V2G_Message',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDef":Header,"urn:iso:15118:2:2010:MsgDef":Body)',  derivedBy='RESTRICTION'.  */
+struct dinAnonType_V2G_Message {
+	/* element: "urn:iso:15118:2:2010:MsgDef":Header, Complex type name='urn:iso:15118:2:2010:MsgHeader,MessageHeaderType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgHeader":SessionID,"urn:iso:15118:2:2010:MsgHeader":Notification{0-1},"http://www.w3.org/2000/09/xmldsig#":Signature{0-1})',  derivedBy='RESTRICTION'.  */
+	struct dinMessageHeaderType Header ;
+	/* element: "urn:iso:15118:2:2010:MsgDef":Body, Complex type name='urn:iso:15118:2:2010:MsgDef,BodyType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2010:MsgDef":BodyElement{0-1})',  derivedBy='RESTRICTION'.  */
+	struct dinBodyType Body ;
+};
+
+
+
+#define dinEXIDocument_MgmtData_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinEXIDocument_KeyName_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinEXIDocument_DigestValue_BYTES_SIZE 350
+#define dinEXIFragment_Certificate_BYTES_SIZE 1200 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,certificateType is 1200 */
+#define dinEXIFragment_stringValue_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinEXIFragment_OEMProvisioningCert_BYTES_SIZE 1200 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,certificateType is 1200 */
+#define dinEXIFragment_Exponent_BYTES_SIZE 350
+#define dinEXIFragment_SessionID_BYTES_SIZE 8 /* XML schema facet length for urn:iso:15118:2:2010:MsgDataTypes,sessionIDType is 8 */
+#define dinEXIFragment_PgenCounter_BYTES_SIZE 350
+#define dinEXIFragment_EVCCID_BYTES_SIZE 8 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,evccIDType is 8 */
+#define dinEXIFragment_RootCertificateID_CHARACTERS_SIZE 40 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,rootCertificateIDType is 40 */
+#define dinEXIFragment_PGPKeyPacket_BYTES_SIZE 350
+#define dinEXIFragment_Seed_BYTES_SIZE 350
+#define dinEXIFragment_XPath_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinEXIFragment_ContractID_CHARACTERS_SIZE 24 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,contractIDType is 24 */
+#define dinEXIFragment_MgmtData_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinEXIFragment_P_BYTES_SIZE 350
+#define dinEXIFragment_Q_BYTES_SIZE 350
+#define dinEXIFragment_X509SubjectName_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinEXIFragment_G_BYTES_SIZE 350
+#define dinEXIFragment_J_BYTES_SIZE 350
+#define dinEXIFragment_X509CRL_BYTES_SIZE 350
+#define dinEXIFragment_Y_BYTES_SIZE 350
+#define dinEXIFragment_DigestValue_BYTES_SIZE 350
+#define dinEXIFragment_ContractSignatureEncryptedPrivateKey_BYTES_SIZE 128 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,privateKeyType is 128 */
+#define dinEXIFragment_SPKISexp_BYTES_SIZE 350
+#define dinEXIFragment_DHParams_BYTES_SIZE 256 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,dHParamsType is 256 */
+#define dinEXIFragment_PGPKeyID_BYTES_SIZE 350
+#define dinEXIFragment_X509Certificate_BYTES_SIZE 350
+#define dinEXIFragment_ServiceName_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,serviceNameType is 32 */
+#define dinEXIFragment_EVSEID_BYTES_SIZE 32 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,evseIDType is 32 */
+#define dinEXIFragment_ServiceScope_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,serviceScopeType is 32 */
+#define dinEXIFragment_GenChallenge_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinEXIFragment_SalesTariffDescription_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,tariffDescriptionType is 32 */
+#define dinEXIFragment_FaultMsg_CHARACTERS_SIZE 64 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,faultMsgType is 64 */
+#define dinEXIFragment_KeyName_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinEXIFragment_SigMeterReading_BYTES_SIZE 32 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,sigMeterReadingType is 32 */
+#define dinEXIFragment_X509SKI_BYTES_SIZE 350
+#define dinEXIFragment_X509IssuerName_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define dinEXIFragment_MeterID_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,meterIDType is 32 */
+#define dinEXIFragment_Modulus_BYTES_SIZE 350
+
+
+/* Global elements of EXI Document */
+struct dinEXIDocument {
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	union {
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */
+	struct dinBodyBaseType BodyElement ;
+	struct dinAnonType_V2G_Message V2G_Message ;
+	struct dinSignaturePropertyType SignatureProperty ;
+	struct dinDSAKeyValueType DSAKeyValue ;
+	struct dinSignaturePropertiesType SignatureProperties ;
+	struct dinKeyValueType KeyValue ;
+	struct dinTransformsType Transforms ;
+	struct dinDigestMethodType DigestMethod ;
+	struct dinSignatureType Signature ;
+	struct dinRetrievalMethodType RetrievalMethod ;
+	struct dinManifestType Manifest ;
+	struct dinReferenceType Reference ;
+	struct dinCanonicalizationMethodType CanonicalizationMethod ;
+	struct dinRSAKeyValueType RSAKeyValue ;
+	struct dinTransformType Transform ;
+	struct dinPGPDataType PGPData ;
+	struct {
+		exi_string_character_t characters[dinEXIDocument_MgmtData_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  MgmtData ;
+	struct dinSignatureMethodType SignatureMethod ;
+	struct dinKeyInfoType KeyInfo ;
+	struct dinSPKIDataType SPKIData ;
+	struct dinX509DataType X509Data ;
+	struct dinSignatureValueType SignatureValue ;
+	struct {
+		exi_string_character_t characters[dinEXIDocument_KeyName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  KeyName ;
+	struct {
+		uint8_t bytes[dinEXIDocument_DigestValue_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  DigestValue ;
+	struct dinSignedInfoType SignedInfo ;
+	struct dinObjectType Object ;
+	struct dinDC_EVSEStatusType DC_EVSEStatus ;
+	struct dinRelativeTimeIntervalType RelativeTimeInterval ;
+	struct dinSalesTariffEntryType SalesTariffEntry ;
+	struct dinDC_EVPowerDeliveryParameterType DC_EVPowerDeliveryParameter ;
+	struct dinSASchedulesType SASchedules ;
+	struct dinAC_EVChargeParameterType AC_EVChargeParameter ;
+	struct dinSAScheduleListType SAScheduleList ;
+	struct dinDC_EVStatusType DC_EVStatus ;
+	struct dinServiceChargeType ServiceCharge ;
+	struct dinEVStatusType EVStatus ;
+	struct dinDC_EVChargeParameterType DC_EVChargeParameter ;
+	struct dinDC_EVSEChargeParameterType DC_EVSEChargeParameter ;
+	struct dinEVSEStatusType EVSEStatus ;
+	struct dinIntervalType TimeInterval ;
+	struct dinEVPowerDeliveryParameterType EVPowerDeliveryParameter ;
+	struct dinEVSEChargeParameterType EVSEChargeParameter ;
+	struct dinAC_EVSEStatusType AC_EVSEStatus ;
+	struct dinEntryType Entry ;
+	struct dinAC_EVSEChargeParameterType AC_EVSEChargeParameter ;
+	struct dinPMaxScheduleEntryType PMaxScheduleEntry ;
+	struct dinEVChargeParameterType EVChargeParameter ;
+	struct dinServiceDiscoveryReqType ServiceDiscoveryReq ;
+	struct dinServiceDiscoveryResType ServiceDiscoveryRes ;
+	struct dinMeteringReceiptReqType MeteringReceiptReq ;
+	struct dinPaymentDetailsReqType PaymentDetailsReq ;
+	struct dinMeteringReceiptResType MeteringReceiptRes ;
+	struct dinPaymentDetailsResType PaymentDetailsRes ;
+	struct dinSessionSetupReqType SessionSetupReq ;
+	struct dinSessionSetupResType SessionSetupRes ;
+	struct dinCableCheckReqType CableCheckReq ;
+	struct dinCableCheckResType CableCheckRes ;
+	struct dinContractAuthenticationReqType ContractAuthenticationReq ;
+	struct dinCertificateInstallationReqType CertificateInstallationReq ;
+	struct dinContractAuthenticationResType ContractAuthenticationRes ;
+	struct dinCertificateInstallationResType CertificateInstallationRes ;
+	struct dinWeldingDetectionReqType WeldingDetectionReq ;
+	struct dinWeldingDetectionResType WeldingDetectionRes ;
+	struct dinCertificateUpdateReqType CertificateUpdateReq ;
+	struct dinCertificateUpdateResType CertificateUpdateRes ;
+	struct dinPowerDeliveryReqType PowerDeliveryReq ;
+	struct dinPowerDeliveryResType PowerDeliveryRes ;
+	struct dinChargingStatusReqType ChargingStatusReq ;
+	struct dinChargingStatusResType ChargingStatusRes ;
+	struct dinCurrentDemandReqType CurrentDemandReq ;
+	struct dinPreChargeReqType PreChargeReq ;
+	struct dinCurrentDemandResType CurrentDemandRes ;
+	struct dinPreChargeResType PreChargeRes ;
+	struct dinServicePaymentSelectionReqType ServicePaymentSelectionReq ;
+	struct dinSessionStopType SessionStopReq ;
+	struct dinServicePaymentSelectionResType ServicePaymentSelectionRes ;
+	struct dinSessionStopResType SessionStopRes ;
+	struct dinChargeParameterDiscoveryReqType ChargeParameterDiscoveryReq ;
+	struct dinChargeParameterDiscoveryResType ChargeParameterDiscoveryRes ;
+	struct dinServiceDetailReqType ServiceDetailReq ;
+	struct dinServiceDetailResType ServiceDetailRes ;
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	};
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */
+	unsigned int BodyElement_isUsed:1;
+	unsigned int V2G_Message_isUsed:1;
+	unsigned int SignatureProperty_isUsed:1;
+	unsigned int DSAKeyValue_isUsed:1;
+	unsigned int SignatureProperties_isUsed:1;
+	unsigned int KeyValue_isUsed:1;
+	unsigned int Transforms_isUsed:1;
+	unsigned int DigestMethod_isUsed:1;
+	unsigned int Signature_isUsed:1;
+	unsigned int RetrievalMethod_isUsed:1;
+	unsigned int Manifest_isUsed:1;
+	unsigned int Reference_isUsed:1;
+	unsigned int CanonicalizationMethod_isUsed:1;
+	unsigned int RSAKeyValue_isUsed:1;
+	unsigned int Transform_isUsed:1;
+	unsigned int PGPData_isUsed:1;
+	unsigned int MgmtData_isUsed:1;
+	unsigned int SignatureMethod_isUsed:1;
+	unsigned int KeyInfo_isUsed:1;
+	unsigned int SPKIData_isUsed:1;
+	unsigned int X509Data_isUsed:1;
+	unsigned int SignatureValue_isUsed:1;
+	unsigned int KeyName_isUsed:1;
+	unsigned int DigestValue_isUsed:1;
+	unsigned int SignedInfo_isUsed:1;
+	unsigned int Object_isUsed:1;
+	unsigned int DC_EVSEStatus_isUsed:1;
+	unsigned int RelativeTimeInterval_isUsed:1;
+	unsigned int SalesTariffEntry_isUsed:1;
+	unsigned int DC_EVPowerDeliveryParameter_isUsed:1;
+	unsigned int SASchedules_isUsed:1;
+	unsigned int AC_EVChargeParameter_isUsed:1;
+	unsigned int SAScheduleList_isUsed:1;
+	unsigned int DC_EVStatus_isUsed:1;
+	unsigned int ServiceCharge_isUsed:1;
+	unsigned int EVStatus_isUsed:1;
+	unsigned int DC_EVChargeParameter_isUsed:1;
+	unsigned int DC_EVSEChargeParameter_isUsed:1;
+	unsigned int EVSEStatus_isUsed:1;
+	unsigned int TimeInterval_isUsed:1;
+	unsigned int EVPowerDeliveryParameter_isUsed:1;
+	unsigned int EVSEChargeParameter_isUsed:1;
+	unsigned int AC_EVSEStatus_isUsed:1;
+	unsigned int Entry_isUsed:1;
+	unsigned int AC_EVSEChargeParameter_isUsed:1;
+	unsigned int PMaxScheduleEntry_isUsed:1;
+	unsigned int EVChargeParameter_isUsed:1;
+	unsigned int ServiceDiscoveryReq_isUsed:1;
+	unsigned int ServiceDiscoveryRes_isUsed:1;
+	unsigned int MeteringReceiptReq_isUsed:1;
+	unsigned int PaymentDetailsReq_isUsed:1;
+	unsigned int MeteringReceiptRes_isUsed:1;
+	unsigned int PaymentDetailsRes_isUsed:1;
+	unsigned int SessionSetupReq_isUsed:1;
+	unsigned int SessionSetupRes_isUsed:1;
+	unsigned int CableCheckReq_isUsed:1;
+	unsigned int CableCheckRes_isUsed:1;
+	unsigned int ContractAuthenticationReq_isUsed:1;
+	unsigned int CertificateInstallationReq_isUsed:1;
+	unsigned int ContractAuthenticationRes_isUsed:1;
+	unsigned int CertificateInstallationRes_isUsed:1;
+	unsigned int WeldingDetectionReq_isUsed:1;
+	unsigned int WeldingDetectionRes_isUsed:1;
+	unsigned int CertificateUpdateReq_isUsed:1;
+	unsigned int CertificateUpdateRes_isUsed:1;
+	unsigned int PowerDeliveryReq_isUsed:1;
+	unsigned int PowerDeliveryRes_isUsed:1;
+	unsigned int ChargingStatusReq_isUsed:1;
+	unsigned int ChargingStatusRes_isUsed:1;
+	unsigned int CurrentDemandReq_isUsed:1;
+	unsigned int PreChargeReq_isUsed:1;
+	unsigned int CurrentDemandRes_isUsed:1;
+	unsigned int PreChargeRes_isUsed:1;
+	unsigned int ServicePaymentSelectionReq_isUsed:1;
+	unsigned int SessionStopReq_isUsed:1;
+	unsigned int ServicePaymentSelectionRes_isUsed:1;
+	unsigned int SessionStopRes_isUsed:1;
+	unsigned int ChargeParameterDiscoveryReq_isUsed:1;
+	unsigned int ChargeParameterDiscoveryRes_isUsed:1;
+	unsigned int ServiceDetailReq_isUsed:1;
+	unsigned int ServiceDetailRes_isUsed:1;
+
+
+	int _warning_;
+};
+
+
+#if DEPLOY_DIN_CODEC_FRAGMENT == SUPPORT_YES
+/* Possible elements of EXI Fragment */
+struct dinEXIFragment {
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	union {
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */
+	dinunitSymbolType Unit ;
+	struct dinPhysicalValueType EVSEMaximumCurrentLimit ;
+	struct dinEVPowerDeliveryParameterType EVPowerDeliveryParameter ;
+	int16_t ChargingProfileEntryMaxPower ;
+	int64_t TMeter ;
+	int EVSEPowerLimitAchieved ;
+	uint32_t duration ;
+	struct dinPhysicalValueType EVMaximumCurrentLimit ;
+	struct dinParameterType Parameter ;
+	dinEVSEProcessingType EVSEProcessing ;
+	struct dinAC_EVChargeParameterType AC_EVChargeParameter ;
+	struct dinPMaxScheduleEntryType PMaxScheduleEntry ;
+	struct dinPhysicalValueType EVSEMaximumVoltageLimit ;
+	struct dinSelectedServiceType SelectedService ;
+	struct {
+		uint8_t bytes[dinEXIFragment_Certificate_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Certificate ;
+	struct dinPhysicalValueType EVSEMaximumPowerLimit ;
+	int EVReady ;
+	int64_t X509SerialNumber ;
+	struct dinRetrievalMethodType RetrievalMethod ;
+	int16_t RetryCounter ;
+	struct dinDC_EVSEStatusType DC_EVSEStatus ;
+	struct dinMeteringReceiptReqType MeteringReceiptReq ;
+	int ReadyToChargeState ;
+	int8_t Multiplier ;
+	uint8_t EPriceLevel ;
+	struct {
+		exi_string_character_t characters[dinEXIFragment_stringValue_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  stringValue ;
+	struct dinServiceDiscoveryReqType ServiceDiscoveryReq ;
+	struct dinTransformsType Transforms ;
+	struct dinMeteringReceiptResType MeteringReceiptRes ;
+	struct dinPreChargeReqType PreChargeReq ;
+	struct {
+		uint8_t bytes[dinEXIFragment_OEMProvisioningCert_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  OEMProvisioningCert ;
+	struct dinServiceDiscoveryResType ServiceDiscoveryRes ;
+	dinresponseCodeType ResponseCode ;
+	struct dinContractAuthenticationReqType ContractAuthenticationReq ;
+	struct dinCertificateChainType ContractSignatureCertChain ;
+	struct dinContractAuthenticationResType ContractAuthenticationRes ;
+	int64_t HMACOutputLength ;
+	int BulkChargingComplete ;
+	struct {
+		uint8_t bytes[dinEXIFragment_Exponent_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Exponent ;
+	struct dinDC_EVStatusType DC_EVStatus ;
+	struct dinSAScheduleTupleType SAScheduleTuple ;
+	uint32_t DepartureTime ;
+	struct dinX509IssuerSerialType X509IssuerSerial ;
+	int16_t SAScheduleTupleID ;
+	struct dinSPKIDataType SPKIData ;
+	struct dinRelativeTimeIntervalType RelativeTimeInterval ;
+	struct dinPhysicalValueType EVEnergyRequest ;
+	struct dinPreChargeResType PreChargeRes ;
+	struct {
+		uint8_t bytes[dinEXIFragment_SessionID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  SessionID ;
+	struct dinPMaxScheduleType PMaxSchedule ;
+	struct dinServiceChargeType ServiceCharge ;
+	struct {
+		uint8_t bytes[dinEXIFragment_PgenCounter_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  PgenCounter ;
+	struct dinChargingStatusReqType ChargingStatusReq ;
+	struct dinX509DataType X509Data ;
+	struct dinSalesTariffEntryType SalesTariffEntry ;
+	struct dinKeyValueType KeyValue ;
+	struct dinChargingStatusResType ChargingStatusRes ;
+	struct dinAnonType_V2G_Message V2G_Message ;
+	struct dinServicePaymentSelectionReqType ServicePaymentSelectionReq ;
+	dinisolationLevelType EVSEIsolationStatus ;
+	struct dinServicePaymentSelectionResType ServicePaymentSelectionRes ;
+	struct dinPhysicalValueType EVSEPresentVoltage ;
+	struct dinBodyBaseType BodyElement ;
+	struct {
+		uint8_t bytes[dinEXIFragment_EVCCID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  EVCCID ;
+	struct dinPGPDataType PGPData ;
+	struct {
+		exi_string_character_t characters[dinEXIFragment_RootCertificateID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  RootCertificateID ;
+	dinfaultCodeType FaultCode ;
+	struct dinCableCheckReqType CableCheckReq ;
+	int EVSEVoltageLimitAchieved ;
+	int EVRESSConditioning ;
+	struct dinMeterInfoType MeterInfo ;
+	struct dinCableCheckResType CableCheckRes ;
+	uint32_t ChargingProfileEntryStart ;
+	struct dinSignaturePropertyType SignatureProperty ;
+	struct dinPhysicalValueType EVMaxCurrent ;
+	struct {
+		uint8_t bytes[dinEXIFragment_PGPKeyPacket_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  PGPKeyPacket ;
+	struct {
+		uint8_t bytes[dinEXIFragment_Seed_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Seed ;
+	struct dinRSAKeyValueType RSAKeyValue ;
+	dincostKindType costKind ;
+	struct dinPhysicalValueType EAmount ;
+	struct dinPhysicalValueType EVSEPresentCurrent ;
+	struct dinPowerDeliveryResType PowerDeliveryRes ;
+	uint8_t NumEPriceLevels ;
+	struct dinSessionStopResType SessionStopRes ;
+	struct dinPowerDeliveryReqType PowerDeliveryReq ;
+	struct dinSessionStopType SessionStopReq ;
+	struct {
+		exi_string_character_t characters[dinEXIFragment_XPath_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  XPath ;
+	int8_t BulkSOC ;
+	int16_t PMax ;
+	int16_t ParameterSetID ;
+	struct {
+		exi_string_character_t characters[dinEXIFragment_ContractID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ContractID ;
+	struct dinSignatureType Signature ;
+	struct dinPhysicalValueType EVMaxVoltage ;
+	int ReceiptRequired ;
+	int ChargingComplete ;
+	struct dinChargingProfileType ChargingProfile ;
+	struct dinPaymentOptionsType PaymentOptions ;
+	struct dinSessionSetupResType SessionSetupRes ;
+	struct dinServiceDetailResType ServiceDetailRes ;
+	struct dinDC_EVPowerDeliveryParameterType DC_EVPowerDeliveryParameter ;
+	struct dinPaymentDetailsResType PaymentDetailsRes ;
+	struct dinPaymentDetailsReqType PaymentDetailsReq ;
+	struct {
+		exi_string_character_t characters[dinEXIFragment_MgmtData_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  MgmtData ;
+	int16_t Value ;
+	dinEVSENotificationType EVSENotification ;
+	struct dinPhysicalValueType EVTargetCurrent ;
+	struct dinPhysicalValueType RemainingTimeToBulkSoC ;
+	struct dinSessionSetupReqType SessionSetupReq ;
+	int EVSECurrentLimitAchieved ;
+	struct dinServiceDetailReqType ServiceDetailReq ;
+	int8_t byteValue ;
+	struct dinPhysicalValueType EVMaximumPowerLimit ;
+	int PowerSwitchClosed ;
+	struct dinManifestType Manifest ;
+	struct {
+		uint8_t bytes[dinEXIFragment_P_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  P ;
+	struct dinSAScheduleListType SAScheduleList ;
+	struct {
+		uint8_t bytes[dinEXIFragment_Q_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Q ;
+	struct {
+		exi_string_character_t characters[dinEXIFragment_X509SubjectName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  X509SubjectName ;
+	struct {
+		uint8_t bytes[dinEXIFragment_G_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  G ;
+	struct {
+		uint8_t bytes[dinEXIFragment_J_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  J ;
+	struct dinCertificateInstallationResType CertificateInstallationRes ;
+	struct dinCertificateInstallationReqType CertificateInstallationReq ;
+	struct dinSalesTariffType SalesTariff ;
+	struct dinMessageHeaderType Header ;
+	struct dinPhysicalValueType EVSEMinimumCurrentLimit ;
+	struct {
+		uint8_t bytes[dinEXIFragment_X509CRL_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  X509CRL ;
+	struct {
+		uint8_t bytes[dinEXIFragment_Y_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Y ;
+	struct {
+		uint8_t bytes[dinEXIFragment_DigestValue_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  DigestValue ;
+	struct dinDC_EVChargeParameterType DC_EVChargeParameter ;
+	struct {
+		uint8_t bytes[dinEXIFragment_ContractSignatureEncryptedPrivateKey_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  ContractSignatureEncryptedPrivateKey ;
+	struct dinDigestMethodType DigestMethod ;
+	struct {
+		uint8_t bytes[dinEXIFragment_SPKISexp_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  SPKISexp ;
+	struct dinServiceChargeType ChargeService ;
+	struct dinPhysicalValueType EVSEEnergyToBeDelivered ;
+	struct dinSignaturePropertiesType SignatureProperties ;
+	struct dinPhysicalValueType EVSEMaxCurrent ;
+	struct dinEVSEStatusType EVSEStatus ;
+	struct dinServiceType Service ;
+	struct {
+		uint8_t bytes[dinEXIFragment_DHParams_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  DHParams ;
+	struct {
+		uint8_t bytes[dinEXIFragment_PGPKeyID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  PGPKeyID ;
+	struct dinDSAKeyValueType DSAKeyValue ;
+	dinEVSESupportedEnergyTransferType EnergyTransferType ;
+	struct dinWeldingDetectionResType WeldingDetectionRes ;
+	int FreeService ;
+	struct dinSelectedServiceListType SelectedServiceList ;
+	struct dinWeldingDetectionReqType WeldingDetectionReq ;
+	struct dinPhysicalValueType EVTargetVoltage ;
+	struct dinCanonicalizationMethodType CanonicalizationMethod ;
+	struct {
+		uint8_t bytes[dinEXIFragment_X509Certificate_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  X509Certificate ;
+	struct dinCertificateUpdateResType CertificateUpdateRes ;
+	struct dinCertificateUpdateReqType CertificateUpdateReq ;
+	struct dinPhysicalValueType EVSEMaxVoltage ;
+	struct dinSignedInfoType SignedInfo ;
+	struct dinAC_EVSEChargeParameterType AC_EVSEChargeParameter ;
+	struct dinPhysicalValueType EVEnergyCapacity ;
+	uint16_t ServiceID ;
+	struct dinPhysicalValueType EVSECurrentRegulationTolerance ;
+	struct dinServiceParameterListType ServiceParameterList ;
+	struct dinListOfRootCertificateIDsType ListOfRootCertificateIDs ;
+	struct dinProfileEntryType ProfileEntry ;
+	struct dinPhysicalValueType EVSEMinimumVoltageLimit ;
+	struct dinCurrentDemandResType CurrentDemandRes ;
+	int8_t EVRESSSOC ;
+	struct dinPhysicalValueType MeterReading ;
+	struct dinCurrentDemandReqType CurrentDemandReq ;
+	struct dinPhysicalValueType physicalValue ;
+	struct dinIntervalType TimeInterval ;
+	struct dinAC_EVSEStatusType AC_EVSEStatus ;
+	struct dinPhysicalValueType EVMaximumVoltageLimit ;
+	struct dinSignatureValueType SignatureValue ;
+	int64_t DateTimeNow ;
+	struct dinServiceTagType ServiceTag ;
+	int32_t intValue ;
+	dinpaymentOptionType SelectedPaymentOption ;
+	struct {
+		exi_string_character_t characters[dinEXIFragment_ServiceName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ServiceName ;
+	int EVCabinConditioning ;
+	struct {
+		uint8_t bytes[dinEXIFragment_EVSEID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  EVSEID ;
+	struct {
+		exi_string_character_t characters[dinEXIFragment_ServiceScope_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ServiceScope ;
+	int16_t MeterStatus ;
+	dinEVRequestedEnergyTransferType EVRequestedEnergyTransferType ;
+	dinserviceCategoryType ServiceCategory ;
+	struct {
+		exi_string_character_t characters[dinEXIFragment_GenChallenge_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  GenChallenge ;
+	struct {
+		exi_string_character_t characters[dinEXIFragment_SalesTariffDescription_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  SalesTariffDescription ;
+	uint32_t NotificationMaxDelay ;
+	int boolValue ;
+	dinDC_EVSEStatusCodeType EVSEStatusCode ;
+	struct {
+		exi_string_character_t characters[dinEXIFragment_FaultMsg_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  FaultMsg ;
+	struct {
+		exi_string_character_t characters[dinEXIFragment_KeyName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  KeyName ;
+	struct dinParameterSetType ParameterSet ;
+	struct {
+		uint8_t bytes[dinEXIFragment_SigMeterReading_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  SigMeterReading ;
+	struct dinEVSEChargeParameterType EVSEChargeParameter ;
+	struct dinBodyType Body ;
+	struct dinSASchedulesType SASchedules ;
+	struct dinKeyInfoType KeyInfo ;
+	int16_t PMaxScheduleID ;
+	struct dinPhysicalValueType RemainingTimeToFullSoC ;
+	struct dinEVStatusType EVStatus ;
+	struct dinSubCertificatesType SubCertificates ;
+	dinpaymentOptionType PaymentOption ;
+	struct {
+		uint8_t bytes[dinEXIFragment_X509SKI_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  X509SKI ;
+	struct dinServiceTagListType ServiceList ;
+	struct dinCostType Cost ;
+	struct dinSignatureMethodType SignatureMethod ;
+	struct dinPhysicalValueType EVSEMinCurrent ;
+	struct dinConsumptionCostType ConsumptionCost ;
+	struct dinPhysicalValueType EVSEPeakCurrentRipple ;
+	dinDC_EVErrorCodeType EVErrorCode ;
+	struct dinEVChargeParameterType EVChargeParameter ;
+	uint32_t start ;
+	struct {
+		exi_string_character_t characters[dinEXIFragment_X509IssuerName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  X509IssuerName ;
+	struct dinReferenceType Reference ;
+	struct dinPhysicalValueType EVMinCurrent ;
+	int8_t FullSOC ;
+	uint32_t amount ;
+	int16_t shortValue ;
+	struct dinDC_EVSEChargeParameterType DC_EVSEChargeParameter ;
+	struct dinEntryType Entry ;
+	int16_t SalesTariffID ;
+	struct {
+		exi_string_character_t characters[dinEXIFragment_MeterID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  MeterID ;
+	struct dinChargeParameterDiscoveryReqType ChargeParameterDiscoveryReq ;
+	int8_t amountMultiplier ;
+	struct dinChargeParameterDiscoveryResType ChargeParameterDiscoveryRes ;
+	struct dinTransformType Transform ;
+	struct dinObjectType Object ;
+	int RCD ;
+	struct dinNotificationType Notification ;
+	uint32_t startValue ;
+	struct {
+		uint8_t bytes[dinEXIFragment_Modulus_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Modulus ;
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	};
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */
+	unsigned int Unit_isUsed:1;
+	unsigned int EVSEMaximumCurrentLimit_isUsed:1;
+	unsigned int EVPowerDeliveryParameter_isUsed:1;
+	unsigned int ChargingProfileEntryMaxPower_isUsed:1;
+	unsigned int TMeter_isUsed:1;
+	unsigned int EVSEPowerLimitAchieved_isUsed:1;
+	unsigned int duration_isUsed:1;
+	unsigned int EVMaximumCurrentLimit_isUsed:1;
+	unsigned int Parameter_isUsed:1;
+	unsigned int EVSEProcessing_isUsed:1;
+	unsigned int AC_EVChargeParameter_isUsed:1;
+	unsigned int PMaxScheduleEntry_isUsed:1;
+	unsigned int EVSEMaximumVoltageLimit_isUsed:1;
+	unsigned int SelectedService_isUsed:1;
+	unsigned int Certificate_isUsed:1;
+	unsigned int EVSEMaximumPowerLimit_isUsed:1;
+	unsigned int EVReady_isUsed:1;
+	unsigned int X509SerialNumber_isUsed:1;
+	unsigned int RetrievalMethod_isUsed:1;
+	unsigned int RetryCounter_isUsed:1;
+	unsigned int DC_EVSEStatus_isUsed:1;
+	unsigned int MeteringReceiptReq_isUsed:1;
+	unsigned int ReadyToChargeState_isUsed:1;
+	unsigned int Multiplier_isUsed:1;
+	unsigned int EPriceLevel_isUsed:1;
+	unsigned int stringValue_isUsed:1;
+	unsigned int ServiceDiscoveryReq_isUsed:1;
+	unsigned int Transforms_isUsed:1;
+	unsigned int MeteringReceiptRes_isUsed:1;
+	unsigned int PreChargeReq_isUsed:1;
+	unsigned int OEMProvisioningCert_isUsed:1;
+	unsigned int ServiceDiscoveryRes_isUsed:1;
+	unsigned int ResponseCode_isUsed:1;
+	unsigned int ContractAuthenticationReq_isUsed:1;
+	unsigned int ContractSignatureCertChain_isUsed:1;
+	unsigned int ContractAuthenticationRes_isUsed:1;
+	unsigned int HMACOutputLength_isUsed:1;
+	unsigned int BulkChargingComplete_isUsed:1;
+	unsigned int Exponent_isUsed:1;
+	unsigned int DC_EVStatus_isUsed:1;
+	unsigned int SAScheduleTuple_isUsed:1;
+	unsigned int DepartureTime_isUsed:1;
+	unsigned int X509IssuerSerial_isUsed:1;
+	unsigned int SAScheduleTupleID_isUsed:1;
+	unsigned int SPKIData_isUsed:1;
+	unsigned int RelativeTimeInterval_isUsed:1;
+	unsigned int EVEnergyRequest_isUsed:1;
+	unsigned int PreChargeRes_isUsed:1;
+	unsigned int SessionID_isUsed:1;
+	unsigned int PMaxSchedule_isUsed:1;
+	unsigned int ServiceCharge_isUsed:1;
+	unsigned int PgenCounter_isUsed:1;
+	unsigned int ChargingStatusReq_isUsed:1;
+	unsigned int X509Data_isUsed:1;
+	unsigned int SalesTariffEntry_isUsed:1;
+	unsigned int KeyValue_isUsed:1;
+	unsigned int ChargingStatusRes_isUsed:1;
+	unsigned int V2G_Message_isUsed:1;
+	unsigned int ServicePaymentSelectionReq_isUsed:1;
+	unsigned int EVSEIsolationStatus_isUsed:1;
+	unsigned int ServicePaymentSelectionRes_isUsed:1;
+	unsigned int EVSEPresentVoltage_isUsed:1;
+	unsigned int BodyElement_isUsed:1;
+	unsigned int EVCCID_isUsed:1;
+	unsigned int PGPData_isUsed:1;
+	unsigned int RootCertificateID_isUsed:1;
+	unsigned int FaultCode_isUsed:1;
+	unsigned int CableCheckReq_isUsed:1;
+	unsigned int EVSEVoltageLimitAchieved_isUsed:1;
+	unsigned int EVRESSConditioning_isUsed:1;
+	unsigned int MeterInfo_isUsed:1;
+	unsigned int CableCheckRes_isUsed:1;
+	unsigned int ChargingProfileEntryStart_isUsed:1;
+	unsigned int SignatureProperty_isUsed:1;
+	unsigned int EVMaxCurrent_isUsed:1;
+	unsigned int PGPKeyPacket_isUsed:1;
+	unsigned int Seed_isUsed:1;
+	unsigned int RSAKeyValue_isUsed:1;
+	unsigned int costKind_isUsed:1;
+	unsigned int EAmount_isUsed:1;
+	unsigned int EVSEPresentCurrent_isUsed:1;
+	unsigned int PowerDeliveryRes_isUsed:1;
+	unsigned int NumEPriceLevels_isUsed:1;
+	unsigned int SessionStopRes_isUsed:1;
+	unsigned int PowerDeliveryReq_isUsed:1;
+	unsigned int SessionStopReq_isUsed:1;
+	unsigned int XPath_isUsed:1;
+	unsigned int BulkSOC_isUsed:1;
+	unsigned int PMax_isUsed:1;
+	unsigned int ParameterSetID_isUsed:1;
+	unsigned int ContractID_isUsed:1;
+	unsigned int Signature_isUsed:1;
+	unsigned int EVMaxVoltage_isUsed:1;
+	unsigned int ReceiptRequired_isUsed:1;
+	unsigned int ChargingComplete_isUsed:1;
+	unsigned int ChargingProfile_isUsed:1;
+	unsigned int PaymentOptions_isUsed:1;
+	unsigned int SessionSetupRes_isUsed:1;
+	unsigned int ServiceDetailRes_isUsed:1;
+	unsigned int DC_EVPowerDeliveryParameter_isUsed:1;
+	unsigned int PaymentDetailsRes_isUsed:1;
+	unsigned int PaymentDetailsReq_isUsed:1;
+	unsigned int MgmtData_isUsed:1;
+	unsigned int Value_isUsed:1;
+	unsigned int EVSENotification_isUsed:1;
+	unsigned int EVTargetCurrent_isUsed:1;
+	unsigned int RemainingTimeToBulkSoC_isUsed:1;
+	unsigned int SessionSetupReq_isUsed:1;
+	unsigned int EVSECurrentLimitAchieved_isUsed:1;
+	unsigned int ServiceDetailReq_isUsed:1;
+	unsigned int byteValue_isUsed:1;
+	unsigned int EVMaximumPowerLimit_isUsed:1;
+	unsigned int PowerSwitchClosed_isUsed:1;
+	unsigned int Manifest_isUsed:1;
+	unsigned int P_isUsed:1;
+	unsigned int SAScheduleList_isUsed:1;
+	unsigned int Q_isUsed:1;
+	unsigned int X509SubjectName_isUsed:1;
+	unsigned int G_isUsed:1;
+	unsigned int J_isUsed:1;
+	unsigned int CertificateInstallationRes_isUsed:1;
+	unsigned int CertificateInstallationReq_isUsed:1;
+	unsigned int SalesTariff_isUsed:1;
+	unsigned int Header_isUsed:1;
+	unsigned int EVSEMinimumCurrentLimit_isUsed:1;
+	unsigned int X509CRL_isUsed:1;
+	unsigned int Y_isUsed:1;
+	unsigned int DigestValue_isUsed:1;
+	unsigned int DC_EVChargeParameter_isUsed:1;
+	unsigned int ContractSignatureEncryptedPrivateKey_isUsed:1;
+	unsigned int DigestMethod_isUsed:1;
+	unsigned int SPKISexp_isUsed:1;
+	unsigned int ChargeService_isUsed:1;
+	unsigned int EVSEEnergyToBeDelivered_isUsed:1;
+	unsigned int SignatureProperties_isUsed:1;
+	unsigned int EVSEMaxCurrent_isUsed:1;
+	unsigned int EVSEStatus_isUsed:1;
+	unsigned int Service_isUsed:1;
+	unsigned int DHParams_isUsed:1;
+	unsigned int PGPKeyID_isUsed:1;
+	unsigned int DSAKeyValue_isUsed:1;
+	unsigned int EnergyTransferType_isUsed:1;
+	unsigned int WeldingDetectionRes_isUsed:1;
+	unsigned int FreeService_isUsed:1;
+	unsigned int SelectedServiceList_isUsed:1;
+	unsigned int WeldingDetectionReq_isUsed:1;
+	unsigned int EVTargetVoltage_isUsed:1;
+	unsigned int CanonicalizationMethod_isUsed:1;
+	unsigned int X509Certificate_isUsed:1;
+	unsigned int CertificateUpdateRes_isUsed:1;
+	unsigned int CertificateUpdateReq_isUsed:1;
+	unsigned int EVSEMaxVoltage_isUsed:1;
+	unsigned int SignedInfo_isUsed:1;
+	unsigned int AC_EVSEChargeParameter_isUsed:1;
+	unsigned int EVEnergyCapacity_isUsed:1;
+	unsigned int ServiceID_isUsed:1;
+	unsigned int EVSECurrentRegulationTolerance_isUsed:1;
+	unsigned int ServiceParameterList_isUsed:1;
+	unsigned int ListOfRootCertificateIDs_isUsed:1;
+	unsigned int ProfileEntry_isUsed:1;
+	unsigned int EVSEMinimumVoltageLimit_isUsed:1;
+	unsigned int CurrentDemandRes_isUsed:1;
+	unsigned int EVRESSSOC_isUsed:1;
+	unsigned int MeterReading_isUsed:1;
+	unsigned int CurrentDemandReq_isUsed:1;
+	unsigned int physicalValue_isUsed:1;
+	unsigned int TimeInterval_isUsed:1;
+	unsigned int AC_EVSEStatus_isUsed:1;
+	unsigned int EVMaximumVoltageLimit_isUsed:1;
+	unsigned int SignatureValue_isUsed:1;
+	unsigned int DateTimeNow_isUsed:1;
+	unsigned int ServiceTag_isUsed:1;
+	unsigned int intValue_isUsed:1;
+	unsigned int SelectedPaymentOption_isUsed:1;
+	unsigned int ServiceName_isUsed:1;
+	unsigned int EVCabinConditioning_isUsed:1;
+	unsigned int EVSEID_isUsed:1;
+	unsigned int ServiceScope_isUsed:1;
+	unsigned int MeterStatus_isUsed:1;
+	unsigned int EVRequestedEnergyTransferType_isUsed:1;
+	unsigned int ServiceCategory_isUsed:1;
+	unsigned int GenChallenge_isUsed:1;
+	unsigned int SalesTariffDescription_isUsed:1;
+	unsigned int NotificationMaxDelay_isUsed:1;
+	unsigned int boolValue_isUsed:1;
+	unsigned int EVSEStatusCode_isUsed:1;
+	unsigned int FaultMsg_isUsed:1;
+	unsigned int KeyName_isUsed:1;
+	unsigned int ParameterSet_isUsed:1;
+	unsigned int SigMeterReading_isUsed:1;
+	unsigned int EVSEChargeParameter_isUsed:1;
+	unsigned int Body_isUsed:1;
+	unsigned int SASchedules_isUsed:1;
+	unsigned int KeyInfo_isUsed:1;
+	unsigned int PMaxScheduleID_isUsed:1;
+	unsigned int RemainingTimeToFullSoC_isUsed:1;
+	unsigned int EVStatus_isUsed:1;
+	unsigned int SubCertificates_isUsed:1;
+	unsigned int PaymentOption_isUsed:1;
+	unsigned int X509SKI_isUsed:1;
+	unsigned int ServiceList_isUsed:1;
+	unsigned int Cost_isUsed:1;
+	unsigned int SignatureMethod_isUsed:1;
+	unsigned int EVSEMinCurrent_isUsed:1;
+	unsigned int ConsumptionCost_isUsed:1;
+	unsigned int EVSEPeakCurrentRipple_isUsed:1;
+	unsigned int EVErrorCode_isUsed:1;
+	unsigned int EVChargeParameter_isUsed:1;
+	unsigned int start_isUsed:1;
+	unsigned int X509IssuerName_isUsed:1;
+	unsigned int Reference_isUsed:1;
+	unsigned int EVMinCurrent_isUsed:1;
+	unsigned int FullSOC_isUsed:1;
+	unsigned int amount_isUsed:1;
+	unsigned int shortValue_isUsed:1;
+	unsigned int DC_EVSEChargeParameter_isUsed:1;
+	unsigned int Entry_isUsed:1;
+	unsigned int SalesTariffID_isUsed:1;
+	unsigned int MeterID_isUsed:1;
+	unsigned int ChargeParameterDiscoveryReq_isUsed:1;
+	unsigned int amountMultiplier_isUsed:1;
+	unsigned int ChargeParameterDiscoveryRes_isUsed:1;
+	unsigned int Transform_isUsed:1;
+	unsigned int Object_isUsed:1;
+	unsigned int RCD_isUsed:1;
+	unsigned int Notification_isUsed:1;
+	unsigned int startValue_isUsed:1;
+	unsigned int Modulus_isUsed:1;
+
+
+	int _warning_;
+};
+#endif /* DEPLOY_DIN_CODEC_FRAGMENT */
+
+
+/* Initialization methods for structs */
+
+void init_dinEXIDocument(struct dinEXIDocument* exiDoc);
+#if DEPLOY_DIN_CODEC_FRAGMENT == SUPPORT_YES
+void init_dinEXIFragment(struct dinEXIFragment* exiFrag);
+#endif /* DEPLOY_DIN_CODEC_FRAGMENT */
+void init_dinMeteringReceiptReqType(struct dinMeteringReceiptReqType* dinMeteringReceiptReqType);
+void init_dinBodyType(struct dinBodyType* dinBodyType);
+void init_dinSessionSetupReqType(struct dinSessionSetupReqType* dinSessionSetupReqType);
+void init_dinPowerDeliveryResType(struct dinPowerDeliveryResType* dinPowerDeliveryResType);
+void init_dinServiceDetailResType(struct dinServiceDetailResType* dinServiceDetailResType);
+void init_dinWeldingDetectionResType(struct dinWeldingDetectionResType* dinWeldingDetectionResType);
+void init_dinContractAuthenticationResType(struct dinContractAuthenticationResType* dinContractAuthenticationResType);
+void init_dinCanonicalizationMethodType(struct dinCanonicalizationMethodType* dinCanonicalizationMethodType);
+void init_dinSPKIDataType(struct dinSPKIDataType* dinSPKIDataType);
+void init_dinListOfRootCertificateIDsType(struct dinListOfRootCertificateIDsType* dinListOfRootCertificateIDsType);
+void init_dinSelectedServiceListType(struct dinSelectedServiceListType* dinSelectedServiceListType);
+void init_dinCurrentDemandResType(struct dinCurrentDemandResType* dinCurrentDemandResType);
+void init_dinTransformType(struct dinTransformType* dinTransformType);
+void init_dinAC_EVChargeParameterType(struct dinAC_EVChargeParameterType* dinAC_EVChargeParameterType);
+void init_dinX509DataType(struct dinX509DataType* dinX509DataType);
+void init_dinChargingStatusResType(struct dinChargingStatusResType* dinChargingStatusResType);
+void init_dinWeldingDetectionReqType(struct dinWeldingDetectionReqType* dinWeldingDetectionReqType);
+void init_dinSignaturePropertiesType(struct dinSignaturePropertiesType* dinSignaturePropertiesType);
+void init_dinContractAuthenticationReqType(struct dinContractAuthenticationReqType* dinContractAuthenticationReqType);
+void init_dinDC_EVPowerDeliveryParameterType(struct dinDC_EVPowerDeliveryParameterType* dinDC_EVPowerDeliveryParameterType);
+void init_dinEVSEChargeParameterType(struct dinEVSEChargeParameterType* dinEVSEChargeParameterType);
+void init_dinCableCheckReqType(struct dinCableCheckReqType* dinCableCheckReqType);
+void init_dinDC_EVChargeParameterType(struct dinDC_EVChargeParameterType* dinDC_EVChargeParameterType);
+void init_dinSAScheduleListType(struct dinSAScheduleListType* dinSAScheduleListType);
+void init_dinPMaxScheduleType(struct dinPMaxScheduleType* dinPMaxScheduleType);
+void init_dinServicePaymentSelectionReqType(struct dinServicePaymentSelectionReqType* dinServicePaymentSelectionReqType);
+void init_dinRelativeTimeIntervalType(struct dinRelativeTimeIntervalType* dinRelativeTimeIntervalType);
+void init_dinEVStatusType(struct dinEVStatusType* dinEVStatusType);
+void init_dinPreChargeResType(struct dinPreChargeResType* dinPreChargeResType);
+void init_dinDC_EVSEChargeParameterType(struct dinDC_EVSEChargeParameterType* dinDC_EVSEChargeParameterType);
+void init_dinPaymentDetailsResType(struct dinPaymentDetailsResType* dinPaymentDetailsResType);
+void init_dinDSAKeyValueType(struct dinDSAKeyValueType* dinDSAKeyValueType);
+void init_dinSASchedulesType(struct dinSASchedulesType* dinSASchedulesType);
+void init_dinCertificateUpdateResType(struct dinCertificateUpdateResType* dinCertificateUpdateResType);
+void init_dinEVChargeParameterType(struct dinEVChargeParameterType* dinEVChargeParameterType);
+void init_dinMessageHeaderType(struct dinMessageHeaderType* dinMessageHeaderType);
+void init_dinBodyBaseType(struct dinBodyBaseType* dinBodyBaseType);
+void init_dinKeyValueType(struct dinKeyValueType* dinKeyValueType);
+void init_dinIntervalType(struct dinIntervalType* dinIntervalType);
+void init_dinChargeParameterDiscoveryResType(struct dinChargeParameterDiscoveryResType* dinChargeParameterDiscoveryResType);
+void init_dinPowerDeliveryReqType(struct dinPowerDeliveryReqType* dinPowerDeliveryReqType);
+void init_dinCertificateChainType(struct dinCertificateChainType* dinCertificateChainType);
+void init_dinTransformsType(struct dinTransformsType* dinTransformsType);
+void init_dinEntryType(struct dinEntryType* dinEntryType);
+void init_dinSessionStopType(struct dinSessionStopType* dinSessionStopType);
+void init_dinServiceDetailReqType(struct dinServiceDetailReqType* dinServiceDetailReqType);
+void init_dinDigestMethodType(struct dinDigestMethodType* dinDigestMethodType);
+void init_dinParameterType(struct dinParameterType* dinParameterType);
+void init_dinChargingStatusReqType(struct dinChargingStatusReqType* dinChargingStatusReqType);
+void init_dinSignatureMethodType(struct dinSignatureMethodType* dinSignatureMethodType);
+void init_dinCertificateInstallationReqType(struct dinCertificateInstallationReqType* dinCertificateInstallationReqType);
+void init_dinSalesTariffEntryType(struct dinSalesTariffEntryType* dinSalesTariffEntryType);
+void init_dinServiceDiscoveryResType(struct dinServiceDiscoveryResType* dinServiceDiscoveryResType);
+void init_dinParameterSetType(struct dinParameterSetType* dinParameterSetType);
+void init_dinCurrentDemandReqType(struct dinCurrentDemandReqType* dinCurrentDemandReqType);
+void init_dinPreChargeReqType(struct dinPreChargeReqType* dinPreChargeReqType);
+void init_dinSignatureType(struct dinSignatureType* dinSignatureType);
+void init_dinReferenceType(struct dinReferenceType* dinReferenceType);
+void init_dinProfileEntryType(struct dinProfileEntryType* dinProfileEntryType);
+void init_dinAnonType_V2G_Message(struct dinAnonType_V2G_Message* dinAnonType_V2G_Message);
+void init_dinChargeParameterDiscoveryReqType(struct dinChargeParameterDiscoveryReqType* dinChargeParameterDiscoveryReqType);
+void init_dinConsumptionCostType(struct dinConsumptionCostType* dinConsumptionCostType);
+void init_dinRSAKeyValueType(struct dinRSAKeyValueType* dinRSAKeyValueType);
+void init_dinServiceType(struct dinServiceType* dinServiceType);
+void init_dinServiceTagListType(struct dinServiceTagListType* dinServiceTagListType);
+void init_dinEVSEStatusType(struct dinEVSEStatusType* dinEVSEStatusType);
+void init_dinSessionSetupResType(struct dinSessionSetupResType* dinSessionSetupResType);
+void init_dinEVPowerDeliveryParameterType(struct dinEVPowerDeliveryParameterType* dinEVPowerDeliveryParameterType);
+void init_dinX509IssuerSerialType(struct dinX509IssuerSerialType* dinX509IssuerSerialType);
+void init_dinSelectedServiceType(struct dinSelectedServiceType* dinSelectedServiceType);
+void init_dinMeteringReceiptResType(struct dinMeteringReceiptResType* dinMeteringReceiptResType);
+void init_dinDC_EVStatusType(struct dinDC_EVStatusType* dinDC_EVStatusType);
+void init_dinPhysicalValueType(struct dinPhysicalValueType* dinPhysicalValueType);
+void init_dinManifestType(struct dinManifestType* dinManifestType);
+void init_dinPMaxScheduleEntryType(struct dinPMaxScheduleEntryType* dinPMaxScheduleEntryType);
+void init_dinServiceParameterListType(struct dinServiceParameterListType* dinServiceParameterListType);
+void init_dinSignatureValueType(struct dinSignatureValueType* dinSignatureValueType);
+void init_dinPaymentOptionsType(struct dinPaymentOptionsType* dinPaymentOptionsType);
+void init_dinServiceTagType(struct dinServiceTagType* dinServiceTagType);
+void init_dinAC_EVSEStatusType(struct dinAC_EVSEStatusType* dinAC_EVSEStatusType);
+void init_dinCertificateUpdateReqType(struct dinCertificateUpdateReqType* dinCertificateUpdateReqType);
+void init_dinServicePaymentSelectionResType(struct dinServicePaymentSelectionResType* dinServicePaymentSelectionResType);
+void init_dinSAScheduleTupleType(struct dinSAScheduleTupleType* dinSAScheduleTupleType);
+void init_dinChargingProfileType(struct dinChargingProfileType* dinChargingProfileType);
+void init_dinServiceDiscoveryReqType(struct dinServiceDiscoveryReqType* dinServiceDiscoveryReqType);
+void init_dinAC_EVSEChargeParameterType(struct dinAC_EVSEChargeParameterType* dinAC_EVSEChargeParameterType);
+void init_dinKeyInfoType(struct dinKeyInfoType* dinKeyInfoType);
+void init_dinPaymentDetailsReqType(struct dinPaymentDetailsReqType* dinPaymentDetailsReqType);
+void init_dinCableCheckResType(struct dinCableCheckResType* dinCableCheckResType);
+void init_dinObjectType(struct dinObjectType* dinObjectType);
+void init_dinSessionStopResType(struct dinSessionStopResType* dinSessionStopResType);
+void init_dinSignedInfoType(struct dinSignedInfoType* dinSignedInfoType);
+void init_dinSalesTariffType(struct dinSalesTariffType* dinSalesTariffType);
+void init_dinCostType(struct dinCostType* dinCostType);
+void init_dinServiceChargeType(struct dinServiceChargeType* dinServiceChargeType);
+void init_dinDC_EVSEStatusType(struct dinDC_EVSEStatusType* dinDC_EVSEStatusType);
+void init_dinRetrievalMethodType(struct dinRetrievalMethodType* dinRetrievalMethodType);
+void init_dinNotificationType(struct dinNotificationType* dinNotificationType);
+void init_dinPGPDataType(struct dinPGPDataType* dinPGPDataType);
+void init_dinCertificateInstallationResType(struct dinCertificateInstallationResType* dinCertificateInstallationResType);
+void init_dinSignaturePropertyType(struct dinSignaturePropertyType* dinSignaturePropertyType);
+void init_dinMeterInfoType(struct dinMeterInfoType* dinMeterInfoType);
+void init_dinSubCertificatesType(struct dinSubCertificatesType* dinSubCertificatesType);
+
+
+#endif /* DEPLOY_DIN_CODEC */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

文件差异内容过多而无法显示
+ 345 - 0
EVSE/Projects/CCS/Apps/exi_engine/din/dinEXIDatatypesDecoder.c


+ 65 - 0
EVSE/Projects/CCS/Apps/exi_engine/din/dinEXIDatatypesDecoder.h

@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9.4
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+ * \file 	EXIDatatypesDecoder.h
+ * \brief 	Decoder for datatype definitions
+ *
+ */
+
+#ifndef EXI_din_DATATYPES_DECODER_H
+#define EXI_din_DATATYPES_DECODER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "dinEXIDatatypes.h"
+
+#if DEPLOY_DIN_CODEC == SUPPORT_YES
+
+#include <stdint.h>
+
+#include "../codec/EXITypes.h"
+
+int decode_dinExiDocument(bitstream_t* stream, struct dinEXIDocument* exiDoc);
+
+#if DEPLOY_DIN_CODEC_FRAGMENT == SUPPORT_YES
+int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag);
+#endif /* DEPLOY_DIN_CODEC_FRAGMENT */
+
+#endif /* DEPLOY_DIN_CODEC */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

文件差异内容过多而无法显示
+ 281 - 0
EVSE/Projects/CCS/Apps/exi_engine/din/dinEXIDatatypesEncoder.c


+ 68 - 0
EVSE/Projects/CCS/Apps/exi_engine/din/dinEXIDatatypesEncoder.h

@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9.4
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+ * \file 	EXIDatatypesEncoder.h
+ * \brief 	Encoder for datatype definitions
+ *
+ */
+
+#ifndef EXI_din_DATATYPES_ENCODER_H
+#define EXI_din_DATATYPES_ENCODER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "dinEXIDatatypes.h"
+
+#if DEPLOY_DIN_CODEC == SUPPORT_YES
+
+#include <stdint.h>
+
+#include "../codec/EXITypes.h"
+
+
+int encode_dinExiDocument(bitstream_t* stream, struct dinEXIDocument* exiDoc);
+
+#if DEPLOY_DIN_CODEC_FRAGMENT == SUPPORT_YES
+int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag);
+#endif /* DEPLOY_DIN_CODEC_FRAGMENT */
+
+
+#endif /* DEPLOY_DIN_CODEC */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

+ 992 - 0
EVSE/Projects/CCS/Apps/exi_engine/iso1/iso1EXIDatatypes.c

@@ -0,0 +1,992 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9.4
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+#include <stdint.h>
+
+#include "iso1EXIDatatypes.h"
+#include "../codec/EXITypes.h"
+
+
+#ifndef EXI_iso1_DATATYPES_C
+#define EXI_iso1_DATATYPES_C
+
+#if DEPLOY_ISO1_CODEC == SUPPORT_YES
+
+
+void init_iso1EXIDocument(struct iso1EXIDocument* exiDoc) {
+	exiDoc->V2G_Message_isUsed = 0u;
+	exiDoc->ServiceDiscoveryReq_isUsed = 0u;
+	exiDoc->ServiceDiscoveryRes_isUsed = 0u;
+	exiDoc->MeteringReceiptReq_isUsed = 0u;
+	exiDoc->PaymentDetailsReq_isUsed = 0u;
+	exiDoc->MeteringReceiptRes_isUsed = 0u;
+	exiDoc->PaymentDetailsRes_isUsed = 0u;
+	exiDoc->SessionSetupReq_isUsed = 0u;
+	exiDoc->SessionSetupRes_isUsed = 0u;
+	exiDoc->CableCheckReq_isUsed = 0u;
+	exiDoc->CableCheckRes_isUsed = 0u;
+	exiDoc->CertificateInstallationReq_isUsed = 0u;
+	exiDoc->CertificateInstallationRes_isUsed = 0u;
+	exiDoc->WeldingDetectionReq_isUsed = 0u;
+	exiDoc->WeldingDetectionRes_isUsed = 0u;
+	exiDoc->CertificateUpdateReq_isUsed = 0u;
+	exiDoc->CertificateUpdateRes_isUsed = 0u;
+	exiDoc->PaymentServiceSelectionReq_isUsed = 0u;
+	exiDoc->PowerDeliveryReq_isUsed = 0u;
+	exiDoc->PaymentServiceSelectionRes_isUsed = 0u;
+	exiDoc->PowerDeliveryRes_isUsed = 0u;
+	exiDoc->ChargingStatusReq_isUsed = 0u;
+	exiDoc->ChargingStatusRes_isUsed = 0u;
+	exiDoc->BodyElement_isUsed = 0u;
+	exiDoc->CurrentDemandReq_isUsed = 0u;
+	exiDoc->PreChargeReq_isUsed = 0u;
+	exiDoc->CurrentDemandRes_isUsed = 0u;
+	exiDoc->PreChargeRes_isUsed = 0u;
+	exiDoc->SessionStopReq_isUsed = 0u;
+	exiDoc->AuthorizationReq_isUsed = 0u;
+	exiDoc->SessionStopRes_isUsed = 0u;
+	exiDoc->AuthorizationRes_isUsed = 0u;
+	exiDoc->ChargeParameterDiscoveryReq_isUsed = 0u;
+	exiDoc->ChargeParameterDiscoveryRes_isUsed = 0u;
+	exiDoc->ServiceDetailReq_isUsed = 0u;
+	exiDoc->ServiceDetailRes_isUsed = 0u;
+	exiDoc->DC_EVSEStatus_isUsed = 0u;
+	exiDoc->RelativeTimeInterval_isUsed = 0u;
+	exiDoc->SalesTariffEntry_isUsed = 0u;
+	exiDoc->DC_EVPowerDeliveryParameter_isUsed = 0u;
+	exiDoc->SASchedules_isUsed = 0u;
+	exiDoc->AC_EVChargeParameter_isUsed = 0u;
+	exiDoc->SAScheduleList_isUsed = 0u;
+	exiDoc->DC_EVStatus_isUsed = 0u;
+	exiDoc->EVStatus_isUsed = 0u;
+	exiDoc->DC_EVChargeParameter_isUsed = 0u;
+	exiDoc->DC_EVSEChargeParameter_isUsed = 0u;
+	exiDoc->EVSEStatus_isUsed = 0u;
+	exiDoc->TimeInterval_isUsed = 0u;
+	exiDoc->EVPowerDeliveryParameter_isUsed = 0u;
+	exiDoc->EVSEChargeParameter_isUsed = 0u;
+	exiDoc->AC_EVSEStatus_isUsed = 0u;
+	exiDoc->Entry_isUsed = 0u;
+	exiDoc->AC_EVSEChargeParameter_isUsed = 0u;
+	exiDoc->PMaxScheduleEntry_isUsed = 0u;
+	exiDoc->EVChargeParameter_isUsed = 0u;
+	exiDoc->SignatureProperty_isUsed = 0u;
+	exiDoc->DSAKeyValue_isUsed = 0u;
+	exiDoc->SignatureProperties_isUsed = 0u;
+	exiDoc->KeyValue_isUsed = 0u;
+	exiDoc->Transforms_isUsed = 0u;
+	exiDoc->DigestMethod_isUsed = 0u;
+	exiDoc->Signature_isUsed = 0u;
+	exiDoc->RetrievalMethod_isUsed = 0u;
+	exiDoc->Manifest_isUsed = 0u;
+	exiDoc->Reference_isUsed = 0u;
+	exiDoc->CanonicalizationMethod_isUsed = 0u;
+	exiDoc->RSAKeyValue_isUsed = 0u;
+	exiDoc->Transform_isUsed = 0u;
+	exiDoc->PGPData_isUsed = 0u;
+	exiDoc->MgmtData_isUsed = 0u;
+	exiDoc->SignatureMethod_isUsed = 0u;
+	exiDoc->KeyInfo_isUsed = 0u;
+	exiDoc->SPKIData_isUsed = 0u;
+	exiDoc->X509Data_isUsed = 0u;
+	exiDoc->SignatureValue_isUsed = 0u;
+	exiDoc->KeyName_isUsed = 0u;
+	exiDoc->DigestValue_isUsed = 0u;
+	exiDoc->SignedInfo_isUsed = 0u;
+	exiDoc->Object_isUsed = 0u;
+}
+
+
+#if DEPLOY_ISO1_CODEC_FRAGMENT == SUPPORT_YES
+void init_iso1EXIFragment(struct iso1EXIFragment* exiFrag) {
+	exiFrag->ChargingComplete_isUsed = 0u;
+	exiFrag->EVMaxVoltage_isUsed = 0u;
+	exiFrag->ServiceID_isUsed = 0u;
+	exiFrag->ServiceID_isUsed = 0u;
+	exiFrag->EVRESSSOC_isUsed = 0u;
+	exiFrag->MeterReading_isUsed = 0u;
+	exiFrag->physicalValue_isUsed = 0u;
+	exiFrag->TimeInterval_isUsed = 0u;
+	exiFrag->AC_EVSEStatus_isUsed = 0u;
+	exiFrag->AC_EVSEStatus_isUsed = 0u;
+	exiFrag->EVMaxCurrent_isUsed = 0u;
+	exiFrag->ChargingProfileEntryStart_isUsed = 0u;
+	exiFrag->EVSEMaxCurrent_isUsed = 0u;
+	exiFrag->costKind_isUsed = 0u;
+	exiFrag->EAmount_isUsed = 0u;
+	exiFrag->EnergyTransferMode_isUsed = 0u;
+	exiFrag->X509SerialNumber_isUsed = 0u;
+	exiFrag->NumEPriceLevels_isUsed = 0u;
+	exiFrag->RetrievalMethod_isUsed = 0u;
+	exiFrag->PMax_isUsed = 0u;
+	exiFrag->ParameterSetID_isUsed = 0u;
+	exiFrag->ParameterSetID_isUsed = 0u;
+	exiFrag->BulkSOC_isUsed = 0u;
+	exiFrag->EVSEMinimumCurrentLimit_isUsed = 0u;
+	exiFrag->EVSEPowerLimitAchieved_isUsed = 0u;
+	exiFrag->SalesTariffEntry_isUsed = 0u;
+	exiFrag->Transforms_isUsed = 0u;
+	exiFrag->EVSEProcessing_isUsed = 0u;
+	exiFrag->EVSEProcessing_isUsed = 0u;
+	exiFrag->EVSEProcessing_isUsed = 0u;
+	exiFrag->EVSEIsolationStatus_isUsed = 0u;
+	exiFrag->BulkChargingComplete_isUsed = 0u;
+	exiFrag->SAScheduleTupleID_isUsed = 0u;
+	exiFrag->SAScheduleTupleID_isUsed = 0u;
+	exiFrag->SAScheduleTupleID_isUsed = 0u;
+	exiFrag->SAScheduleTupleID_isUsed = 0u;
+	exiFrag->FaultCode_isUsed = 0u;
+	exiFrag->RootCertificateID_isUsed = 0u;
+	exiFrag->HMACOutputLength_isUsed = 0u;
+	exiFrag->Exponent_isUsed = 0u;
+	exiFrag->X509IssuerSerial_isUsed = 0u;
+	exiFrag->byteValue_isUsed = 0u;
+	exiFrag->SPKIData_isUsed = 0u;
+	exiFrag->SAScheduleList_isUsed = 0u;
+	exiFrag->EVMaximumPowerLimit_isUsed = 0u;
+	exiFrag->DC_EVSEStatus_isUsed = 0u;
+	exiFrag->DC_EVSEStatus_isUsed = 0u;
+	exiFrag->DC_EVSEStatus_isUsed = 0u;
+	exiFrag->DC_EVSEStatus_isUsed = 0u;
+	exiFrag->RetryCounter_isUsed = 0u;
+	exiFrag->EVSEMaximumCurrentLimit_isUsed = 0u;
+	exiFrag->SalesTariff_isUsed = 0u;
+	exiFrag->PgenCounter_isUsed = 0u;
+	exiFrag->X509Data_isUsed = 0u;
+	exiFrag->EVSECurrentRegulationTolerance_isUsed = 0u;
+	exiFrag->KeyValue_isUsed = 0u;
+	exiFrag->V2G_Message_isUsed = 0u;
+	exiFrag->EVSEMinimumVoltageLimit_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ProfileEntry_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->start_isUsed = 0u;
+	exiFrag->EVErrorCode_isUsed = 0u;
+	exiFrag->EVChargeParameter_isUsed = 0u;
+	exiFrag->ContractSignatureCertChain_isUsed = 0u;
+	exiFrag->ContractSignatureCertChain_isUsed = 0u;
+	exiFrag->ContractSignatureCertChain_isUsed = 0u;
+	exiFrag->ContractSignatureCertChain_isUsed = 0u;
+	exiFrag->EVSEPresentCurrent_isUsed = 0u;
+	exiFrag->PGPData_isUsed = 0u;
+	exiFrag->EVMinCurrent_isUsed = 0u;
+	exiFrag->FullSOC_isUsed = 0u;
+	exiFrag->amount_isUsed = 0u;
+	exiFrag->DC_EVSEChargeParameter_isUsed = 0u;
+	exiFrag->Entry_isUsed = 0u;
+	exiFrag->SessionStopRes_isUsed = 0u;
+	exiFrag->DC_EVSEStatus_isUsed = 0u;
+	exiFrag->DC_EVSEStatus_isUsed = 0u;
+	exiFrag->shortValue_isUsed = 0u;
+	exiFrag->SAProvisioningCertificateChain_isUsed = 0u;
+	exiFrag->SAProvisioningCertificateChain_isUsed = 0u;
+	exiFrag->PowerDeliveryReq_isUsed = 0u;
+	exiFrag->PowerDeliveryRes_isUsed = 0u;
+	exiFrag->SessionStopReq_isUsed = 0u;
+	exiFrag->SignatureProperty_isUsed = 0u;
+	exiFrag->SessionID_isUsed = 0u;
+	exiFrag->PGPKeyPacket_isUsed = 0u;
+	exiFrag->PGPKeyPacket_isUsed = 0u;
+	exiFrag->Header_isUsed = 0u;
+	exiFrag->Seed_isUsed = 0u;
+	exiFrag->RSAKeyValue_isUsed = 0u;
+	exiFrag->FreeService_isUsed = 0u;
+	exiFrag->EVSENominalVoltage_isUsed = 0u;
+	exiFrag->XPath_isUsed = 0u;
+	exiFrag->MeteringReceiptRes_isUsed = 0u;
+	exiFrag->ServiceDiscoveryReq_isUsed = 0u;
+	exiFrag->MeteringReceiptReq_isUsed = 0u;
+	exiFrag->PreChargeRes_isUsed = 0u;
+	exiFrag->OEMProvisioningCert_isUsed = 0u;
+	exiFrag->EVEnergyCapacity_isUsed = 0u;
+	exiFrag->Signature_isUsed = 0u;
+	exiFrag->AC_EVSEChargeParameter_isUsed = 0u;
+	exiFrag->ServiceDiscoveryRes_isUsed = 0u;
+	exiFrag->ServiceID_isUsed = 0u;
+	exiFrag->PreChargeReq_isUsed = 0u;
+	exiFrag->ServiceID_isUsed = 0u;
+	exiFrag->NotificationMaxDelay_isUsed = 0u;
+	exiFrag->CableCheckReq_isUsed = 0u;
+	exiFrag->SalesTariffDescription_isUsed = 0u;
+	exiFrag->EVSEVoltageLimitAchieved_isUsed = 0u;
+	exiFrag->boolValue_isUsed = 0u;
+	exiFrag->EVCCID_isUsed = 0u;
+	exiFrag->DC_EVChargeParameter_isUsed = 0u;
+	exiFrag->ChargingStatusReq_isUsed = 0u;
+	exiFrag->CableCheckRes_isUsed = 0u;
+	exiFrag->MgmtData_isUsed = 0u;
+	exiFrag->MeterInfo_isUsed = 0u;
+	exiFrag->MeterInfo_isUsed = 0u;
+	exiFrag->MeterInfo_isUsed = 0u;
+	exiFrag->EVSEEnergyToBeDelivered_isUsed = 0u;
+	exiFrag->EVSEMaxCurrent_isUsed = 0u;
+	exiFrag->EVSEStatus_isUsed = 0u;
+	exiFrag->Service_isUsed = 0u;
+	exiFrag->Manifest_isUsed = 0u;
+	exiFrag->EVMaximumVoltageLimit_isUsed = 0u;
+	exiFrag->P_isUsed = 0u;
+	exiFrag->Q_isUsed = 0u;
+	exiFrag->X509SubjectName_isUsed = 0u;
+	exiFrag->intValue_isUsed = 0u;
+	exiFrag->ChargingProfile_isUsed = 0u;
+	exiFrag->G_isUsed = 0u;
+	exiFrag->J_isUsed = 0u;
+	exiFrag->ServiceScope_isUsed = 0u;
+	exiFrag->ReceiptRequired_isUsed = 0u;
+	exiFrag->ReceiptRequired_isUsed = 0u;
+	exiFrag->ServiceName_isUsed = 0u;
+	exiFrag->MeterStatus_isUsed = 0u;
+	exiFrag->DC_EVStatus_isUsed = 0u;
+	exiFrag->DC_EVStatus_isUsed = 0u;
+	exiFrag->DC_EVStatus_isUsed = 0u;
+	exiFrag->DC_EVStatus_isUsed = 0u;
+	exiFrag->ChargingStatusRes_isUsed = 0u;
+	exiFrag->ServiceCategory_isUsed = 0u;
+	exiFrag->Notification_isUsed = 0u;
+	exiFrag->X509CRL_isUsed = 0u;
+	exiFrag->Y_isUsed = 0u;
+	exiFrag->EVSEPresentVoltage_isUsed = 0u;
+	exiFrag->EVSEPresentVoltage_isUsed = 0u;
+	exiFrag->EVSEPresentVoltage_isUsed = 0u;
+	exiFrag->DigestValue_isUsed = 0u;
+	exiFrag->EVSEMaximumPowerLimit_isUsed = 0u;
+	exiFrag->EVSETimeStamp_isUsed = 0u;
+	exiFrag->EVSETimeStamp_isUsed = 0u;
+	exiFrag->Cost_isUsed = 0u;
+	exiFrag->EVSEPeakCurrentRipple_isUsed = 0u;
+	exiFrag->ConsumptionCost_isUsed = 0u;
+	exiFrag->DigestMethod_isUsed = 0u;
+	exiFrag->SPKISexp_isUsed = 0u;
+	exiFrag->SessionSetupRes_isUsed = 0u;
+	exiFrag->EVSECurrentLimitAchieved_isUsed = 0u;
+	exiFrag->ServiceDetailReq_isUsed = 0u;
+	exiFrag->EVSEMaximumVoltageLimit_isUsed = 0u;
+	exiFrag->ServiceDetailRes_isUsed = 0u;
+	exiFrag->SignatureProperties_isUsed = 0u;
+	exiFrag->EPriceLevel_isUsed = 0u;
+	exiFrag->EVTargetCurrent_isUsed = 0u;
+	exiFrag->RemainingTimeToBulkSoC_isUsed = 0u;
+	exiFrag->EVTargetCurrent_isUsed = 0u;
+	exiFrag->stringValue_isUsed = 0u;
+	exiFrag->SessionSetupReq_isUsed = 0u;
+	exiFrag->Multiplier_isUsed = 0u;
+	exiFrag->CertificateUpdateRes_isUsed = 0u;
+	exiFrag->PGPKeyID_isUsed = 0u;
+	exiFrag->EVTargetVoltage_isUsed = 0u;
+	exiFrag->EVTargetVoltage_isUsed = 0u;
+	exiFrag->DSAKeyValue_isUsed = 0u;
+	exiFrag->CertificateUpdateReq_isUsed = 0u;
+	exiFrag->EVMaximumCurrentLimit_isUsed = 0u;
+	exiFrag->CanonicalizationMethod_isUsed = 0u;
+	exiFrag->X509Certificate_isUsed = 0u;
+	exiFrag->CertificateInstallationReq_isUsed = 0u;
+	exiFrag->CertificateInstallationRes_isUsed = 0u;
+	exiFrag->EVStatus_isUsed = 0u;
+	exiFrag->SupportedEnergyTransferMode_isUsed = 0u;
+	exiFrag->SignedInfo_isUsed = 0u;
+	exiFrag->eMAID_isUsed = 0u;
+	exiFrag->eMAID_isUsed = 0u;
+	exiFrag->eMAID_isUsed = 0u;
+	exiFrag->eMAID_isUsed = 0u;
+	exiFrag->MaxEntriesSAScheduleTuple_isUsed = 0u;
+	exiFrag->PaymentOption_isUsed = 0u;
+	exiFrag->SubCertificates_isUsed = 0u;
+	exiFrag->PaymentDetailsReq_isUsed = 0u;
+	exiFrag->AuthorizationReq_isUsed = 0u;
+	exiFrag->PaymentDetailsRes_isUsed = 0u;
+	exiFrag->AuthorizationRes_isUsed = 0u;
+	exiFrag->EVSEStatusCode_isUsed = 0u;
+	exiFrag->PaymentOptionList_isUsed = 0u;
+	exiFrag->SelectedServiceList_isUsed = 0u;
+	exiFrag->ContractSignatureEncryptedPrivateKey_isUsed = 0u;
+	exiFrag->ContractSignatureEncryptedPrivateKey_isUsed = 0u;
+	exiFrag->SAScheduleTupleID_isUsed = 0u;
+	exiFrag->WeldingDetectionReq_isUsed = 0u;
+	exiFrag->FaultMsg_isUsed = 0u;
+	exiFrag->WeldingDetectionRes_isUsed = 0u;
+	exiFrag->ChargeProgress_isUsed = 0u;
+	exiFrag->SelectedPaymentOption_isUsed = 0u;
+	exiFrag->BulkChargingComplete_isUsed = 0u;
+	exiFrag->EVSEID_isUsed = 0u;
+	exiFrag->EVSEID_isUsed = 0u;
+	exiFrag->ParameterSet_isUsed = 0u;
+	exiFrag->EVSEID_isUsed = 0u;
+	exiFrag->EVSEChargeParameter_isUsed = 0u;
+	exiFrag->SigMeterReading_isUsed = 0u;
+	exiFrag->SignatureValue_isUsed = 0u;
+	exiFrag->SASchedules_isUsed = 0u;
+	exiFrag->SalesTariffID_isUsed = 0u;
+	exiFrag->DHpublickey_isUsed = 0u;
+	exiFrag->DHpublickey_isUsed = 0u;
+	exiFrag->ServiceParameterList_isUsed = 0u;
+	exiFrag->ListOfRootCertificateIDs_isUsed = 0u;
+	exiFrag->ListOfRootCertificateIDs_isUsed = 0u;
+	exiFrag->MeterID_isUsed = 0u;
+	exiFrag->EVSEMaximumCurrentLimit_isUsed = 0u;
+	exiFrag->ChargeService_isUsed = 0u;
+	exiFrag->amountMultiplier_isUsed = 0u;
+	exiFrag->RCD_isUsed = 0u;
+	exiFrag->EVMaximumPowerLimit_isUsed = 0u;
+	exiFrag->startValue_isUsed = 0u;
+	exiFrag->CurrentDemandReq_isUsed = 0u;
+	exiFrag->KeyName_isUsed = 0u;
+	exiFrag->DC_EVPowerDeliveryParameter_isUsed = 0u;
+	exiFrag->Body_isUsed = 0u;
+	exiFrag->ChargingComplete_isUsed = 0u;
+	exiFrag->EVSENotification_isUsed = 0u;
+	exiFrag->Value_isUsed = 0u;
+	exiFrag->KeyInfo_isUsed = 0u;
+	exiFrag->GenChallenge_isUsed = 0u;
+	exiFrag->GenChallenge_isUsed = 0u;
+	exiFrag->AC_EVChargeParameter_isUsed = 0u;
+	exiFrag->PMaxScheduleEntry_isUsed = 0u;
+	exiFrag->Parameter_isUsed = 0u;
+	exiFrag->X509SKI_isUsed = 0u;
+	exiFrag->EVSEMaximumVoltageLimit_isUsed = 0u;
+	exiFrag->SelectedService_isUsed = 0u;
+	exiFrag->PaymentServiceSelectionReq_isUsed = 0u;
+	exiFrag->PaymentServiceSelectionRes_isUsed = 0u;
+	exiFrag->Certificate_isUsed = 0u;
+	exiFrag->Certificate_isUsed = 0u;
+	exiFrag->CurrentDemandRes_isUsed = 0u;
+	exiFrag->EVReady_isUsed = 0u;
+	exiFrag->EVSEMaximumPowerLimit_isUsed = 0u;
+	exiFrag->SignatureMethod_isUsed = 0u;
+	exiFrag->PMaxSchedule_isUsed = 0u;
+	exiFrag->ServiceCategory_isUsed = 0u;
+	exiFrag->Unit_isUsed = 0u;
+	exiFrag->X509IssuerName_isUsed = 0u;
+	exiFrag->Reference_isUsed = 0u;
+	exiFrag->ChargingProfileEntryMaxNumberOfPhasesInUse_isUsed = 0u;
+	exiFrag->EVPowerDeliveryParameter_isUsed = 0u;
+	exiFrag->ChargingProfileEntryMaxPower_isUsed = 0u;
+	exiFrag->ChargeParameterDiscoveryReq_isUsed = 0u;
+	exiFrag->duration_isUsed = 0u;
+	exiFrag->TMeter_isUsed = 0u;
+	exiFrag->ChargeParameterDiscoveryRes_isUsed = 0u;
+	exiFrag->EVMaximumCurrentLimit_isUsed = 0u;
+	exiFrag->ServiceList_isUsed = 0u;
+	exiFrag->AC_EVSEStatus_isUsed = 0u;
+	exiFrag->EVMaximumVoltageLimit_isUsed = 0u;
+	exiFrag->DC_EVStatus_isUsed = 0u;
+	exiFrag->SAScheduleTuple_isUsed = 0u;
+	exiFrag->DC_EVStatus_isUsed = 0u;
+	exiFrag->DC_EVStatus_isUsed = 0u;
+	exiFrag->BodyElement_isUsed = 0u;
+	exiFrag->RemainingTimeToFullSoC_isUsed = 0u;
+	exiFrag->RelativeTimeInterval_isUsed = 0u;
+	exiFrag->Transform_isUsed = 0u;
+	exiFrag->DepartureTime_isUsed = 0u;
+	exiFrag->Object_isUsed = 0u;
+	exiFrag->EVEnergyRequest_isUsed = 0u;
+	exiFrag->ServiceScope_isUsed = 0u;
+	exiFrag->Modulus_isUsed = 0u;
+	exiFrag->ChargingSession_isUsed = 0u;
+	exiFrag->RequestedEnergyTransferMode_isUsed = 0u;
+	exiFrag->SessionID_isUsed = 0u;
+}
+void init_iso1EXISchemaInformedElementFragmentGrammar(struct iso1EXISchemaInformedElementFragmentGrammar* exiFrag) {
+	exiFrag->Id_isUsed = 0u;
+	exiFrag->CHARACTERS_GENERIC_isUsed = 0u;
+}
+#endif /* DEPLOY_ISO1_CODEC_FRAGMENT */
+
+void init_iso1MessageHeaderType(struct iso1MessageHeaderType* iso1MessageHeaderType) {
+	iso1MessageHeaderType->Notification_isUsed = 0u;
+	iso1MessageHeaderType->Signature_isUsed = 0u;
+}
+
+void init_iso1SignatureType(struct iso1SignatureType* iso1SignatureType) {
+	iso1SignatureType->Id_isUsed = 0u;
+	iso1SignatureType->KeyInfo_isUsed = 0u;
+	iso1SignatureType->Object.arrayLen = 0u;
+}
+
+void init_iso1PowerDeliveryReqType(struct iso1PowerDeliveryReqType* iso1PowerDeliveryReqType) {
+	iso1PowerDeliveryReqType->ChargingProfile_isUsed = 0u;
+	iso1PowerDeliveryReqType->EVPowerDeliveryParameter_isUsed = 0u;
+	iso1PowerDeliveryReqType->DC_EVPowerDeliveryParameter_isUsed = 0u;
+}
+
+void init_iso1ParameterType(struct iso1ParameterType* iso1ParameterType) {
+	iso1ParameterType->boolValue_isUsed = 0u;
+	iso1ParameterType->byteValue_isUsed = 0u;
+	iso1ParameterType->shortValue_isUsed = 0u;
+	iso1ParameterType->intValue_isUsed = 0u;
+	iso1ParameterType->physicalValue_isUsed = 0u;
+	iso1ParameterType->stringValue_isUsed = 0u;
+}
+
+void init_iso1CertificateInstallationReqType(struct iso1CertificateInstallationReqType* iso1CertificateInstallationReqType) {
+	(void)iso1CertificateInstallationReqType; /* avoid unused warning */
+}
+
+void init_iso1SessionSetupResType(struct iso1SessionSetupResType* iso1SessionSetupResType) {
+	iso1SessionSetupResType->EVSETimeStamp_isUsed = 0u;
+}
+
+void init_iso1EVChargeParameterType(struct iso1EVChargeParameterType* iso1EVChargeParameterType) {
+	iso1EVChargeParameterType->DepartureTime_isUsed = 0u;
+}
+
+void init_iso1DiffieHellmanPublickeyType(struct iso1DiffieHellmanPublickeyType* iso1DiffieHellmanPublickeyType) {
+	(void)iso1DiffieHellmanPublickeyType; /* avoid unused warning */
+}
+
+void init_iso1ServiceDiscoveryResType(struct iso1ServiceDiscoveryResType* iso1ServiceDiscoveryResType) {
+	iso1ServiceDiscoveryResType->ServiceList_isUsed = 0u;
+}
+
+void init_iso1ServiceParameterListType(struct iso1ServiceParameterListType* iso1ServiceParameterListType) {
+	iso1ServiceParameterListType->ParameterSet.arrayLen = 0u;
+}
+
+void init_iso1CertificateChainType(struct iso1CertificateChainType* iso1CertificateChainType) {
+	iso1CertificateChainType->Id_isUsed = 0u;
+	iso1CertificateChainType->SubCertificates_isUsed = 0u;
+}
+
+void init_iso1SASchedulesType(struct iso1SASchedulesType* iso1SASchedulesType) {
+	(void)iso1SASchedulesType; /* avoid unused warning */
+}
+
+void init_iso1DC_EVSEStatusType(struct iso1DC_EVSEStatusType* iso1DC_EVSEStatusType) {
+	iso1DC_EVSEStatusType->EVSEIsolationStatus_isUsed = 0u;
+}
+
+void init_iso1PreChargeResType(struct iso1PreChargeResType* iso1PreChargeResType) {
+	(void)iso1PreChargeResType; /* avoid unused warning */
+}
+
+void init_iso1ParameterSetType(struct iso1ParameterSetType* iso1ParameterSetType) {
+	iso1ParameterSetType->Parameter.arrayLen = 0u;
+}
+
+void init_iso1ServiceDetailReqType(struct iso1ServiceDetailReqType* iso1ServiceDetailReqType) {
+	(void)iso1ServiceDetailReqType; /* avoid unused warning */
+}
+
+void init_iso1RelativeTimeIntervalType(struct iso1RelativeTimeIntervalType* iso1RelativeTimeIntervalType) {
+	iso1RelativeTimeIntervalType->duration_isUsed = 0u;
+}
+
+void init_iso1SignedInfoType(struct iso1SignedInfoType* iso1SignedInfoType) {
+	iso1SignedInfoType->Id_isUsed = 0u;
+	iso1SignedInfoType->Reference.arrayLen = 0u;
+}
+
+void init_iso1EMAIDType(struct iso1EMAIDType* iso1EMAIDType) {
+	(void)iso1EMAIDType; /* avoid unused warning */
+}
+
+void init_iso1EVStatusType(struct iso1EVStatusType* iso1EVStatusType) {
+	(void)iso1EVStatusType; /* avoid unused warning */
+}
+
+void init_iso1ServiceListType(struct iso1ServiceListType* iso1ServiceListType) {
+	iso1ServiceListType->Service.arrayLen = 0u;
+}
+
+void init_iso1EVSEChargeParameterType(struct iso1EVSEChargeParameterType* iso1EVSEChargeParameterType) {
+	(void)iso1EVSEChargeParameterType; /* avoid unused warning */
+}
+
+void init_iso1EVPowerDeliveryParameterType(struct iso1EVPowerDeliveryParameterType* iso1EVPowerDeliveryParameterType) {
+	(void)iso1EVPowerDeliveryParameterType; /* avoid unused warning */
+}
+
+void init_iso1ProfileEntryType(struct iso1ProfileEntryType* iso1ProfileEntryType) {
+	iso1ProfileEntryType->ChargingProfileEntryMaxNumberOfPhasesInUse_isUsed = 0u;
+}
+
+void init_iso1AuthorizationReqType(struct iso1AuthorizationReqType* iso1AuthorizationReqType) {
+	iso1AuthorizationReqType->Id_isUsed = 0u;
+	iso1AuthorizationReqType->GenChallenge_isUsed = 0u;
+}
+
+void init_iso1MeterInfoType(struct iso1MeterInfoType* iso1MeterInfoType) {
+	iso1MeterInfoType->MeterReading_isUsed = 0u;
+	iso1MeterInfoType->SigMeterReading_isUsed = 0u;
+	iso1MeterInfoType->MeterStatus_isUsed = 0u;
+	iso1MeterInfoType->TMeter_isUsed = 0u;
+}
+
+void init_iso1ManifestType(struct iso1ManifestType* iso1ManifestType) {
+	iso1ManifestType->Id_isUsed = 0u;
+	iso1ManifestType->Reference.arrayLen = 0u;
+}
+
+void init_iso1ChargeParameterDiscoveryResType(struct iso1ChargeParameterDiscoveryResType* iso1ChargeParameterDiscoveryResType) {
+	iso1ChargeParameterDiscoveryResType->SASchedules_isUsed = 0u;
+	iso1ChargeParameterDiscoveryResType->SAScheduleList_isUsed = 0u;
+	iso1ChargeParameterDiscoveryResType->EVSEChargeParameter_isUsed = 0u;
+	iso1ChargeParameterDiscoveryResType->AC_EVSEChargeParameter_isUsed = 0u;
+	iso1ChargeParameterDiscoveryResType->DC_EVSEChargeParameter_isUsed = 0u;
+}
+
+void init_iso1PowerDeliveryResType(struct iso1PowerDeliveryResType* iso1PowerDeliveryResType) {
+	iso1PowerDeliveryResType->EVSEStatus_isUsed = 0u;
+	iso1PowerDeliveryResType->AC_EVSEStatus_isUsed = 0u;
+	iso1PowerDeliveryResType->DC_EVSEStatus_isUsed = 0u;
+}
+
+void init_iso1DC_EVChargeParameterType(struct iso1DC_EVChargeParameterType* iso1DC_EVChargeParameterType) {
+	iso1DC_EVChargeParameterType->DepartureTime_isUsed = 0u;
+	iso1DC_EVChargeParameterType->EVMaximumPowerLimit_isUsed = 0u;
+	iso1DC_EVChargeParameterType->EVEnergyCapacity_isUsed = 0u;
+	iso1DC_EVChargeParameterType->EVEnergyRequest_isUsed = 0u;
+	iso1DC_EVChargeParameterType->FullSOC_isUsed = 0u;
+	iso1DC_EVChargeParameterType->BulkSOC_isUsed = 0u;
+}
+
+void init_iso1ConsumptionCostType(struct iso1ConsumptionCostType* iso1ConsumptionCostType) {
+	iso1ConsumptionCostType->Cost.arrayLen = 0u;
+}
+
+void init_iso1PMaxScheduleType(struct iso1PMaxScheduleType* iso1PMaxScheduleType) {
+	iso1PMaxScheduleType->PMaxScheduleEntry.arrayLen = 0u;
+}
+
+void init_iso1PaymentOptionListType(struct iso1PaymentOptionListType* iso1PaymentOptionListType) {
+	iso1PaymentOptionListType->PaymentOption.arrayLen = 0u;
+}
+
+void init_iso1ObjectType(struct iso1ObjectType* iso1ObjectType) {
+	iso1ObjectType->Id_isUsed = 0u;
+	iso1ObjectType->MimeType_isUsed = 0u;
+	iso1ObjectType->Encoding_isUsed = 0u;
+	iso1ObjectType->ANY_isUsed = 0u;
+}
+
+void init_iso1PhysicalValueType(struct iso1PhysicalValueType* iso1PhysicalValueType) {
+	(void)iso1PhysicalValueType; /* avoid unused warning */
+}
+
+void init_iso1RSAKeyValueType(struct iso1RSAKeyValueType* iso1RSAKeyValueType) {
+	(void)iso1RSAKeyValueType; /* avoid unused warning */
+}
+
+void init_iso1SessionStopResType(struct iso1SessionStopResType* iso1SessionStopResType) {
+	(void)iso1SessionStopResType; /* avoid unused warning */
+}
+
+void init_iso1CertificateUpdateReqType(struct iso1CertificateUpdateReqType* iso1CertificateUpdateReqType) {
+	(void)iso1CertificateUpdateReqType; /* avoid unused warning */
+}
+
+void init_iso1SignatureValueType(struct iso1SignatureValueType* iso1SignatureValueType) {
+	iso1SignatureValueType->Id_isUsed = 0u;
+}
+
+void init_iso1PaymentDetailsReqType(struct iso1PaymentDetailsReqType* iso1PaymentDetailsReqType) {
+	(void)iso1PaymentDetailsReqType; /* avoid unused warning */
+}
+
+void init_iso1AuthorizationResType(struct iso1AuthorizationResType* iso1AuthorizationResType) {
+	(void)iso1AuthorizationResType; /* avoid unused warning */
+}
+
+void init_iso1DC_EVSEChargeParameterType(struct iso1DC_EVSEChargeParameterType* iso1DC_EVSEChargeParameterType) {
+	iso1DC_EVSEChargeParameterType->EVSECurrentRegulationTolerance_isUsed = 0u;
+	iso1DC_EVSEChargeParameterType->EVSEEnergyToBeDelivered_isUsed = 0u;
+}
+
+void init_iso1SubCertificatesType(struct iso1SubCertificatesType* iso1SubCertificatesType) {
+	iso1SubCertificatesType->Certificate.arrayLen = 0u;
+}
+
+void init_iso1ChargingStatusResType(struct iso1ChargingStatusResType* iso1ChargingStatusResType) {
+	iso1ChargingStatusResType->EVSEMaxCurrent_isUsed = 0u;
+	iso1ChargingStatusResType->MeterInfo_isUsed = 0u;
+	iso1ChargingStatusResType->ReceiptRequired_isUsed = 0u;
+}
+
+void init_iso1DSAKeyValueType(struct iso1DSAKeyValueType* iso1DSAKeyValueType) {
+	iso1DSAKeyValueType->P_isUsed = 0u;
+	iso1DSAKeyValueType->Q_isUsed = 0u;
+	iso1DSAKeyValueType->G_isUsed = 0u;
+	iso1DSAKeyValueType->J_isUsed = 0u;
+	iso1DSAKeyValueType->Seed_isUsed = 0u;
+	iso1DSAKeyValueType->PgenCounter_isUsed = 0u;
+}
+
+void init_iso1ListOfRootCertificateIDsType(struct iso1ListOfRootCertificateIDsType* iso1ListOfRootCertificateIDsType) {
+	iso1ListOfRootCertificateIDsType->RootCertificateID.arrayLen = 0u;
+}
+
+void init_iso1ChargeServiceType(struct iso1ChargeServiceType* iso1ChargeServiceType) {
+	iso1ChargeServiceType->ServiceName_isUsed = 0u;
+	iso1ChargeServiceType->ServiceScope_isUsed = 0u;
+}
+
+void init_iso1IntervalType(struct iso1IntervalType* iso1IntervalType) {
+	(void)iso1IntervalType; /* avoid unused warning */
+}
+
+void init_iso1MeteringReceiptReqType(struct iso1MeteringReceiptReqType* iso1MeteringReceiptReqType) {
+	iso1MeteringReceiptReqType->Id_isUsed = 0u;
+	iso1MeteringReceiptReqType->SAScheduleTupleID_isUsed = 0u;
+}
+
+void init_iso1ServiceDetailResType(struct iso1ServiceDetailResType* iso1ServiceDetailResType) {
+	iso1ServiceDetailResType->ServiceParameterList_isUsed = 0u;
+}
+
+void init_iso1KeyValueType(struct iso1KeyValueType* iso1KeyValueType) {
+	iso1KeyValueType->DSAKeyValue_isUsed = 0u;
+	iso1KeyValueType->RSAKeyValue_isUsed = 0u;
+	iso1KeyValueType->ANY_isUsed = 0u;
+}
+
+void init_iso1SelectedServiceListType(struct iso1SelectedServiceListType* iso1SelectedServiceListType) {
+	iso1SelectedServiceListType->SelectedService.arrayLen = 0u;
+}
+
+void init_iso1CableCheckResType(struct iso1CableCheckResType* iso1CableCheckResType) {
+	(void)iso1CableCheckResType; /* avoid unused warning */
+}
+
+void init_iso1X509IssuerSerialType(struct iso1X509IssuerSerialType* iso1X509IssuerSerialType) {
+	(void)iso1X509IssuerSerialType; /* avoid unused warning */
+}
+
+void init_iso1KeyInfoType(struct iso1KeyInfoType* iso1KeyInfoType) {
+	iso1KeyInfoType->Id_isUsed = 0u;
+	iso1KeyInfoType->KeyName.arrayLen = 0u;
+	iso1KeyInfoType->KeyValue.arrayLen = 0u;
+	iso1KeyInfoType->RetrievalMethod.arrayLen = 0u;
+	iso1KeyInfoType->X509Data.arrayLen = 0u;
+	iso1KeyInfoType->PGPData.arrayLen = 0u;
+	iso1KeyInfoType->SPKIData.arrayLen = 0u;
+	iso1KeyInfoType->MgmtData.arrayLen = 0u;
+	iso1KeyInfoType->ANY_isUsed = 0u;
+}
+
+void init_iso1TransformsType(struct iso1TransformsType* iso1TransformsType) {
+	iso1TransformsType->Transform.arrayLen = 0u;
+}
+
+void init_iso1ChargeParameterDiscoveryReqType(struct iso1ChargeParameterDiscoveryReqType* iso1ChargeParameterDiscoveryReqType) {
+	iso1ChargeParameterDiscoveryReqType->MaxEntriesSAScheduleTuple_isUsed = 0u;
+	iso1ChargeParameterDiscoveryReqType->EVChargeParameter_isUsed = 0u;
+	iso1ChargeParameterDiscoveryReqType->AC_EVChargeParameter_isUsed = 0u;
+	iso1ChargeParameterDiscoveryReqType->DC_EVChargeParameter_isUsed = 0u;
+}
+
+void init_iso1PreChargeReqType(struct iso1PreChargeReqType* iso1PreChargeReqType) {
+	(void)iso1PreChargeReqType; /* avoid unused warning */
+}
+
+void init_iso1EVSEStatusType(struct iso1EVSEStatusType* iso1EVSEStatusType) {
+	(void)iso1EVSEStatusType; /* avoid unused warning */
+}
+
+void init_iso1SignatureMethodType(struct iso1SignatureMethodType* iso1SignatureMethodType) {
+	iso1SignatureMethodType->HMACOutputLength_isUsed = 0u;
+	iso1SignatureMethodType->ANY_isUsed = 0u;
+}
+
+void init_iso1X509DataType(struct iso1X509DataType* iso1X509DataType) {
+	iso1X509DataType->X509IssuerSerial.arrayLen = 0u;
+	iso1X509DataType->X509SKI.arrayLen = 0u;
+	iso1X509DataType->X509SubjectName.arrayLen = 0u;
+	iso1X509DataType->X509Certificate.arrayLen = 0u;
+	iso1X509DataType->X509CRL.arrayLen = 0u;
+	iso1X509DataType->ANY_isUsed = 0u;
+}
+
+void init_iso1NotificationType(struct iso1NotificationType* iso1NotificationType) {
+	iso1NotificationType->FaultMsg_isUsed = 0u;
+}
+
+void init_iso1SAScheduleListType(struct iso1SAScheduleListType* iso1SAScheduleListType) {
+	iso1SAScheduleListType->SAScheduleTuple.arrayLen = 0u;
+}
+
+void init_iso1BodyType(struct iso1BodyType* iso1BodyType) {
+	iso1BodyType->BodyElement_isUsed = 0u;
+	iso1BodyType->SessionSetupReq_isUsed = 0u;
+	iso1BodyType->SessionSetupRes_isUsed = 0u;
+	iso1BodyType->ServiceDiscoveryReq_isUsed = 0u;
+	iso1BodyType->ServiceDiscoveryRes_isUsed = 0u;
+	iso1BodyType->ServiceDetailReq_isUsed = 0u;
+	iso1BodyType->ServiceDetailRes_isUsed = 0u;
+	iso1BodyType->PaymentServiceSelectionReq_isUsed = 0u;
+	iso1BodyType->PaymentServiceSelectionRes_isUsed = 0u;
+	iso1BodyType->PaymentDetailsReq_isUsed = 0u;
+	iso1BodyType->PaymentDetailsRes_isUsed = 0u;
+	iso1BodyType->AuthorizationReq_isUsed = 0u;
+	iso1BodyType->AuthorizationRes_isUsed = 0u;
+	iso1BodyType->ChargeParameterDiscoveryReq_isUsed = 0u;
+	iso1BodyType->ChargeParameterDiscoveryRes_isUsed = 0u;
+	iso1BodyType->PowerDeliveryReq_isUsed = 0u;
+	iso1BodyType->PowerDeliveryRes_isUsed = 0u;
+	iso1BodyType->MeteringReceiptReq_isUsed = 0u;
+	iso1BodyType->MeteringReceiptRes_isUsed = 0u;
+	iso1BodyType->SessionStopReq_isUsed = 0u;
+	iso1BodyType->SessionStopRes_isUsed = 0u;
+	iso1BodyType->CertificateUpdateReq_isUsed = 0u;
+	iso1BodyType->CertificateUpdateRes_isUsed = 0u;
+	iso1BodyType->CertificateInstallationReq_isUsed = 0u;
+	iso1BodyType->CertificateInstallationRes_isUsed = 0u;
+	iso1BodyType->ChargingStatusReq_isUsed = 0u;
+	iso1BodyType->ChargingStatusRes_isUsed = 0u;
+	iso1BodyType->CableCheckReq_isUsed = 0u;
+	iso1BodyType->CableCheckRes_isUsed = 0u;
+	iso1BodyType->PreChargeReq_isUsed = 0u;
+	iso1BodyType->PreChargeRes_isUsed = 0u;
+	iso1BodyType->CurrentDemandReq_isUsed = 0u;
+	iso1BodyType->CurrentDemandRes_isUsed = 0u;
+	iso1BodyType->WeldingDetectionReq_isUsed = 0u;
+	iso1BodyType->WeldingDetectionRes_isUsed = 0u;
+}
+
+void init_iso1ChargingProfileType(struct iso1ChargingProfileType* iso1ChargingProfileType) {
+	iso1ChargingProfileType->ProfileEntry.arrayLen = 0u;
+}
+
+void init_iso1TransformType(struct iso1TransformType* iso1TransformType) {
+	iso1TransformType->ANY_isUsed = 0u;
+	iso1TransformType->XPath.arrayLen = 0u;
+}
+
+void init_iso1SAScheduleTupleType(struct iso1SAScheduleTupleType* iso1SAScheduleTupleType) {
+	iso1SAScheduleTupleType->SalesTariff_isUsed = 0u;
+}
+
+void init_iso1AC_EVChargeParameterType(struct iso1AC_EVChargeParameterType* iso1AC_EVChargeParameterType) {
+	iso1AC_EVChargeParameterType->DepartureTime_isUsed = 0u;
+}
+
+void init_iso1AnonType_V2G_Message(struct iso1AnonType_V2G_Message* iso1AnonType_V2G_Message) {
+	(void)iso1AnonType_V2G_Message; /* avoid unused warning */
+}
+
+void init_iso1PaymentDetailsResType(struct iso1PaymentDetailsResType* iso1PaymentDetailsResType) {
+	(void)iso1PaymentDetailsResType; /* avoid unused warning */
+}
+
+void init_iso1ContractSignatureEncryptedPrivateKeyType(struct iso1ContractSignatureEncryptedPrivateKeyType* iso1ContractSignatureEncryptedPrivateKeyType) {
+	(void)iso1ContractSignatureEncryptedPrivateKeyType; /* avoid unused warning */
+}
+
+void init_iso1PMaxScheduleEntryType(struct iso1PMaxScheduleEntryType* iso1PMaxScheduleEntryType) {
+	iso1PMaxScheduleEntryType->TimeInterval_isUsed = 0u;
+	iso1PMaxScheduleEntryType->RelativeTimeInterval_isUsed = 0u;
+}
+
+void init_iso1SPKIDataType(struct iso1SPKIDataType* iso1SPKIDataType) {
+	iso1SPKIDataType->SPKISexp.arrayLen = 0u;
+	iso1SPKIDataType->ANY_isUsed = 0u;
+}
+
+void init_iso1MeteringReceiptResType(struct iso1MeteringReceiptResType* iso1MeteringReceiptResType) {
+	iso1MeteringReceiptResType->EVSEStatus_isUsed = 0u;
+	iso1MeteringReceiptResType->AC_EVSEStatus_isUsed = 0u;
+	iso1MeteringReceiptResType->DC_EVSEStatus_isUsed = 0u;
+}
+
+void init_iso1SessionStopReqType(struct iso1SessionStopReqType* iso1SessionStopReqType) {
+	(void)iso1SessionStopReqType; /* avoid unused warning */
+}
+
+void init_iso1WeldingDetectionResType(struct iso1WeldingDetectionResType* iso1WeldingDetectionResType) {
+	(void)iso1WeldingDetectionResType; /* avoid unused warning */
+}
+
+void init_iso1ReferenceType(struct iso1ReferenceType* iso1ReferenceType) {
+	iso1ReferenceType->Id_isUsed = 0u;
+	iso1ReferenceType->URI_isUsed = 0u;
+	iso1ReferenceType->Type_isUsed = 0u;
+	iso1ReferenceType->Transforms_isUsed = 0u;
+}
+
+void init_iso1CurrentDemandReqType(struct iso1CurrentDemandReqType* iso1CurrentDemandReqType) {
+	iso1CurrentDemandReqType->EVMaximumVoltageLimit_isUsed = 0u;
+	iso1CurrentDemandReqType->EVMaximumCurrentLimit_isUsed = 0u;
+	iso1CurrentDemandReqType->EVMaximumPowerLimit_isUsed = 0u;
+	iso1CurrentDemandReqType->BulkChargingComplete_isUsed = 0u;
+	iso1CurrentDemandReqType->RemainingTimeToFullSoC_isUsed = 0u;
+	iso1CurrentDemandReqType->RemainingTimeToBulkSoC_isUsed = 0u;
+}
+
+void init_iso1SalesTariffEntryType(struct iso1SalesTariffEntryType* iso1SalesTariffEntryType) {
+	iso1SalesTariffEntryType->TimeInterval_isUsed = 0u;
+	iso1SalesTariffEntryType->RelativeTimeInterval_isUsed = 0u;
+	iso1SalesTariffEntryType->EPriceLevel_isUsed = 0u;
+	iso1SalesTariffEntryType->ConsumptionCost.arrayLen = 0u;
+}
+
+void init_iso1EntryType(struct iso1EntryType* iso1EntryType) {
+	iso1EntryType->TimeInterval_isUsed = 0u;
+	iso1EntryType->RelativeTimeInterval_isUsed = 0u;
+}
+
+void init_iso1SessionSetupReqType(struct iso1SessionSetupReqType* iso1SessionSetupReqType) {
+	(void)iso1SessionSetupReqType; /* avoid unused warning */
+}
+
+void init_iso1CostType(struct iso1CostType* iso1CostType) {
+	iso1CostType->amountMultiplier_isUsed = 0u;
+}
+
+void init_iso1DC_EVPowerDeliveryParameterType(struct iso1DC_EVPowerDeliveryParameterType* iso1DC_EVPowerDeliveryParameterType) {
+	iso1DC_EVPowerDeliveryParameterType->BulkChargingComplete_isUsed = 0u;
+}
+
+void init_iso1RetrievalMethodType(struct iso1RetrievalMethodType* iso1RetrievalMethodType) {
+	iso1RetrievalMethodType->URI_isUsed = 0u;
+	iso1RetrievalMethodType->Type_isUsed = 0u;
+	iso1RetrievalMethodType->Transforms_isUsed = 0u;
+}
+
+void init_iso1CertificateUpdateResType(struct iso1CertificateUpdateResType* iso1CertificateUpdateResType) {
+	iso1CertificateUpdateResType->RetryCounter_isUsed = 0u;
+}
+
+void init_iso1CertificateInstallationResType(struct iso1CertificateInstallationResType* iso1CertificateInstallationResType) {
+	(void)iso1CertificateInstallationResType; /* avoid unused warning */
+}
+
+void init_iso1CanonicalizationMethodType(struct iso1CanonicalizationMethodType* iso1CanonicalizationMethodType) {
+	iso1CanonicalizationMethodType->ANY_isUsed = 0u;
+}
+
+void init_iso1WeldingDetectionReqType(struct iso1WeldingDetectionReqType* iso1WeldingDetectionReqType) {
+	(void)iso1WeldingDetectionReqType; /* avoid unused warning */
+}
+
+void init_iso1DC_EVStatusType(struct iso1DC_EVStatusType* iso1DC_EVStatusType) {
+	(void)iso1DC_EVStatusType; /* avoid unused warning */
+}
+
+void init_iso1CurrentDemandResType(struct iso1CurrentDemandResType* iso1CurrentDemandResType) {
+	iso1CurrentDemandResType->EVSEMaximumVoltageLimit_isUsed = 0u;
+	iso1CurrentDemandResType->EVSEMaximumCurrentLimit_isUsed = 0u;
+	iso1CurrentDemandResType->EVSEMaximumPowerLimit_isUsed = 0u;
+	iso1CurrentDemandResType->MeterInfo_isUsed = 0u;
+	iso1CurrentDemandResType->ReceiptRequired_isUsed = 0u;
+}
+
+void init_iso1ServiceType(struct iso1ServiceType* iso1ServiceType) {
+	iso1ServiceType->ServiceName_isUsed = 0u;
+	iso1ServiceType->ServiceScope_isUsed = 0u;
+}
+
+void init_iso1ServiceDiscoveryReqType(struct iso1ServiceDiscoveryReqType* iso1ServiceDiscoveryReqType) {
+	iso1ServiceDiscoveryReqType->ServiceScope_isUsed = 0u;
+	iso1ServiceDiscoveryReqType->ServiceCategory_isUsed = 0u;
+}
+
+void init_iso1AC_EVSEChargeParameterType(struct iso1AC_EVSEChargeParameterType* iso1AC_EVSEChargeParameterType) {
+	(void)iso1AC_EVSEChargeParameterType; /* avoid unused warning */
+}
+
+void init_iso1CableCheckReqType(struct iso1CableCheckReqType* iso1CableCheckReqType) {
+	(void)iso1CableCheckReqType; /* avoid unused warning */
+}
+
+void init_iso1SelectedServiceType(struct iso1SelectedServiceType* iso1SelectedServiceType) {
+	iso1SelectedServiceType->ParameterSetID_isUsed = 0u;
+}
+
+void init_iso1AC_EVSEStatusType(struct iso1AC_EVSEStatusType* iso1AC_EVSEStatusType) {
+	(void)iso1AC_EVSEStatusType; /* avoid unused warning */
+}
+
+void init_iso1SalesTariffType(struct iso1SalesTariffType* iso1SalesTariffType) {
+	iso1SalesTariffType->Id_isUsed = 0u;
+	iso1SalesTariffType->SalesTariffDescription_isUsed = 0u;
+	iso1SalesTariffType->NumEPriceLevels_isUsed = 0u;
+	iso1SalesTariffType->SalesTariffEntry.arrayLen = 0u;
+}
+
+void init_iso1PaymentServiceSelectionReqType(struct iso1PaymentServiceSelectionReqType* iso1PaymentServiceSelectionReqType) {
+	(void)iso1PaymentServiceSelectionReqType; /* avoid unused warning */
+}
+
+void init_iso1SignaturePropertiesType(struct iso1SignaturePropertiesType* iso1SignaturePropertiesType) {
+	iso1SignaturePropertiesType->Id_isUsed = 0u;
+	iso1SignaturePropertiesType->SignatureProperty.arrayLen = 0u;
+}
+
+void init_iso1BodyBaseType(struct iso1BodyBaseType* iso1BodyBaseType) {
+	(void)iso1BodyBaseType; /* avoid unused warning */
+}
+
+void init_iso1SupportedEnergyTransferModeType(struct iso1SupportedEnergyTransferModeType* iso1SupportedEnergyTransferModeType) {
+	iso1SupportedEnergyTransferModeType->EnergyTransferMode.arrayLen = 0u;
+}
+
+void init_iso1ChargingStatusReqType(struct iso1ChargingStatusReqType* iso1ChargingStatusReqType) {
+	(void)iso1ChargingStatusReqType; /* avoid unused warning */
+}
+
+void init_iso1PaymentServiceSelectionResType(struct iso1PaymentServiceSelectionResType* iso1PaymentServiceSelectionResType) {
+	(void)iso1PaymentServiceSelectionResType; /* avoid unused warning */
+}
+
+void init_iso1DigestMethodType(struct iso1DigestMethodType* iso1DigestMethodType) {
+	iso1DigestMethodType->ANY_isUsed = 0u;
+}
+
+void init_iso1SignaturePropertyType(struct iso1SignaturePropertyType* iso1SignaturePropertyType) {
+	iso1SignaturePropertyType->Id_isUsed = 0u;
+	iso1SignaturePropertyType->ANY_isUsed = 0u;
+}
+
+void init_iso1PGPDataType(struct iso1PGPDataType* iso1PGPDataType) {
+	iso1PGPDataType->PGPKeyID_isUsed = 0u;
+	iso1PGPDataType->PGPKeyPacket_isUsed = 0u;
+	iso1PGPDataType->ANY_isUsed = 0u;
+}
+
+
+
+#endif /* DEPLOY_ISO1_CODEC */
+
+#endif
+

+ 2992 - 0
EVSE/Projects/CCS/Apps/exi_engine/iso1/iso1EXIDatatypes.h

@@ -0,0 +1,2992 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9.4
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+ * \file 	EXIDatatypes.h
+ * \brief 	Datatype definitions and structs for given XML Schema definitions and initialization methods
+ *
+ */
+
+#ifndef EXI_iso1_DATATYPES_H
+#define EXI_iso1_DATATYPES_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define SUPPORT_YES 1
+#define SUPPORT_NO 2
+#define DEPLOY_ISO1_CODEC SUPPORT_NO
+#define DEPLOY_ISO1_CODEC_FRAGMENT SUPPORT_YES
+
+#if DEPLOY_ISO1_CODEC == SUPPORT_YES
+
+#include <stdint.h>
+
+#include "../codec/EXITypes.h"
+
+
+/* Datatype definitions and structs for given XML Schema definitions */
+
+#define UNION_YES 1
+#define UNION_NO 2
+#define SAVE_MEMORY_WITH_UNNAMED_UNION UNION_YES
+
+/* Note: Please find below a list of occurrence limits that have been applied */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":X509IssuerSerial from unbounded to 1 (see #define iso1X509DataType_X509IssuerSerial_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":X509SKI from unbounded to 1 (see #define iso1X509DataType_X509SKI_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":X509SubjectName from unbounded to 1 (see #define iso1X509DataType_X509SubjectName_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":X509Certificate from unbounded to 1 (see #define iso1X509DataType_X509Certificate_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":X509CRL from unbounded to 1 (see #define iso1X509DataType_X509CRL_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":XPath from unbounded to 1 (see #define iso1TransformType_XPath_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":SPKISexp from unbounded to 1 (see #define iso1SPKIDataType_SPKISexp_ARRAY_SIZE) */
+/* Limit occurrence of element "urn:iso:15118:2:2013:MsgDataTypes":RootCertificateID from unbounded to 5 (see #define iso1ListOfRootCertificateIDsType_RootCertificateID_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":Transform from unbounded to 1 (see #define iso1TransformsType_Transform_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":SignatureProperty from unbounded to 1 (see #define iso1SignaturePropertiesType_SignatureProperty_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":Reference from unbounded to 1 (see #define iso1SignedInfoType_Reference_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":Reference from unbounded to 1 (see #define iso1ManifestType_Reference_ARRAY_SIZE) */
+/* Limit occurrence of element "urn:iso:15118:2:2013:MsgDataTypes":PMaxScheduleEntry from unbounded to 5 (see #define iso1PMaxScheduleType_PMaxScheduleEntry_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":KeyName from unbounded to 1 (see #define iso1KeyInfoType_KeyName_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":KeyValue from unbounded to 1 (see #define iso1KeyInfoType_KeyValue_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":RetrievalMethod from unbounded to 1 (see #define iso1KeyInfoType_RetrievalMethod_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":X509Data from unbounded to 1 (see #define iso1KeyInfoType_X509Data_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":PGPData from unbounded to 1 (see #define iso1KeyInfoType_PGPData_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":SPKIData from unbounded to 1 (see #define iso1KeyInfoType_SPKIData_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":MgmtData from unbounded to 1 (see #define iso1KeyInfoType_MgmtData_ARRAY_SIZE) */
+/* Limit occurrence of element "urn:iso:15118:2:2013:MsgDataTypes":SalesTariffEntry from unbounded to 5 (see #define iso1SalesTariffType_SalesTariffEntry_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":Object from unbounded to 1 (see #define iso1SignatureType_Object_ARRAY_SIZE) */
+/* Limit occurrence of element "urn:iso:15118:2:2013:MsgDataTypes":ParameterSet from unbounded to 5 (see #define iso1ServiceParameterListType_ParameterSet_ARRAY_SIZE) */
+
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,EVChargeParameterType',  base type name='anyType',  content type='ELEMENT',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":DepartureTime{0-1})',  derivedBy='RESTRICTION'.  */
+struct iso1EVChargeParameterType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":DepartureTime, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t DepartureTime ;
+	unsigned int DepartureTime_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DiffieHellmanPublickeyType',  base type name='dHpublickeyType',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+#define iso1DiffieHellmanPublickeyType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1DiffieHellmanPublickeyType_CONTENT_BYTES_SIZE 350
+struct iso1DiffieHellmanPublickeyType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso1DiffieHellmanPublickeyType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	/* simple content: urn:iso:15118:2:2013:MsgDataTypes,dHpublickeyType */
+	struct {
+		uint8_t bytes[iso1DiffieHellmanPublickeyType_CONTENT_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  CONTENT ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SASchedulesType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+struct iso1SASchedulesType {
+	int noContent; /* avoid warning */
+};
+
+typedef enum {
+	iso1DC_EVErrorCodeType_NO_ERROR = 0,
+	iso1DC_EVErrorCodeType_FAILED_RESSTemperatureInhibit = 1,
+	iso1DC_EVErrorCodeType_FAILED_EVShiftPosition = 2,
+	iso1DC_EVErrorCodeType_FAILED_ChargerConnectorLockFault = 3,
+	iso1DC_EVErrorCodeType_FAILED_EVRESSMalfunction = 4,
+	iso1DC_EVErrorCodeType_FAILED_ChargingCurrentdifferential = 5,
+	iso1DC_EVErrorCodeType_FAILED_ChargingVoltageOutOfRange = 6,
+	iso1DC_EVErrorCodeType_Reserved_A = 7,
+	iso1DC_EVErrorCodeType_Reserved_B = 8,
+	iso1DC_EVErrorCodeType_Reserved_C = 9,
+	iso1DC_EVErrorCodeType_FAILED_ChargingSystemIncompatibility = 10,
+	iso1DC_EVErrorCodeType_NoData = 11
+} iso1DC_EVErrorCodeType;
+
+typedef enum {
+	iso1EVSENotificationType_None = 0,
+	iso1EVSENotificationType_StopCharging = 1,
+	iso1EVSENotificationType_ReNegotiation = 2
+} iso1EVSENotificationType;
+
+typedef enum {
+	iso1responseCodeType_OK = 0,
+	iso1responseCodeType_OK_NewSessionEstablished = 1,
+	iso1responseCodeType_OK_OldSessionJoined = 2,
+	iso1responseCodeType_OK_CertificateExpiresSoon = 3,
+	iso1responseCodeType_FAILED = 4,
+	iso1responseCodeType_FAILED_SequenceError = 5,
+	iso1responseCodeType_FAILED_ServiceIDInvalid = 6,
+	iso1responseCodeType_FAILED_UnknownSession = 7,
+	iso1responseCodeType_FAILED_ServiceSelectionInvalid = 8,
+	iso1responseCodeType_FAILED_PaymentSelectionInvalid = 9,
+	iso1responseCodeType_FAILED_CertificateExpired = 10,
+	iso1responseCodeType_FAILED_SignatureError = 11,
+	iso1responseCodeType_FAILED_NoCertificateAvailable = 12,
+	iso1responseCodeType_FAILED_CertChainError = 13,
+	iso1responseCodeType_FAILED_ChallengeInvalid = 14,
+	iso1responseCodeType_FAILED_ContractCanceled = 15,
+	iso1responseCodeType_FAILED_WrongChargeParameter = 16,
+	iso1responseCodeType_FAILED_PowerDeliveryNotApplied = 17,
+	iso1responseCodeType_FAILED_TariffSelectionInvalid = 18,
+	iso1responseCodeType_FAILED_ChargingProfileInvalid = 19,
+	iso1responseCodeType_FAILED_MeteringSignatureNotValid = 20,
+	iso1responseCodeType_FAILED_NoChargeServiceSelected = 21,
+	iso1responseCodeType_FAILED_WrongEnergyTransferMode = 22,
+	iso1responseCodeType_FAILED_ContactorError = 23,
+	iso1responseCodeType_FAILED_CertificateNotAllowedAtThisEVSE = 24,
+	iso1responseCodeType_FAILED_CertificateRevoked = 25
+} iso1responseCodeType;
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,ServiceDetailReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ServiceID)',  derivedBy='EXTENSION'.  */
+struct iso1ServiceDetailReqType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ServiceID, urn:iso:15118:2:2013:MsgDataTypes,serviceIDType */
+	uint16_t ServiceID ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,RelativeTimeIntervalType',  base type name='IntervalType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":start,"urn:iso:15118:2:2013:MsgDataTypes":duration{0-1})',  derivedBy='EXTENSION'.  */
+struct iso1RelativeTimeIntervalType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":start, urn:iso:15118:2:2013:MsgDataTypes,#AnonType_startRelativeTimeIntervalType */
+	uint32_t start ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":duration, urn:iso:15118:2:2013:MsgDataTypes,#AnonType_durationRelativeTimeIntervalType */
+	uint32_t duration ;
+	unsigned int duration_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,EMAIDType',  base type name='eMAIDType',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+#define iso1EMAIDType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1EMAIDType_CONTENT_CHARACTERS_SIZE 50 + EXTRA_CHAR
+struct iso1EMAIDType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso1EMAIDType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	/* simple content: urn:iso:15118:2:2013:MsgDataTypes,eMAIDType */
+	struct {
+		exi_string_character_t characters[iso1EMAIDType_CONTENT_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  CONTENT ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,EVStatusType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+struct iso1EVStatusType {
+	int noContent; /* avoid warning */
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,EVSEChargeParameterType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+struct iso1EVSEChargeParameterType {
+	int noContent; /* avoid warning */
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,EVPowerDeliveryParameterType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+struct iso1EVPowerDeliveryParameterType {
+	int noContent; /* avoid warning */
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,AuthorizationReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":GenChallenge{0-1})',  derivedBy='EXTENSION'.  */
+#define iso1AuthorizationReqType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1AuthorizationReqType_GenChallenge_BYTES_SIZE 16 /* XML schema facet length for urn:iso:15118:2:2013:MsgDataTypes,genChallengeType is 16 */
+struct iso1AuthorizationReqType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso1AuthorizationReqType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":GenChallenge, urn:iso:15118:2:2013:MsgDataTypes,genChallengeType */
+	struct {
+		uint8_t bytes[iso1AuthorizationReqType_GenChallenge_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  GenChallenge ;
+	unsigned int GenChallenge_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,MeterInfoType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":MeterID,"urn:iso:15118:2:2013:MsgDataTypes":MeterReading{0-1},"urn:iso:15118:2:2013:MsgDataTypes":SigMeterReading{0-1},"urn:iso:15118:2:2013:MsgDataTypes":MeterStatus{0-1},"urn:iso:15118:2:2013:MsgDataTypes":TMeter{0-1})',  derivedBy='RESTRICTION'.  */
+#define iso1MeterInfoType_MeterID_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,meterIDType is 32 */
+#define iso1MeterInfoType_SigMeterReading_BYTES_SIZE 64 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,sigMeterReadingType is 64 */
+struct iso1MeterInfoType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":MeterID, urn:iso:15118:2:2013:MsgDataTypes,meterIDType */
+	struct {
+		exi_string_character_t characters[iso1MeterInfoType_MeterID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  MeterID ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":MeterReading, http://www.w3.org/2001/XMLSchema,unsignedLong */
+	uint64_t MeterReading ;
+	unsigned int MeterReading_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":SigMeterReading, urn:iso:15118:2:2013:MsgDataTypes,sigMeterReadingType */
+	struct {
+		uint8_t bytes[iso1MeterInfoType_SigMeterReading_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  SigMeterReading ;
+	unsigned int SigMeterReading_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":MeterStatus, urn:iso:15118:2:2013:MsgDataTypes,meterStatusType */
+	int16_t MeterStatus ;
+	unsigned int MeterStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":TMeter, http://www.w3.org/2001/XMLSchema,long */
+	int64_t TMeter ;
+	unsigned int TMeter_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,ObjectType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##any])){0-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define iso1ObjectType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1ObjectType_MimeType_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1ObjectType_Encoding_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1ObjectType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR
+struct iso1ObjectType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso1ObjectType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* attribute: MimeType {http://www.w3.org/2001/XMLSchema,string} */
+	struct {
+		exi_string_character_t characters[iso1ObjectType_MimeType_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  MimeType ;
+	unsigned int MimeType_isUsed:1;
+	/* attribute: Encoding {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[iso1ObjectType_Encoding_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Encoding ;
+	unsigned int Encoding_isUsed:1;
+	/* element: WC[##any] */
+	struct {
+		exi_string_character_t characters[iso1ObjectType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,RSAKeyValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Modulus,"http://www.w3.org/2000/09/xmldsig#":Exponent)',  derivedBy='RESTRICTION'.  */
+#define iso1RSAKeyValueType_Modulus_BYTES_SIZE 350
+#define iso1RSAKeyValueType_Exponent_BYTES_SIZE 350
+struct iso1RSAKeyValueType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Modulus, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[iso1RSAKeyValueType_Modulus_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Modulus ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Exponent, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[iso1RSAKeyValueType_Exponent_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Exponent ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,SessionStopResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode)',  derivedBy='EXTENSION'.  */
+struct iso1SessionStopResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	iso1responseCodeType ResponseCode ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureValueType',  base type name='base64Binary',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+#define iso1SignatureValueType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1SignatureValueType_CONTENT_BYTES_SIZE 350
+struct iso1SignatureValueType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso1SignatureValueType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* simple content: http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		uint8_t bytes[iso1SignatureValueType_CONTENT_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  CONTENT ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SubCertificatesType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Certificate{1-4})',  derivedBy='RESTRICTION'.  */
+#define iso1SubCertificatesType_Certificate_BYTES_SIZE 800 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,certificateType is 800 */
+#define iso1SubCertificatesType_Certificate_ARRAY_SIZE 4
+struct iso1SubCertificatesType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":Certificate, urn:iso:15118:2:2013:MsgDataTypes,certificateType */
+	struct {
+		struct {
+		uint8_t bytes[iso1SubCertificatesType_Certificate_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  array[iso1SubCertificatesType_Certificate_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Certificate;
+};
+
+typedef enum {
+	iso1faultCodeType_ParsingError = 0,
+	iso1faultCodeType_NoTLSRootCertificatAvailable = 1,
+	iso1faultCodeType_UnknownError = 2
+} iso1faultCodeType;
+
+typedef enum {
+	iso1DC_EVSEStatusCodeType_EVSE_NotReady = 0,
+	iso1DC_EVSEStatusCodeType_EVSE_Ready = 1,
+	iso1DC_EVSEStatusCodeType_EVSE_Shutdown = 2,
+	iso1DC_EVSEStatusCodeType_EVSE_UtilityInterruptEvent = 3,
+	iso1DC_EVSEStatusCodeType_EVSE_IsolationMonitoringActive = 4,
+	iso1DC_EVSEStatusCodeType_EVSE_EmergencyShutdown = 5,
+	iso1DC_EVSEStatusCodeType_EVSE_Malfunction = 6,
+	iso1DC_EVSEStatusCodeType_Reserved_8 = 7,
+	iso1DC_EVSEStatusCodeType_Reserved_9 = 8,
+	iso1DC_EVSEStatusCodeType_Reserved_A = 9,
+	iso1DC_EVSEStatusCodeType_Reserved_B = 10,
+	iso1DC_EVSEStatusCodeType_Reserved_C = 11
+} iso1DC_EVSEStatusCodeType;
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,DSAKeyValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":P,"http://www.w3.org/2000/09/xmldsig#":Q){0-1},"http://www.w3.org/2000/09/xmldsig#":G{0-1},"http://www.w3.org/2000/09/xmldsig#":Y,"http://www.w3.org/2000/09/xmldsig#":J{0-1},("http://www.w3.org/2000/09/xmldsig#":Seed,"http://www.w3.org/2000/09/xmldsig#":PgenCounter){0-1})',  derivedBy='RESTRICTION'.  */
+#define iso1DSAKeyValueType_P_BYTES_SIZE 350
+#define iso1DSAKeyValueType_Q_BYTES_SIZE 350
+#define iso1DSAKeyValueType_G_BYTES_SIZE 350
+#define iso1DSAKeyValueType_Y_BYTES_SIZE 350
+#define iso1DSAKeyValueType_J_BYTES_SIZE 350
+#define iso1DSAKeyValueType_Seed_BYTES_SIZE 350
+#define iso1DSAKeyValueType_PgenCounter_BYTES_SIZE 350
+struct iso1DSAKeyValueType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":P, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[iso1DSAKeyValueType_P_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  P ;
+	unsigned int P_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Q, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[iso1DSAKeyValueType_Q_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Q ;
+	unsigned int Q_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":G, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[iso1DSAKeyValueType_G_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  G ;
+	unsigned int G_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Y, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[iso1DSAKeyValueType_Y_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Y ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":J, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[iso1DSAKeyValueType_J_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  J ;
+	unsigned int J_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Seed, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[iso1DSAKeyValueType_Seed_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Seed ;
+	unsigned int Seed_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":PgenCounter, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[iso1DSAKeyValueType_PgenCounter_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  PgenCounter ;
+	unsigned int PgenCounter_isUsed:1;
+};
+
+typedef enum {
+	iso1EVSEProcessingType_Finished = 0,
+	iso1EVSEProcessingType_Ongoing = 1,
+	iso1EVSEProcessingType_Ongoing_WaitingForCustomerInteraction = 2
+} iso1EVSEProcessingType;
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,IntervalType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+struct iso1IntervalType {
+	int noContent; /* avoid warning */
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,MeteringReceiptReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":SessionID,"urn:iso:15118:2:2013:MsgBody":SAScheduleTupleID{0-1},"urn:iso:15118:2:2013:MsgBody":MeterInfo)',  derivedBy='EXTENSION'.  */
+#define iso1MeteringReceiptReqType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1MeteringReceiptReqType_SessionID_BYTES_SIZE 8 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,sessionIDType is 8 */
+struct iso1MeteringReceiptReqType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso1MeteringReceiptReqType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":SessionID, urn:iso:15118:2:2013:MsgDataTypes,sessionIDType */
+	struct {
+		uint8_t bytes[iso1MeteringReceiptReqType_SessionID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  SessionID ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":SAScheduleTupleID, urn:iso:15118:2:2013:MsgDataTypes,SAIDType */
+	uint8_t SAScheduleTupleID ;
+	unsigned int SAScheduleTupleID_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":MeterInfo, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,MeterInfoType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":MeterID,"urn:iso:15118:2:2013:MsgDataTypes":MeterReading{0-1},"urn:iso:15118:2:2013:MsgDataTypes":SigMeterReading{0-1},"urn:iso:15118:2:2013:MsgDataTypes":MeterStatus{0-1},"urn:iso:15118:2:2013:MsgDataTypes":TMeter{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso1MeterInfoType MeterInfo ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,KeyValueType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":DSAKeyValue|"http://www.w3.org/2000/09/xmldsig#":RSAKeyValue|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]))',  derivedBy='RESTRICTION'.  */
+#define iso1KeyValueType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR
+struct iso1KeyValueType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":DSAKeyValue, Complex type name='http://www.w3.org/2000/09/xmldsig#,DSAKeyValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":P,"http://www.w3.org/2000/09/xmldsig#":Q){0-1},"http://www.w3.org/2000/09/xmldsig#":G{0-1},"http://www.w3.org/2000/09/xmldsig#":Y,"http://www.w3.org/2000/09/xmldsig#":J{0-1},("http://www.w3.org/2000/09/xmldsig#":Seed,"http://www.w3.org/2000/09/xmldsig#":PgenCounter){0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso1DSAKeyValueType DSAKeyValue ;
+	unsigned int DSAKeyValue_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":RSAKeyValue, Complex type name='http://www.w3.org/2000/09/xmldsig#,RSAKeyValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Modulus,"http://www.w3.org/2000/09/xmldsig#":Exponent)',  derivedBy='RESTRICTION'.  */
+	struct iso1RSAKeyValueType RSAKeyValue ;
+	unsigned int RSAKeyValue_isUsed:1;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[iso1KeyValueType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,X509IssuerSerialType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":X509IssuerName,"http://www.w3.org/2000/09/xmldsig#":X509SerialNumber)',  derivedBy='RESTRICTION'.  */
+#define iso1X509IssuerSerialType_X509IssuerName_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1X509IssuerSerialType_X509SerialNumber_BYTES_SIZE 20
+struct iso1X509IssuerSerialType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509IssuerName, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		exi_string_character_t characters[iso1X509IssuerSerialType_X509IssuerName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  X509IssuerName ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509SerialNumber, http://www.w3.org/2001/XMLSchema,integer */
+	/* int64_t X509SerialNumber; */
+	struct {
+		/** a sign value */
+		int negative;
+		/* container size */
+		/* size_t size; iso1X509IssuerSerialType_X509SerialNumber_BYTES_SIZE */
+		/** array data container */
+		/* For negative values, the Unsigned Integer holds the
+		 * magnitude of the value minus 1 */
+		uint8_t data[iso1X509IssuerSerialType_X509SerialNumber_BYTES_SIZE];
+		/** array length (len <= size) */
+		size_t len;
+	} X509SerialNumber;
+};
+
+typedef enum {
+	iso1chargingSessionType_Terminate = 0,
+	iso1chargingSessionType_Pause = 1
+} iso1chargingSessionType;
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+struct iso1EVSEStatusType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay, http://www.w3.org/2001/XMLSchema,unsignedShort */
+	uint16_t NotificationMaxDelay ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSENotification, urn:iso:15118:2:2013:MsgDataTypes,EVSENotificationType */
+	iso1EVSENotificationType EVSENotification ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":HMACOutputLength{0-1},(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define iso1SignatureMethodType_Algorithm_CHARACTERS_SIZE 65 + EXTRA_CHAR
+#define iso1SignatureMethodType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR
+struct iso1SignatureMethodType {
+	/* attribute: Algorithm {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[iso1SignatureMethodType_Algorithm_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Algorithm ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":HMACOutputLength, http://www.w3.org/2000/09/xmldsig#,HMACOutputLengthType */
+	int64_t HMACOutputLength ;
+	unsigned int HMACOutputLength_isUsed:1;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[iso1SignatureMethodType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,X509DataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":X509IssuerSerial|"http://www.w3.org/2000/09/xmldsig#":X509SKI|"http://www.w3.org/2000/09/xmldsig#":X509SubjectName|"http://www.w3.org/2000/09/xmldsig#":X509Certificate|"http://www.w3.org/2000/09/xmldsig#":X509CRL|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]))){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define iso1X509DataType_X509IssuerSerial_ARRAY_SIZE 1
+#define iso1X509DataType_X509SKI_BYTES_SIZE 350
+#define iso1X509DataType_X509SKI_ARRAY_SIZE 1
+#define iso1X509DataType_X509SubjectName_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1X509DataType_X509SubjectName_ARRAY_SIZE 1
+#define iso1X509DataType_X509Certificate_BYTES_SIZE 350
+#define iso1X509DataType_X509Certificate_ARRAY_SIZE 1
+#define iso1X509DataType_X509CRL_BYTES_SIZE 350
+#define iso1X509DataType_X509CRL_ARRAY_SIZE 1
+#define iso1X509DataType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR
+struct iso1X509DataType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509IssuerSerial, Complex type name='http://www.w3.org/2000/09/xmldsig#,X509IssuerSerialType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":X509IssuerName,"http://www.w3.org/2000/09/xmldsig#":X509SerialNumber)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso1X509IssuerSerialType array[iso1X509DataType_X509IssuerSerial_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509IssuerSerial;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509SKI, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		struct {
+			uint8_t bytes[iso1X509DataType_X509SKI_BYTES_SIZE];
+			uint16_t bytesLen;
+		}  array[iso1X509DataType_X509SKI_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509SKI;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509SubjectName, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		struct {
+			exi_string_character_t characters[iso1X509DataType_X509SubjectName_CHARACTERS_SIZE];
+			uint16_t charactersLen;
+		}  array[iso1X509DataType_X509SubjectName_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509SubjectName;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509Certificate, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		struct {
+			uint8_t bytes[iso1X509DataType_X509Certificate_BYTES_SIZE];
+			uint16_t bytesLen;
+		}  array[iso1X509DataType_X509Certificate_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509Certificate;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509CRL, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		struct {
+			uint8_t bytes[iso1X509DataType_X509CRL_BYTES_SIZE];
+			uint16_t bytesLen;
+		}  array[iso1X509DataType_X509CRL_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509CRL;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[iso1X509DataType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+typedef enum {
+	iso1serviceCategoryType_EVCharging = 0,
+	iso1serviceCategoryType_Internet = 1,
+	iso1serviceCategoryType_ContractCertificate = 2,
+	iso1serviceCategoryType_OtherCustom = 3
+} iso1serviceCategoryType;
+
+typedef enum {
+	iso1paymentOptionType_Contract = 0,
+	iso1paymentOptionType_ExternalPayment = 1
+} iso1paymentOptionType;
+
+typedef enum {
+	iso1EnergyTransferModeType_AC_single_phase_core = 0,
+	iso1EnergyTransferModeType_AC_three_phase_core = 1,
+	iso1EnergyTransferModeType_DC_core = 2,
+	iso1EnergyTransferModeType_DC_extended = 3,
+	iso1EnergyTransferModeType_DC_combo_core = 4,
+	iso1EnergyTransferModeType_DC_unique = 5
+} iso1EnergyTransferModeType;
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,NotificationType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":FaultCode,"urn:iso:15118:2:2013:MsgDataTypes":FaultMsg{0-1})',  derivedBy='RESTRICTION'.  */
+#define iso1NotificationType_FaultMsg_CHARACTERS_SIZE 64 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,faultMsgType is 64 */
+struct iso1NotificationType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":FaultCode, urn:iso:15118:2:2013:MsgDataTypes,faultCodeType */
+	iso1faultCodeType FaultCode ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":FaultMsg, urn:iso:15118:2:2013:MsgDataTypes,faultMsgType */
+	struct {
+		exi_string_character_t characters[iso1NotificationType_FaultMsg_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  FaultMsg ;
+	unsigned int FaultMsg_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"])|"http://www.w3.org/2000/09/xmldsig#":XPath){0-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define iso1TransformType_Algorithm_CHARACTERS_SIZE 65 + EXTRA_CHAR
+#define iso1TransformType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1TransformType_XPath_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1TransformType_XPath_ARRAY_SIZE 1
+struct iso1TransformType {
+	/* attribute: Algorithm {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[iso1TransformType_Algorithm_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Algorithm ;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[iso1TransformType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":XPath, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		struct {
+			exi_string_character_t characters[iso1TransformType_XPath_CHARACTERS_SIZE];
+			uint16_t charactersLen;
+		}  array[iso1TransformType_XPath_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} XPath;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,PaymentDetailsResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":GenChallenge,"urn:iso:15118:2:2013:MsgBody":EVSETimeStamp)',  derivedBy='EXTENSION'.  */
+#define iso1PaymentDetailsResType_GenChallenge_BYTES_SIZE 16 /* XML schema facet length for urn:iso:15118:2:2013:MsgDataTypes,genChallengeType is 16 */
+struct iso1PaymentDetailsResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	iso1responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":GenChallenge, urn:iso:15118:2:2013:MsgDataTypes,genChallengeType */
+	struct {
+		uint8_t bytes[iso1PaymentDetailsResType_GenChallenge_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  GenChallenge ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSETimeStamp, http://www.w3.org/2001/XMLSchema,long */
+	int64_t EVSETimeStamp ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ContractSignatureEncryptedPrivateKeyType',  base type name='privateKeyType',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+#define iso1ContractSignatureEncryptedPrivateKeyType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1ContractSignatureEncryptedPrivateKeyType_CONTENT_BYTES_SIZE 350
+struct iso1ContractSignatureEncryptedPrivateKeyType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso1ContractSignatureEncryptedPrivateKeyType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	/* simple content: urn:iso:15118:2:2013:MsgDataTypes,privateKeyType */
+	struct {
+		uint8_t bytes[iso1ContractSignatureEncryptedPrivateKeyType_CONTENT_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  CONTENT ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SPKIDataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":SPKISexp,(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-1}){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define iso1SPKIDataType_SPKISexp_BYTES_SIZE 350
+#define iso1SPKIDataType_SPKISexp_ARRAY_SIZE 1
+#define iso1SPKIDataType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR
+struct iso1SPKIDataType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SPKISexp, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		struct {
+			uint8_t bytes[iso1SPKIDataType_SPKISexp_BYTES_SIZE];
+			uint16_t bytesLen;
+		}  array[iso1SPKIDataType_SPKISexp_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SPKISexp;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[iso1SPKIDataType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,SessionStopReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ChargingSession)',  derivedBy='EXTENSION'.  */
+struct iso1SessionStopReqType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ChargingSession, urn:iso:15118:2:2013:MsgDataTypes,chargingSessionType */
+	iso1chargingSessionType ChargingSession ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,EntryType',  base type name='anyType',  content type='ELEMENT',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":TimeInterval)',  derivedBy='RESTRICTION'.  */
+struct iso1EntryType {
+	/* substitutionGroup */
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	union {
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */
+		/* element: "urn:iso:15118:2:2013:MsgDataTypes":TimeInterval, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,IntervalType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+		struct iso1IntervalType TimeInterval ;
+		/* element: "urn:iso:15118:2:2013:MsgDataTypes":RelativeTimeInterval, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,RelativeTimeIntervalType',  base type name='IntervalType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":start,"urn:iso:15118:2:2013:MsgDataTypes":duration{0-1})',  derivedBy='EXTENSION'.  */
+		struct iso1RelativeTimeIntervalType RelativeTimeInterval ;
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	};
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */
+		unsigned int TimeInterval_isUsed:1;
+		unsigned int RelativeTimeInterval_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,SessionSetupReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":EVCCID)',  derivedBy='EXTENSION'.  */
+#define iso1SessionSetupReqType_EVCCID_BYTES_SIZE 6 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,evccIDType is 6 */
+struct iso1SessionSetupReqType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVCCID, urn:iso:15118:2:2013:MsgDataTypes,evccIDType */
+	struct {
+		uint8_t bytes[iso1SessionSetupReqType_EVCCID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  EVCCID ;
+};
+
+typedef enum {
+	iso1isolationLevelType_Invalid = 0,
+	iso1isolationLevelType_Valid = 1,
+	iso1isolationLevelType_Warning = 2,
+	iso1isolationLevelType_Fault = 3,
+	iso1isolationLevelType_No_IMD = 4
+} iso1isolationLevelType;
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,CanonicalizationMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##any]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define iso1CanonicalizationMethodType_Algorithm_CHARACTERS_SIZE 65 + EXTRA_CHAR
+#define iso1CanonicalizationMethodType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR
+struct iso1CanonicalizationMethodType {
+	/* attribute: Algorithm {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[iso1CanonicalizationMethodType_Algorithm_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Algorithm ;
+	/* element: WC[##any] */
+	struct {
+		exi_string_character_t characters[iso1CanonicalizationMethodType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVStatusType',  base type name='EVStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":EVReady,"urn:iso:15118:2:2013:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2013:MsgDataTypes":EVRESSSOC)',  derivedBy='EXTENSION'.  */
+struct iso1DC_EVStatusType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVReady, http://www.w3.org/2001/XMLSchema,boolean */
+	int EVReady ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVErrorCode, urn:iso:15118:2:2013:MsgDataTypes,DC_EVErrorCodeType */
+	iso1DC_EVErrorCodeType EVErrorCode ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVRESSSOC, urn:iso:15118:2:2013:MsgDataTypes,percentValueType */
+	int8_t EVRESSSOC ;
+};
+
+typedef enum {
+	iso1costKindType_relativePricePercentage = 0,
+	iso1costKindType_RenewableGenerationPercentage = 1,
+	iso1costKindType_CarbonDioxideEmission = 2
+} iso1costKindType;
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ServiceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":ServiceID,"urn:iso:15118:2:2013:MsgDataTypes":ServiceName{0-1},"urn:iso:15118:2:2013:MsgDataTypes":ServiceCategory,"urn:iso:15118:2:2013:MsgDataTypes":ServiceScope{0-1},"urn:iso:15118:2:2013:MsgDataTypes":FreeService)',  derivedBy='RESTRICTION'.  */
+#define iso1ServiceType_ServiceName_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,serviceNameType is 32 */
+#define iso1ServiceType_ServiceScope_CHARACTERS_SIZE 64 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,serviceScopeType is 64 */
+struct iso1ServiceType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ServiceID, urn:iso:15118:2:2013:MsgDataTypes,serviceIDType */
+	uint16_t ServiceID ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ServiceName, urn:iso:15118:2:2013:MsgDataTypes,serviceNameType */
+	struct {
+		exi_string_character_t characters[iso1ServiceType_ServiceName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ServiceName ;
+	unsigned int ServiceName_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ServiceCategory, urn:iso:15118:2:2013:MsgDataTypes,serviceCategoryType */
+	iso1serviceCategoryType ServiceCategory ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ServiceScope, urn:iso:15118:2:2013:MsgDataTypes,serviceScopeType */
+	struct {
+		exi_string_character_t characters[iso1ServiceType_ServiceScope_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ServiceScope ;
+	unsigned int ServiceScope_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":FreeService, http://www.w3.org/2001/XMLSchema,boolean */
+	int FreeService ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,ServiceDiscoveryReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ServiceScope{0-1},"urn:iso:15118:2:2013:MsgBody":ServiceCategory{0-1})',  derivedBy='EXTENSION'.  */
+#define iso1ServiceDiscoveryReqType_ServiceScope_CHARACTERS_SIZE 64 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,serviceScopeType is 64 */
+struct iso1ServiceDiscoveryReqType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ServiceScope, urn:iso:15118:2:2013:MsgDataTypes,serviceScopeType */
+	struct {
+		exi_string_character_t characters[iso1ServiceDiscoveryReqType_ServiceScope_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ServiceScope ;
+	unsigned int ServiceScope_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ServiceCategory, urn:iso:15118:2:2013:MsgDataTypes,serviceCategoryType */
+	iso1serviceCategoryType ServiceCategory ;
+	unsigned int ServiceCategory_isUsed:1;
+};
+
+typedef enum {
+	iso1chargeProgressType_Start = 0,
+	iso1chargeProgressType_Stop = 1,
+	iso1chargeProgressType_Renegotiate = 2
+} iso1chargeProgressType;
+
+typedef enum {
+	iso1valueType_bool = 0,
+	iso1valueType_byte = 1,
+	iso1valueType_short = 2,
+	iso1valueType_int = 3,
+	iso1valueType_physicalValue = 4,
+	iso1valueType_string = 5
+} iso1valueType;
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,CableCheckReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":DC_EVStatus)',  derivedBy='EXTENSION'.  */
+struct iso1CableCheckReqType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":DC_EVStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVStatusType',  base type name='EVStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":EVReady,"urn:iso:15118:2:2013:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2013:MsgDataTypes":EVRESSSOC)',  derivedBy='EXTENSION'.  */
+	struct iso1DC_EVStatusType DC_EVStatus ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SelectedServiceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":ServiceID,"urn:iso:15118:2:2013:MsgDataTypes":ParameterSetID{0-1})',  derivedBy='RESTRICTION'.  */
+struct iso1SelectedServiceType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ServiceID, urn:iso:15118:2:2013:MsgDataTypes,serviceIDType */
+	uint16_t ServiceID ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ParameterSetID, http://www.w3.org/2001/XMLSchema,short */
+	int16_t ParameterSetID ;
+	unsigned int ParameterSetID_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,AC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification),("urn:iso:15118:2:2013:MsgDataTypes":RCD))',  derivedBy='EXTENSION'.  */
+struct iso1AC_EVSEStatusType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay, http://www.w3.org/2001/XMLSchema,unsignedShort */
+	uint16_t NotificationMaxDelay ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSENotification, urn:iso:15118:2:2013:MsgDataTypes,EVSENotificationType */
+	iso1EVSENotificationType EVSENotification ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":RCD, http://www.w3.org/2001/XMLSchema,boolean */
+	int RCD ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,BodyBaseType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+struct iso1BodyBaseType {
+	int noContent; /* avoid warning */
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SupportedEnergyTransferModeType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":EnergyTransferMode{1-6})',  derivedBy='RESTRICTION'.  */
+#define iso1SupportedEnergyTransferModeType_EnergyTransferMode_ARRAY_SIZE 6
+struct iso1SupportedEnergyTransferModeType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EnergyTransferMode, urn:iso:15118:2:2013:MsgDataTypes,EnergyTransferModeType */
+	struct {
+		iso1EnergyTransferModeType array[iso1SupportedEnergyTransferModeType_EnergyTransferMode_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} EnergyTransferMode;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,ChargingStatusReqType',  base type name='BodyBaseType',  content type='EMPTY',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+struct iso1ChargingStatusReqType {
+	int noContent; /* avoid warning */
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,PaymentServiceSelectionResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode)',  derivedBy='EXTENSION'.  */
+struct iso1PaymentServiceSelectionResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	iso1responseCodeType ResponseCode ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,DigestMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define iso1DigestMethodType_Algorithm_CHARACTERS_SIZE 65 + EXTRA_CHAR
+#define iso1DigestMethodType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR
+struct iso1DigestMethodType {
+	/* attribute: Algorithm {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[iso1DigestMethodType_Algorithm_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Algorithm ;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[iso1DigestMethodType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignaturePropertyType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"])){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define iso1SignaturePropertyType_Target_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1SignaturePropertyType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1SignaturePropertyType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR
+struct iso1SignaturePropertyType {
+	/* attribute: Target {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[iso1SignaturePropertyType_Target_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Target ;
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso1SignaturePropertyType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[iso1SignaturePropertyType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+typedef enum {
+	iso1unitSymbolType_h = 0,
+	iso1unitSymbolType_m = 1,
+	iso1unitSymbolType_s = 2,
+	iso1unitSymbolType_A = 3,
+	iso1unitSymbolType_V = 4,
+	iso1unitSymbolType_W = 5,
+	iso1unitSymbolType_Wh = 6
+} iso1unitSymbolType;
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,PGPDataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":PGPKeyID,"http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket{0-1},(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})|("http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket,(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED}))',  derivedBy='RESTRICTION'.  */
+#define iso1PGPDataType_PGPKeyID_BYTES_SIZE 350
+#define iso1PGPDataType_PGPKeyPacket_BYTES_SIZE 350
+#define iso1PGPDataType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR
+struct iso1PGPDataType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":PGPKeyID, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		uint8_t bytes[iso1PGPDataType_PGPKeyID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  PGPKeyID ;
+	unsigned int PGPKeyID_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		uint8_t bytes[iso1PGPDataType_PGPKeyPacket_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  PGPKeyPacket ;
+	unsigned int PGPKeyPacket_isUsed:1;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[iso1PGPDataType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,SessionSetupResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":EVSEID,"urn:iso:15118:2:2013:MsgBody":EVSETimeStamp{0-1})',  derivedBy='EXTENSION'.  */
+#define iso1SessionSetupResType_EVSEID_CHARACTERS_SIZE 37 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,evseIDType is 37 */
+struct iso1SessionSetupResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	iso1responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEID, urn:iso:15118:2:2013:MsgDataTypes,evseIDType */
+	struct {
+		exi_string_character_t characters[iso1SessionSetupResType_EVSEID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  EVSEID ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSETimeStamp, http://www.w3.org/2001/XMLSchema,long */
+	int64_t EVSETimeStamp ;
+	unsigned int EVSETimeStamp_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,CertificateChainType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Certificate,"urn:iso:15118:2:2013:MsgDataTypes":SubCertificates{0-1})',  derivedBy='RESTRICTION'.  */
+#define iso1CertificateChainType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1CertificateChainType_Certificate_BYTES_SIZE 800 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,certificateType is 800 */
+struct iso1CertificateChainType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso1CertificateChainType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":Certificate, urn:iso:15118:2:2013:MsgDataTypes,certificateType */
+	struct {
+		uint8_t bytes[iso1CertificateChainType_Certificate_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Certificate ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":SubCertificates, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SubCertificatesType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Certificate{1-4})',  derivedBy='RESTRICTION'.  */
+	struct iso1SubCertificatesType SubCertificates ;
+	unsigned int SubCertificates_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification),("urn:iso:15118:2:2013:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVSEStatusCode))',  derivedBy='EXTENSION'.  */
+struct iso1DC_EVSEStatusType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay, http://www.w3.org/2001/XMLSchema,unsignedShort */
+	uint16_t NotificationMaxDelay ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSENotification, urn:iso:15118:2:2013:MsgDataTypes,EVSENotificationType */
+	iso1EVSENotificationType EVSENotification ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSEIsolationStatus, urn:iso:15118:2:2013:MsgDataTypes,isolationLevelType */
+	iso1isolationLevelType EVSEIsolationStatus ;
+	unsigned int EVSEIsolationStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSEStatusCode, urn:iso:15118:2:2013:MsgDataTypes,DC_EVSEStatusCodeType */
+	iso1DC_EVSEStatusCodeType EVSEStatusCode ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ServiceListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Service{1-8})',  derivedBy='RESTRICTION'.  */
+#define iso1ServiceListType_Service_ARRAY_SIZE 8
+struct iso1ServiceListType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":Service, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ServiceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":ServiceID,"urn:iso:15118:2:2013:MsgDataTypes":ServiceName{0-1},"urn:iso:15118:2:2013:MsgDataTypes":ServiceCategory,"urn:iso:15118:2:2013:MsgDataTypes":ServiceScope{0-1},"urn:iso:15118:2:2013:MsgDataTypes":FreeService)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso1ServiceType array[iso1ServiceListType_Service_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Service;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,PowerDeliveryResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgDataTypes":EVSEStatus)',  derivedBy='EXTENSION'.  */
+struct iso1PowerDeliveryResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	iso1responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSEStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso1EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":AC_EVSEStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,AC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification),("urn:iso:15118:2:2013:MsgDataTypes":RCD))',  derivedBy='EXTENSION'.  */
+	struct iso1AC_EVSEStatusType AC_EVSEStatus ;
+	unsigned int AC_EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":DC_EVSEStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification),("urn:iso:15118:2:2013:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVSEStatusCode))',  derivedBy='EXTENSION'.  */
+	struct iso1DC_EVSEStatusType DC_EVSEStatus ;
+	unsigned int DC_EVSEStatus_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PaymentOptionListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":PaymentOption{1-2})',  derivedBy='RESTRICTION'.  */
+#define iso1PaymentOptionListType_PaymentOption_ARRAY_SIZE 2
+struct iso1PaymentOptionListType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":PaymentOption, urn:iso:15118:2:2013:MsgDataTypes,paymentOptionType */
+	struct {
+		iso1paymentOptionType array[iso1PaymentOptionListType_PaymentOption_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} PaymentOption;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+struct iso1PhysicalValueType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":Multiplier, urn:iso:15118:2:2013:MsgDataTypes,unitMultiplierType */
+	int8_t Multiplier ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":Unit, urn:iso:15118:2:2013:MsgDataTypes,unitSymbolType */
+	iso1unitSymbolType Unit ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":Value, http://www.w3.org/2001/XMLSchema,short */
+	int16_t Value ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,PaymentDetailsReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":eMAID,"urn:iso:15118:2:2013:MsgBody":ContractSignatureCertChain)',  derivedBy='EXTENSION'.  */
+#define iso1PaymentDetailsReqType_eMAID_CHARACTERS_SIZE 15 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,eMAIDType is 15 */
+struct iso1PaymentDetailsReqType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":eMAID, urn:iso:15118:2:2013:MsgDataTypes,eMAIDType */
+	struct {
+		exi_string_character_t characters[iso1PaymentDetailsReqType_eMAID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  eMAID ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ContractSignatureCertChain, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,CertificateChainType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Certificate,"urn:iso:15118:2:2013:MsgDataTypes":SubCertificates{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso1CertificateChainType ContractSignatureCertChain ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,AuthorizationResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":EVSEProcessing)',  derivedBy='EXTENSION'.  */
+struct iso1AuthorizationResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	iso1responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEProcessing, urn:iso:15118:2:2013:MsgDataTypes,EVSEProcessingType */
+	iso1EVSEProcessingType EVSEProcessing ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVSEChargeParameterType',  base type name='EVSEChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":DC_EVSEStatus,"urn:iso:15118:2:2013:MsgDataTypes":EVSEMaximumCurrentLimit,"urn:iso:15118:2:2013:MsgDataTypes":EVSEMaximumPowerLimit,"urn:iso:15118:2:2013:MsgDataTypes":EVSEMaximumVoltageLimit,"urn:iso:15118:2:2013:MsgDataTypes":EVSEMinimumCurrentLimit,"urn:iso:15118:2:2013:MsgDataTypes":EVSEMinimumVoltageLimit,"urn:iso:15118:2:2013:MsgDataTypes":EVSECurrentRegulationTolerance{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVSEPeakCurrentRipple,"urn:iso:15118:2:2013:MsgDataTypes":EVSEEnergyToBeDelivered{0-1})',  derivedBy='EXTENSION'.  */
+struct iso1DC_EVSEChargeParameterType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":DC_EVSEStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification),("urn:iso:15118:2:2013:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVSEStatusCode))',  derivedBy='EXTENSION'.  */
+	struct iso1DC_EVSEStatusType DC_EVSEStatus ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSEMaximumCurrentLimit, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVSEMaximumCurrentLimit ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSEMaximumPowerLimit, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVSEMaximumPowerLimit ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSEMaximumVoltageLimit, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVSEMaximumVoltageLimit ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSEMinimumCurrentLimit, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVSEMinimumCurrentLimit ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSEMinimumVoltageLimit, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVSEMinimumVoltageLimit ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSECurrentRegulationTolerance, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVSECurrentRegulationTolerance ;
+	unsigned int EVSECurrentRegulationTolerance_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSEPeakCurrentRipple, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVSEPeakCurrentRipple ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSEEnergyToBeDelivered, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVSEEnergyToBeDelivered ;
+	unsigned int EVSEEnergyToBeDelivered_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,ChargingStatusResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":EVSEID,"urn:iso:15118:2:2013:MsgBody":SAScheduleTupleID,"urn:iso:15118:2:2013:MsgBody":EVSEMaxCurrent{0-1},"urn:iso:15118:2:2013:MsgBody":MeterInfo{0-1},"urn:iso:15118:2:2013:MsgBody":ReceiptRequired{0-1},"urn:iso:15118:2:2013:MsgBody":AC_EVSEStatus)',  derivedBy='EXTENSION'.  */
+#define iso1ChargingStatusResType_EVSEID_CHARACTERS_SIZE 37 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,evseIDType is 37 */
+struct iso1ChargingStatusResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	iso1responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEID, urn:iso:15118:2:2013:MsgDataTypes,evseIDType */
+	struct {
+		exi_string_character_t characters[iso1ChargingStatusResType_EVSEID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  EVSEID ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":SAScheduleTupleID, urn:iso:15118:2:2013:MsgDataTypes,SAIDType */
+	uint8_t SAScheduleTupleID ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEMaxCurrent, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVSEMaxCurrent ;
+	unsigned int EVSEMaxCurrent_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":MeterInfo, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,MeterInfoType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":MeterID,"urn:iso:15118:2:2013:MsgDataTypes":MeterReading{0-1},"urn:iso:15118:2:2013:MsgDataTypes":SigMeterReading{0-1},"urn:iso:15118:2:2013:MsgDataTypes":MeterStatus{0-1},"urn:iso:15118:2:2013:MsgDataTypes":TMeter{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso1MeterInfoType MeterInfo ;
+	unsigned int MeterInfo_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ReceiptRequired, http://www.w3.org/2001/XMLSchema,boolean */
+	int ReceiptRequired ;
+	unsigned int ReceiptRequired_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":AC_EVSEStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,AC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification),("urn:iso:15118:2:2013:MsgDataTypes":RCD))',  derivedBy='EXTENSION'.  */
+	struct iso1AC_EVSEStatusType AC_EVSEStatus ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ListOfRootCertificateIDsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":RootCertificateID{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define iso1ListOfRootCertificateIDsType_RootCertificateID_ARRAY_SIZE 5
+struct iso1ListOfRootCertificateIDsType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":RootCertificateID, Complex type name='http://www.w3.org/2000/09/xmldsig#,X509IssuerSerialType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":X509IssuerName,"http://www.w3.org/2000/09/xmldsig#":X509SerialNumber)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso1X509IssuerSerialType array[iso1ListOfRootCertificateIDsType_RootCertificateID_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} RootCertificateID;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ChargeServiceType',  base type name='ServiceType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":ServiceID,"urn:iso:15118:2:2013:MsgDataTypes":ServiceName{0-1},"urn:iso:15118:2:2013:MsgDataTypes":ServiceCategory,"urn:iso:15118:2:2013:MsgDataTypes":ServiceScope{0-1},"urn:iso:15118:2:2013:MsgDataTypes":FreeService),("urn:iso:15118:2:2013:MsgDataTypes":SupportedEnergyTransferMode))',  derivedBy='EXTENSION'.  */
+#define iso1ChargeServiceType_ServiceName_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,serviceNameType is 32 */
+#define iso1ChargeServiceType_ServiceScope_CHARACTERS_SIZE 64 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,serviceScopeType is 64 */
+struct iso1ChargeServiceType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ServiceID, urn:iso:15118:2:2013:MsgDataTypes,serviceIDType */
+	uint16_t ServiceID ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ServiceName, urn:iso:15118:2:2013:MsgDataTypes,serviceNameType */
+	struct {
+		exi_string_character_t characters[iso1ChargeServiceType_ServiceName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ServiceName ;
+	unsigned int ServiceName_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ServiceCategory, urn:iso:15118:2:2013:MsgDataTypes,serviceCategoryType */
+	iso1serviceCategoryType ServiceCategory ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ServiceScope, urn:iso:15118:2:2013:MsgDataTypes,serviceScopeType */
+	struct {
+		exi_string_character_t characters[iso1ChargeServiceType_ServiceScope_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ServiceScope ;
+	unsigned int ServiceScope_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":FreeService, http://www.w3.org/2001/XMLSchema,boolean */
+	int FreeService ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":SupportedEnergyTransferMode, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SupportedEnergyTransferModeType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":EnergyTransferMode{1-6})',  derivedBy='RESTRICTION'.  */
+	struct iso1SupportedEnergyTransferModeType SupportedEnergyTransferMode ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SelectedServiceListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":SelectedService{1-16})',  derivedBy='RESTRICTION'.  */
+#define iso1SelectedServiceListType_SelectedService_ARRAY_SIZE 16
+struct iso1SelectedServiceListType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":SelectedService, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SelectedServiceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":ServiceID,"urn:iso:15118:2:2013:MsgDataTypes":ParameterSetID{0-1})',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso1SelectedServiceType array[iso1SelectedServiceListType_SelectedService_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SelectedService;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,CableCheckResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2013:MsgBody":EVSEProcessing)',  derivedBy='EXTENSION'.  */
+struct iso1CableCheckResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	iso1responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":DC_EVSEStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification),("urn:iso:15118:2:2013:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVSEStatusCode))',  derivedBy='EXTENSION'.  */
+	struct iso1DC_EVSEStatusType DC_EVSEStatus ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEProcessing, urn:iso:15118:2:2013:MsgDataTypes,EVSEProcessingType */
+	iso1EVSEProcessingType EVSEProcessing ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transform{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define iso1TransformsType_Transform_ARRAY_SIZE 1
+struct iso1TransformsType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Transform, Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"])|"http://www.w3.org/2000/09/xmldsig#":XPath){0-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso1TransformType array[iso1TransformsType_Transform_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Transform;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,PreChargeReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":DC_EVStatus,"urn:iso:15118:2:2013:MsgBody":EVTargetVoltage,"urn:iso:15118:2:2013:MsgBody":EVTargetCurrent)',  derivedBy='EXTENSION'.  */
+struct iso1PreChargeReqType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":DC_EVStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVStatusType',  base type name='EVStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":EVReady,"urn:iso:15118:2:2013:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2013:MsgDataTypes":EVRESSSOC)',  derivedBy='EXTENSION'.  */
+	struct iso1DC_EVStatusType DC_EVStatus ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVTargetVoltage, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVTargetVoltage ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVTargetCurrent, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVTargetCurrent ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,AC_EVChargeParameterType',  base type name='EVChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":DepartureTime{0-1}),("urn:iso:15118:2:2013:MsgDataTypes":EAmount,"urn:iso:15118:2:2013:MsgDataTypes":EVMaxVoltage,"urn:iso:15118:2:2013:MsgDataTypes":EVMaxCurrent,"urn:iso:15118:2:2013:MsgDataTypes":EVMinCurrent))',  derivedBy='EXTENSION'.  */
+struct iso1AC_EVChargeParameterType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":DepartureTime, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t DepartureTime ;
+	unsigned int DepartureTime_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EAmount, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EAmount ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVMaxVoltage, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVMaxVoltage ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVMaxCurrent, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVMaxCurrent ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVMinCurrent, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVMinCurrent ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PMaxScheduleEntryType',  base type name='EntryType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":TimeInterval),("urn:iso:15118:2:2013:MsgDataTypes":PMax))',  derivedBy='EXTENSION'.  */
+struct iso1PMaxScheduleEntryType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":TimeInterval, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,IntervalType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+	struct iso1IntervalType TimeInterval ;
+	unsigned int TimeInterval_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":RelativeTimeInterval, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,RelativeTimeIntervalType',  base type name='IntervalType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":start,"urn:iso:15118:2:2013:MsgDataTypes":duration{0-1})',  derivedBy='EXTENSION'.  */
+	struct iso1RelativeTimeIntervalType RelativeTimeInterval ;
+	unsigned int RelativeTimeInterval_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":PMax, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType PMax ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,MeteringReceiptResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgDataTypes":EVSEStatus)',  derivedBy='EXTENSION'.  */
+struct iso1MeteringReceiptResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	iso1responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSEStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso1EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":AC_EVSEStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,AC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification),("urn:iso:15118:2:2013:MsgDataTypes":RCD))',  derivedBy='EXTENSION'.  */
+	struct iso1AC_EVSEStatusType AC_EVSEStatus ;
+	unsigned int AC_EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":DC_EVSEStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification),("urn:iso:15118:2:2013:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVSEStatusCode))',  derivedBy='EXTENSION'.  */
+	struct iso1DC_EVSEStatusType DC_EVSEStatus ;
+	unsigned int DC_EVSEStatus_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,WeldingDetectionResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2013:MsgBody":EVSEPresentVoltage)',  derivedBy='EXTENSION'.  */
+struct iso1WeldingDetectionResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	iso1responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":DC_EVSEStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification),("urn:iso:15118:2:2013:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVSEStatusCode))',  derivedBy='EXTENSION'.  */
+	struct iso1DC_EVSEStatusType DC_EVSEStatus ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEPresentVoltage, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVSEPresentVoltage ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,ReferenceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1},"http://www.w3.org/2000/09/xmldsig#":DigestMethod,"http://www.w3.org/2000/09/xmldsig#":DigestValue)',  derivedBy='RESTRICTION'.  */
+#define iso1ReferenceType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1ReferenceType_URI_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1ReferenceType_Type_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1ReferenceType_DigestValue_BYTES_SIZE 350
+struct iso1ReferenceType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso1ReferenceType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* attribute: URI {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[iso1ReferenceType_URI_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  URI ;
+	unsigned int URI_isUsed:1;
+	/* attribute: Type {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[iso1ReferenceType_Type_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Type ;
+	unsigned int Type_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Transforms, Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transform{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct iso1TransformsType Transforms ;
+	unsigned int Transforms_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":DigestMethod, Complex type name='http://www.w3.org/2000/09/xmldsig#,DigestMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct iso1DigestMethodType DigestMethod ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":DigestValue, http://www.w3.org/2000/09/xmldsig#,DigestValueType */
+	struct {
+		uint8_t bytes[iso1ReferenceType_DigestValue_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  DigestValue ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,CurrentDemandReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":DC_EVStatus,"urn:iso:15118:2:2013:MsgBody":EVTargetCurrent,"urn:iso:15118:2:2013:MsgBody":EVMaximumVoltageLimit{0-1},"urn:iso:15118:2:2013:MsgBody":EVMaximumCurrentLimit{0-1},"urn:iso:15118:2:2013:MsgBody":EVMaximumPowerLimit{0-1},"urn:iso:15118:2:2013:MsgBody":BulkChargingComplete{0-1},"urn:iso:15118:2:2013:MsgBody":ChargingComplete,"urn:iso:15118:2:2013:MsgBody":RemainingTimeToFullSoC{0-1},"urn:iso:15118:2:2013:MsgBody":RemainingTimeToBulkSoC{0-1},"urn:iso:15118:2:2013:MsgBody":EVTargetVoltage)',  derivedBy='EXTENSION'.  */
+struct iso1CurrentDemandReqType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":DC_EVStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVStatusType',  base type name='EVStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":EVReady,"urn:iso:15118:2:2013:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2013:MsgDataTypes":EVRESSSOC)',  derivedBy='EXTENSION'.  */
+	struct iso1DC_EVStatusType DC_EVStatus ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVTargetCurrent, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVTargetCurrent ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVMaximumVoltageLimit, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVMaximumVoltageLimit ;
+	unsigned int EVMaximumVoltageLimit_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVMaximumCurrentLimit, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVMaximumCurrentLimit ;
+	unsigned int EVMaximumCurrentLimit_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVMaximumPowerLimit, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVMaximumPowerLimit ;
+	unsigned int EVMaximumPowerLimit_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":BulkChargingComplete, http://www.w3.org/2001/XMLSchema,boolean */
+	int BulkChargingComplete ;
+	unsigned int BulkChargingComplete_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ChargingComplete, http://www.w3.org/2001/XMLSchema,boolean */
+	int ChargingComplete ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":RemainingTimeToFullSoC, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType RemainingTimeToFullSoC ;
+	unsigned int RemainingTimeToFullSoC_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":RemainingTimeToBulkSoC, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType RemainingTimeToBulkSoC ;
+	unsigned int RemainingTimeToBulkSoC_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVTargetVoltage, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVTargetVoltage ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,CostType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":costKind,"urn:iso:15118:2:2013:MsgDataTypes":amount,"urn:iso:15118:2:2013:MsgDataTypes":amountMultiplier{0-1})',  derivedBy='RESTRICTION'.  */
+struct iso1CostType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":costKind, urn:iso:15118:2:2013:MsgDataTypes,costKindType */
+	iso1costKindType costKind ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":amount, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t amount ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":amountMultiplier, urn:iso:15118:2:2013:MsgDataTypes,unitMultiplierType */
+	int8_t amountMultiplier ;
+	unsigned int amountMultiplier_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVPowerDeliveryParameterType',  base type name='EVPowerDeliveryParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":DC_EVStatus,"urn:iso:15118:2:2013:MsgDataTypes":BulkChargingComplete{0-1},"urn:iso:15118:2:2013:MsgDataTypes":ChargingComplete)',  derivedBy='EXTENSION'.  */
+struct iso1DC_EVPowerDeliveryParameterType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":DC_EVStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVStatusType',  base type name='EVStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":EVReady,"urn:iso:15118:2:2013:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2013:MsgDataTypes":EVRESSSOC)',  derivedBy='EXTENSION'.  */
+	struct iso1DC_EVStatusType DC_EVStatus ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":BulkChargingComplete, http://www.w3.org/2001/XMLSchema,boolean */
+	int BulkChargingComplete ;
+	unsigned int BulkChargingComplete_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ChargingComplete, http://www.w3.org/2001/XMLSchema,boolean */
+	int ChargingComplete ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,RetrievalMethodType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1})',  derivedBy='RESTRICTION'.  */
+#define iso1RetrievalMethodType_URI_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1RetrievalMethodType_Type_CHARACTERS_SIZE 50 + EXTRA_CHAR
+struct iso1RetrievalMethodType {
+	/* attribute: URI {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[iso1RetrievalMethodType_URI_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  URI ;
+	unsigned int URI_isUsed:1;
+	/* attribute: Type {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[iso1RetrievalMethodType_Type_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Type ;
+	unsigned int Type_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Transforms, Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transform{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct iso1TransformsType Transforms ;
+	unsigned int Transforms_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,CertificateUpdateResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":SAProvisioningCertificateChain,"urn:iso:15118:2:2013:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2013:MsgBody":ContractSignatureEncryptedPrivateKey,"urn:iso:15118:2:2013:MsgBody":DHpublickey,"urn:iso:15118:2:2013:MsgBody":eMAID,"urn:iso:15118:2:2013:MsgBody":RetryCounter{0-1})',  derivedBy='EXTENSION'.  */
+struct iso1CertificateUpdateResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	iso1responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":SAProvisioningCertificateChain, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,CertificateChainType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Certificate,"urn:iso:15118:2:2013:MsgDataTypes":SubCertificates{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso1CertificateChainType SAProvisioningCertificateChain ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ContractSignatureCertChain, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,CertificateChainType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Certificate,"urn:iso:15118:2:2013:MsgDataTypes":SubCertificates{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso1CertificateChainType ContractSignatureCertChain ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ContractSignatureEncryptedPrivateKey, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ContractSignatureEncryptedPrivateKeyType',  base type name='privateKeyType',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+	struct iso1ContractSignatureEncryptedPrivateKeyType ContractSignatureEncryptedPrivateKey ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":DHpublickey, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DiffieHellmanPublickeyType',  base type name='dHpublickeyType',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+	struct iso1DiffieHellmanPublickeyType DHpublickey ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":eMAID, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,EMAIDType',  base type name='eMAIDType',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+	struct iso1EMAIDType eMAID ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":RetryCounter, http://www.w3.org/2001/XMLSchema,short */
+	int16_t RetryCounter ;
+	unsigned int RetryCounter_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,CertificateInstallationResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":SAProvisioningCertificateChain,"urn:iso:15118:2:2013:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2013:MsgBody":ContractSignatureEncryptedPrivateKey,"urn:iso:15118:2:2013:MsgBody":DHpublickey,"urn:iso:15118:2:2013:MsgBody":eMAID)',  derivedBy='EXTENSION'.  */
+struct iso1CertificateInstallationResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	iso1responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":SAProvisioningCertificateChain, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,CertificateChainType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Certificate,"urn:iso:15118:2:2013:MsgDataTypes":SubCertificates{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso1CertificateChainType SAProvisioningCertificateChain ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ContractSignatureCertChain, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,CertificateChainType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Certificate,"urn:iso:15118:2:2013:MsgDataTypes":SubCertificates{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso1CertificateChainType ContractSignatureCertChain ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ContractSignatureEncryptedPrivateKey, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ContractSignatureEncryptedPrivateKeyType',  base type name='privateKeyType',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+	struct iso1ContractSignatureEncryptedPrivateKeyType ContractSignatureEncryptedPrivateKey ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":DHpublickey, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DiffieHellmanPublickeyType',  base type name='dHpublickeyType',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+	struct iso1DiffieHellmanPublickeyType DHpublickey ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":eMAID, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,EMAIDType',  base type name='eMAIDType',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+	struct iso1EMAIDType eMAID ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,WeldingDetectionReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":DC_EVStatus)',  derivedBy='EXTENSION'.  */
+struct iso1WeldingDetectionReqType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":DC_EVStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVStatusType',  base type name='EVStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":EVReady,"urn:iso:15118:2:2013:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2013:MsgDataTypes":EVRESSSOC)',  derivedBy='EXTENSION'.  */
+	struct iso1DC_EVStatusType DC_EVStatus ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,CurrentDemandResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2013:MsgBody":EVSEPresentVoltage,"urn:iso:15118:2:2013:MsgBody":EVSEPresentCurrent,"urn:iso:15118:2:2013:MsgBody":EVSECurrentLimitAchieved,"urn:iso:15118:2:2013:MsgBody":EVSEVoltageLimitAchieved,"urn:iso:15118:2:2013:MsgBody":EVSEPowerLimitAchieved,"urn:iso:15118:2:2013:MsgBody":EVSEMaximumVoltageLimit{0-1},"urn:iso:15118:2:2013:MsgBody":EVSEMaximumCurrentLimit{0-1},"urn:iso:15118:2:2013:MsgBody":EVSEMaximumPowerLimit{0-1},"urn:iso:15118:2:2013:MsgBody":EVSEID,"urn:iso:15118:2:2013:MsgBody":SAScheduleTupleID,"urn:iso:15118:2:2013:MsgBody":MeterInfo{0-1},"urn:iso:15118:2:2013:MsgBody":ReceiptRequired{0-1})',  derivedBy='EXTENSION'.  */
+#define iso1CurrentDemandResType_EVSEID_CHARACTERS_SIZE 37 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,evseIDType is 37 */
+struct iso1CurrentDemandResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	iso1responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":DC_EVSEStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification),("urn:iso:15118:2:2013:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVSEStatusCode))',  derivedBy='EXTENSION'.  */
+	struct iso1DC_EVSEStatusType DC_EVSEStatus ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEPresentVoltage, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVSEPresentVoltage ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEPresentCurrent, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVSEPresentCurrent ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSECurrentLimitAchieved, http://www.w3.org/2001/XMLSchema,boolean */
+	int EVSECurrentLimitAchieved ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEVoltageLimitAchieved, http://www.w3.org/2001/XMLSchema,boolean */
+	int EVSEVoltageLimitAchieved ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEPowerLimitAchieved, http://www.w3.org/2001/XMLSchema,boolean */
+	int EVSEPowerLimitAchieved ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEMaximumVoltageLimit, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVSEMaximumVoltageLimit ;
+	unsigned int EVSEMaximumVoltageLimit_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEMaximumCurrentLimit, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVSEMaximumCurrentLimit ;
+	unsigned int EVSEMaximumCurrentLimit_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEMaximumPowerLimit, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVSEMaximumPowerLimit ;
+	unsigned int EVSEMaximumPowerLimit_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEID, urn:iso:15118:2:2013:MsgDataTypes,evseIDType */
+	struct {
+		exi_string_character_t characters[iso1CurrentDemandResType_EVSEID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  EVSEID ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":SAScheduleTupleID, urn:iso:15118:2:2013:MsgDataTypes,SAIDType */
+	uint8_t SAScheduleTupleID ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":MeterInfo, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,MeterInfoType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":MeterID,"urn:iso:15118:2:2013:MsgDataTypes":MeterReading{0-1},"urn:iso:15118:2:2013:MsgDataTypes":SigMeterReading{0-1},"urn:iso:15118:2:2013:MsgDataTypes":MeterStatus{0-1},"urn:iso:15118:2:2013:MsgDataTypes":TMeter{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso1MeterInfoType MeterInfo ;
+	unsigned int MeterInfo_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ReceiptRequired, http://www.w3.org/2001/XMLSchema,boolean */
+	int ReceiptRequired ;
+	unsigned int ReceiptRequired_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,AC_EVSEChargeParameterType',  base type name='EVSEChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":AC_EVSEStatus,"urn:iso:15118:2:2013:MsgDataTypes":EVSENominalVoltage,"urn:iso:15118:2:2013:MsgDataTypes":EVSEMaxCurrent)',  derivedBy='EXTENSION'.  */
+struct iso1AC_EVSEChargeParameterType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":AC_EVSEStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,AC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification),("urn:iso:15118:2:2013:MsgDataTypes":RCD))',  derivedBy='EXTENSION'.  */
+	struct iso1AC_EVSEStatusType AC_EVSEStatus ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSENominalVoltage, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVSENominalVoltage ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSEMaxCurrent, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVSEMaxCurrent ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,PaymentServiceSelectionReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":SelectedPaymentOption,"urn:iso:15118:2:2013:MsgBody":SelectedServiceList)',  derivedBy='EXTENSION'.  */
+struct iso1PaymentServiceSelectionReqType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":SelectedPaymentOption, urn:iso:15118:2:2013:MsgDataTypes,paymentOptionType */
+	iso1paymentOptionType SelectedPaymentOption ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":SelectedServiceList, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SelectedServiceListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":SelectedService{1-16})',  derivedBy='RESTRICTION'.  */
+	struct iso1SelectedServiceListType SelectedServiceList ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignaturePropertiesType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":SignatureProperty{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define iso1SignaturePropertiesType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1SignaturePropertiesType_SignatureProperty_ARRAY_SIZE 1
+struct iso1SignaturePropertiesType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso1SignaturePropertiesType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SignatureProperty, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignaturePropertyType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"])){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso1SignaturePropertyType array[iso1SignaturePropertiesType_SignatureProperty_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SignatureProperty;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ParameterType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":boolValue|"urn:iso:15118:2:2013:MsgDataTypes":byteValue|"urn:iso:15118:2:2013:MsgDataTypes":shortValue|"urn:iso:15118:2:2013:MsgDataTypes":intValue|"urn:iso:15118:2:2013:MsgDataTypes":physicalValue|"urn:iso:15118:2:2013:MsgDataTypes":stringValue)',  derivedBy='RESTRICTION'.  */
+#define iso1ParameterType_Name_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1ParameterType_stringValue_CHARACTERS_SIZE 50 + EXTRA_CHAR
+struct iso1ParameterType {
+	/* attribute: Name {http://www.w3.org/2001/XMLSchema,string} */
+	struct {
+		exi_string_character_t characters[iso1ParameterType_Name_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Name ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":boolValue, http://www.w3.org/2001/XMLSchema,boolean */
+	int boolValue ;
+	unsigned int boolValue_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":byteValue, http://www.w3.org/2001/XMLSchema,byte */
+	int8_t byteValue ;
+	unsigned int byteValue_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":shortValue, http://www.w3.org/2001/XMLSchema,short */
+	int16_t shortValue ;
+	unsigned int shortValue_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":intValue, http://www.w3.org/2001/XMLSchema,int */
+	int32_t intValue ;
+	unsigned int intValue_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":physicalValue, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType physicalValue ;
+	unsigned int physicalValue_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":stringValue, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		exi_string_character_t characters[iso1ParameterType_stringValue_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  stringValue ;
+	unsigned int stringValue_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,CertificateInstallationReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":OEMProvisioningCert,"urn:iso:15118:2:2013:MsgBody":ListOfRootCertificateIDs)',  derivedBy='EXTENSION'.  */
+#define iso1CertificateInstallationReqType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1CertificateInstallationReqType_OEMProvisioningCert_BYTES_SIZE 800 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,certificateType is 800 */
+struct iso1CertificateInstallationReqType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso1CertificateInstallationReqType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":OEMProvisioningCert, urn:iso:15118:2:2013:MsgDataTypes,certificateType */
+	struct {
+		uint8_t bytes[iso1CertificateInstallationReqType_OEMProvisioningCert_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  OEMProvisioningCert ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ListOfRootCertificateIDs, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ListOfRootCertificateIDsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":RootCertificateID{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct iso1ListOfRootCertificateIDsType ListOfRootCertificateIDs ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,ServiceDiscoveryResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":PaymentOptionList,"urn:iso:15118:2:2013:MsgBody":ChargeService,"urn:iso:15118:2:2013:MsgBody":ServiceList{0-1})',  derivedBy='EXTENSION'.  */
+struct iso1ServiceDiscoveryResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	iso1responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":PaymentOptionList, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PaymentOptionListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":PaymentOption{1-2})',  derivedBy='RESTRICTION'.  */
+	struct iso1PaymentOptionListType PaymentOptionList ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ChargeService, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ChargeServiceType',  base type name='ServiceType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":ServiceID,"urn:iso:15118:2:2013:MsgDataTypes":ServiceName{0-1},"urn:iso:15118:2:2013:MsgDataTypes":ServiceCategory,"urn:iso:15118:2:2013:MsgDataTypes":ServiceScope{0-1},"urn:iso:15118:2:2013:MsgDataTypes":FreeService),("urn:iso:15118:2:2013:MsgDataTypes":SupportedEnergyTransferMode))',  derivedBy='EXTENSION'.  */
+	struct iso1ChargeServiceType ChargeService ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ServiceList, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ServiceListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Service{1-8})',  derivedBy='RESTRICTION'.  */
+	struct iso1ServiceListType ServiceList ;
+	unsigned int ServiceList_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,PreChargeResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2013:MsgBody":EVSEPresentVoltage)',  derivedBy='EXTENSION'.  */
+struct iso1PreChargeResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	iso1responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":DC_EVSEStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification),("urn:iso:15118:2:2013:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVSEStatusCode))',  derivedBy='EXTENSION'.  */
+	struct iso1DC_EVSEStatusType DC_EVSEStatus ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEPresentVoltage, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVSEPresentVoltage ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ParameterSetType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":ParameterSetID,"urn:iso:15118:2:2013:MsgDataTypes":Parameter{1-16})',  derivedBy='RESTRICTION'.  */
+#define iso1ParameterSetType_Parameter_ARRAY_SIZE 16
+struct iso1ParameterSetType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ParameterSetID, http://www.w3.org/2001/XMLSchema,short */
+	int16_t ParameterSetID ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":Parameter, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ParameterType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":boolValue|"urn:iso:15118:2:2013:MsgDataTypes":byteValue|"urn:iso:15118:2:2013:MsgDataTypes":shortValue|"urn:iso:15118:2:2013:MsgDataTypes":intValue|"urn:iso:15118:2:2013:MsgDataTypes":physicalValue|"urn:iso:15118:2:2013:MsgDataTypes":stringValue)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso1ParameterType array[iso1ParameterSetType_Parameter_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Parameter;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignedInfoType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":CanonicalizationMethod,"http://www.w3.org/2000/09/xmldsig#":SignatureMethod,"http://www.w3.org/2000/09/xmldsig#":Reference{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define iso1SignedInfoType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1SignedInfoType_Reference_ARRAY_SIZE 1
+struct iso1SignedInfoType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso1SignedInfoType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":CanonicalizationMethod, Complex type name='http://www.w3.org/2000/09/xmldsig#,CanonicalizationMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##any]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct iso1CanonicalizationMethodType CanonicalizationMethod ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SignatureMethod, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":HMACOutputLength{0-1},(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct iso1SignatureMethodType SignatureMethod ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Reference, Complex type name='http://www.w3.org/2000/09/xmldsig#,ReferenceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1},"http://www.w3.org/2000/09/xmldsig#":DigestMethod,"http://www.w3.org/2000/09/xmldsig#":DigestValue)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso1ReferenceType array[iso1SignedInfoType_Reference_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Reference;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ProfileEntryType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":ChargingProfileEntryStart,"urn:iso:15118:2:2013:MsgDataTypes":ChargingProfileEntryMaxPower,"urn:iso:15118:2:2013:MsgDataTypes":ChargingProfileEntryMaxNumberOfPhasesInUse{0-1})',  derivedBy='RESTRICTION'.  */
+struct iso1ProfileEntryType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ChargingProfileEntryStart, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t ChargingProfileEntryStart ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ChargingProfileEntryMaxPower, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType ChargingProfileEntryMaxPower ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ChargingProfileEntryMaxNumberOfPhasesInUse, urn:iso:15118:2:2013:MsgDataTypes,maxNumPhasesType */
+	int8_t ChargingProfileEntryMaxNumberOfPhasesInUse ;
+	unsigned int ChargingProfileEntryMaxNumberOfPhasesInUse_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,ManifestType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Reference{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define iso1ManifestType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1ManifestType_Reference_ARRAY_SIZE 1
+struct iso1ManifestType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso1ManifestType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Reference, Complex type name='http://www.w3.org/2000/09/xmldsig#,ReferenceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1},"http://www.w3.org/2000/09/xmldsig#":DigestMethod,"http://www.w3.org/2000/09/xmldsig#":DigestValue)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso1ReferenceType array[iso1ManifestType_Reference_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Reference;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVChargeParameterType',  base type name='EVChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":DepartureTime{0-1}),("urn:iso:15118:2:2013:MsgDataTypes":DC_EVStatus,"urn:iso:15118:2:2013:MsgDataTypes":EVMaximumCurrentLimit,"urn:iso:15118:2:2013:MsgDataTypes":EVMaximumPowerLimit{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVMaximumVoltageLimit,"urn:iso:15118:2:2013:MsgDataTypes":EVEnergyCapacity{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVEnergyRequest{0-1},"urn:iso:15118:2:2013:MsgDataTypes":FullSOC{0-1},"urn:iso:15118:2:2013:MsgDataTypes":BulkSOC{0-1}))',  derivedBy='EXTENSION'.  */
+struct iso1DC_EVChargeParameterType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":DepartureTime, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t DepartureTime ;
+	unsigned int DepartureTime_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":DC_EVStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVStatusType',  base type name='EVStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":EVReady,"urn:iso:15118:2:2013:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2013:MsgDataTypes":EVRESSSOC)',  derivedBy='EXTENSION'.  */
+	struct iso1DC_EVStatusType DC_EVStatus ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVMaximumCurrentLimit, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVMaximumCurrentLimit ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVMaximumPowerLimit, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVMaximumPowerLimit ;
+	unsigned int EVMaximumPowerLimit_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVMaximumVoltageLimit, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVMaximumVoltageLimit ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVEnergyCapacity, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVEnergyCapacity ;
+	unsigned int EVEnergyCapacity_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVEnergyRequest, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType EVEnergyRequest ;
+	unsigned int EVEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":FullSOC, urn:iso:15118:2:2013:MsgDataTypes,percentValueType */
+	int8_t FullSOC ;
+	unsigned int FullSOC_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":BulkSOC, urn:iso:15118:2:2013:MsgDataTypes,percentValueType */
+	int8_t BulkSOC ;
+	unsigned int BulkSOC_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ConsumptionCostType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":startValue,"urn:iso:15118:2:2013:MsgDataTypes":Cost{1-3})',  derivedBy='RESTRICTION'.  */
+#define iso1ConsumptionCostType_Cost_ARRAY_SIZE 3
+struct iso1ConsumptionCostType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":startValue, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso1PhysicalValueType startValue ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":Cost, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,CostType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":costKind,"urn:iso:15118:2:2013:MsgDataTypes":amount,"urn:iso:15118:2:2013:MsgDataTypes":amountMultiplier{0-1})',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso1CostType array[iso1ConsumptionCostType_Cost_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Cost;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PMaxScheduleType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":PMaxScheduleEntry{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define iso1PMaxScheduleType_PMaxScheduleEntry_ARRAY_SIZE 5
+struct iso1PMaxScheduleType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":PMaxScheduleEntry, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PMaxScheduleEntryType',  base type name='EntryType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":TimeInterval),("urn:iso:15118:2:2013:MsgDataTypes":PMax))',  derivedBy='EXTENSION'.  */
+	struct {
+		struct iso1PMaxScheduleEntryType array[iso1PMaxScheduleType_PMaxScheduleEntry_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} PMaxScheduleEntry;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,CertificateUpdateReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2013:MsgBody":eMAID,"urn:iso:15118:2:2013:MsgBody":ListOfRootCertificateIDs)',  derivedBy='EXTENSION'.  */
+#define iso1CertificateUpdateReqType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1CertificateUpdateReqType_eMAID_CHARACTERS_SIZE 15 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,eMAIDType is 15 */
+struct iso1CertificateUpdateReqType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso1CertificateUpdateReqType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ContractSignatureCertChain, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,CertificateChainType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Certificate,"urn:iso:15118:2:2013:MsgDataTypes":SubCertificates{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso1CertificateChainType ContractSignatureCertChain ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":eMAID, urn:iso:15118:2:2013:MsgDataTypes,eMAIDType */
+	struct {
+		exi_string_character_t characters[iso1CertificateUpdateReqType_eMAID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  eMAID ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ListOfRootCertificateIDs, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ListOfRootCertificateIDsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":RootCertificateID{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct iso1ListOfRootCertificateIDsType ListOfRootCertificateIDs ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,KeyInfoType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":KeyName|"http://www.w3.org/2000/09/xmldsig#":KeyValue|"http://www.w3.org/2000/09/xmldsig#":RetrievalMethod|"http://www.w3.org/2000/09/xmldsig#":X509Data|"http://www.w3.org/2000/09/xmldsig#":PGPData|"http://www.w3.org/2000/09/xmldsig#":SPKIData|"http://www.w3.org/2000/09/xmldsig#":MgmtData|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"])){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define iso1KeyInfoType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1KeyInfoType_KeyName_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1KeyInfoType_KeyName_ARRAY_SIZE 1
+#define iso1KeyInfoType_KeyValue_ARRAY_SIZE 1
+#define iso1KeyInfoType_RetrievalMethod_ARRAY_SIZE 1
+#define iso1KeyInfoType_X509Data_ARRAY_SIZE 1
+#define iso1KeyInfoType_PGPData_ARRAY_SIZE 1
+#define iso1KeyInfoType_SPKIData_ARRAY_SIZE 1
+#define iso1KeyInfoType_MgmtData_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1KeyInfoType_MgmtData_ARRAY_SIZE 1
+#define iso1KeyInfoType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR
+struct iso1KeyInfoType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso1KeyInfoType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":KeyName, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		struct {
+			exi_string_character_t characters[iso1KeyInfoType_KeyName_CHARACTERS_SIZE];
+			uint16_t charactersLen;
+		}  array[iso1KeyInfoType_KeyName_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} KeyName;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":KeyValue, Complex type name='http://www.w3.org/2000/09/xmldsig#,KeyValueType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":DSAKeyValue|"http://www.w3.org/2000/09/xmldsig#":RSAKeyValue|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]))',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso1KeyValueType array[iso1KeyInfoType_KeyValue_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} KeyValue;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":RetrievalMethod, Complex type name='http://www.w3.org/2000/09/xmldsig#,RetrievalMethodType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1})',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso1RetrievalMethodType array[iso1KeyInfoType_RetrievalMethod_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} RetrievalMethod;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509Data, Complex type name='http://www.w3.org/2000/09/xmldsig#,X509DataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":X509IssuerSerial|"http://www.w3.org/2000/09/xmldsig#":X509SKI|"http://www.w3.org/2000/09/xmldsig#":X509SubjectName|"http://www.w3.org/2000/09/xmldsig#":X509Certificate|"http://www.w3.org/2000/09/xmldsig#":X509CRL|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]))){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso1X509DataType array[iso1KeyInfoType_X509Data_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509Data;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":PGPData, Complex type name='http://www.w3.org/2000/09/xmldsig#,PGPDataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":PGPKeyID,"http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket{0-1},(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})|("http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket,(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED}))',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso1PGPDataType array[iso1KeyInfoType_PGPData_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} PGPData;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SPKIData, Complex type name='http://www.w3.org/2000/09/xmldsig#,SPKIDataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":SPKISexp,(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-1}){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso1SPKIDataType array[iso1KeyInfoType_SPKIData_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SPKIData;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":MgmtData, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		struct {
+			exi_string_character_t characters[iso1KeyInfoType_MgmtData_CHARACTERS_SIZE];
+			uint16_t charactersLen;
+		}  array[iso1KeyInfoType_MgmtData_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} MgmtData;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[iso1KeyInfoType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,ChargeParameterDiscoveryReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":MaxEntriesSAScheduleTuple{0-1},"urn:iso:15118:2:2013:MsgBody":RequestedEnergyTransferMode,"urn:iso:15118:2:2013:MsgDataTypes":EVChargeParameter)',  derivedBy='EXTENSION'.  */
+struct iso1ChargeParameterDiscoveryReqType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":MaxEntriesSAScheduleTuple, http://www.w3.org/2001/XMLSchema,unsignedShort */
+	uint16_t MaxEntriesSAScheduleTuple ;
+	unsigned int MaxEntriesSAScheduleTuple_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":RequestedEnergyTransferMode, urn:iso:15118:2:2013:MsgDataTypes,EnergyTransferModeType */
+	iso1EnergyTransferModeType RequestedEnergyTransferMode ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVChargeParameter, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,EVChargeParameterType',  base type name='anyType',  content type='ELEMENT',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":DepartureTime{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso1EVChargeParameterType EVChargeParameter ;
+	unsigned int EVChargeParameter_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":AC_EVChargeParameter, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,AC_EVChargeParameterType',  base type name='EVChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":DepartureTime{0-1}),("urn:iso:15118:2:2013:MsgDataTypes":EAmount,"urn:iso:15118:2:2013:MsgDataTypes":EVMaxVoltage,"urn:iso:15118:2:2013:MsgDataTypes":EVMaxCurrent,"urn:iso:15118:2:2013:MsgDataTypes":EVMinCurrent))',  derivedBy='EXTENSION'.  */
+	struct iso1AC_EVChargeParameterType AC_EVChargeParameter ;
+	unsigned int AC_EVChargeParameter_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":DC_EVChargeParameter, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVChargeParameterType',  base type name='EVChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":DepartureTime{0-1}),("urn:iso:15118:2:2013:MsgDataTypes":DC_EVStatus,"urn:iso:15118:2:2013:MsgDataTypes":EVMaximumCurrentLimit,"urn:iso:15118:2:2013:MsgDataTypes":EVMaximumPowerLimit{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVMaximumVoltageLimit,"urn:iso:15118:2:2013:MsgDataTypes":EVEnergyCapacity{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVEnergyRequest{0-1},"urn:iso:15118:2:2013:MsgDataTypes":FullSOC{0-1},"urn:iso:15118:2:2013:MsgDataTypes":BulkSOC{0-1}))',  derivedBy='EXTENSION'.  */
+	struct iso1DC_EVChargeParameterType DC_EVChargeParameter ;
+	unsigned int DC_EVChargeParameter_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ChargingProfileType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":ProfileEntry{1-24})',  derivedBy='RESTRICTION'.  */
+#define iso1ChargingProfileType_ProfileEntry_ARRAY_SIZE 24
+struct iso1ChargingProfileType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ProfileEntry, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ProfileEntryType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":ChargingProfileEntryStart,"urn:iso:15118:2:2013:MsgDataTypes":ChargingProfileEntryMaxPower,"urn:iso:15118:2:2013:MsgDataTypes":ChargingProfileEntryMaxNumberOfPhasesInUse{0-1})',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso1ProfileEntryType array[iso1ChargingProfileType_ProfileEntry_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} ProfileEntry;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SalesTariffEntryType',  base type name='EntryType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":TimeInterval),("urn:iso:15118:2:2013:MsgDataTypes":EPriceLevel{0-1},"urn:iso:15118:2:2013:MsgDataTypes":ConsumptionCost{0-3}))',  derivedBy='EXTENSION'.  */
+#define iso1SalesTariffEntryType_ConsumptionCost_ARRAY_SIZE 3
+struct iso1SalesTariffEntryType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":TimeInterval, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,IntervalType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+	struct iso1IntervalType TimeInterval ;
+	unsigned int TimeInterval_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":RelativeTimeInterval, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,RelativeTimeIntervalType',  base type name='IntervalType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":start,"urn:iso:15118:2:2013:MsgDataTypes":duration{0-1})',  derivedBy='EXTENSION'.  */
+	struct iso1RelativeTimeIntervalType RelativeTimeInterval ;
+	unsigned int RelativeTimeInterval_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EPriceLevel, http://www.w3.org/2001/XMLSchema,unsignedByte */
+	uint8_t EPriceLevel ;
+	unsigned int EPriceLevel_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ConsumptionCost, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ConsumptionCostType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":startValue,"urn:iso:15118:2:2013:MsgDataTypes":Cost{1-3})',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso1ConsumptionCostType array[iso1SalesTariffEntryType_ConsumptionCost_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} ConsumptionCost;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SalesTariffType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":SalesTariffID,"urn:iso:15118:2:2013:MsgDataTypes":SalesTariffDescription{0-1},"urn:iso:15118:2:2013:MsgDataTypes":NumEPriceLevels{0-1},"urn:iso:15118:2:2013:MsgDataTypes":SalesTariffEntry{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define iso1SalesTariffType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1SalesTariffType_SalesTariffDescription_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,tariffDescriptionType is 32 */
+#define iso1SalesTariffType_SalesTariffEntry_ARRAY_SIZE 5
+struct iso1SalesTariffType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso1SalesTariffType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":SalesTariffID, urn:iso:15118:2:2013:MsgDataTypes,SAIDType */
+	uint8_t SalesTariffID ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":SalesTariffDescription, urn:iso:15118:2:2013:MsgDataTypes,tariffDescriptionType */
+	struct {
+		exi_string_character_t characters[iso1SalesTariffType_SalesTariffDescription_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  SalesTariffDescription ;
+	unsigned int SalesTariffDescription_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":NumEPriceLevels, http://www.w3.org/2001/XMLSchema,unsignedByte */
+	uint8_t NumEPriceLevels ;
+	unsigned int NumEPriceLevels_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":SalesTariffEntry, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SalesTariffEntryType',  base type name='EntryType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":TimeInterval),("urn:iso:15118:2:2013:MsgDataTypes":EPriceLevel{0-1},"urn:iso:15118:2:2013:MsgDataTypes":ConsumptionCost{0-3}))',  derivedBy='EXTENSION'.  */
+	struct {
+		struct iso1SalesTariffEntryType array[iso1SalesTariffType_SalesTariffEntry_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SalesTariffEntry;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":SignedInfo,"http://www.w3.org/2000/09/xmldsig#":SignatureValue,"http://www.w3.org/2000/09/xmldsig#":KeyInfo{0-1},"http://www.w3.org/2000/09/xmldsig#":Object{0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define iso1SignatureType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1SignatureType_Object_ARRAY_SIZE 1
+struct iso1SignatureType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso1SignatureType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SignedInfo, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignedInfoType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":CanonicalizationMethod,"http://www.w3.org/2000/09/xmldsig#":SignatureMethod,"http://www.w3.org/2000/09/xmldsig#":Reference{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct iso1SignedInfoType SignedInfo ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SignatureValue, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureValueType',  base type name='base64Binary',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+	struct iso1SignatureValueType SignatureValue ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":KeyInfo, Complex type name='http://www.w3.org/2000/09/xmldsig#,KeyInfoType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":KeyName|"http://www.w3.org/2000/09/xmldsig#":KeyValue|"http://www.w3.org/2000/09/xmldsig#":RetrievalMethod|"http://www.w3.org/2000/09/xmldsig#":X509Data|"http://www.w3.org/2000/09/xmldsig#":PGPData|"http://www.w3.org/2000/09/xmldsig#":SPKIData|"http://www.w3.org/2000/09/xmldsig#":MgmtData|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"])){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct iso1KeyInfoType KeyInfo ;
+	unsigned int KeyInfo_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Object, Complex type name='http://www.w3.org/2000/09/xmldsig#,ObjectType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##any])){0-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso1ObjectType array[iso1SignatureType_Object_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Object;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,PowerDeliveryReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ChargeProgress,"urn:iso:15118:2:2013:MsgBody":SAScheduleTupleID,"urn:iso:15118:2:2013:MsgBody":ChargingProfile{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVPowerDeliveryParameter{0-1})',  derivedBy='EXTENSION'.  */
+struct iso1PowerDeliveryReqType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ChargeProgress, urn:iso:15118:2:2013:MsgDataTypes,chargeProgressType */
+	iso1chargeProgressType ChargeProgress ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":SAScheduleTupleID, urn:iso:15118:2:2013:MsgDataTypes,SAIDType */
+	uint8_t SAScheduleTupleID ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ChargingProfile, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ChargingProfileType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":ProfileEntry{1-24})',  derivedBy='RESTRICTION'.  */
+	struct iso1ChargingProfileType ChargingProfile ;
+	unsigned int ChargingProfile_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVPowerDeliveryParameter, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,EVPowerDeliveryParameterType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+	struct iso1EVPowerDeliveryParameterType EVPowerDeliveryParameter ;
+	unsigned int EVPowerDeliveryParameter_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":DC_EVPowerDeliveryParameter, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVPowerDeliveryParameterType',  base type name='EVPowerDeliveryParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":DC_EVStatus,"urn:iso:15118:2:2013:MsgDataTypes":BulkChargingComplete{0-1},"urn:iso:15118:2:2013:MsgDataTypes":ChargingComplete)',  derivedBy='EXTENSION'.  */
+	struct iso1DC_EVPowerDeliveryParameterType DC_EVPowerDeliveryParameter ;
+	unsigned int DC_EVPowerDeliveryParameter_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ServiceParameterListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":ParameterSet{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define iso1ServiceParameterListType_ParameterSet_ARRAY_SIZE 5
+struct iso1ServiceParameterListType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ParameterSet, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ParameterSetType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":ParameterSetID,"urn:iso:15118:2:2013:MsgDataTypes":Parameter{1-16})',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso1ParameterSetType array[iso1ServiceParameterListType_ParameterSet_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} ParameterSet;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,ServiceDetailResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":ServiceID,"urn:iso:15118:2:2013:MsgBody":ServiceParameterList{0-1})',  derivedBy='EXTENSION'.  */
+struct iso1ServiceDetailResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	iso1responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ServiceID, urn:iso:15118:2:2013:MsgDataTypes,serviceIDType */
+	uint16_t ServiceID ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ServiceParameterList, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ServiceParameterListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":ParameterSet{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct iso1ServiceParameterListType ServiceParameterList ;
+	unsigned int ServiceParameterList_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SAScheduleTupleType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":SAScheduleTupleID,"urn:iso:15118:2:2013:MsgDataTypes":PMaxSchedule,"urn:iso:15118:2:2013:MsgDataTypes":SalesTariff{0-1})',  derivedBy='RESTRICTION'.  */
+struct iso1SAScheduleTupleType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":SAScheduleTupleID, urn:iso:15118:2:2013:MsgDataTypes,SAIDType */
+	uint8_t SAScheduleTupleID ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":PMaxSchedule, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PMaxScheduleType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":PMaxScheduleEntry{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct iso1PMaxScheduleType PMaxSchedule ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":SalesTariff, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SalesTariffType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":SalesTariffID,"urn:iso:15118:2:2013:MsgDataTypes":SalesTariffDescription{0-1},"urn:iso:15118:2:2013:MsgDataTypes":NumEPriceLevels{0-1},"urn:iso:15118:2:2013:MsgDataTypes":SalesTariffEntry{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct iso1SalesTariffType SalesTariff ;
+	unsigned int SalesTariff_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgHeader,MessageHeaderType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgHeader":SessionID,"urn:iso:15118:2:2013:MsgHeader":Notification{0-1},"http://www.w3.org/2000/09/xmldsig#":Signature{0-1})',  derivedBy='RESTRICTION'.  */
+#define iso1MessageHeaderType_SessionID_BYTES_SIZE 8 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,sessionIDType is 8 */
+struct iso1MessageHeaderType {
+	/* element: "urn:iso:15118:2:2013:MsgHeader":SessionID, urn:iso:15118:2:2013:MsgDataTypes,sessionIDType */
+	struct {
+		uint8_t bytes[iso1MessageHeaderType_SessionID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  SessionID ;
+	/* element: "urn:iso:15118:2:2013:MsgHeader":Notification, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,NotificationType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":FaultCode,"urn:iso:15118:2:2013:MsgDataTypes":FaultMsg{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso1NotificationType Notification ;
+	unsigned int Notification_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Signature, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":SignedInfo,"http://www.w3.org/2000/09/xmldsig#":SignatureValue,"http://www.w3.org/2000/09/xmldsig#":KeyInfo{0-1},"http://www.w3.org/2000/09/xmldsig#":Object{0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct iso1SignatureType Signature ;
+	unsigned int Signature_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SAScheduleListType',  base type name='SASchedulesType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":SAScheduleTuple{1-3})',  derivedBy='EXTENSION'.  */
+#define iso1SAScheduleListType_SAScheduleTuple_ARRAY_SIZE 3
+struct iso1SAScheduleListType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":SAScheduleTuple, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SAScheduleTupleType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":SAScheduleTupleID,"urn:iso:15118:2:2013:MsgDataTypes":PMaxSchedule,"urn:iso:15118:2:2013:MsgDataTypes":SalesTariff{0-1})',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso1SAScheduleTupleType array[iso1SAScheduleListType_SAScheduleTuple_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SAScheduleTuple;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,ChargeParameterDiscoveryResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":EVSEProcessing,"urn:iso:15118:2:2013:MsgDataTypes":SASchedules{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVSEChargeParameter)',  derivedBy='EXTENSION'.  */
+struct iso1ChargeParameterDiscoveryResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	iso1responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEProcessing, urn:iso:15118:2:2013:MsgDataTypes,EVSEProcessingType */
+	iso1EVSEProcessingType EVSEProcessing ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":SASchedules, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SASchedulesType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+	struct iso1SASchedulesType SASchedules ;
+	unsigned int SASchedules_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":SAScheduleList, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SAScheduleListType',  base type name='SASchedulesType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":SAScheduleTuple{1-3})',  derivedBy='EXTENSION'.  */
+	struct iso1SAScheduleListType SAScheduleList ;
+	unsigned int SAScheduleList_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSEChargeParameter, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,EVSEChargeParameterType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+	struct iso1EVSEChargeParameterType EVSEChargeParameter ;
+	unsigned int EVSEChargeParameter_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":AC_EVSEChargeParameter, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,AC_EVSEChargeParameterType',  base type name='EVSEChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":AC_EVSEStatus,"urn:iso:15118:2:2013:MsgDataTypes":EVSENominalVoltage,"urn:iso:15118:2:2013:MsgDataTypes":EVSEMaxCurrent)',  derivedBy='EXTENSION'.  */
+	struct iso1AC_EVSEChargeParameterType AC_EVSEChargeParameter ;
+	unsigned int AC_EVSEChargeParameter_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":DC_EVSEChargeParameter, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVSEChargeParameterType',  base type name='EVSEChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":DC_EVSEStatus,"urn:iso:15118:2:2013:MsgDataTypes":EVSEMaximumCurrentLimit,"urn:iso:15118:2:2013:MsgDataTypes":EVSEMaximumPowerLimit,"urn:iso:15118:2:2013:MsgDataTypes":EVSEMaximumVoltageLimit,"urn:iso:15118:2:2013:MsgDataTypes":EVSEMinimumCurrentLimit,"urn:iso:15118:2:2013:MsgDataTypes":EVSEMinimumVoltageLimit,"urn:iso:15118:2:2013:MsgDataTypes":EVSECurrentRegulationTolerance{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVSEPeakCurrentRipple,"urn:iso:15118:2:2013:MsgDataTypes":EVSEEnergyToBeDelivered{0-1})',  derivedBy='EXTENSION'.  */
+	struct iso1DC_EVSEChargeParameterType DC_EVSEChargeParameter ;
+	unsigned int DC_EVSEChargeParameter_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,BodyType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":BodyElement{0-1})',  derivedBy='RESTRICTION'.  */
+struct iso1BodyType {
+	/* substitutionGroup */
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	union {
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */
+		/* element: "urn:iso:15118:2:2013:MsgBody":BodyElement, Complex type name='urn:iso:15118:2:2013:MsgBody,BodyBaseType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+		struct iso1BodyBaseType BodyElement ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":SessionSetupReq, Complex type name='urn:iso:15118:2:2013:MsgBody,SessionSetupReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":EVCCID)',  derivedBy='EXTENSION'.  */
+		struct iso1SessionSetupReqType SessionSetupReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":SessionSetupRes, Complex type name='urn:iso:15118:2:2013:MsgBody,SessionSetupResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":EVSEID,"urn:iso:15118:2:2013:MsgBody":EVSETimeStamp{0-1})',  derivedBy='EXTENSION'.  */
+		struct iso1SessionSetupResType SessionSetupRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":ServiceDiscoveryReq, Complex type name='urn:iso:15118:2:2013:MsgBody,ServiceDiscoveryReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ServiceScope{0-1},"urn:iso:15118:2:2013:MsgBody":ServiceCategory{0-1})',  derivedBy='EXTENSION'.  */
+		struct iso1ServiceDiscoveryReqType ServiceDiscoveryReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":ServiceDiscoveryRes, Complex type name='urn:iso:15118:2:2013:MsgBody,ServiceDiscoveryResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":PaymentOptionList,"urn:iso:15118:2:2013:MsgBody":ChargeService,"urn:iso:15118:2:2013:MsgBody":ServiceList{0-1})',  derivedBy='EXTENSION'.  */
+		struct iso1ServiceDiscoveryResType ServiceDiscoveryRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":ServiceDetailReq, Complex type name='urn:iso:15118:2:2013:MsgBody,ServiceDetailReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ServiceID)',  derivedBy='EXTENSION'.  */
+		struct iso1ServiceDetailReqType ServiceDetailReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":ServiceDetailRes, Complex type name='urn:iso:15118:2:2013:MsgBody,ServiceDetailResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":ServiceID,"urn:iso:15118:2:2013:MsgBody":ServiceParameterList{0-1})',  derivedBy='EXTENSION'.  */
+		struct iso1ServiceDetailResType ServiceDetailRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":PaymentServiceSelectionReq, Complex type name='urn:iso:15118:2:2013:MsgBody,PaymentServiceSelectionReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":SelectedPaymentOption,"urn:iso:15118:2:2013:MsgBody":SelectedServiceList)',  derivedBy='EXTENSION'.  */
+		struct iso1PaymentServiceSelectionReqType PaymentServiceSelectionReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":PaymentServiceSelectionRes, Complex type name='urn:iso:15118:2:2013:MsgBody,PaymentServiceSelectionResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode)',  derivedBy='EXTENSION'.  */
+		struct iso1PaymentServiceSelectionResType PaymentServiceSelectionRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":PaymentDetailsReq, Complex type name='urn:iso:15118:2:2013:MsgBody,PaymentDetailsReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":eMAID,"urn:iso:15118:2:2013:MsgBody":ContractSignatureCertChain)',  derivedBy='EXTENSION'.  */
+		struct iso1PaymentDetailsReqType PaymentDetailsReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":PaymentDetailsRes, Complex type name='urn:iso:15118:2:2013:MsgBody,PaymentDetailsResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":GenChallenge,"urn:iso:15118:2:2013:MsgBody":EVSETimeStamp)',  derivedBy='EXTENSION'.  */
+		struct iso1PaymentDetailsResType PaymentDetailsRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":AuthorizationReq, Complex type name='urn:iso:15118:2:2013:MsgBody,AuthorizationReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":GenChallenge{0-1})',  derivedBy='EXTENSION'.  */
+		struct iso1AuthorizationReqType AuthorizationReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":AuthorizationRes, Complex type name='urn:iso:15118:2:2013:MsgBody,AuthorizationResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":EVSEProcessing)',  derivedBy='EXTENSION'.  */
+		struct iso1AuthorizationResType AuthorizationRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":ChargeParameterDiscoveryReq, Complex type name='urn:iso:15118:2:2013:MsgBody,ChargeParameterDiscoveryReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":MaxEntriesSAScheduleTuple{0-1},"urn:iso:15118:2:2013:MsgBody":RequestedEnergyTransferMode,"urn:iso:15118:2:2013:MsgDataTypes":EVChargeParameter)',  derivedBy='EXTENSION'.  */
+		struct iso1ChargeParameterDiscoveryReqType ChargeParameterDiscoveryReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":ChargeParameterDiscoveryRes, Complex type name='urn:iso:15118:2:2013:MsgBody,ChargeParameterDiscoveryResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":EVSEProcessing,"urn:iso:15118:2:2013:MsgDataTypes":SASchedules{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVSEChargeParameter)',  derivedBy='EXTENSION'.  */
+		struct iso1ChargeParameterDiscoveryResType ChargeParameterDiscoveryRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":PowerDeliveryReq, Complex type name='urn:iso:15118:2:2013:MsgBody,PowerDeliveryReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ChargeProgress,"urn:iso:15118:2:2013:MsgBody":SAScheduleTupleID,"urn:iso:15118:2:2013:MsgBody":ChargingProfile{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVPowerDeliveryParameter{0-1})',  derivedBy='EXTENSION'.  */
+		struct iso1PowerDeliveryReqType PowerDeliveryReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":PowerDeliveryRes, Complex type name='urn:iso:15118:2:2013:MsgBody,PowerDeliveryResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgDataTypes":EVSEStatus)',  derivedBy='EXTENSION'.  */
+		struct iso1PowerDeliveryResType PowerDeliveryRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":MeteringReceiptReq, Complex type name='urn:iso:15118:2:2013:MsgBody,MeteringReceiptReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":SessionID,"urn:iso:15118:2:2013:MsgBody":SAScheduleTupleID{0-1},"urn:iso:15118:2:2013:MsgBody":MeterInfo)',  derivedBy='EXTENSION'.  */
+		struct iso1MeteringReceiptReqType MeteringReceiptReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":MeteringReceiptRes, Complex type name='urn:iso:15118:2:2013:MsgBody,MeteringReceiptResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgDataTypes":EVSEStatus)',  derivedBy='EXTENSION'.  */
+		struct iso1MeteringReceiptResType MeteringReceiptRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":SessionStopReq, Complex type name='urn:iso:15118:2:2013:MsgBody,SessionStopReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ChargingSession)',  derivedBy='EXTENSION'.  */
+		struct iso1SessionStopReqType SessionStopReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":SessionStopRes, Complex type name='urn:iso:15118:2:2013:MsgBody,SessionStopResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode)',  derivedBy='EXTENSION'.  */
+		struct iso1SessionStopResType SessionStopRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":CertificateUpdateReq, Complex type name='urn:iso:15118:2:2013:MsgBody,CertificateUpdateReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2013:MsgBody":eMAID,"urn:iso:15118:2:2013:MsgBody":ListOfRootCertificateIDs)',  derivedBy='EXTENSION'.  */
+		struct iso1CertificateUpdateReqType CertificateUpdateReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":CertificateUpdateRes, Complex type name='urn:iso:15118:2:2013:MsgBody,CertificateUpdateResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":SAProvisioningCertificateChain,"urn:iso:15118:2:2013:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2013:MsgBody":ContractSignatureEncryptedPrivateKey,"urn:iso:15118:2:2013:MsgBody":DHpublickey,"urn:iso:15118:2:2013:MsgBody":eMAID,"urn:iso:15118:2:2013:MsgBody":RetryCounter{0-1})',  derivedBy='EXTENSION'.  */
+		struct iso1CertificateUpdateResType CertificateUpdateRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":CertificateInstallationReq, Complex type name='urn:iso:15118:2:2013:MsgBody,CertificateInstallationReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":OEMProvisioningCert,"urn:iso:15118:2:2013:MsgBody":ListOfRootCertificateIDs)',  derivedBy='EXTENSION'.  */
+		struct iso1CertificateInstallationReqType CertificateInstallationReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":CertificateInstallationRes, Complex type name='urn:iso:15118:2:2013:MsgBody,CertificateInstallationResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":SAProvisioningCertificateChain,"urn:iso:15118:2:2013:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2013:MsgBody":ContractSignatureEncryptedPrivateKey,"urn:iso:15118:2:2013:MsgBody":DHpublickey,"urn:iso:15118:2:2013:MsgBody":eMAID)',  derivedBy='EXTENSION'.  */
+		struct iso1CertificateInstallationResType CertificateInstallationRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":ChargingStatusReq, Complex type name='urn:iso:15118:2:2013:MsgBody,ChargingStatusReqType',  base type name='BodyBaseType',  content type='EMPTY',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+		struct iso1ChargingStatusReqType ChargingStatusReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":ChargingStatusRes, Complex type name='urn:iso:15118:2:2013:MsgBody,ChargingStatusResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":EVSEID,"urn:iso:15118:2:2013:MsgBody":SAScheduleTupleID,"urn:iso:15118:2:2013:MsgBody":EVSEMaxCurrent{0-1},"urn:iso:15118:2:2013:MsgBody":MeterInfo{0-1},"urn:iso:15118:2:2013:MsgBody":ReceiptRequired{0-1},"urn:iso:15118:2:2013:MsgBody":AC_EVSEStatus)',  derivedBy='EXTENSION'.  */
+		struct iso1ChargingStatusResType ChargingStatusRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":CableCheckReq, Complex type name='urn:iso:15118:2:2013:MsgBody,CableCheckReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":DC_EVStatus)',  derivedBy='EXTENSION'.  */
+		struct iso1CableCheckReqType CableCheckReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":CableCheckRes, Complex type name='urn:iso:15118:2:2013:MsgBody,CableCheckResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2013:MsgBody":EVSEProcessing)',  derivedBy='EXTENSION'.  */
+		struct iso1CableCheckResType CableCheckRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":PreChargeReq, Complex type name='urn:iso:15118:2:2013:MsgBody,PreChargeReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":DC_EVStatus,"urn:iso:15118:2:2013:MsgBody":EVTargetVoltage,"urn:iso:15118:2:2013:MsgBody":EVTargetCurrent)',  derivedBy='EXTENSION'.  */
+		struct iso1PreChargeReqType PreChargeReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":PreChargeRes, Complex type name='urn:iso:15118:2:2013:MsgBody,PreChargeResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2013:MsgBody":EVSEPresentVoltage)',  derivedBy='EXTENSION'.  */
+		struct iso1PreChargeResType PreChargeRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":CurrentDemandReq, Complex type name='urn:iso:15118:2:2013:MsgBody,CurrentDemandReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":DC_EVStatus,"urn:iso:15118:2:2013:MsgBody":EVTargetCurrent,"urn:iso:15118:2:2013:MsgBody":EVMaximumVoltageLimit{0-1},"urn:iso:15118:2:2013:MsgBody":EVMaximumCurrentLimit{0-1},"urn:iso:15118:2:2013:MsgBody":EVMaximumPowerLimit{0-1},"urn:iso:15118:2:2013:MsgBody":BulkChargingComplete{0-1},"urn:iso:15118:2:2013:MsgBody":ChargingComplete,"urn:iso:15118:2:2013:MsgBody":RemainingTimeToFullSoC{0-1},"urn:iso:15118:2:2013:MsgBody":RemainingTimeToBulkSoC{0-1},"urn:iso:15118:2:2013:MsgBody":EVTargetVoltage)',  derivedBy='EXTENSION'.  */
+		struct iso1CurrentDemandReqType CurrentDemandReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":CurrentDemandRes, Complex type name='urn:iso:15118:2:2013:MsgBody,CurrentDemandResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2013:MsgBody":EVSEPresentVoltage,"urn:iso:15118:2:2013:MsgBody":EVSEPresentCurrent,"urn:iso:15118:2:2013:MsgBody":EVSECurrentLimitAchieved,"urn:iso:15118:2:2013:MsgBody":EVSEVoltageLimitAchieved,"urn:iso:15118:2:2013:MsgBody":EVSEPowerLimitAchieved,"urn:iso:15118:2:2013:MsgBody":EVSEMaximumVoltageLimit{0-1},"urn:iso:15118:2:2013:MsgBody":EVSEMaximumCurrentLimit{0-1},"urn:iso:15118:2:2013:MsgBody":EVSEMaximumPowerLimit{0-1},"urn:iso:15118:2:2013:MsgBody":EVSEID,"urn:iso:15118:2:2013:MsgBody":SAScheduleTupleID,"urn:iso:15118:2:2013:MsgBody":MeterInfo{0-1},"urn:iso:15118:2:2013:MsgBody":ReceiptRequired{0-1})',  derivedBy='EXTENSION'.  */
+		struct iso1CurrentDemandResType CurrentDemandRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":WeldingDetectionReq, Complex type name='urn:iso:15118:2:2013:MsgBody,WeldingDetectionReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":DC_EVStatus)',  derivedBy='EXTENSION'.  */
+		struct iso1WeldingDetectionReqType WeldingDetectionReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":WeldingDetectionRes, Complex type name='urn:iso:15118:2:2013:MsgBody,WeldingDetectionResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2013:MsgBody":EVSEPresentVoltage)',  derivedBy='EXTENSION'.  */
+		struct iso1WeldingDetectionResType WeldingDetectionRes ;
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	};
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */
+		unsigned int BodyElement_isUsed:1;
+		unsigned int SessionSetupReq_isUsed:1;
+		unsigned int SessionSetupRes_isUsed:1;
+		unsigned int ServiceDiscoveryReq_isUsed:1;
+		unsigned int ServiceDiscoveryRes_isUsed:1;
+		unsigned int ServiceDetailReq_isUsed:1;
+		unsigned int ServiceDetailRes_isUsed:1;
+		unsigned int PaymentServiceSelectionReq_isUsed:1;
+		unsigned int PaymentServiceSelectionRes_isUsed:1;
+		unsigned int PaymentDetailsReq_isUsed:1;
+		unsigned int PaymentDetailsRes_isUsed:1;
+		unsigned int AuthorizationReq_isUsed:1;
+		unsigned int AuthorizationRes_isUsed:1;
+		unsigned int ChargeParameterDiscoveryReq_isUsed:1;
+		unsigned int ChargeParameterDiscoveryRes_isUsed:1;
+		unsigned int PowerDeliveryReq_isUsed:1;
+		unsigned int PowerDeliveryRes_isUsed:1;
+		unsigned int MeteringReceiptReq_isUsed:1;
+		unsigned int MeteringReceiptRes_isUsed:1;
+		unsigned int SessionStopReq_isUsed:1;
+		unsigned int SessionStopRes_isUsed:1;
+		unsigned int CertificateUpdateReq_isUsed:1;
+		unsigned int CertificateUpdateRes_isUsed:1;
+		unsigned int CertificateInstallationReq_isUsed:1;
+		unsigned int CertificateInstallationRes_isUsed:1;
+		unsigned int ChargingStatusReq_isUsed:1;
+		unsigned int ChargingStatusRes_isUsed:1;
+		unsigned int CableCheckReq_isUsed:1;
+		unsigned int CableCheckRes_isUsed:1;
+		unsigned int PreChargeReq_isUsed:1;
+		unsigned int PreChargeRes_isUsed:1;
+		unsigned int CurrentDemandReq_isUsed:1;
+		unsigned int CurrentDemandRes_isUsed:1;
+		unsigned int WeldingDetectionReq_isUsed:1;
+		unsigned int WeldingDetectionRes_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDef,#AnonType_V2G_Message',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDef":Header,"urn:iso:15118:2:2013:MsgDef":Body)',  derivedBy='RESTRICTION'.  */
+struct iso1AnonType_V2G_Message {
+	/* element: "urn:iso:15118:2:2013:MsgDef":Header, Complex type name='urn:iso:15118:2:2013:MsgHeader,MessageHeaderType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgHeader":SessionID,"urn:iso:15118:2:2013:MsgHeader":Notification{0-1},"http://www.w3.org/2000/09/xmldsig#":Signature{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso1MessageHeaderType Header ;
+	/* element: "urn:iso:15118:2:2013:MsgDef":Body, Complex type name='urn:iso:15118:2:2013:MsgBody,BodyType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":BodyElement{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso1BodyType Body ;
+};
+
+
+
+#define iso1EXIDocument_MgmtData_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1EXIDocument_KeyName_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1EXIDocument_DigestValue_BYTES_SIZE 350
+#define iso1EXIFragment_Exponent_BYTES_SIZE 350
+#define iso1EXIFragment_PgenCounter_BYTES_SIZE 350
+#define iso1EXIFragment_SessionID_BYTES_SIZE 8 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,sessionIDType is 8 */
+#define iso1EXIFragment_PGPKeyPacket_BYTES_SIZE 350
+#define iso1EXIFragment_Seed_BYTES_SIZE 350
+#define iso1EXIFragment_XPath_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1EXIFragment_OEMProvisioningCert_BYTES_SIZE 800 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,certificateType is 800 */
+#define iso1EXIFragment_SalesTariffDescription_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,tariffDescriptionType is 32 */
+#define iso1EXIFragment_EVCCID_BYTES_SIZE 6 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,evccIDType is 6 */
+#define iso1EXIFragment_MgmtData_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1EXIFragment_P_BYTES_SIZE 350
+#define iso1EXIFragment_Q_BYTES_SIZE 350
+#define iso1EXIFragment_X509SubjectName_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1EXIFragment_G_BYTES_SIZE 350
+#define iso1EXIFragment_J_BYTES_SIZE 350
+#define iso1EXIFragment_ServiceScope_CHARACTERS_SIZE 64 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,serviceScopeType is 64 */
+#define iso1EXIFragment_ServiceName_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,serviceNameType is 32 */
+#define iso1EXIFragment_X509CRL_BYTES_SIZE 350
+#define iso1EXIFragment_Y_BYTES_SIZE 350
+#define iso1EXIFragment_DigestValue_BYTES_SIZE 350
+#define iso1EXIFragment_SPKISexp_BYTES_SIZE 350
+#define iso1EXIFragment_stringValue_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1EXIFragment_PGPKeyID_BYTES_SIZE 350
+#define iso1EXIFragment_X509Certificate_BYTES_SIZE 350
+#define iso1EXIFragment_FaultMsg_CHARACTERS_SIZE 64 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,faultMsgType is 64 */
+#define iso1EXIFragment_EVSEID_CHARACTERS_SIZE 37 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,evseIDType is 37 */
+#define iso1EXIFragment_SigMeterReading_BYTES_SIZE 64 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,sigMeterReadingType is 64 */
+#define iso1EXIFragment_MeterID_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,meterIDType is 32 */
+#define iso1EXIFragment_KeyName_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1EXIFragment_GenChallenge_BYTES_SIZE 16 /* XML schema facet length for urn:iso:15118:2:2013:MsgDataTypes,genChallengeType is 16 */
+#define iso1EXIFragment_X509SKI_BYTES_SIZE 350
+#define iso1EXIFragment_Certificate_BYTES_SIZE 800 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,certificateType is 800 */
+#define iso1EXIFragment_X509IssuerName_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1EXIFragment_Modulus_BYTES_SIZE 350
+#define iso1exiElementFrag_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso1exiElementFrag_CHARACTERS_GENERIC_CHARACTERS_SIZE 50 + EXTRA_CHAR
+
+
+/* Global elements of EXI Document */
+struct iso1EXIDocument {
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	union {
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */
+	struct iso1AnonType_V2G_Message V2G_Message ;
+	struct iso1ServiceDiscoveryReqType ServiceDiscoveryReq ;
+	struct iso1ServiceDiscoveryResType ServiceDiscoveryRes ;
+	struct iso1MeteringReceiptReqType MeteringReceiptReq ;
+	struct iso1PaymentDetailsReqType PaymentDetailsReq ;
+	struct iso1MeteringReceiptResType MeteringReceiptRes ;
+	struct iso1PaymentDetailsResType PaymentDetailsRes ;
+	struct iso1SessionSetupReqType SessionSetupReq ;
+	struct iso1SessionSetupResType SessionSetupRes ;
+	struct iso1CableCheckReqType CableCheckReq ;
+	struct iso1CableCheckResType CableCheckRes ;
+	struct iso1CertificateInstallationReqType CertificateInstallationReq ;
+	struct iso1CertificateInstallationResType CertificateInstallationRes ;
+	struct iso1WeldingDetectionReqType WeldingDetectionReq ;
+	struct iso1WeldingDetectionResType WeldingDetectionRes ;
+	struct iso1CertificateUpdateReqType CertificateUpdateReq ;
+	struct iso1CertificateUpdateResType CertificateUpdateRes ;
+	struct iso1PaymentServiceSelectionReqType PaymentServiceSelectionReq ;
+	struct iso1PowerDeliveryReqType PowerDeliveryReq ;
+	struct iso1PaymentServiceSelectionResType PaymentServiceSelectionRes ;
+	struct iso1PowerDeliveryResType PowerDeliveryRes ;
+	struct iso1ChargingStatusReqType ChargingStatusReq ;
+	struct iso1ChargingStatusResType ChargingStatusRes ;
+	struct iso1BodyBaseType BodyElement ;
+	struct iso1CurrentDemandReqType CurrentDemandReq ;
+	struct iso1PreChargeReqType PreChargeReq ;
+	struct iso1CurrentDemandResType CurrentDemandRes ;
+	struct iso1PreChargeResType PreChargeRes ;
+	struct iso1SessionStopReqType SessionStopReq ;
+	struct iso1AuthorizationReqType AuthorizationReq ;
+	struct iso1SessionStopResType SessionStopRes ;
+	struct iso1AuthorizationResType AuthorizationRes ;
+	struct iso1ChargeParameterDiscoveryReqType ChargeParameterDiscoveryReq ;
+	struct iso1ChargeParameterDiscoveryResType ChargeParameterDiscoveryRes ;
+	struct iso1ServiceDetailReqType ServiceDetailReq ;
+	struct iso1ServiceDetailResType ServiceDetailRes ;
+	struct iso1DC_EVSEStatusType DC_EVSEStatus ;
+	struct iso1RelativeTimeIntervalType RelativeTimeInterval ;
+	struct iso1SalesTariffEntryType SalesTariffEntry ;
+	struct iso1DC_EVPowerDeliveryParameterType DC_EVPowerDeliveryParameter ;
+	struct iso1SASchedulesType SASchedules ;
+	struct iso1AC_EVChargeParameterType AC_EVChargeParameter ;
+	struct iso1SAScheduleListType SAScheduleList ;
+	struct iso1DC_EVStatusType DC_EVStatus ;
+	struct iso1EVStatusType EVStatus ;
+	struct iso1DC_EVChargeParameterType DC_EVChargeParameter ;
+	struct iso1DC_EVSEChargeParameterType DC_EVSEChargeParameter ;
+	struct iso1EVSEStatusType EVSEStatus ;
+	struct iso1IntervalType TimeInterval ;
+	struct iso1EVPowerDeliveryParameterType EVPowerDeliveryParameter ;
+	struct iso1EVSEChargeParameterType EVSEChargeParameter ;
+	struct iso1AC_EVSEStatusType AC_EVSEStatus ;
+	struct iso1EntryType Entry ;
+	struct iso1AC_EVSEChargeParameterType AC_EVSEChargeParameter ;
+	struct iso1PMaxScheduleEntryType PMaxScheduleEntry ;
+	struct iso1EVChargeParameterType EVChargeParameter ;
+	struct iso1SignaturePropertyType SignatureProperty ;
+	struct iso1DSAKeyValueType DSAKeyValue ;
+	struct iso1SignaturePropertiesType SignatureProperties ;
+	struct iso1KeyValueType KeyValue ;
+	struct iso1TransformsType Transforms ;
+	struct iso1DigestMethodType DigestMethod ;
+	struct iso1SignatureType Signature ;
+	struct iso1RetrievalMethodType RetrievalMethod ;
+	struct iso1ManifestType Manifest ;
+	struct iso1ReferenceType Reference ;
+	struct iso1CanonicalizationMethodType CanonicalizationMethod ;
+	struct iso1RSAKeyValueType RSAKeyValue ;
+	struct iso1TransformType Transform ;
+	struct iso1PGPDataType PGPData ;
+	struct {
+		exi_string_character_t characters[iso1EXIDocument_MgmtData_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  MgmtData ;
+	struct iso1SignatureMethodType SignatureMethod ;
+	struct iso1KeyInfoType KeyInfo ;
+	struct iso1SPKIDataType SPKIData ;
+	struct iso1X509DataType X509Data ;
+	struct iso1SignatureValueType SignatureValue ;
+	struct {
+		exi_string_character_t characters[iso1EXIDocument_KeyName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  KeyName ;
+	struct {
+		uint8_t bytes[iso1EXIDocument_DigestValue_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  DigestValue ;
+	struct iso1SignedInfoType SignedInfo ;
+	struct iso1ObjectType Object ;
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	};
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */
+	unsigned int V2G_Message_isUsed:1;
+	unsigned int ServiceDiscoveryReq_isUsed:1;
+	unsigned int ServiceDiscoveryRes_isUsed:1;
+	unsigned int MeteringReceiptReq_isUsed:1;
+	unsigned int PaymentDetailsReq_isUsed:1;
+	unsigned int MeteringReceiptRes_isUsed:1;
+	unsigned int PaymentDetailsRes_isUsed:1;
+	unsigned int SessionSetupReq_isUsed:1;
+	unsigned int SessionSetupRes_isUsed:1;
+	unsigned int CableCheckReq_isUsed:1;
+	unsigned int CableCheckRes_isUsed:1;
+	unsigned int CertificateInstallationReq_isUsed:1;
+	unsigned int CertificateInstallationRes_isUsed:1;
+	unsigned int WeldingDetectionReq_isUsed:1;
+	unsigned int WeldingDetectionRes_isUsed:1;
+	unsigned int CertificateUpdateReq_isUsed:1;
+	unsigned int CertificateUpdateRes_isUsed:1;
+	unsigned int PaymentServiceSelectionReq_isUsed:1;
+	unsigned int PowerDeliveryReq_isUsed:1;
+	unsigned int PaymentServiceSelectionRes_isUsed:1;
+	unsigned int PowerDeliveryRes_isUsed:1;
+	unsigned int ChargingStatusReq_isUsed:1;
+	unsigned int ChargingStatusRes_isUsed:1;
+	unsigned int BodyElement_isUsed:1;
+	unsigned int CurrentDemandReq_isUsed:1;
+	unsigned int PreChargeReq_isUsed:1;
+	unsigned int CurrentDemandRes_isUsed:1;
+	unsigned int PreChargeRes_isUsed:1;
+	unsigned int SessionStopReq_isUsed:1;
+	unsigned int AuthorizationReq_isUsed:1;
+	unsigned int SessionStopRes_isUsed:1;
+	unsigned int AuthorizationRes_isUsed:1;
+	unsigned int ChargeParameterDiscoveryReq_isUsed:1;
+	unsigned int ChargeParameterDiscoveryRes_isUsed:1;
+	unsigned int ServiceDetailReq_isUsed:1;
+	unsigned int ServiceDetailRes_isUsed:1;
+	unsigned int DC_EVSEStatus_isUsed:1;
+	unsigned int RelativeTimeInterval_isUsed:1;
+	unsigned int SalesTariffEntry_isUsed:1;
+	unsigned int DC_EVPowerDeliveryParameter_isUsed:1;
+	unsigned int SASchedules_isUsed:1;
+	unsigned int AC_EVChargeParameter_isUsed:1;
+	unsigned int SAScheduleList_isUsed:1;
+	unsigned int DC_EVStatus_isUsed:1;
+	unsigned int EVStatus_isUsed:1;
+	unsigned int DC_EVChargeParameter_isUsed:1;
+	unsigned int DC_EVSEChargeParameter_isUsed:1;
+	unsigned int EVSEStatus_isUsed:1;
+	unsigned int TimeInterval_isUsed:1;
+	unsigned int EVPowerDeliveryParameter_isUsed:1;
+	unsigned int EVSEChargeParameter_isUsed:1;
+	unsigned int AC_EVSEStatus_isUsed:1;
+	unsigned int Entry_isUsed:1;
+	unsigned int AC_EVSEChargeParameter_isUsed:1;
+	unsigned int PMaxScheduleEntry_isUsed:1;
+	unsigned int EVChargeParameter_isUsed:1;
+	unsigned int SignatureProperty_isUsed:1;
+	unsigned int DSAKeyValue_isUsed:1;
+	unsigned int SignatureProperties_isUsed:1;
+	unsigned int KeyValue_isUsed:1;
+	unsigned int Transforms_isUsed:1;
+	unsigned int DigestMethod_isUsed:1;
+	unsigned int Signature_isUsed:1;
+	unsigned int RetrievalMethod_isUsed:1;
+	unsigned int Manifest_isUsed:1;
+	unsigned int Reference_isUsed:1;
+	unsigned int CanonicalizationMethod_isUsed:1;
+	unsigned int RSAKeyValue_isUsed:1;
+	unsigned int Transform_isUsed:1;
+	unsigned int PGPData_isUsed:1;
+	unsigned int MgmtData_isUsed:1;
+	unsigned int SignatureMethod_isUsed:1;
+	unsigned int KeyInfo_isUsed:1;
+	unsigned int SPKIData_isUsed:1;
+	unsigned int X509Data_isUsed:1;
+	unsigned int SignatureValue_isUsed:1;
+	unsigned int KeyName_isUsed:1;
+	unsigned int DigestValue_isUsed:1;
+	unsigned int SignedInfo_isUsed:1;
+	unsigned int Object_isUsed:1;
+
+
+	int _warning_;
+};
+
+
+#if DEPLOY_ISO1_CODEC_FRAGMENT == SUPPORT_YES
+struct iso1EXISchemaInformedElementFragmentGrammar {
+	/* Schema-informed Element Fragment Grammar for START_ELEMENT({urn:iso:15118:2:2013:MsgBody}eMAID) */
+	/* 4 ATTRIBUTE[STRING]({urn:iso:15118:2:2013:MsgDataTypes}Id) */
+	unsigned int Id_isUsed:1;
+	struct {
+		exi_string_character_t characters[iso1exiElementFrag_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	} Id ;
+	/* 247 START_ELEMENT({urn:iso:15118:2:2013:MsgBody}eMAID) */
+	unsigned int CHARACTERS_GENERIC_isUsed:1;
+	struct {
+		exi_string_character_t characters[iso1exiElementFrag_CHARACTERS_GENERIC_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	} CHARACTERS_GENERIC ;
+
+
+	int _warning_;
+};
+/* Possible elements of EXI Fragment */
+struct iso1EXIFragment {
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	union {
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */
+	int ChargingComplete ;
+	struct iso1PhysicalValueType EVMaxVoltage ;
+	uint16_t ServiceID ;
+	int8_t EVRESSSOC ;
+	uint64_t MeterReading ;
+	struct iso1PhysicalValueType physicalValue ;
+	struct iso1IntervalType TimeInterval ;
+	struct iso1AC_EVSEStatusType AC_EVSEStatus ;
+	struct iso1PhysicalValueType EVMaxCurrent ;
+	uint32_t ChargingProfileEntryStart ;
+	struct iso1PhysicalValueType EVSEMaxCurrent ;
+	iso1costKindType costKind ;
+	struct iso1PhysicalValueType EAmount ;
+	iso1EnergyTransferModeType EnergyTransferMode ;
+	int64_t X509SerialNumber ;
+	uint8_t NumEPriceLevels ;
+	struct iso1RetrievalMethodType RetrievalMethod ;
+	struct iso1PhysicalValueType PMax ;
+	int16_t ParameterSetID ;
+	int8_t BulkSOC ;
+	struct iso1PhysicalValueType EVSEMinimumCurrentLimit ;
+	int EVSEPowerLimitAchieved ;
+	struct iso1SalesTariffEntryType SalesTariffEntry ;
+	struct iso1TransformsType Transforms ;
+	iso1EVSEProcessingType EVSEProcessing ;
+	iso1isolationLevelType EVSEIsolationStatus ;
+	int BulkChargingComplete ;
+	uint8_t SAScheduleTupleID ;
+	iso1faultCodeType FaultCode ;
+	struct iso1X509IssuerSerialType RootCertificateID ;
+	int64_t HMACOutputLength ;
+	struct {
+		uint8_t bytes[iso1EXIFragment_Exponent_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Exponent ;
+	struct iso1X509IssuerSerialType X509IssuerSerial ;
+	int8_t byteValue ;
+	struct iso1SPKIDataType SPKIData ;
+	struct iso1SAScheduleListType SAScheduleList ;
+	struct iso1PhysicalValueType EVMaximumPowerLimit ;
+	struct iso1DC_EVSEStatusType DC_EVSEStatus ;
+	int16_t RetryCounter ;
+	struct iso1PhysicalValueType EVSEMaximumCurrentLimit ;
+	struct iso1SalesTariffType SalesTariff ;
+	struct {
+		uint8_t bytes[iso1EXIFragment_PgenCounter_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  PgenCounter ;
+	struct iso1X509DataType X509Data ;
+	struct iso1PhysicalValueType EVSECurrentRegulationTolerance ;
+	struct iso1KeyValueType KeyValue ;
+	struct iso1AnonType_V2G_Message V2G_Message ;
+	struct iso1PhysicalValueType EVSEMinimumVoltageLimit ;
+	iso1responseCodeType ResponseCode ;
+	struct iso1ProfileEntryType ProfileEntry ;
+	uint32_t start ;
+	iso1DC_EVErrorCodeType EVErrorCode ;
+	struct iso1EVChargeParameterType EVChargeParameter ;
+	struct iso1CertificateChainType ContractSignatureCertChain ;
+	struct iso1PhysicalValueType EVSEPresentCurrent ;
+	struct iso1PGPDataType PGPData ;
+	struct iso1PhysicalValueType EVMinCurrent ;
+	int8_t FullSOC ;
+	uint32_t amount ;
+	struct iso1DC_EVSEChargeParameterType DC_EVSEChargeParameter ;
+	struct iso1EntryType Entry ;
+	struct iso1SessionStopResType SessionStopRes ;
+	int16_t shortValue ;
+	struct iso1CertificateChainType SAProvisioningCertificateChain ;
+	struct iso1PowerDeliveryReqType PowerDeliveryReq ;
+	struct iso1PowerDeliveryResType PowerDeliveryRes ;
+	struct iso1SessionStopReqType SessionStopReq ;
+	struct iso1SignaturePropertyType SignatureProperty ;
+	struct {
+		uint8_t bytes[iso1EXIFragment_SessionID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  SessionID ;
+	struct {
+		uint8_t bytes[iso1EXIFragment_PGPKeyPacket_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  PGPKeyPacket ;
+	struct iso1MessageHeaderType Header ;
+	struct {
+		uint8_t bytes[iso1EXIFragment_Seed_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Seed ;
+	struct iso1RSAKeyValueType RSAKeyValue ;
+	int FreeService ;
+	struct iso1PhysicalValueType EVSENominalVoltage ;
+	struct {
+		exi_string_character_t characters[iso1EXIFragment_XPath_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  XPath ;
+	struct iso1MeteringReceiptResType MeteringReceiptRes ;
+	struct iso1ServiceDiscoveryReqType ServiceDiscoveryReq ;
+	struct iso1MeteringReceiptReqType MeteringReceiptReq ;
+	struct iso1PreChargeResType PreChargeRes ;
+	struct {
+		uint8_t bytes[iso1EXIFragment_OEMProvisioningCert_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  OEMProvisioningCert ;
+	struct iso1PhysicalValueType EVEnergyCapacity ;
+	struct iso1SignatureType Signature ;
+	struct iso1AC_EVSEChargeParameterType AC_EVSEChargeParameter ;
+	struct iso1ServiceDiscoveryResType ServiceDiscoveryRes ;
+	struct iso1PreChargeReqType PreChargeReq ;
+	uint16_t NotificationMaxDelay ;
+	struct iso1CableCheckReqType CableCheckReq ;
+	struct {
+		exi_string_character_t characters[iso1EXIFragment_SalesTariffDescription_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  SalesTariffDescription ;
+	int EVSEVoltageLimitAchieved ;
+	int boolValue ;
+	struct {
+		uint8_t bytes[iso1EXIFragment_EVCCID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  EVCCID ;
+	struct iso1DC_EVChargeParameterType DC_EVChargeParameter ;
+	struct iso1ChargingStatusReqType ChargingStatusReq ;
+	struct iso1CableCheckResType CableCheckRes ;
+	struct {
+		exi_string_character_t characters[iso1EXIFragment_MgmtData_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  MgmtData ;
+	struct iso1MeterInfoType MeterInfo ;
+	struct iso1PhysicalValueType EVSEEnergyToBeDelivered ;
+	struct iso1EVSEStatusType EVSEStatus ;
+	struct iso1ServiceType Service ;
+	struct iso1ManifestType Manifest ;
+	struct iso1PhysicalValueType EVMaximumVoltageLimit ;
+	struct {
+		uint8_t bytes[iso1EXIFragment_P_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  P ;
+	struct {
+		uint8_t bytes[iso1EXIFragment_Q_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Q ;
+	struct {
+		exi_string_character_t characters[iso1EXIFragment_X509SubjectName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  X509SubjectName ;
+	int32_t intValue ;
+	struct iso1ChargingProfileType ChargingProfile ;
+	struct {
+		uint8_t bytes[iso1EXIFragment_G_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  G ;
+	struct {
+		uint8_t bytes[iso1EXIFragment_J_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  J ;
+	struct {
+		exi_string_character_t characters[iso1EXIFragment_ServiceScope_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ServiceScope ;
+	int ReceiptRequired ;
+	struct {
+		exi_string_character_t characters[iso1EXIFragment_ServiceName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ServiceName ;
+	int16_t MeterStatus ;
+	struct iso1DC_EVStatusType DC_EVStatus ;
+	struct iso1ChargingStatusResType ChargingStatusRes ;
+	iso1serviceCategoryType ServiceCategory ;
+	struct iso1NotificationType Notification ;
+	struct {
+		uint8_t bytes[iso1EXIFragment_X509CRL_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  X509CRL ;
+	struct {
+		uint8_t bytes[iso1EXIFragment_Y_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Y ;
+	struct iso1PhysicalValueType EVSEPresentVoltage ;
+	struct {
+		uint8_t bytes[iso1EXIFragment_DigestValue_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  DigestValue ;
+	struct iso1PhysicalValueType EVSEMaximumPowerLimit ;
+	int64_t EVSETimeStamp ;
+	struct iso1CostType Cost ;
+	struct iso1PhysicalValueType EVSEPeakCurrentRipple ;
+	struct iso1ConsumptionCostType ConsumptionCost ;
+	struct iso1DigestMethodType DigestMethod ;
+	struct {
+		uint8_t bytes[iso1EXIFragment_SPKISexp_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  SPKISexp ;
+	struct iso1SessionSetupResType SessionSetupRes ;
+	int EVSECurrentLimitAchieved ;
+	struct iso1ServiceDetailReqType ServiceDetailReq ;
+	struct iso1PhysicalValueType EVSEMaximumVoltageLimit ;
+	struct iso1ServiceDetailResType ServiceDetailRes ;
+	struct iso1SignaturePropertiesType SignatureProperties ;
+	uint8_t EPriceLevel ;
+	struct iso1PhysicalValueType EVTargetCurrent ;
+	struct iso1PhysicalValueType RemainingTimeToBulkSoC ;
+	struct {
+		exi_string_character_t characters[iso1EXIFragment_stringValue_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  stringValue ;
+	struct iso1SessionSetupReqType SessionSetupReq ;
+	int8_t Multiplier ;
+	struct iso1CertificateUpdateResType CertificateUpdateRes ;
+	struct {
+		uint8_t bytes[iso1EXIFragment_PGPKeyID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  PGPKeyID ;
+	struct iso1PhysicalValueType EVTargetVoltage ;
+	struct iso1DSAKeyValueType DSAKeyValue ;
+	struct iso1CertificateUpdateReqType CertificateUpdateReq ;
+	struct iso1PhysicalValueType EVMaximumCurrentLimit ;
+	struct iso1CanonicalizationMethodType CanonicalizationMethod ;
+	struct {
+		uint8_t bytes[iso1EXIFragment_X509Certificate_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  X509Certificate ;
+	struct iso1CertificateInstallationReqType CertificateInstallationReq ;
+	struct iso1CertificateInstallationResType CertificateInstallationRes ;
+	struct iso1EVStatusType EVStatus ;
+	struct iso1SupportedEnergyTransferModeType SupportedEnergyTransferMode ;
+	struct iso1SignedInfoType SignedInfo ;
+	/* Schema-informed Element Fragment Grammar for {urn:iso:15118:2:2013:MsgBody}eMAID */
+	struct iso1EXISchemaInformedElementFragmentGrammar eMAID ;
+	uint16_t MaxEntriesSAScheduleTuple ;
+	iso1paymentOptionType PaymentOption ;
+	struct iso1SubCertificatesType SubCertificates ;
+	struct iso1PaymentDetailsReqType PaymentDetailsReq ;
+	struct iso1AuthorizationReqType AuthorizationReq ;
+	struct iso1PaymentDetailsResType PaymentDetailsRes ;
+	struct iso1AuthorizationResType AuthorizationRes ;
+	iso1DC_EVSEStatusCodeType EVSEStatusCode ;
+	struct iso1PaymentOptionListType PaymentOptionList ;
+	struct iso1SelectedServiceListType SelectedServiceList ;
+	struct iso1ContractSignatureEncryptedPrivateKeyType ContractSignatureEncryptedPrivateKey ;
+	struct iso1WeldingDetectionReqType WeldingDetectionReq ;
+	struct {
+		exi_string_character_t characters[iso1EXIFragment_FaultMsg_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  FaultMsg ;
+	struct iso1WeldingDetectionResType WeldingDetectionRes ;
+	iso1chargeProgressType ChargeProgress ;
+	iso1paymentOptionType SelectedPaymentOption ;
+	struct {
+		exi_string_character_t characters[iso1EXIFragment_EVSEID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  EVSEID ;
+	struct iso1ParameterSetType ParameterSet ;
+	struct iso1EVSEChargeParameterType EVSEChargeParameter ;
+	struct {
+		uint8_t bytes[iso1EXIFragment_SigMeterReading_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  SigMeterReading ;
+	struct iso1SignatureValueType SignatureValue ;
+	struct iso1SASchedulesType SASchedules ;
+	uint8_t SalesTariffID ;
+	struct iso1DiffieHellmanPublickeyType DHpublickey ;
+	struct iso1ServiceParameterListType ServiceParameterList ;
+	struct iso1ListOfRootCertificateIDsType ListOfRootCertificateIDs ;
+	struct {
+		exi_string_character_t characters[iso1EXIFragment_MeterID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  MeterID ;
+	struct iso1ChargeServiceType ChargeService ;
+	int8_t amountMultiplier ;
+	int RCD ;
+	struct iso1PhysicalValueType startValue ;
+	struct iso1CurrentDemandReqType CurrentDemandReq ;
+	struct {
+		exi_string_character_t characters[iso1EXIFragment_KeyName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  KeyName ;
+	struct iso1DC_EVPowerDeliveryParameterType DC_EVPowerDeliveryParameter ;
+	struct iso1BodyType Body ;
+	iso1EVSENotificationType EVSENotification ;
+	int16_t Value ;
+	struct iso1KeyInfoType KeyInfo ;
+	struct {
+		uint8_t bytes[iso1EXIFragment_GenChallenge_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  GenChallenge ;
+	struct iso1AC_EVChargeParameterType AC_EVChargeParameter ;
+	struct iso1PMaxScheduleEntryType PMaxScheduleEntry ;
+	struct iso1ParameterType Parameter ;
+	struct {
+		uint8_t bytes[iso1EXIFragment_X509SKI_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  X509SKI ;
+	struct iso1SelectedServiceType SelectedService ;
+	struct iso1PaymentServiceSelectionReqType PaymentServiceSelectionReq ;
+	struct iso1PaymentServiceSelectionResType PaymentServiceSelectionRes ;
+	struct {
+		uint8_t bytes[iso1EXIFragment_Certificate_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Certificate ;
+	struct iso1CurrentDemandResType CurrentDemandRes ;
+	int EVReady ;
+	struct iso1SignatureMethodType SignatureMethod ;
+	struct iso1PMaxScheduleType PMaxSchedule ;
+	iso1unitSymbolType Unit ;
+	struct {
+		exi_string_character_t characters[iso1EXIFragment_X509IssuerName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  X509IssuerName ;
+	struct iso1ReferenceType Reference ;
+	int8_t ChargingProfileEntryMaxNumberOfPhasesInUse ;
+	struct iso1EVPowerDeliveryParameterType EVPowerDeliveryParameter ;
+	struct iso1PhysicalValueType ChargingProfileEntryMaxPower ;
+	struct iso1ChargeParameterDiscoveryReqType ChargeParameterDiscoveryReq ;
+	uint32_t duration ;
+	int64_t TMeter ;
+	struct iso1ChargeParameterDiscoveryResType ChargeParameterDiscoveryRes ;
+	struct iso1ServiceListType ServiceList ;
+	struct iso1SAScheduleTupleType SAScheduleTuple ;
+	struct iso1BodyBaseType BodyElement ;
+	struct iso1PhysicalValueType RemainingTimeToFullSoC ;
+	struct iso1RelativeTimeIntervalType RelativeTimeInterval ;
+	struct iso1TransformType Transform ;
+	uint32_t DepartureTime ;
+	struct iso1ObjectType Object ;
+	struct iso1PhysicalValueType EVEnergyRequest ;
+	struct {
+		uint8_t bytes[iso1EXIFragment_Modulus_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Modulus ;
+	iso1chargingSessionType ChargingSession ;
+	iso1EnergyTransferModeType RequestedEnergyTransferMode ;
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	};
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */
+	unsigned int ChargingComplete_isUsed:1;
+	unsigned int EVMaxVoltage_isUsed:1;
+	unsigned int ServiceID_isUsed:1;
+	unsigned int EVRESSSOC_isUsed:1;
+	unsigned int MeterReading_isUsed:1;
+	unsigned int physicalValue_isUsed:1;
+	unsigned int TimeInterval_isUsed:1;
+	unsigned int AC_EVSEStatus_isUsed:1;
+	unsigned int EVMaxCurrent_isUsed:1;
+	unsigned int ChargingProfileEntryStart_isUsed:1;
+	unsigned int EVSEMaxCurrent_isUsed:1;
+	unsigned int costKind_isUsed:1;
+	unsigned int EAmount_isUsed:1;
+	unsigned int EnergyTransferMode_isUsed:1;
+	unsigned int X509SerialNumber_isUsed:1;
+	unsigned int NumEPriceLevels_isUsed:1;
+	unsigned int RetrievalMethod_isUsed:1;
+	unsigned int PMax_isUsed:1;
+	unsigned int ParameterSetID_isUsed:1;
+	unsigned int BulkSOC_isUsed:1;
+	unsigned int EVSEMinimumCurrentLimit_isUsed:1;
+	unsigned int EVSEPowerLimitAchieved_isUsed:1;
+	unsigned int SalesTariffEntry_isUsed:1;
+	unsigned int Transforms_isUsed:1;
+	unsigned int EVSEProcessing_isUsed:1;
+	unsigned int EVSEIsolationStatus_isUsed:1;
+	unsigned int BulkChargingComplete_isUsed:1;
+	unsigned int SAScheduleTupleID_isUsed:1;
+	unsigned int FaultCode_isUsed:1;
+	unsigned int RootCertificateID_isUsed:1;
+	unsigned int HMACOutputLength_isUsed:1;
+	unsigned int Exponent_isUsed:1;
+	unsigned int X509IssuerSerial_isUsed:1;
+	unsigned int byteValue_isUsed:1;
+	unsigned int SPKIData_isUsed:1;
+	unsigned int SAScheduleList_isUsed:1;
+	unsigned int EVMaximumPowerLimit_isUsed:1;
+	unsigned int DC_EVSEStatus_isUsed:1;
+	unsigned int RetryCounter_isUsed:1;
+	unsigned int EVSEMaximumCurrentLimit_isUsed:1;
+	unsigned int SalesTariff_isUsed:1;
+	unsigned int PgenCounter_isUsed:1;
+	unsigned int X509Data_isUsed:1;
+	unsigned int EVSECurrentRegulationTolerance_isUsed:1;
+	unsigned int KeyValue_isUsed:1;
+	unsigned int V2G_Message_isUsed:1;
+	unsigned int EVSEMinimumVoltageLimit_isUsed:1;
+	unsigned int ResponseCode_isUsed:1;
+	unsigned int ProfileEntry_isUsed:1;
+	unsigned int start_isUsed:1;
+	unsigned int EVErrorCode_isUsed:1;
+	unsigned int EVChargeParameter_isUsed:1;
+	unsigned int ContractSignatureCertChain_isUsed:1;
+	unsigned int EVSEPresentCurrent_isUsed:1;
+	unsigned int PGPData_isUsed:1;
+	unsigned int EVMinCurrent_isUsed:1;
+	unsigned int FullSOC_isUsed:1;
+	unsigned int amount_isUsed:1;
+	unsigned int DC_EVSEChargeParameter_isUsed:1;
+	unsigned int Entry_isUsed:1;
+	unsigned int SessionStopRes_isUsed:1;
+	unsigned int shortValue_isUsed:1;
+	unsigned int SAProvisioningCertificateChain_isUsed:1;
+	unsigned int PowerDeliveryReq_isUsed:1;
+	unsigned int PowerDeliveryRes_isUsed:1;
+	unsigned int SessionStopReq_isUsed:1;
+	unsigned int SignatureProperty_isUsed:1;
+	unsigned int SessionID_isUsed:1;
+	unsigned int PGPKeyPacket_isUsed:1;
+	unsigned int Header_isUsed:1;
+	unsigned int Seed_isUsed:1;
+	unsigned int RSAKeyValue_isUsed:1;
+	unsigned int FreeService_isUsed:1;
+	unsigned int EVSENominalVoltage_isUsed:1;
+	unsigned int XPath_isUsed:1;
+	unsigned int MeteringReceiptRes_isUsed:1;
+	unsigned int ServiceDiscoveryReq_isUsed:1;
+	unsigned int MeteringReceiptReq_isUsed:1;
+	unsigned int PreChargeRes_isUsed:1;
+	unsigned int OEMProvisioningCert_isUsed:1;
+	unsigned int EVEnergyCapacity_isUsed:1;
+	unsigned int Signature_isUsed:1;
+	unsigned int AC_EVSEChargeParameter_isUsed:1;
+	unsigned int ServiceDiscoveryRes_isUsed:1;
+	unsigned int PreChargeReq_isUsed:1;
+	unsigned int NotificationMaxDelay_isUsed:1;
+	unsigned int CableCheckReq_isUsed:1;
+	unsigned int SalesTariffDescription_isUsed:1;
+	unsigned int EVSEVoltageLimitAchieved_isUsed:1;
+	unsigned int boolValue_isUsed:1;
+	unsigned int EVCCID_isUsed:1;
+	unsigned int DC_EVChargeParameter_isUsed:1;
+	unsigned int ChargingStatusReq_isUsed:1;
+	unsigned int CableCheckRes_isUsed:1;
+	unsigned int MgmtData_isUsed:1;
+	unsigned int MeterInfo_isUsed:1;
+	unsigned int EVSEEnergyToBeDelivered_isUsed:1;
+	unsigned int EVSEStatus_isUsed:1;
+	unsigned int Service_isUsed:1;
+	unsigned int Manifest_isUsed:1;
+	unsigned int EVMaximumVoltageLimit_isUsed:1;
+	unsigned int P_isUsed:1;
+	unsigned int Q_isUsed:1;
+	unsigned int X509SubjectName_isUsed:1;
+	unsigned int intValue_isUsed:1;
+	unsigned int ChargingProfile_isUsed:1;
+	unsigned int G_isUsed:1;
+	unsigned int J_isUsed:1;
+	unsigned int ServiceScope_isUsed:1;
+	unsigned int ReceiptRequired_isUsed:1;
+	unsigned int ServiceName_isUsed:1;
+	unsigned int MeterStatus_isUsed:1;
+	unsigned int DC_EVStatus_isUsed:1;
+	unsigned int ChargingStatusRes_isUsed:1;
+	unsigned int ServiceCategory_isUsed:1;
+	unsigned int Notification_isUsed:1;
+	unsigned int X509CRL_isUsed:1;
+	unsigned int Y_isUsed:1;
+	unsigned int EVSEPresentVoltage_isUsed:1;
+	unsigned int DigestValue_isUsed:1;
+	unsigned int EVSEMaximumPowerLimit_isUsed:1;
+	unsigned int EVSETimeStamp_isUsed:1;
+	unsigned int Cost_isUsed:1;
+	unsigned int EVSEPeakCurrentRipple_isUsed:1;
+	unsigned int ConsumptionCost_isUsed:1;
+	unsigned int DigestMethod_isUsed:1;
+	unsigned int SPKISexp_isUsed:1;
+	unsigned int SessionSetupRes_isUsed:1;
+	unsigned int EVSECurrentLimitAchieved_isUsed:1;
+	unsigned int ServiceDetailReq_isUsed:1;
+	unsigned int EVSEMaximumVoltageLimit_isUsed:1;
+	unsigned int ServiceDetailRes_isUsed:1;
+	unsigned int SignatureProperties_isUsed:1;
+	unsigned int EPriceLevel_isUsed:1;
+	unsigned int EVTargetCurrent_isUsed:1;
+	unsigned int RemainingTimeToBulkSoC_isUsed:1;
+	unsigned int stringValue_isUsed:1;
+	unsigned int SessionSetupReq_isUsed:1;
+	unsigned int Multiplier_isUsed:1;
+	unsigned int CertificateUpdateRes_isUsed:1;
+	unsigned int PGPKeyID_isUsed:1;
+	unsigned int EVTargetVoltage_isUsed:1;
+	unsigned int DSAKeyValue_isUsed:1;
+	unsigned int CertificateUpdateReq_isUsed:1;
+	unsigned int EVMaximumCurrentLimit_isUsed:1;
+	unsigned int CanonicalizationMethod_isUsed:1;
+	unsigned int X509Certificate_isUsed:1;
+	unsigned int CertificateInstallationReq_isUsed:1;
+	unsigned int CertificateInstallationRes_isUsed:1;
+	unsigned int EVStatus_isUsed:1;
+	unsigned int SupportedEnergyTransferMode_isUsed:1;
+	unsigned int SignedInfo_isUsed:1;
+	unsigned int eMAID_isUsed:1;
+	unsigned int MaxEntriesSAScheduleTuple_isUsed:1;
+	unsigned int PaymentOption_isUsed:1;
+	unsigned int SubCertificates_isUsed:1;
+	unsigned int PaymentDetailsReq_isUsed:1;
+	unsigned int AuthorizationReq_isUsed:1;
+	unsigned int PaymentDetailsRes_isUsed:1;
+	unsigned int AuthorizationRes_isUsed:1;
+	unsigned int EVSEStatusCode_isUsed:1;
+	unsigned int PaymentOptionList_isUsed:1;
+	unsigned int SelectedServiceList_isUsed:1;
+	unsigned int ContractSignatureEncryptedPrivateKey_isUsed:1;
+	unsigned int WeldingDetectionReq_isUsed:1;
+	unsigned int FaultMsg_isUsed:1;
+	unsigned int WeldingDetectionRes_isUsed:1;
+	unsigned int ChargeProgress_isUsed:1;
+	unsigned int SelectedPaymentOption_isUsed:1;
+	unsigned int EVSEID_isUsed:1;
+	unsigned int ParameterSet_isUsed:1;
+	unsigned int EVSEChargeParameter_isUsed:1;
+	unsigned int SigMeterReading_isUsed:1;
+	unsigned int SignatureValue_isUsed:1;
+	unsigned int SASchedules_isUsed:1;
+	unsigned int SalesTariffID_isUsed:1;
+	unsigned int DHpublickey_isUsed:1;
+	unsigned int ServiceParameterList_isUsed:1;
+	unsigned int ListOfRootCertificateIDs_isUsed:1;
+	unsigned int MeterID_isUsed:1;
+	unsigned int ChargeService_isUsed:1;
+	unsigned int amountMultiplier_isUsed:1;
+	unsigned int RCD_isUsed:1;
+	unsigned int startValue_isUsed:1;
+	unsigned int CurrentDemandReq_isUsed:1;
+	unsigned int KeyName_isUsed:1;
+	unsigned int DC_EVPowerDeliveryParameter_isUsed:1;
+	unsigned int Body_isUsed:1;
+	unsigned int EVSENotification_isUsed:1;
+	unsigned int Value_isUsed:1;
+	unsigned int KeyInfo_isUsed:1;
+	unsigned int GenChallenge_isUsed:1;
+	unsigned int AC_EVChargeParameter_isUsed:1;
+	unsigned int PMaxScheduleEntry_isUsed:1;
+	unsigned int Parameter_isUsed:1;
+	unsigned int X509SKI_isUsed:1;
+	unsigned int SelectedService_isUsed:1;
+	unsigned int PaymentServiceSelectionReq_isUsed:1;
+	unsigned int PaymentServiceSelectionRes_isUsed:1;
+	unsigned int Certificate_isUsed:1;
+	unsigned int CurrentDemandRes_isUsed:1;
+	unsigned int EVReady_isUsed:1;
+	unsigned int SignatureMethod_isUsed:1;
+	unsigned int PMaxSchedule_isUsed:1;
+	unsigned int Unit_isUsed:1;
+	unsigned int X509IssuerName_isUsed:1;
+	unsigned int Reference_isUsed:1;
+	unsigned int ChargingProfileEntryMaxNumberOfPhasesInUse_isUsed:1;
+	unsigned int EVPowerDeliveryParameter_isUsed:1;
+	unsigned int ChargingProfileEntryMaxPower_isUsed:1;
+	unsigned int ChargeParameterDiscoveryReq_isUsed:1;
+	unsigned int duration_isUsed:1;
+	unsigned int TMeter_isUsed:1;
+	unsigned int ChargeParameterDiscoveryRes_isUsed:1;
+	unsigned int ServiceList_isUsed:1;
+	unsigned int SAScheduleTuple_isUsed:1;
+	unsigned int BodyElement_isUsed:1;
+	unsigned int RemainingTimeToFullSoC_isUsed:1;
+	unsigned int RelativeTimeInterval_isUsed:1;
+	unsigned int Transform_isUsed:1;
+	unsigned int DepartureTime_isUsed:1;
+	unsigned int Object_isUsed:1;
+	unsigned int EVEnergyRequest_isUsed:1;
+	unsigned int Modulus_isUsed:1;
+	unsigned int ChargingSession_isUsed:1;
+	unsigned int RequestedEnergyTransferMode_isUsed:1;
+
+
+	int _warning_;
+};
+#endif /* DEPLOY_ISO1_CODEC_FRAGMENT */
+
+
+/* Initialization methods for structs */
+
+void init_iso1EXIDocument(struct iso1EXIDocument* exiDoc);
+#if DEPLOY_ISO1_CODEC_FRAGMENT == SUPPORT_YES
+void init_iso1EXIFragment(struct iso1EXIFragment* exiFrag);
+void init_iso1EXISchemaInformedElementFragmentGrammar(struct iso1EXISchemaInformedElementFragmentGrammar* exiFrag);
+#endif /* DEPLOY_ISO1_CODEC_FRAGMENT */
+void init_iso1MessageHeaderType(struct iso1MessageHeaderType* iso1MessageHeaderType);
+void init_iso1SignatureType(struct iso1SignatureType* iso1SignatureType);
+void init_iso1PowerDeliveryReqType(struct iso1PowerDeliveryReqType* iso1PowerDeliveryReqType);
+void init_iso1ParameterType(struct iso1ParameterType* iso1ParameterType);
+void init_iso1CertificateInstallationReqType(struct iso1CertificateInstallationReqType* iso1CertificateInstallationReqType);
+void init_iso1SessionSetupResType(struct iso1SessionSetupResType* iso1SessionSetupResType);
+void init_iso1EVChargeParameterType(struct iso1EVChargeParameterType* iso1EVChargeParameterType);
+void init_iso1DiffieHellmanPublickeyType(struct iso1DiffieHellmanPublickeyType* iso1DiffieHellmanPublickeyType);
+void init_iso1ServiceDiscoveryResType(struct iso1ServiceDiscoveryResType* iso1ServiceDiscoveryResType);
+void init_iso1ServiceParameterListType(struct iso1ServiceParameterListType* iso1ServiceParameterListType);
+void init_iso1CertificateChainType(struct iso1CertificateChainType* iso1CertificateChainType);
+void init_iso1SASchedulesType(struct iso1SASchedulesType* iso1SASchedulesType);
+void init_iso1DC_EVSEStatusType(struct iso1DC_EVSEStatusType* iso1DC_EVSEStatusType);
+void init_iso1PreChargeResType(struct iso1PreChargeResType* iso1PreChargeResType);
+void init_iso1ParameterSetType(struct iso1ParameterSetType* iso1ParameterSetType);
+void init_iso1ServiceDetailReqType(struct iso1ServiceDetailReqType* iso1ServiceDetailReqType);
+void init_iso1RelativeTimeIntervalType(struct iso1RelativeTimeIntervalType* iso1RelativeTimeIntervalType);
+void init_iso1SignedInfoType(struct iso1SignedInfoType* iso1SignedInfoType);
+void init_iso1EMAIDType(struct iso1EMAIDType* iso1EMAIDType);
+void init_iso1EVStatusType(struct iso1EVStatusType* iso1EVStatusType);
+void init_iso1ServiceListType(struct iso1ServiceListType* iso1ServiceListType);
+void init_iso1EVSEChargeParameterType(struct iso1EVSEChargeParameterType* iso1EVSEChargeParameterType);
+void init_iso1EVPowerDeliveryParameterType(struct iso1EVPowerDeliveryParameterType* iso1EVPowerDeliveryParameterType);
+void init_iso1ProfileEntryType(struct iso1ProfileEntryType* iso1ProfileEntryType);
+void init_iso1AuthorizationReqType(struct iso1AuthorizationReqType* iso1AuthorizationReqType);
+void init_iso1MeterInfoType(struct iso1MeterInfoType* iso1MeterInfoType);
+void init_iso1ManifestType(struct iso1ManifestType* iso1ManifestType);
+void init_iso1ChargeParameterDiscoveryResType(struct iso1ChargeParameterDiscoveryResType* iso1ChargeParameterDiscoveryResType);
+void init_iso1PowerDeliveryResType(struct iso1PowerDeliveryResType* iso1PowerDeliveryResType);
+void init_iso1DC_EVChargeParameterType(struct iso1DC_EVChargeParameterType* iso1DC_EVChargeParameterType);
+void init_iso1ConsumptionCostType(struct iso1ConsumptionCostType* iso1ConsumptionCostType);
+void init_iso1PMaxScheduleType(struct iso1PMaxScheduleType* iso1PMaxScheduleType);
+void init_iso1PaymentOptionListType(struct iso1PaymentOptionListType* iso1PaymentOptionListType);
+void init_iso1ObjectType(struct iso1ObjectType* iso1ObjectType);
+void init_iso1PhysicalValueType(struct iso1PhysicalValueType* iso1PhysicalValueType);
+void init_iso1RSAKeyValueType(struct iso1RSAKeyValueType* iso1RSAKeyValueType);
+void init_iso1SessionStopResType(struct iso1SessionStopResType* iso1SessionStopResType);
+void init_iso1CertificateUpdateReqType(struct iso1CertificateUpdateReqType* iso1CertificateUpdateReqType);
+void init_iso1SignatureValueType(struct iso1SignatureValueType* iso1SignatureValueType);
+void init_iso1PaymentDetailsReqType(struct iso1PaymentDetailsReqType* iso1PaymentDetailsReqType);
+void init_iso1AuthorizationResType(struct iso1AuthorizationResType* iso1AuthorizationResType);
+void init_iso1DC_EVSEChargeParameterType(struct iso1DC_EVSEChargeParameterType* iso1DC_EVSEChargeParameterType);
+void init_iso1SubCertificatesType(struct iso1SubCertificatesType* iso1SubCertificatesType);
+void init_iso1ChargingStatusResType(struct iso1ChargingStatusResType* iso1ChargingStatusResType);
+void init_iso1DSAKeyValueType(struct iso1DSAKeyValueType* iso1DSAKeyValueType);
+void init_iso1ListOfRootCertificateIDsType(struct iso1ListOfRootCertificateIDsType* iso1ListOfRootCertificateIDsType);
+void init_iso1ChargeServiceType(struct iso1ChargeServiceType* iso1ChargeServiceType);
+void init_iso1IntervalType(struct iso1IntervalType* iso1IntervalType);
+void init_iso1MeteringReceiptReqType(struct iso1MeteringReceiptReqType* iso1MeteringReceiptReqType);
+void init_iso1ServiceDetailResType(struct iso1ServiceDetailResType* iso1ServiceDetailResType);
+void init_iso1KeyValueType(struct iso1KeyValueType* iso1KeyValueType);
+void init_iso1SelectedServiceListType(struct iso1SelectedServiceListType* iso1SelectedServiceListType);
+void init_iso1CableCheckResType(struct iso1CableCheckResType* iso1CableCheckResType);
+void init_iso1X509IssuerSerialType(struct iso1X509IssuerSerialType* iso1X509IssuerSerialType);
+void init_iso1KeyInfoType(struct iso1KeyInfoType* iso1KeyInfoType);
+void init_iso1TransformsType(struct iso1TransformsType* iso1TransformsType);
+void init_iso1ChargeParameterDiscoveryReqType(struct iso1ChargeParameterDiscoveryReqType* iso1ChargeParameterDiscoveryReqType);
+void init_iso1PreChargeReqType(struct iso1PreChargeReqType* iso1PreChargeReqType);
+void init_iso1EVSEStatusType(struct iso1EVSEStatusType* iso1EVSEStatusType);
+void init_iso1SignatureMethodType(struct iso1SignatureMethodType* iso1SignatureMethodType);
+void init_iso1X509DataType(struct iso1X509DataType* iso1X509DataType);
+void init_iso1NotificationType(struct iso1NotificationType* iso1NotificationType);
+void init_iso1SAScheduleListType(struct iso1SAScheduleListType* iso1SAScheduleListType);
+void init_iso1BodyType(struct iso1BodyType* iso1BodyType);
+void init_iso1ChargingProfileType(struct iso1ChargingProfileType* iso1ChargingProfileType);
+void init_iso1TransformType(struct iso1TransformType* iso1TransformType);
+void init_iso1SAScheduleTupleType(struct iso1SAScheduleTupleType* iso1SAScheduleTupleType);
+void init_iso1AC_EVChargeParameterType(struct iso1AC_EVChargeParameterType* iso1AC_EVChargeParameterType);
+void init_iso1AnonType_V2G_Message(struct iso1AnonType_V2G_Message* iso1AnonType_V2G_Message);
+void init_iso1PaymentDetailsResType(struct iso1PaymentDetailsResType* iso1PaymentDetailsResType);
+void init_iso1ContractSignatureEncryptedPrivateKeyType(struct iso1ContractSignatureEncryptedPrivateKeyType* iso1ContractSignatureEncryptedPrivateKeyType);
+void init_iso1PMaxScheduleEntryType(struct iso1PMaxScheduleEntryType* iso1PMaxScheduleEntryType);
+void init_iso1SPKIDataType(struct iso1SPKIDataType* iso1SPKIDataType);
+void init_iso1MeteringReceiptResType(struct iso1MeteringReceiptResType* iso1MeteringReceiptResType);
+void init_iso1SessionStopReqType(struct iso1SessionStopReqType* iso1SessionStopReqType);
+void init_iso1WeldingDetectionResType(struct iso1WeldingDetectionResType* iso1WeldingDetectionResType);
+void init_iso1ReferenceType(struct iso1ReferenceType* iso1ReferenceType);
+void init_iso1CurrentDemandReqType(struct iso1CurrentDemandReqType* iso1CurrentDemandReqType);
+void init_iso1SalesTariffEntryType(struct iso1SalesTariffEntryType* iso1SalesTariffEntryType);
+void init_iso1EntryType(struct iso1EntryType* iso1EntryType);
+void init_iso1SessionSetupReqType(struct iso1SessionSetupReqType* iso1SessionSetupReqType);
+void init_iso1CostType(struct iso1CostType* iso1CostType);
+void init_iso1DC_EVPowerDeliveryParameterType(struct iso1DC_EVPowerDeliveryParameterType* iso1DC_EVPowerDeliveryParameterType);
+void init_iso1RetrievalMethodType(struct iso1RetrievalMethodType* iso1RetrievalMethodType);
+void init_iso1CertificateUpdateResType(struct iso1CertificateUpdateResType* iso1CertificateUpdateResType);
+void init_iso1CertificateInstallationResType(struct iso1CertificateInstallationResType* iso1CertificateInstallationResType);
+void init_iso1CanonicalizationMethodType(struct iso1CanonicalizationMethodType* iso1CanonicalizationMethodType);
+void init_iso1WeldingDetectionReqType(struct iso1WeldingDetectionReqType* iso1WeldingDetectionReqType);
+void init_iso1DC_EVStatusType(struct iso1DC_EVStatusType* iso1DC_EVStatusType);
+void init_iso1CurrentDemandResType(struct iso1CurrentDemandResType* iso1CurrentDemandResType);
+void init_iso1ServiceType(struct iso1ServiceType* iso1ServiceType);
+void init_iso1ServiceDiscoveryReqType(struct iso1ServiceDiscoveryReqType* iso1ServiceDiscoveryReqType);
+void init_iso1AC_EVSEChargeParameterType(struct iso1AC_EVSEChargeParameterType* iso1AC_EVSEChargeParameterType);
+void init_iso1CableCheckReqType(struct iso1CableCheckReqType* iso1CableCheckReqType);
+void init_iso1SelectedServiceType(struct iso1SelectedServiceType* iso1SelectedServiceType);
+void init_iso1AC_EVSEStatusType(struct iso1AC_EVSEStatusType* iso1AC_EVSEStatusType);
+void init_iso1SalesTariffType(struct iso1SalesTariffType* iso1SalesTariffType);
+void init_iso1PaymentServiceSelectionReqType(struct iso1PaymentServiceSelectionReqType* iso1PaymentServiceSelectionReqType);
+void init_iso1SignaturePropertiesType(struct iso1SignaturePropertiesType* iso1SignaturePropertiesType);
+void init_iso1BodyBaseType(struct iso1BodyBaseType* iso1BodyBaseType);
+void init_iso1SupportedEnergyTransferModeType(struct iso1SupportedEnergyTransferModeType* iso1SupportedEnergyTransferModeType);
+void init_iso1ChargingStatusReqType(struct iso1ChargingStatusReqType* iso1ChargingStatusReqType);
+void init_iso1PaymentServiceSelectionResType(struct iso1PaymentServiceSelectionResType* iso1PaymentServiceSelectionResType);
+void init_iso1DigestMethodType(struct iso1DigestMethodType* iso1DigestMethodType);
+void init_iso1SignaturePropertyType(struct iso1SignaturePropertyType* iso1SignaturePropertyType);
+void init_iso1PGPDataType(struct iso1PGPDataType* iso1PGPDataType);
+
+
+#endif /* DEPLOY_ISO1_CODEC */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

文件差异内容过多而无法显示
+ 9847 - 0
EVSE/Projects/CCS/Apps/exi_engine/iso1/iso1EXIDatatypesDecoder.c


+ 65 - 0
EVSE/Projects/CCS/Apps/exi_engine/iso1/iso1EXIDatatypesDecoder.h

@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9.4
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+ * \file 	EXIDatatypesDecoder.h
+ * \brief 	Decoder for datatype definitions
+ *
+ */
+
+#ifndef EXI_iso1_DATATYPES_DECODER_H
+#define EXI_iso1_DATATYPES_DECODER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "iso1EXIDatatypes.h"
+
+#if DEPLOY_ISO1_CODEC == SUPPORT_YES
+
+#include <stdint.h>
+
+#include "../codec/EXITypes.h"
+
+int decode_iso1ExiDocument(bitstream_t* stream, struct iso1EXIDocument* exiDoc);
+
+#if DEPLOY_ISO1_CODEC_FRAGMENT == SUPPORT_YES
+int decode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag);
+#endif /* DEPLOY_ISO1_CODEC_FRAGMENT */
+
+#endif /* DEPLOY_ISO1_CODEC */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

文件差异内容过多而无法显示
+ 7011 - 0
EVSE/Projects/CCS/Apps/exi_engine/iso1/iso1EXIDatatypesEncoder.c


+ 68 - 0
EVSE/Projects/CCS/Apps/exi_engine/iso1/iso1EXIDatatypesEncoder.h

@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9.4
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+ * \file 	EXIDatatypesEncoder.h
+ * \brief 	Encoder for datatype definitions
+ *
+ */
+
+#ifndef EXI_iso1_DATATYPES_ENCODER_H
+#define EXI_iso1_DATATYPES_ENCODER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "iso1EXIDatatypes.h"
+
+#if DEPLOY_ISO1_CODEC == SUPPORT_YES
+
+#include <stdint.h>
+
+#include "../codec/EXITypes.h"
+
+
+int encode_iso1ExiDocument(bitstream_t* stream, struct iso1EXIDocument* exiDoc);
+
+#if DEPLOY_ISO1_CODEC_FRAGMENT == SUPPORT_YES
+int encode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag);
+#endif /* DEPLOY_ISO1_CODEC_FRAGMENT */
+
+
+#endif /* DEPLOY_ISO1_CODEC */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

+ 1496 - 0
EVSE/Projects/CCS/Apps/exi_engine/iso2/iso2EXIDatatypes.c

@@ -0,0 +1,1496 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9.4
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+#include <stdint.h>
+
+#include "iso2EXIDatatypes.h"
+#include "../codec/EXITypes.h"
+
+
+#ifndef EXI_iso2_DATATYPES_C
+#define EXI_iso2_DATATYPES_C
+
+#if DEPLOY_ISO2_CODEC == SUPPORT_YES
+
+
+void init_iso2EXIDocument(struct iso2EXIDocument* exiDoc) {
+	exiDoc->V2G_Message_isUsed = 0u;
+	exiDoc->ServiceDiscoveryReq_isUsed = 0u;
+	exiDoc->ServiceDiscoveryRes_isUsed = 0u;
+	exiDoc->FinePositioningReq_isUsed = 0u;
+	exiDoc->FinePositioningRes_isUsed = 0u;
+	exiDoc->DisconnectChargingDeviceReq_isUsed = 0u;
+	exiDoc->DisconnectChargingDeviceRes_isUsed = 0u;
+	exiDoc->PowerDemandReq_isUsed = 0u;
+	exiDoc->MeteringReceiptReq_isUsed = 0u;
+	exiDoc->PaymentDetailsReq_isUsed = 0u;
+	exiDoc->PowerDemandRes_isUsed = 0u;
+	exiDoc->MeteringReceiptRes_isUsed = 0u;
+	exiDoc->PaymentDetailsRes_isUsed = 0u;
+	exiDoc->SessionSetupReq_isUsed = 0u;
+	exiDoc->SessionSetupRes_isUsed = 0u;
+	exiDoc->CableCheckReq_isUsed = 0u;
+	exiDoc->CableCheckRes_isUsed = 0u;
+	exiDoc->CertificateInstallationReq_isUsed = 0u;
+	exiDoc->CertificateInstallationRes_isUsed = 0u;
+	exiDoc->SystemStatusReq_isUsed = 0u;
+	exiDoc->SystemStatusRes_isUsed = 0u;
+	exiDoc->PairingReq_isUsed = 0u;
+	exiDoc->WeldingDetectionReq_isUsed = 0u;
+	exiDoc->ConnectChargingDeviceReq_isUsed = 0u;
+	exiDoc->PairingRes_isUsed = 0u;
+	exiDoc->WeldingDetectionRes_isUsed = 0u;
+	exiDoc->ConnectChargingDeviceRes_isUsed = 0u;
+	exiDoc->CertificateUpdateReq_isUsed = 0u;
+	exiDoc->CertificateUpdateRes_isUsed = 0u;
+	exiDoc->PaymentServiceSelectionReq_isUsed = 0u;
+	exiDoc->PowerDeliveryReq_isUsed = 0u;
+	exiDoc->PaymentServiceSelectionRes_isUsed = 0u;
+	exiDoc->PowerDeliveryRes_isUsed = 0u;
+	exiDoc->ChargingStatusReq_isUsed = 0u;
+	exiDoc->ChargingStatusRes_isUsed = 0u;
+	exiDoc->BodyElement_isUsed = 0u;
+	exiDoc->AC_BidirectionalControlReq_isUsed = 0u;
+	exiDoc->AC_BidirectionalControlRes_isUsed = 0u;
+	exiDoc->VehicleCheckInReq_isUsed = 0u;
+	exiDoc->CurrentDemandReq_isUsed = 0u;
+	exiDoc->VehicleCheckInRes_isUsed = 0u;
+	exiDoc->PreChargeReq_isUsed = 0u;
+	exiDoc->CurrentDemandRes_isUsed = 0u;
+	exiDoc->PreChargeRes_isUsed = 0u;
+	exiDoc->AlignmentCheckReq_isUsed = 0u;
+	exiDoc->V2GRequest_isUsed = 0u;
+	exiDoc->SessionStopReq_isUsed = 0u;
+	exiDoc->AuthorizationReq_isUsed = 0u;
+	exiDoc->AlignmentCheckRes_isUsed = 0u;
+	exiDoc->SessionStopRes_isUsed = 0u;
+	exiDoc->AuthorizationRes_isUsed = 0u;
+	exiDoc->VehicleCheckOutReq_isUsed = 0u;
+	exiDoc->ChargeParameterDiscoveryReq_isUsed = 0u;
+	exiDoc->VehicleCheckOutRes_isUsed = 0u;
+	exiDoc->ChargeParameterDiscoveryRes_isUsed = 0u;
+	exiDoc->V2GResponse_isUsed = 0u;
+	exiDoc->FinePositioningSetupReq_isUsed = 0u;
+	exiDoc->FinePositioningSetupRes_isUsed = 0u;
+	exiDoc->ServiceDetailReq_isUsed = 0u;
+	exiDoc->DC_BidirectionalControlReq_isUsed = 0u;
+	exiDoc->ServiceDetailRes_isUsed = 0u;
+	exiDoc->DC_BidirectionalControlRes_isUsed = 0u;
+	exiDoc->LFA_EVFinePositioningSetupParameters_isUsed = 0u;
+	exiDoc->MV_EVSEFinePositioningParameters_isUsed = 0u;
+	exiDoc->RelativeTimeInterval_isUsed = 0u;
+	exiDoc->SalesTariffEntry_isUsed = 0u;
+	exiDoc->LFA_EVSEFinePositioningSetupParameters_isUsed = 0u;
+	exiDoc->AC_EVChargeParameter_isUsed = 0u;
+	exiDoc->MV_EVSEFinePositioningSetupParameters_isUsed = 0u;
+	exiDoc->EVEnergyTransferParameter_isUsed = 0u;
+	exiDoc->DC_EVSEBidirectionalParameter_isUsed = 0u;
+	exiDoc->SAScheduleList_isUsed = 0u;
+	exiDoc->EVSEFinePositioningSetupParameters_isUsed = 0u;
+	exiDoc->Generic_EVSEFinePositioningParameters_isUsed = 0u;
+	exiDoc->DC_EVChargeParameter_isUsed = 0u;
+	exiDoc->DC_EVSEChargeParameter_isUsed = 0u;
+	exiDoc->LFA_EVFinePositioningParameters_isUsed = 0u;
+	exiDoc->EVFinePositioningSetupParameters_isUsed = 0u;
+	exiDoc->AC_EVSEBidirectionalParameter_isUsed = 0u;
+	exiDoc->EVFinePositioningParameters_isUsed = 0u;
+	exiDoc->WPT_EVChargeParameter_isUsed = 0u;
+	exiDoc->LFA_EVSEFinePositioningParameters_isUsed = 0u;
+	exiDoc->EVSEEnergyTransferParameter_isUsed = 0u;
+	exiDoc->AC_EVBidirectionalParameter_isUsed = 0u;
+	exiDoc->EVSEFinePositioningParameters_isUsed = 0u;
+	exiDoc->WPT_EVSEChargeParameter_isUsed = 0u;
+	exiDoc->AC_EVSEChargeParameter_isUsed = 0u;
+	exiDoc->PMaxScheduleEntry_isUsed = 0u;
+	exiDoc->Generic_EVFinePositioningParameters_isUsed = 0u;
+	exiDoc->DC_EVBidirectionalParameter_isUsed = 0u;
+	exiDoc->SignatureProperty_isUsed = 0u;
+	exiDoc->DSAKeyValue_isUsed = 0u;
+	exiDoc->SignatureProperties_isUsed = 0u;
+	exiDoc->KeyValue_isUsed = 0u;
+	exiDoc->Transforms_isUsed = 0u;
+	exiDoc->DigestMethod_isUsed = 0u;
+	exiDoc->Signature_isUsed = 0u;
+	exiDoc->RetrievalMethod_isUsed = 0u;
+	exiDoc->Manifest_isUsed = 0u;
+	exiDoc->Reference_isUsed = 0u;
+	exiDoc->CanonicalizationMethod_isUsed = 0u;
+	exiDoc->RSAKeyValue_isUsed = 0u;
+	exiDoc->Transform_isUsed = 0u;
+	exiDoc->PGPData_isUsed = 0u;
+	exiDoc->MgmtData_isUsed = 0u;
+	exiDoc->SignatureMethod_isUsed = 0u;
+	exiDoc->KeyInfo_isUsed = 0u;
+	exiDoc->SPKIData_isUsed = 0u;
+	exiDoc->X509Data_isUsed = 0u;
+	exiDoc->SignatureValue_isUsed = 0u;
+	exiDoc->KeyName_isUsed = 0u;
+	exiDoc->DigestValue_isUsed = 0u;
+	exiDoc->SignedInfo_isUsed = 0u;
+	exiDoc->Object_isUsed = 0u;
+}
+
+
+#if DEPLOY_ISO2_CODEC_FRAGMENT == SUPPORT_YES
+void init_iso2EXIFragment(struct iso2EXIFragment* exiFrag) {
+	exiFrag->EVMaximumVoltage_isUsed = 0u;
+	exiFrag->EVMaximumVoltage_isUsed = 0u;
+	exiFrag->FrequencyChannel_isUsed = 0u;
+	exiFrag->FrequencyChannel_isUsed = 0u;
+	exiFrag->EVProcessing_isUsed = 0u;
+	exiFrag->EVProcessing_isUsed = 0u;
+	exiFrag->EVProcessing_isUsed = 0u;
+	exiFrag->BulkChargingComplete_isUsed = 0u;
+	exiFrag->ParkingMethod_isUsed = 0u;
+	exiFrag->SAScheduleTupleID_isUsed = 0u;
+	exiFrag->Distance_isUsed = 0u;
+	exiFrag->ParameterSet_isUsed = 0u;
+	exiFrag->EVMinimumDischargeCurrent_isUsed = 0u;
+	exiFrag->SignalSeparationTime_isUsed = 0u;
+	exiFrag->SignalSeparationTime_isUsed = 0u;
+	exiFrag->EVSEEnergyTransferParameter_isUsed = 0u;
+	exiFrag->EVSEMaximumVoltage_isUsed = 0u;
+	exiFrag->EVSEMaximumVoltage_isUsed = 0u;
+	exiFrag->DC_EVSEBidirectionalParameter_isUsed = 0u;
+	exiFrag->ChargingSession_isUsed = 0u;
+	exiFrag->SubCertificates_isUsed = 0u;
+	exiFrag->RetrievalMethod_isUsed = 0u;
+	exiFrag->MagneticVectorSetupList_isUsed = 0u;
+	exiFrag->PairingParameters_isUsed = 0u;
+	exiFrag->PairingParameters_isUsed = 0u;
+	exiFrag->EVSEMinimumPower_isUsed = 0u;
+	exiFrag->AC_BidirectionalControlReq_isUsed = 0u;
+	exiFrag->Cost_isUsed = 0u;
+	exiFrag->AC_BidirectionalControlRes_isUsed = 0u;
+	exiFrag->BuyBackTariff_isUsed = 0u;
+	exiFrag->XCoordinate_isUsed = 0u;
+	exiFrag->EVSECheckOutStatus_isUsed = 0u;
+	exiFrag->stringValue_isUsed = 0u;
+	exiFrag->RetryCounter_isUsed = 0u;
+	exiFrag->EVSEMaximumDischargeCurrent_isUsed = 0u;
+	exiFrag->Sensor_isUsed = 0u;
+	exiFrag->MeterReadingCharged_isUsed = 0u;
+	exiFrag->HMACOutputLength_isUsed = 0u;
+	exiFrag->V2GResponse_isUsed = 0u;
+	exiFrag->EVMinimumVoltage_isUsed = 0u;
+	exiFrag->EVMinimumEnergyRequest_isUsed = 0u;
+	exiFrag->EVMinimumEnergyRequest_isUsed = 0u;
+	exiFrag->EVMinimumEnergyRequest_isUsed = 0u;
+	exiFrag->RelativeTimeInterval_isUsed = 0u;
+	exiFrag->RelativeTimeInterval_isUsed = 0u;
+	exiFrag->WPT_EVChargeParameter_isUsed = 0u;
+	exiFrag->SAScheduleTuple_isUsed = 0u;
+	exiFrag->ServiceID_isUsed = 0u;
+	exiFrag->ServiceID_isUsed = 0u;
+	exiFrag->PgenCounter_isUsed = 0u;
+	exiFrag->SalesTariffDescription_isUsed = 0u;
+	exiFrag->AngleGAtoVA_isUsed = 0u;
+	exiFrag->boolValue_isUsed = 0u;
+	exiFrag->EVMaximumDischargeCurrent_isUsed = 0u;
+	exiFrag->EVMaximumDischargeCurrent_isUsed = 0u;
+	exiFrag->NotificationMaxDelay_isUsed = 0u;
+	exiFrag->EVSEMaximumDischargePower_isUsed = 0u;
+	exiFrag->PGPData_isUsed = 0u;
+	exiFrag->EVSEMaximumChargePower_isUsed = 0u;
+	exiFrag->SessionID_isUsed = 0u;
+	exiFrag->EVSEEnergyToBeDelivered_isUsed = 0u;
+	exiFrag->EVMaximumPower_isUsed = 0u;
+	exiFrag->EVMaximumCurrent_isUsed = 0u;
+	exiFrag->RSAKeyValue_isUsed = 0u;
+	exiFrag->EVSENominalVoltage_isUsed = 0u;
+	exiFrag->MagneticVector_isUsed = 0u;
+	exiFrag->XPath_isUsed = 0u;
+	exiFrag->Signature_isUsed = 0u;
+	exiFrag->EVElectricalChargingDeviceStatus_isUsed = 0u;
+	exiFrag->EVElectricalChargingDeviceStatus_isUsed = 0u;
+	exiFrag->EVSEProcessing_isUsed = 0u;
+	exiFrag->EVSEProcessing_isUsed = 0u;
+	exiFrag->EVSEProcessing_isUsed = 0u;
+	exiFrag->EVSEProcessing_isUsed = 0u;
+	exiFrag->EVSEProcessing_isUsed = 0u;
+	exiFrag->EVSEProcessing_isUsed = 0u;
+	exiFrag->EVSEProcessing_isUsed = 0u;
+	exiFrag->EVSEProcessing_isUsed = 0u;
+	exiFrag->EVSEProcessing_isUsed = 0u;
+	exiFrag->EVSEProcessing_isUsed = 0u;
+	exiFrag->FODStatus_isUsed = 0u;
+	exiFrag->PowerDeliveryRes_isUsed = 0u;
+	exiFrag->SessionStopRes_isUsed = 0u;
+	exiFrag->WPT_EVSEChargeParameter_isUsed = 0u;
+	exiFrag->ResponseCode_isUsed = 0u;
+	exiFrag->EVTargetEnergyRequest_isUsed = 0u;
+	exiFrag->EVTargetEnergyRequest_isUsed = 0u;
+	exiFrag->EVTargetEnergyRequest_isUsed = 0u;
+	exiFrag->FinePositioningSetupReq_isUsed = 0u;
+	exiFrag->EVSEPresentCurrent_isUsed = 0u;
+	exiFrag->EVSEPresentCurrent_isUsed = 0u;
+	exiFrag->FinePositioningSetupRes_isUsed = 0u;
+	exiFrag->ProfileEntry_isUsed = 0u;
+	exiFrag->MgmtData_isUsed = 0u;
+	exiFrag->SAProvisioningCertificateChain_isUsed = 0u;
+	exiFrag->SAProvisioningCertificateChain_isUsed = 0u;
+	exiFrag->PowerDeliveryReq_isUsed = 0u;
+	exiFrag->SessionStopReq_isUsed = 0u;
+	exiFrag->ReceiptRequired_isUsed = 0u;
+	exiFrag->ReceiptRequired_isUsed = 0u;
+	exiFrag->ReceiptRequired_isUsed = 0u;
+	exiFrag->ReceiptRequired_isUsed = 0u;
+	exiFrag->ReceiptRequired_isUsed = 0u;
+	exiFrag->ChargingProfile_isUsed = 0u;
+	exiFrag->MaxSupportingPoints_isUsed = 0u;
+	exiFrag->start_isUsed = 0u;
+	exiFrag->EVMinimumChargePower_isUsed = 0u;
+	exiFrag->amount_isUsed = 0u;
+	exiFrag->PreChargeReq_isUsed = 0u;
+	exiFrag->OEMProvisioningCert_isUsed = 0u;
+	exiFrag->PackageIndex_isUsed = 0u;
+	exiFrag->PreChargeRes_isUsed = 0u;
+	exiFrag->P_isUsed = 0u;
+	exiFrag->Q_isUsed = 0u;
+	exiFrag->X509SubjectName_isUsed = 0u;
+	exiFrag->G_isUsed = 0u;
+	exiFrag->J_isUsed = 0u;
+	exiFrag->SessionID_isUsed = 0u;
+	exiFrag->ContractSignatureCertChain_isUsed = 0u;
+	exiFrag->ContractSignatureCertChain_isUsed = 0u;
+	exiFrag->ContractSignatureCertChain_isUsed = 0u;
+	exiFrag->ContractSignatureCertChain_isUsed = 0u;
+	exiFrag->MV_EVSEFinePositioningSetupParameters_isUsed = 0u;
+	exiFrag->EVSEMinimumDischargeCurrent_isUsed = 0u;
+	exiFrag->EVMaximumChargeCurrent_isUsed = 0u;
+	exiFrag->EVMaximumChargeCurrent_isUsed = 0u;
+	exiFrag->AlignmentOffset_isUsed = 0u;
+	exiFrag->AlignmentOffset_isUsed = 0u;
+	exiFrag->Y_isUsed = 0u;
+	exiFrag->RemainingTimeToTargetSOC_isUsed = 0u;
+	exiFrag->DigestValue_isUsed = 0u;
+	exiFrag->SensorMeasurements_isUsed = 0u;
+	exiFrag->SalesTariff_isUsed = 0u;
+	exiFrag->EVCCID_isUsed = 0u;
+	exiFrag->EVSEMaximumPower_isUsed = 0u;
+	exiFrag->TargetOffset_isUsed = 0u;
+	exiFrag->PowerDemandParameters_isUsed = 0u;
+	exiFrag->PowerDemandParameters_isUsed = 0u;
+	exiFrag->PGPKeyID_isUsed = 0u;
+	exiFrag->DisconnectChargingDeviceReq_isUsed = 0u;
+	exiFrag->DisconnectChargingDeviceRes_isUsed = 0u;
+	exiFrag->DSAKeyValue_isUsed = 0u;
+	exiFrag->SalesTariffEntry_isUsed = 0u;
+	exiFrag->CertificateInstallationRes_isUsed = 0u;
+	exiFrag->CanonicalizationMethod_isUsed = 0u;
+	exiFrag->Generic_EVFinePositioningParameters_isUsed = 0u;
+	exiFrag->EVSEMinimumVoltage_isUsed = 0u;
+	exiFrag->SystemStatusRes_isUsed = 0u;
+	exiFrag->EVSEOutputPower_isUsed = 0u;
+	exiFrag->SignedInfo_isUsed = 0u;
+	exiFrag->EVMinimumChargeCurrent_isUsed = 0u;
+	exiFrag->EVMinimumChargeCurrent_isUsed = 0u;
+	exiFrag->costKind_isUsed = 0u;
+	exiFrag->SystemStatusReq_isUsed = 0u;
+	exiFrag->CableCheckReq_isUsed = 0u;
+	exiFrag->NumEPriceLevels_isUsed = 0u;
+	exiFrag->EVSEVoltageLimitAchieved_isUsed = 0u;
+	exiFrag->EVSEVoltageLimitAchieved_isUsed = 0u;
+	exiFrag->PackageSeparationTime_isUsed = 0u;
+	exiFrag->PackageSeparationTime_isUsed = 0u;
+	exiFrag->CableCheckRes_isUsed = 0u;
+	exiFrag->EVCheckInStatus_isUsed = 0u;
+	exiFrag->PMaxDischargeSchedule_isUsed = 0u;
+	exiFrag->EVMinimumPower_isUsed = 0u;
+	exiFrag->ChargingPerformance_isUsed = 0u;
+	exiFrag->AlignmentCheckReq_isUsed = 0u;
+	exiFrag->EVMechanicalChargingDeviceStatus_isUsed = 0u;
+	exiFrag->EVMechanicalChargingDeviceStatus_isUsed = 0u;
+	exiFrag->EVMechanicalChargingDeviceStatus_isUsed = 0u;
+	exiFrag->VehicleSpace_isUsed = 0u;
+	exiFrag->AlignmentCheckRes_isUsed = 0u;
+	exiFrag->EVMinimumDischargePower_isUsed = 0u;
+	exiFrag->RemainingTimeToMinimumSOC_isUsed = 0u;
+	exiFrag->AuthorizationRes_isUsed = 0u;
+	exiFrag->CertificateInstallationReq_isUsed = 0u;
+	exiFrag->PaymentDetailsReq_isUsed = 0u;
+	exiFrag->PaymentDetailsRes_isUsed = 0u;
+	exiFrag->AuthorizationReq_isUsed = 0u;
+	exiFrag->EVTargetCurrent_isUsed = 0u;
+	exiFrag->EVTargetCurrent_isUsed = 0u;
+	exiFrag->EVTargetCurrent_isUsed = 0u;
+	exiFrag->SessionSetupReq_isUsed = 0u;
+	exiFrag->SessionSetupRes_isUsed = 0u;
+	exiFrag->EVSENominalFrequency_isUsed = 0u;
+	exiFrag->EVSENominalFrequency_isUsed = 0u;
+	exiFrag->Header_isUsed = 0u;
+	exiFrag->NumberOfSensors_isUsed = 0u;
+	exiFrag->NumberOfSensors_isUsed = 0u;
+	exiFrag->EVSETimeStamp_isUsed = 0u;
+	exiFrag->EVSETimeStamp_isUsed = 0u;
+	exiFrag->MeterStatus_isUsed = 0u;
+	exiFrag->EVSEMaximumPower_isUsed = 0u;
+	exiFrag->MV_EVSEFinePositioningParameters_isUsed = 0u;
+	exiFrag->ChargeProgress_isUsed = 0u;
+	exiFrag->KeyName_isUsed = 0u;
+	exiFrag->PMaxSchedule_isUsed = 0u;
+	exiFrag->duration_isUsed = 0u;
+	exiFrag->RemainingTimeToBulkSOC_isUsed = 0u;
+	exiFrag->SensorOrientation_isUsed = 0u;
+	exiFrag->EVSEMinimumVoltage_isUsed = 0u;
+	exiFrag->EVSEMaximumChargeCurrent_isUsed = 0u;
+	exiFrag->LFA_EVSEFinePositioningParameters_isUsed = 0u;
+	exiFrag->VehicleCheckInRes_isUsed = 0u;
+	exiFrag->PMaxScheduleEntry_isUsed = 0u;
+	exiFrag->SAScheduleList_isUsed = 0u;
+	exiFrag->X509SKI_isUsed = 0u;
+	exiFrag->PaymentOptionList_isUsed = 0u;
+	exiFrag->ContractSignatureEncryptedPrivateKey_isUsed = 0u;
+	exiFrag->ContractSignatureEncryptedPrivateKey_isUsed = 0u;
+	exiFrag->VehicleCheckInReq_isUsed = 0u;
+	exiFrag->Certificate_isUsed = 0u;
+	exiFrag->Certificate_isUsed = 0u;
+	exiFrag->CheckOutTime_isUsed = 0u;
+	exiFrag->CurrentSOC_isUsed = 0u;
+	exiFrag->CurrentSOC_isUsed = 0u;
+	exiFrag->ZCoordinate_isUsed = 0u;
+	exiFrag->MeasurementData_isUsed = 0u;
+	exiFrag->PairingRes_isUsed = 0u;
+	exiFrag->EVSEMaximumCurrent_isUsed = 0u;
+	exiFrag->LFA_EVFinePositioningParameters_isUsed = 0u;
+	exiFrag->AlignmentCheckParameters_isUsed = 0u;
+	exiFrag->AlignmentCheckParameters_isUsed = 0u;
+	exiFrag->EffectiveRadiatedPower_isUsed = 0u;
+	exiFrag->PairingReq_isUsed = 0u;
+	exiFrag->EVMinimumChargeCurrent_isUsed = 0u;
+	exiFrag->EVMinimumChargeCurrent_isUsed = 0u;
+	exiFrag->Value_isUsed = 0u;
+	exiFrag->byteValue_isUsed = 0u;
+	exiFrag->EVSEMaximumChargeCurrent_isUsed = 0u;
+	exiFrag->EVSEMaximumChargeCurrent_isUsed = 0u;
+	exiFrag->CurrentDemandReq_isUsed = 0u;
+	exiFrag->Generic_EVSEFinePositioningParameters_isUsed = 0u;
+	exiFrag->CurrentDemandRes_isUsed = 0u;
+	exiFrag->SAScheduleList_isUsed = 0u;
+	exiFrag->AC_EVBidirectionalParameter_isUsed = 0u;
+	exiFrag->Modulus_isUsed = 0u;
+	exiFrag->SelectedEnergyTransferService_isUsed = 0u;
+	exiFrag->startValue_isUsed = 0u;
+	exiFrag->SelectedVASList_isUsed = 0u;
+	exiFrag->EVSEMaximumDischargePower_isUsed = 0u;
+	exiFrag->ChargeParameterDiscoveryReq_isUsed = 0u;
+	exiFrag->ChargeParameterDiscoveryRes_isUsed = 0u;
+	exiFrag->EVMaximumDischargeCurrent_isUsed = 0u;
+	exiFrag->EVMaximumDischargeCurrent_isUsed = 0u;
+	exiFrag->SigMeterReading_isUsed = 0u;
+	exiFrag->TargetSOC_isUsed = 0u;
+	exiFrag->TargetSOC_isUsed = 0u;
+	exiFrag->EVMaximumPower_isUsed = 0u;
+	exiFrag->EVSEMaximumChargePower_isUsed = 0u;
+	exiFrag->EVSEStatus_isUsed = 0u;
+	exiFrag->EVSEMinimumChargeCurrent_isUsed = 0u;
+	exiFrag->EVSEElectricalChargingDeviceStatus_isUsed = 0u;
+	exiFrag->EVSEElectricalChargingDeviceStatus_isUsed = 0u;
+	exiFrag->X509SerialNumber_isUsed = 0u;
+	exiFrag->PaymentOption_isUsed = 0u;
+	exiFrag->Transforms_isUsed = 0u;
+	exiFrag->EVSEPeakCurrentRipple_isUsed = 0u;
+	exiFrag->ConsumptionCost_isUsed = 0u;
+	exiFrag->EVTargetEnergyRequest_isUsed = 0u;
+	exiFrag->EVSEFinePositioningSetupParameters_isUsed = 0u;
+	exiFrag->EPriceLevel_isUsed = 0u;
+	exiFrag->Exponent_isUsed = 0u;
+	exiFrag->X509IssuerSerial_isUsed = 0u;
+	exiFrag->SPKIData_isUsed = 0u;
+	exiFrag->MagneticVectorList_isUsed = 0u;
+	exiFrag->EVSEFinePositioningParameters_isUsed = 0u;
+	exiFrag->EVTargetPower_isUsed = 0u;
+	exiFrag->SensorPackageList_isUsed = 0u;
+	exiFrag->SensorPackageList_isUsed = 0u;
+	exiFrag->DepartureTime_isUsed = 0u;
+	exiFrag->InletHot_isUsed = 0u;
+	exiFrag->EVPresentActivePower_isUsed = 0u;
+	exiFrag->X509Data_isUsed = 0u;
+	exiFrag->YCoordinate_isUsed = 0u;
+	exiFrag->KeyValue_isUsed = 0u;
+	exiFrag->DisplayParameters_isUsed = 0u;
+	exiFrag->EVSEPowerLimitAchieved_isUsed = 0u;
+	exiFrag->EVSEPowerLimitAchieved_isUsed = 0u;
+	exiFrag->Body_isUsed = 0u;
+	exiFrag->DC_EVChargeParameter_isUsed = 0u;
+	exiFrag->SAScheduleTupleID_isUsed = 0u;
+	exiFrag->SAScheduleTupleID_isUsed = 0u;
+	exiFrag->SAScheduleTupleID_isUsed = 0u;
+	exiFrag->SAScheduleTupleID_isUsed = 0u;
+	exiFrag->SAScheduleTupleID_isUsed = 0u;
+	exiFrag->SAScheduleTupleID_isUsed = 0u;
+	exiFrag->SAScheduleTupleID_isUsed = 0u;
+	exiFrag->Service_isUsed = 0u;
+	exiFrag->EVMinimumDischargeCurrent_isUsed = 0u;
+	exiFrag->EVMinimumDischargeCurrent_isUsed = 0u;
+	exiFrag->SignatureProperty_isUsed = 0u;
+	exiFrag->PGPKeyPacket_isUsed = 0u;
+	exiFrag->PGPKeyPacket_isUsed = 0u;
+	exiFrag->Seed_isUsed = 0u;
+	exiFrag->LFA_EVFinePositioningSetupParameters_isUsed = 0u;
+	exiFrag->MinimumPMaxRequest_isUsed = 0u;
+	exiFrag->FinePositioningReq_isUsed = 0u;
+	exiFrag->EnergyTransferServiceList_isUsed = 0u;
+	exiFrag->FinePositioningRes_isUsed = 0u;
+	exiFrag->AC_EVSEBidirectionalParameter_isUsed = 0u;
+	exiFrag->FreeService_isUsed = 0u;
+	exiFrag->EVMinimumVoltage_isUsed = 0u;
+	exiFrag->AC_EVSEChargeParameter_isUsed = 0u;
+	exiFrag->EVMaximumVoltage_isUsed = 0u;
+	exiFrag->EVMaximumVoltage_isUsed = 0u;
+	exiFrag->SensorID_isUsed = 0u;
+	exiFrag->SensorID_isUsed = 0u;
+	exiFrag->EVMaximumChargeCurrent_isUsed = 0u;
+	exiFrag->EVMaximumChargeCurrent_isUsed = 0u;
+	exiFrag->EVMaximumChargeCurrent_isUsed = 0u;
+	exiFrag->EVSECurrentRegulationTolerance_isUsed = 0u;
+	exiFrag->EVSEMechanicalChargingDeviceStatus_isUsed = 0u;
+	exiFrag->EVSEMechanicalChargingDeviceStatus_isUsed = 0u;
+	exiFrag->EVSEMechanicalChargingDeviceStatus_isUsed = 0u;
+	exiFrag->ServiceID_isUsed = 0u;
+	exiFrag->ServiceID_isUsed = 0u;
+	exiFrag->ServiceID_isUsed = 0u;
+	exiFrag->EVEnergyTransferParameter_isUsed = 0u;
+	exiFrag->SignalPulseDuration_isUsed = 0u;
+	exiFrag->SignalPulseDuration_isUsed = 0u;
+	exiFrag->shortValue_isUsed = 0u;
+	exiFrag->EVSEMaximumDischargeCurrent_isUsed = 0u;
+	exiFrag->EVSEMaximumDischargeCurrent_isUsed = 0u;
+	exiFrag->Manifest_isUsed = 0u;
+	exiFrag->DC_EVSEChargeParameter_isUsed = 0u;
+	exiFrag->MeteringReceiptReq_isUsed = 0u;
+	exiFrag->MeterID_isUsed = 0u;
+	exiFrag->MeteringReceiptRes_isUsed = 0u;
+	exiFrag->ServiceDiscoveryReq_isUsed = 0u;
+	exiFrag->SalesTariffID_isUsed = 0u;
+	exiFrag->ServiceDiscoveryRes_isUsed = 0u;
+	exiFrag->X509CRL_isUsed = 0u;
+	exiFrag->MagneticVectorSetup_isUsed = 0u;
+	exiFrag->DigestMethod_isUsed = 0u;
+	exiFrag->SPKISexp_isUsed = 0u;
+	exiFrag->MeterReadingDischarged_isUsed = 0u;
+	exiFrag->MeasurementDataList_isUsed = 0u;
+	exiFrag->SignatureProperties_isUsed = 0u;
+	exiFrag->SensorPosition_isUsed = 0u;
+	exiFrag->SensorPosition_isUsed = 0u;
+	exiFrag->LFA_EVSEFinePositioningSetupParameters_isUsed = 0u;
+	exiFrag->eMAID_isUsed = 0u;
+	exiFrag->eMAID_isUsed = 0u;
+	exiFrag->eMAID_isUsed = 0u;
+	exiFrag->eMAID_isUsed = 0u;
+	exiFrag->SensorPackage_isUsed = 0u;
+	exiFrag->EVCheckOutStatus_isUsed = 0u;
+	exiFrag->EVMinimumEnergyRequest_isUsed = 0u;
+	exiFrag->X509Certificate_isUsed = 0u;
+	exiFrag->RootCertificateID_isUsed = 0u;
+	exiFrag->DC_BidirectionalControlReq_isUsed = 0u;
+	exiFrag->EVSEPresentVoltage_isUsed = 0u;
+	exiFrag->EVSEPresentVoltage_isUsed = 0u;
+	exiFrag->DC_BidirectionalControlRes_isUsed = 0u;
+	exiFrag->EVSEPresentVoltage_isUsed = 0u;
+	exiFrag->VASList_isUsed = 0u;
+	exiFrag->EVSEPresentVoltage_isUsed = 0u;
+	exiFrag->MeterInfo_isUsed = 0u;
+	exiFrag->MeterInfo_isUsed = 0u;
+	exiFrag->MeterInfo_isUsed = 0u;
+	exiFrag->MeterInfo_isUsed = 0u;
+	exiFrag->MeterInfo_isUsed = 0u;
+	exiFrag->MeterInfo_isUsed = 0u;
+	exiFrag->EVSETargetReactivePower_isUsed = 0u;
+	exiFrag->ChargingStatusReq_isUsed = 0u;
+	exiFrag->GenericParameters_isUsed = 0u;
+	exiFrag->GenericParameters_isUsed = 0u;
+	exiFrag->ChargingStatusRes_isUsed = 0u;
+	exiFrag->EVMaximumChargePower_isUsed = 0u;
+	exiFrag->EVMaximumChargePower_isUsed = 0u;
+	exiFrag->BulkSOC_isUsed = 0u;
+	exiFrag->BulkSOC_isUsed = 0u;
+	exiFrag->NumberOfSignalPackages_isUsed = 0u;
+	exiFrag->NumberOfSignalPackages_isUsed = 0u;
+	exiFrag->ParameterSetID_isUsed = 0u;
+	exiFrag->PMax_isUsed = 0u;
+	exiFrag->ParameterSetID_isUsed = 0u;
+	exiFrag->EVMaximumEnergyRequest_isUsed = 0u;
+	exiFrag->EVMaximumEnergyRequest_isUsed = 0u;
+	exiFrag->EVMaximumEnergyRequest_isUsed = 0u;
+	exiFrag->EVOperation_isUsed = 0u;
+	exiFrag->EVOperation_isUsed = 0u;
+	exiFrag->CertificateUpdateRes_isUsed = 0u;
+	exiFrag->ChargingComplete_isUsed = 0u;
+	exiFrag->ListOfRootCertificateIDs_isUsed = 0u;
+	exiFrag->ListOfRootCertificateIDs_isUsed = 0u;
+	exiFrag->RotationVAtoGA_isUsed = 0u;
+	exiFrag->EVTargetVoltage_isUsed = 0u;
+	exiFrag->EVTargetVoltage_isUsed = 0u;
+	exiFrag->EVTargetVoltage_isUsed = 0u;
+	exiFrag->CertificateUpdateReq_isUsed = 0u;
+	exiFrag->ConnectChargingDeviceRes_isUsed = 0u;
+	exiFrag->DHpublickey_isUsed = 0u;
+	exiFrag->DHpublickey_isUsed = 0u;
+	exiFrag->ServiceParameterList_isUsed = 0u;
+	exiFrag->SignatureValue_isUsed = 0u;
+	exiFrag->physicalValue_isUsed = 0u;
+	exiFrag->Exponent_isUsed = 0u;
+	exiFrag->OperationMode_isUsed = 0u;
+	exiFrag->OperationMode_isUsed = 0u;
+	exiFrag->EVSECurrentLimitAchieved_isUsed = 0u;
+	exiFrag->EVSECurrentLimitAchieved_isUsed = 0u;
+	exiFrag->ServiceDetailReq_isUsed = 0u;
+	exiFrag->ServiceDetailRes_isUsed = 0u;
+	exiFrag->EVSEMaximumVoltage_isUsed = 0u;
+	exiFrag->intValue_isUsed = 0u;
+	exiFrag->EVMaximumDischargePower_isUsed = 0u;
+	exiFrag->EVMaximumDischargePower_isUsed = 0u;
+	exiFrag->MinimumSOC_isUsed = 0u;
+	exiFrag->MinimumSOC_isUsed = 0u;
+	exiFrag->SelectedPaymentOption_isUsed = 0u;
+	exiFrag->V2G_Message_isUsed = 0u;
+	exiFrag->EVSEID_isUsed = 0u;
+	exiFrag->EVSEID_isUsed = 0u;
+	exiFrag->EVSEID_isUsed = 0u;
+	exiFrag->EVSEID_isUsed = 0u;
+	exiFrag->EVSEID_isUsed = 0u;
+	exiFrag->EVSEID_isUsed = 0u;
+	exiFrag->TMeter_isUsed = 0u;
+	exiFrag->SensorOrder_isUsed = 0u;
+	exiFrag->SensorOrder_isUsed = 0u;
+	exiFrag->SupportedServiceIDs_isUsed = 0u;
+	exiFrag->GenChallenge_isUsed = 0u;
+	exiFrag->GenChallenge_isUsed = 0u;
+	exiFrag->EVFinePositioningParameters_isUsed = 0u;
+	exiFrag->SensorList_isUsed = 0u;
+	exiFrag->SensorList_isUsed = 0u;
+	exiFrag->KeyInfo_isUsed = 0u;
+	exiFrag->ConnectChargingDeviceReq_isUsed = 0u;
+	exiFrag->AC_EVChargeParameter_isUsed = 0u;
+	exiFrag->Parameter_isUsed = 0u;
+	exiFrag->WeldingDetectionRes_isUsed = 0u;
+	exiFrag->GAID_isUsed = 0u;
+	exiFrag->GAID_isUsed = 0u;
+	exiFrag->SignalFrequency_isUsed = 0u;
+	exiFrag->EVSETargetPower_isUsed = 0u;
+	exiFrag->DC_EVBidirectionalParameter_isUsed = 0u;
+	exiFrag->EVSETargetPower_isUsed = 0u;
+	exiFrag->SignatureMethod_isUsed = 0u;
+	exiFrag->WeldingDetectionReq_isUsed = 0u;
+	exiFrag->SelectedService_isUsed = 0u;
+	exiFrag->EVInputPower_isUsed = 0u;
+	exiFrag->VehicleCheckOutReq_isUsed = 0u;
+	exiFrag->EVMaximumDischargePower_isUsed = 0u;
+	exiFrag->EVMaximumDischargePower_isUsed = 0u;
+	exiFrag->PowerDemandReq_isUsed = 0u;
+	exiFrag->VehicleCheckOutRes_isUsed = 0u;
+	exiFrag->CurrentRange_isUsed = 0u;
+	exiFrag->EVPresentReactivePower_isUsed = 0u;
+	exiFrag->X509IssuerName_isUsed = 0u;
+	exiFrag->V2GRequest_isUsed = 0u;
+	exiFrag->Reference_isUsed = 0u;
+	exiFrag->BodyElement_isUsed = 0u;
+	exiFrag->MinimumPMaxScheduleEntry_isUsed = 0u;
+	exiFrag->EVFinePositioningSetupParameters_isUsed = 0u;
+	exiFrag->EVSENotification_isUsed = 0u;
+	exiFrag->PaymentServiceSelectionReq_isUsed = 0u;
+	exiFrag->EVMaximumChargePower_isUsed = 0u;
+	exiFrag->EVMaximumChargePower_isUsed = 0u;
+	exiFrag->EVMaximumChargePower_isUsed = 0u;
+	exiFrag->PaymentServiceSelectionRes_isUsed = 0u;
+	exiFrag->Transform_isUsed = 0u;
+	exiFrag->EVMaximumEnergyRequest_isUsed = 0u;
+	exiFrag->Object_isUsed = 0u;
+	exiFrag->TargetOffsetY_isUsed = 0u;
+	exiFrag->PowerDemandRes_isUsed = 0u;
+	exiFrag->TargetOffsetX_isUsed = 0u;
+}
+#endif /* DEPLOY_ISO2_CODEC_FRAGMENT */
+
+void init_iso2RetrievalMethodType(struct iso2RetrievalMethodType* iso2RetrievalMethodType) {
+	iso2RetrievalMethodType->URI_isUsed = 0u;
+	iso2RetrievalMethodType->Type_isUsed = 0u;
+	iso2RetrievalMethodType->Transforms_isUsed = 0u;
+}
+
+void init_iso2AuthorizationResType(struct iso2AuthorizationResType* iso2AuthorizationResType) {
+	iso2AuthorizationResType->EVSEStatus_isUsed = 0u;
+}
+
+void init_iso2MV_EVSEFinePositioningSetupParametersType(struct iso2MV_EVSEFinePositioningSetupParametersType* iso2MV_EVSEFinePositioningSetupParametersType) {
+	iso2MV_EVSEFinePositioningSetupParametersType->FrequencyChannel_isUsed = 0u;
+	iso2MV_EVSEFinePositioningSetupParametersType->MagneticVectorSetupList_isUsed = 0u;
+}
+
+void init_iso2X509DataType(struct iso2X509DataType* iso2X509DataType) {
+	iso2X509DataType->X509IssuerSerial.arrayLen = 0u;
+	iso2X509DataType->X509SKI.arrayLen = 0u;
+	iso2X509DataType->X509SubjectName.arrayLen = 0u;
+	iso2X509DataType->X509Certificate.arrayLen = 0u;
+	iso2X509DataType->X509CRL.arrayLen = 0u;
+	iso2X509DataType->ANY_isUsed = 0u;
+}
+
+void init_iso2RSAKeyValueType(struct iso2RSAKeyValueType* iso2RSAKeyValueType) {
+	(void)iso2RSAKeyValueType; /* avoid unused warning */
+}
+
+void init_iso2DC_BidirectionalControlResType(struct iso2DC_BidirectionalControlResType* iso2DC_BidirectionalControlResType) {
+	iso2DC_BidirectionalControlResType->EVSEStatus_isUsed = 0u;
+	iso2DC_BidirectionalControlResType->EVSEMaximumChargePower_isUsed = 0u;
+	iso2DC_BidirectionalControlResType->EVSEMaximumDischargePower_isUsed = 0u;
+	iso2DC_BidirectionalControlResType->EVSEMaximumChargeCurrent_isUsed = 0u;
+	iso2DC_BidirectionalControlResType->EVSEMaximumDischargeCurrent_isUsed = 0u;
+	iso2DC_BidirectionalControlResType->EVSEMaximumVoltage_isUsed = 0u;
+	iso2DC_BidirectionalControlResType->EVSEMinimumVoltage_isUsed = 0u;
+	iso2DC_BidirectionalControlResType->SAScheduleTupleID_isUsed = 0u;
+	iso2DC_BidirectionalControlResType->MeterInfo_isUsed = 0u;
+	iso2DC_BidirectionalControlResType->ReceiptRequired_isUsed = 0u;
+}
+
+void init_iso2CostType(struct iso2CostType* iso2CostType) {
+	(void)iso2CostType; /* avoid unused warning */
+}
+
+void init_iso2ChargingStatusResType(struct iso2ChargingStatusResType* iso2ChargingStatusResType) {
+	iso2ChargingStatusResType->EVSEStatus_isUsed = 0u;
+	iso2ChargingStatusResType->SAScheduleTupleID_isUsed = 0u;
+	iso2ChargingStatusResType->MeterInfo_isUsed = 0u;
+	iso2ChargingStatusResType->ReceiptRequired_isUsed = 0u;
+	iso2ChargingStatusResType->EVSETargetPower_isUsed = 0u;
+}
+
+void init_iso2MeterInfoType(struct iso2MeterInfoType* iso2MeterInfoType) {
+	iso2MeterInfoType->MeterReadingCharged_isUsed = 0u;
+	iso2MeterInfoType->MeterReadingDischarged_isUsed = 0u;
+	iso2MeterInfoType->SigMeterReading_isUsed = 0u;
+	iso2MeterInfoType->MeterStatus_isUsed = 0u;
+	iso2MeterInfoType->TMeter_isUsed = 0u;
+}
+
+void init_iso2AC_EVChargeParameterType(struct iso2AC_EVChargeParameterType* iso2AC_EVChargeParameterType) {
+	iso2AC_EVChargeParameterType->EVTargetEnergyRequest_isUsed = 0u;
+	iso2AC_EVChargeParameterType->EVMaximumEnergyRequest_isUsed = 0u;
+	iso2AC_EVChargeParameterType->EVMinimumEnergyRequest_isUsed = 0u;
+}
+
+void init_iso2AC_EVSEBidirectionalParameterType(struct iso2AC_EVSEBidirectionalParameterType* iso2AC_EVSEBidirectionalParameterType) {
+	(void)iso2AC_EVSEBidirectionalParameterType; /* avoid unused warning */
+}
+
+void init_iso2VehicleCheckOutResType(struct iso2VehicleCheckOutResType* iso2VehicleCheckOutResType) {
+	iso2VehicleCheckOutResType->EVSEStatus_isUsed = 0u;
+}
+
+void init_iso2MagneticVectorListType(struct iso2MagneticVectorListType* iso2MagneticVectorListType) {
+	iso2MagneticVectorListType->MagneticVector.arrayLen = 0u;
+}
+
+void init_iso2CableCheckResType(struct iso2CableCheckResType* iso2CableCheckResType) {
+	iso2CableCheckResType->EVSEStatus_isUsed = 0u;
+}
+
+void init_iso2ServiceDiscoveryReqType(struct iso2ServiceDiscoveryReqType* iso2ServiceDiscoveryReqType) {
+	iso2ServiceDiscoveryReqType->SupportedServiceIDs_isUsed = 0u;
+}
+
+void init_iso2ServiceType(struct iso2ServiceType* iso2ServiceType) {
+	(void)iso2ServiceType; /* avoid unused warning */
+}
+
+void init_iso2ServiceParameterListType(struct iso2ServiceParameterListType* iso2ServiceParameterListType) {
+	iso2ServiceParameterListType->ParameterSet.arrayLen = 0u;
+}
+
+void init_iso2PMaxScheduleType(struct iso2PMaxScheduleType* iso2PMaxScheduleType) {
+	iso2PMaxScheduleType->PMaxScheduleEntry.arrayLen = 0u;
+}
+
+void init_iso2SignaturePropertiesType(struct iso2SignaturePropertiesType* iso2SignaturePropertiesType) {
+	iso2SignaturePropertiesType->Id_isUsed = 0u;
+	iso2SignaturePropertiesType->SignatureProperty.arrayLen = 0u;
+}
+
+void init_iso2PMaxScheduleEntryType(struct iso2PMaxScheduleEntryType* iso2PMaxScheduleEntryType) {
+	iso2PMaxScheduleEntryType->PMax.arrayLen = 0u;
+}
+
+void init_iso2SignatureType(struct iso2SignatureType* iso2SignatureType) {
+	iso2SignatureType->Id_isUsed = 0u;
+	iso2SignatureType->KeyInfo_isUsed = 0u;
+	iso2SignatureType->Object.arrayLen = 0u;
+}
+
+void init_iso2VehicleCheckInReqType(struct iso2VehicleCheckInReqType* iso2VehicleCheckInReqType) {
+	iso2VehicleCheckInReqType->ParkingMethod_isUsed = 0u;
+}
+
+void init_iso2ConnectChargingDeviceResType(struct iso2ConnectChargingDeviceResType* iso2ConnectChargingDeviceResType) {
+	iso2ConnectChargingDeviceResType->EVSEStatus_isUsed = 0u;
+}
+
+void init_iso2WeldingDetectionResType(struct iso2WeldingDetectionResType* iso2WeldingDetectionResType) {
+	iso2WeldingDetectionResType->EVSEStatus_isUsed = 0u;
+}
+
+void init_iso2SessionStopResType(struct iso2SessionStopResType* iso2SessionStopResType) {
+	iso2SessionStopResType->EVSEStatus_isUsed = 0u;
+}
+
+void init_iso2VehicleCheckInResType(struct iso2VehicleCheckInResType* iso2VehicleCheckInResType) {
+	iso2VehicleCheckInResType->EVSEStatus_isUsed = 0u;
+	iso2VehicleCheckInResType->TargetOffset_isUsed = 0u;
+}
+
+void init_iso2ServiceListType(struct iso2ServiceListType* iso2ServiceListType) {
+	iso2ServiceListType->Service.arrayLen = 0u;
+}
+
+void init_iso2CertificateUpdateResType(struct iso2CertificateUpdateResType* iso2CertificateUpdateResType) {
+	iso2CertificateUpdateResType->EVSEStatus_isUsed = 0u;
+	iso2CertificateUpdateResType->RetryCounter_isUsed = 0u;
+}
+
+void init_iso2FinePositioningSetupResType(struct iso2FinePositioningSetupResType* iso2FinePositioningSetupResType) {
+	iso2FinePositioningSetupResType->EVSEStatus_isUsed = 0u;
+	iso2FinePositioningSetupResType->EVSEFinePositioningSetupParameters_isUsed = 0u;
+	iso2FinePositioningSetupResType->LFA_EVSEFinePositioningSetupParameters_isUsed = 0u;
+	iso2FinePositioningSetupResType->MV_EVSEFinePositioningSetupParameters_isUsed = 0u;
+}
+
+void init_iso2AC_EVBidirectionalParameterType(struct iso2AC_EVBidirectionalParameterType* iso2AC_EVBidirectionalParameterType) {
+	iso2AC_EVBidirectionalParameterType->EVTargetEnergyRequest_isUsed = 0u;
+	iso2AC_EVBidirectionalParameterType->EVMaximumEnergyRequest_isUsed = 0u;
+	iso2AC_EVBidirectionalParameterType->EVMinimumEnergyRequest_isUsed = 0u;
+}
+
+void init_iso2DC_BidirectionalControlReqType(struct iso2DC_BidirectionalControlReqType* iso2DC_BidirectionalControlReqType) {
+	iso2DC_BidirectionalControlReqType->EVMaximumEnergyRequest_isUsed = 0u;
+	iso2DC_BidirectionalControlReqType->EVMinimumEnergyRequest_isUsed = 0u;
+	iso2DC_BidirectionalControlReqType->DisplayParameters_isUsed = 0u;
+	iso2DC_BidirectionalControlReqType->EVMaximumDischargeCurrent_isUsed = 0u;
+	iso2DC_BidirectionalControlReqType->EVMaximumChargePower_isUsed = 0u;
+	iso2DC_BidirectionalControlReqType->EVMaximumDischargePower_isUsed = 0u;
+}
+
+void init_iso2CertificateUpdateReqType(struct iso2CertificateUpdateReqType* iso2CertificateUpdateReqType) {
+	(void)iso2CertificateUpdateReqType; /* avoid unused warning */
+}
+
+void init_iso2ConsumptionCostType(struct iso2ConsumptionCostType* iso2ConsumptionCostType) {
+	iso2ConsumptionCostType->Cost.arrayLen = 0u;
+}
+
+void init_iso2SAScheduleListType(struct iso2SAScheduleListType* iso2SAScheduleListType) {
+	iso2SAScheduleListType->SAScheduleTuple.arrayLen = 0u;
+}
+
+void init_iso2MagneticVectorSetupType(struct iso2MagneticVectorSetupType* iso2MagneticVectorSetupType) {
+	(void)iso2MagneticVectorSetupType; /* avoid unused warning */
+}
+
+void init_iso2LFA_EVSEFinePositioningSetupParametersType(struct iso2LFA_EVSEFinePositioningSetupParametersType* iso2LFA_EVSEFinePositioningSetupParametersType) {
+	(void)iso2LFA_EVSEFinePositioningSetupParametersType; /* avoid unused warning */
+}
+
+void init_iso2PaymentOptionListType(struct iso2PaymentOptionListType* iso2PaymentOptionListType) {
+	iso2PaymentOptionListType->PaymentOption.arrayLen = 0u;
+}
+
+void init_iso2LFA_EVSEFinePositioningParametersType(struct iso2LFA_EVSEFinePositioningParametersType* iso2LFA_EVSEFinePositioningParametersType) {
+	(void)iso2LFA_EVSEFinePositioningParametersType; /* avoid unused warning */
+}
+
+void init_iso2RelativeTimeIntervalType(struct iso2RelativeTimeIntervalType* iso2RelativeTimeIntervalType) {
+	iso2RelativeTimeIntervalType->duration_isUsed = 0u;
+}
+
+void init_iso2EVFinePositioningParametersType(struct iso2EVFinePositioningParametersType* iso2EVFinePositioningParametersType) {
+	(void)iso2EVFinePositioningParametersType; /* avoid unused warning */
+}
+
+void init_iso2AlignmentCheckReqType(struct iso2AlignmentCheckReqType* iso2AlignmentCheckReqType) {
+	iso2AlignmentCheckReqType->AlignmentCheckParameters_isUsed = 0u;
+}
+
+void init_iso2CertificateInstallationReqType(struct iso2CertificateInstallationReqType* iso2CertificateInstallationReqType) {
+	(void)iso2CertificateInstallationReqType; /* avoid unused warning */
+}
+
+void init_iso2TransformsType(struct iso2TransformsType* iso2TransformsType) {
+	iso2TransformsType->Transform.arrayLen = 0u;
+}
+
+void init_iso2ObjectType(struct iso2ObjectType* iso2ObjectType) {
+	iso2ObjectType->Id_isUsed = 0u;
+	iso2ObjectType->MimeType_isUsed = 0u;
+	iso2ObjectType->Encoding_isUsed = 0u;
+	iso2ObjectType->ANY_isUsed = 0u;
+}
+
+void init_iso2SensorOrderListType(struct iso2SensorOrderListType* iso2SensorOrderListType) {
+	iso2SensorOrderListType->SensorPosition.arrayLen = 0u;
+}
+
+void init_iso2ChargeParameterDiscoveryReqType(struct iso2ChargeParameterDiscoveryReqType* iso2ChargeParameterDiscoveryReqType) {
+	iso2ChargeParameterDiscoveryReqType->MaxSupportingPoints_isUsed = 0u;
+	iso2ChargeParameterDiscoveryReqType->EVEnergyTransferParameter_isUsed = 0u;
+	iso2ChargeParameterDiscoveryReqType->AC_EVChargeParameter_isUsed = 0u;
+	iso2ChargeParameterDiscoveryReqType->AC_EVBidirectionalParameter_isUsed = 0u;
+	iso2ChargeParameterDiscoveryReqType->DC_EVChargeParameter_isUsed = 0u;
+	iso2ChargeParameterDiscoveryReqType->DC_EVBidirectionalParameter_isUsed = 0u;
+	iso2ChargeParameterDiscoveryReqType->WPT_EVChargeParameter_isUsed = 0u;
+	iso2ChargeParameterDiscoveryReqType->MinimumPMaxRequest_isUsed = 0u;
+}
+
+void init_iso2ParameterType(struct iso2ParameterType* iso2ParameterType) {
+	iso2ParameterType->boolValue_isUsed = 0u;
+	iso2ParameterType->byteValue_isUsed = 0u;
+	iso2ParameterType->shortValue_isUsed = 0u;
+	iso2ParameterType->intValue_isUsed = 0u;
+	iso2ParameterType->physicalValue_isUsed = 0u;
+	iso2ParameterType->stringValue_isUsed = 0u;
+}
+
+void init_iso2SessionStopReqType(struct iso2SessionStopReqType* iso2SessionStopReqType) {
+	(void)iso2SessionStopReqType; /* avoid unused warning */
+}
+
+void init_iso2SensorMeasurementsType(struct iso2SensorMeasurementsType* iso2SensorMeasurementsType) {
+	(void)iso2SensorMeasurementsType; /* avoid unused warning */
+}
+
+void init_iso2DC_EVSEChargeParameterType(struct iso2DC_EVSEChargeParameterType* iso2DC_EVSEChargeParameterType) {
+	iso2DC_EVSEChargeParameterType->EVSECurrentRegulationTolerance_isUsed = 0u;
+	iso2DC_EVSEChargeParameterType->EVSEEnergyToBeDelivered_isUsed = 0u;
+}
+
+void init_iso2SensorPackageListType(struct iso2SensorPackageListType* iso2SensorPackageListType) {
+	iso2SensorPackageListType->SensorPackage.arrayLen = 0u;
+}
+
+void init_iso2MeasurementDataListType(struct iso2MeasurementDataListType* iso2MeasurementDataListType) {
+	iso2MeasurementDataListType->MeasurementData.arrayLen = 0u;
+}
+
+void init_iso2CertificateChainType(struct iso2CertificateChainType* iso2CertificateChainType) {
+	iso2CertificateChainType->Id_isUsed = 0u;
+	iso2CertificateChainType->SubCertificates_isUsed = 0u;
+}
+
+void init_iso2SignaturePropertyType(struct iso2SignaturePropertyType* iso2SignaturePropertyType) {
+	iso2SignaturePropertyType->Id_isUsed = 0u;
+	iso2SignaturePropertyType->ANY_isUsed = 0u;
+}
+
+void init_iso2TransformType(struct iso2TransformType* iso2TransformType) {
+	iso2TransformType->ANY_isUsed = 0u;
+	iso2TransformType->XPath.arrayLen = 0u;
+}
+
+void init_iso2EMAIDType(struct iso2EMAIDType* iso2EMAIDType) {
+	(void)iso2EMAIDType; /* avoid unused warning */
+}
+
+void init_iso2DSAKeyValueType(struct iso2DSAKeyValueType* iso2DSAKeyValueType) {
+	iso2DSAKeyValueType->P_isUsed = 0u;
+	iso2DSAKeyValueType->Q_isUsed = 0u;
+	iso2DSAKeyValueType->G_isUsed = 0u;
+	iso2DSAKeyValueType->J_isUsed = 0u;
+	iso2DSAKeyValueType->Seed_isUsed = 0u;
+	iso2DSAKeyValueType->PgenCounter_isUsed = 0u;
+}
+
+void init_iso2EntryType(struct iso2EntryType* iso2EntryType) {
+	(void)iso2EntryType; /* avoid unused warning */
+}
+
+void init_iso2MessageHeaderType(struct iso2MessageHeaderType* iso2MessageHeaderType) {
+	iso2MessageHeaderType->Signature_isUsed = 0u;
+}
+
+void init_iso2WPT_EVChargeParameterType(struct iso2WPT_EVChargeParameterType* iso2WPT_EVChargeParameterType) {
+	iso2WPT_EVChargeParameterType->EVTargetEnergyRequest_isUsed = 0u;
+	iso2WPT_EVChargeParameterType->EVMaximumEnergyRequest_isUsed = 0u;
+	iso2WPT_EVChargeParameterType->EVMinimumEnergyRequest_isUsed = 0u;
+}
+
+void init_iso2DisconnectChargingDeviceReqType(struct iso2DisconnectChargingDeviceReqType* iso2DisconnectChargingDeviceReqType) {
+	(void)iso2DisconnectChargingDeviceReqType; /* avoid unused warning */
+}
+
+void init_iso2ChargeLoopReqType(struct iso2ChargeLoopReqType* iso2ChargeLoopReqType) {
+	iso2ChargeLoopReqType->EVMaximumEnergyRequest_isUsed = 0u;
+	iso2ChargeLoopReqType->EVMinimumEnergyRequest_isUsed = 0u;
+	iso2ChargeLoopReqType->DisplayParameters_isUsed = 0u;
+}
+
+void init_iso2V2GRequestType(struct iso2V2GRequestType* iso2V2GRequestType) {
+	(void)iso2V2GRequestType; /* avoid unused warning */
+}
+
+void init_iso2MeteringReceiptResType(struct iso2MeteringReceiptResType* iso2MeteringReceiptResType) {
+	iso2MeteringReceiptResType->EVSEStatus_isUsed = 0u;
+}
+
+void init_iso2SessionSetupResType(struct iso2SessionSetupResType* iso2SessionSetupResType) {
+	iso2SessionSetupResType->EVSEStatus_isUsed = 0u;
+	iso2SessionSetupResType->EVSETimeStamp_isUsed = 0u;
+}
+
+void init_iso2AC_BidirectionalControlReqType(struct iso2AC_BidirectionalControlReqType* iso2AC_BidirectionalControlReqType) {
+	iso2AC_BidirectionalControlReqType->EVMaximumEnergyRequest_isUsed = 0u;
+	iso2AC_BidirectionalControlReqType->EVMinimumEnergyRequest_isUsed = 0u;
+	iso2AC_BidirectionalControlReqType->DisplayParameters_isUsed = 0u;
+	iso2AC_BidirectionalControlReqType->EVOperation_isUsed = 0u;
+	iso2AC_BidirectionalControlReqType->EVMaximumDischargePower_isUsed = 0u;
+	iso2AC_BidirectionalControlReqType->EVMaximumDischargeCurrent_isUsed = 0u;
+	iso2AC_BidirectionalControlReqType->EVMinimumDischargeCurrent_isUsed = 0u;
+}
+
+void init_iso2MV_EVSEFinePositioningParametersType(struct iso2MV_EVSEFinePositioningParametersType* iso2MV_EVSEFinePositioningParametersType) {
+	(void)iso2MV_EVSEFinePositioningParametersType; /* avoid unused warning */
+}
+
+void init_iso2ReferenceType(struct iso2ReferenceType* iso2ReferenceType) {
+	iso2ReferenceType->Id_isUsed = 0u;
+	iso2ReferenceType->URI_isUsed = 0u;
+	iso2ReferenceType->Type_isUsed = 0u;
+	iso2ReferenceType->Transforms_isUsed = 0u;
+}
+
+void init_iso2EVSEEnergyTransferParameterType(struct iso2EVSEEnergyTransferParameterType* iso2EVSEEnergyTransferParameterType) {
+	(void)iso2EVSEEnergyTransferParameterType; /* avoid unused warning */
+}
+
+void init_iso2MeteringReceiptReqType(struct iso2MeteringReceiptReqType* iso2MeteringReceiptReqType) {
+	iso2MeteringReceiptReqType->SAScheduleTupleID_isUsed = 0u;
+}
+
+void init_iso2KeyValueType(struct iso2KeyValueType* iso2KeyValueType) {
+	iso2KeyValueType->DSAKeyValue_isUsed = 0u;
+	iso2KeyValueType->RSAKeyValue_isUsed = 0u;
+	iso2KeyValueType->ANY_isUsed = 0u;
+}
+
+void init_iso2SensorListType(struct iso2SensorListType* iso2SensorListType) {
+	iso2SensorListType->Sensor.arrayLen = 0u;
+}
+
+void init_iso2CurrentDemandReqType(struct iso2CurrentDemandReqType* iso2CurrentDemandReqType) {
+	iso2CurrentDemandReqType->EVMaximumEnergyRequest_isUsed = 0u;
+	iso2CurrentDemandReqType->EVMinimumEnergyRequest_isUsed = 0u;
+	iso2CurrentDemandReqType->DisplayParameters_isUsed = 0u;
+	iso2CurrentDemandReqType->EVMaximumCurrent_isUsed = 0u;
+	iso2CurrentDemandReqType->EVMaximumPower_isUsed = 0u;
+	iso2CurrentDemandReqType->EVMaximumVoltage_isUsed = 0u;
+}
+
+void init_iso2FinePositioningSetupReqType(struct iso2FinePositioningSetupReqType* iso2FinePositioningSetupReqType) {
+	iso2FinePositioningSetupReqType->EVFinePositioningSetupParameters_isUsed = 0u;
+	iso2FinePositioningSetupReqType->LFA_EVFinePositioningSetupParameters_isUsed = 0u;
+}
+
+void init_iso2LFA_EVFinePositioningSetupParametersType(struct iso2LFA_EVFinePositioningSetupParametersType* iso2LFA_EVFinePositioningSetupParametersType) {
+	(void)iso2LFA_EVFinePositioningSetupParametersType; /* avoid unused warning */
+}
+
+void init_iso2SAScheduleTupleType(struct iso2SAScheduleTupleType* iso2SAScheduleTupleType) {
+	iso2SAScheduleTupleType->PMaxDischargeSchedule_isUsed = 0u;
+	iso2SAScheduleTupleType->SalesTariff_isUsed = 0u;
+	iso2SAScheduleTupleType->BuyBackTariff_isUsed = 0u;
+}
+
+void init_iso2WPT_EVSEChargeParameterType(struct iso2WPT_EVSEChargeParameterType* iso2WPT_EVSEChargeParameterType) {
+	(void)iso2WPT_EVSEChargeParameterType; /* avoid unused warning */
+}
+
+void init_iso2FinePositioningResType(struct iso2FinePositioningResType* iso2FinePositioningResType) {
+	iso2FinePositioningResType->EVSEStatus_isUsed = 0u;
+	iso2FinePositioningResType->EVSEFinePositioningParameters_isUsed = 0u;
+	iso2FinePositioningResType->Generic_EVSEFinePositioningParameters_isUsed = 0u;
+	iso2FinePositioningResType->LFA_EVSEFinePositioningParameters_isUsed = 0u;
+	iso2FinePositioningResType->MV_EVSEFinePositioningParameters_isUsed = 0u;
+}
+
+void init_iso2BodyBaseType(struct iso2BodyBaseType* iso2BodyBaseType) {
+	(void)iso2BodyBaseType; /* avoid unused warning */
+}
+
+void init_iso2ServiceDetailResType(struct iso2ServiceDetailResType* iso2ServiceDetailResType) {
+	iso2ServiceDetailResType->EVSEStatus_isUsed = 0u;
+	iso2ServiceDetailResType->ServiceParameterList_isUsed = 0u;
+}
+
+void init_iso2PowerDeliveryReqType(struct iso2PowerDeliveryReqType* iso2PowerDeliveryReqType) {
+	iso2PowerDeliveryReqType->EVOperation_isUsed = 0u;
+	iso2PowerDeliveryReqType->SAScheduleTupleID_isUsed = 0u;
+	iso2PowerDeliveryReqType->ChargingProfile_isUsed = 0u;
+}
+
+void init_iso2PairingResType(struct iso2PairingResType* iso2PairingResType) {
+	iso2PairingResType->EVSEStatus_isUsed = 0u;
+	iso2PairingResType->PairingParameters_isUsed = 0u;
+}
+
+void init_iso2AuthorizationReqType(struct iso2AuthorizationReqType* iso2AuthorizationReqType) {
+	iso2AuthorizationReqType->Id_isUsed = 0u;
+	iso2AuthorizationReqType->GenChallenge_isUsed = 0u;
+}
+
+void init_iso2ParameterSetType(struct iso2ParameterSetType* iso2ParameterSetType) {
+	iso2ParameterSetType->Parameter.arrayLen = 0u;
+}
+
+void init_iso2SPKIDataType(struct iso2SPKIDataType* iso2SPKIDataType) {
+	iso2SPKIDataType->SPKISexp.arrayLen = 0u;
+	iso2SPKIDataType->ANY_isUsed = 0u;
+}
+
+void init_iso2PaymentDetailsResType(struct iso2PaymentDetailsResType* iso2PaymentDetailsResType) {
+	iso2PaymentDetailsResType->EVSEStatus_isUsed = 0u;
+}
+
+void init_iso2SignatureMethodType(struct iso2SignatureMethodType* iso2SignatureMethodType) {
+	iso2SignatureMethodType->HMACOutputLength_isUsed = 0u;
+	iso2SignatureMethodType->ANY_isUsed = 0u;
+}
+
+void init_iso2AC_BidirectionalControlResType(struct iso2AC_BidirectionalControlResType* iso2AC_BidirectionalControlResType) {
+	iso2AC_BidirectionalControlResType->EVSEStatus_isUsed = 0u;
+	iso2AC_BidirectionalControlResType->SAScheduleTupleID_isUsed = 0u;
+	iso2AC_BidirectionalControlResType->MeterInfo_isUsed = 0u;
+	iso2AC_BidirectionalControlResType->ReceiptRequired_isUsed = 0u;
+}
+
+void init_iso2VehicleCheckOutReqType(struct iso2VehicleCheckOutReqType* iso2VehicleCheckOutReqType) {
+	(void)iso2VehicleCheckOutReqType; /* avoid unused warning */
+}
+
+void init_iso2WeldingDetectionReqType(struct iso2WeldingDetectionReqType* iso2WeldingDetectionReqType) {
+	(void)iso2WeldingDetectionReqType; /* avoid unused warning */
+}
+
+void init_iso2AlignmentCheckResType(struct iso2AlignmentCheckResType* iso2AlignmentCheckResType) {
+	iso2AlignmentCheckResType->EVSEStatus_isUsed = 0u;
+	iso2AlignmentCheckResType->AlignmentCheckParameters_isUsed = 0u;
+}
+
+void init_iso2PowerDemandReqType(struct iso2PowerDemandReqType* iso2PowerDemandReqType) {
+	iso2PowerDemandReqType->EVMaximumEnergyRequest_isUsed = 0u;
+	iso2PowerDemandReqType->EVMinimumEnergyRequest_isUsed = 0u;
+	iso2PowerDemandReqType->DisplayParameters_isUsed = 0u;
+	iso2PowerDemandReqType->PowerDemandParameters_isUsed = 0u;
+}
+
+void init_iso2MinimumPMaxRequestType(struct iso2MinimumPMaxRequestType* iso2MinimumPMaxRequestType) {
+	iso2MinimumPMaxRequestType->MinimumPMaxScheduleEntry.arrayLen = 0u;
+}
+
+void init_iso2DisconnectChargingDeviceResType(struct iso2DisconnectChargingDeviceResType* iso2DisconnectChargingDeviceResType) {
+	iso2DisconnectChargingDeviceResType->EVSEStatus_isUsed = 0u;
+}
+
+void init_iso2SessionSetupReqType(struct iso2SessionSetupReqType* iso2SessionSetupReqType) {
+	(void)iso2SessionSetupReqType; /* avoid unused warning */
+}
+
+void init_iso2PaymentDetailsReqType(struct iso2PaymentDetailsReqType* iso2PaymentDetailsReqType) {
+	(void)iso2PaymentDetailsReqType; /* avoid unused warning */
+}
+
+void init_iso2Generic_EVFinePositioningParametersType(struct iso2Generic_EVFinePositioningParametersType* iso2Generic_EVFinePositioningParametersType) {
+	(void)iso2Generic_EVFinePositioningParametersType; /* avoid unused warning */
+}
+
+void init_iso2ConnectChargingDeviceReqType(struct iso2ConnectChargingDeviceReqType* iso2ConnectChargingDeviceReqType) {
+	(void)iso2ConnectChargingDeviceReqType; /* avoid unused warning */
+}
+
+void init_iso2AC_EVSEChargeParameterType(struct iso2AC_EVSEChargeParameterType* iso2AC_EVSEChargeParameterType) {
+	(void)iso2AC_EVSEChargeParameterType; /* avoid unused warning */
+}
+
+void init_iso2SalesTariffEntryType(struct iso2SalesTariffEntryType* iso2SalesTariffEntryType) {
+	iso2SalesTariffEntryType->EPriceLevel_isUsed = 0u;
+	iso2SalesTariffEntryType->ConsumptionCost.arrayLen = 0u;
+}
+
+void init_iso2DC_EVSEBidirectionalParameterType(struct iso2DC_EVSEBidirectionalParameterType* iso2DC_EVSEBidirectionalParameterType) {
+	iso2DC_EVSEBidirectionalParameterType->EVSECurrentRegulationTolerance_isUsed = 0u;
+	iso2DC_EVSEBidirectionalParameterType->EVSEEnergyToBeDelivered_isUsed = 0u;
+}
+
+void init_iso2CanonicalizationMethodType(struct iso2CanonicalizationMethodType* iso2CanonicalizationMethodType) {
+	iso2CanonicalizationMethodType->ANY_isUsed = 0u;
+}
+
+void init_iso2DisplayParametersType(struct iso2DisplayParametersType* iso2DisplayParametersType) {
+	iso2DisplayParametersType->CurrentRange_isUsed = 0u;
+	iso2DisplayParametersType->CurrentSOC_isUsed = 0u;
+	iso2DisplayParametersType->TargetSOC_isUsed = 0u;
+	iso2DisplayParametersType->BulkSOC_isUsed = 0u;
+	iso2DisplayParametersType->MinimumSOC_isUsed = 0u;
+	iso2DisplayParametersType->ChargingPerformance_isUsed = 0u;
+	iso2DisplayParametersType->RemainingTimeToTargetSOC_isUsed = 0u;
+	iso2DisplayParametersType->RemainingTimeToBulkSOC_isUsed = 0u;
+	iso2DisplayParametersType->RemainingTimeToMinimumSOC_isUsed = 0u;
+	iso2DisplayParametersType->ChargingComplete_isUsed = 0u;
+	iso2DisplayParametersType->BulkChargingComplete_isUsed = 0u;
+	iso2DisplayParametersType->InletHot_isUsed = 0u;
+}
+
+void init_iso2DC_EVBidirectionalParameterType(struct iso2DC_EVBidirectionalParameterType* iso2DC_EVBidirectionalParameterType) {
+	iso2DC_EVBidirectionalParameterType->EVMaximumChargePower_isUsed = 0u;
+	iso2DC_EVBidirectionalParameterType->EVMinimumChargePower_isUsed = 0u;
+	iso2DC_EVBidirectionalParameterType->EVTargetEnergyRequest_isUsed = 0u;
+	iso2DC_EVBidirectionalParameterType->EVMaximumEnergyRequest_isUsed = 0u;
+	iso2DC_EVBidirectionalParameterType->EVMinimumEnergyRequest_isUsed = 0u;
+	iso2DC_EVBidirectionalParameterType->CurrentSOC_isUsed = 0u;
+	iso2DC_EVBidirectionalParameterType->TargetSOC_isUsed = 0u;
+	iso2DC_EVBidirectionalParameterType->BulkSOC_isUsed = 0u;
+	iso2DC_EVBidirectionalParameterType->EVMaximumDischargePower_isUsed = 0u;
+	iso2DC_EVBidirectionalParameterType->EVMinimumDischargePower_isUsed = 0u;
+	iso2DC_EVBidirectionalParameterType->MinimumSOC_isUsed = 0u;
+}
+
+void init_iso2PaymentServiceSelectionReqType(struct iso2PaymentServiceSelectionReqType* iso2PaymentServiceSelectionReqType) {
+	iso2PaymentServiceSelectionReqType->SelectedVASList_isUsed = 0u;
+}
+
+void init_iso2MagneticVectorType(struct iso2MagneticVectorType* iso2MagneticVectorType) {
+	(void)iso2MagneticVectorType; /* avoid unused warning */
+}
+
+void init_iso2PhysicalValueType(struct iso2PhysicalValueType* iso2PhysicalValueType) {
+	(void)iso2PhysicalValueType; /* avoid unused warning */
+}
+
+void init_iso2SystemStatusReqType(struct iso2SystemStatusReqType* iso2SystemStatusReqType) {
+	(void)iso2SystemStatusReqType; /* avoid unused warning */
+}
+
+void init_iso2SystemStatusResType(struct iso2SystemStatusResType* iso2SystemStatusResType) {
+	iso2SystemStatusResType->EVSEStatus_isUsed = 0u;
+}
+
+void init_iso2EVSEFinePositioningSetupParametersType(struct iso2EVSEFinePositioningSetupParametersType* iso2EVSEFinePositioningSetupParametersType) {
+	(void)iso2EVSEFinePositioningSetupParametersType; /* avoid unused warning */
+}
+
+void init_iso2V2GResponseType(struct iso2V2GResponseType* iso2V2GResponseType) {
+	iso2V2GResponseType->EVSEStatus_isUsed = 0u;
+}
+
+void init_iso2BodyType(struct iso2BodyType* iso2BodyType) {
+	iso2BodyType->BodyElement_isUsed = 0u;
+	iso2BodyType->V2GRequest_isUsed = 0u;
+	iso2BodyType->DisconnectChargingDeviceReq_isUsed = 0u;
+	iso2BodyType->ConnectChargingDeviceReq_isUsed = 0u;
+	iso2BodyType->SystemStatusReq_isUsed = 0u;
+	iso2BodyType->DC_BidirectionalControlReq_isUsed = 0u;
+	iso2BodyType->AC_BidirectionalControlReq_isUsed = 0u;
+	iso2BodyType->VehicleCheckOutReq_isUsed = 0u;
+	iso2BodyType->VehicleCheckInReq_isUsed = 0u;
+	iso2BodyType->PowerDemandReq_isUsed = 0u;
+	iso2BodyType->PairingReq_isUsed = 0u;
+	iso2BodyType->AlignmentCheckReq_isUsed = 0u;
+	iso2BodyType->FinePositioningReq_isUsed = 0u;
+	iso2BodyType->FinePositioningSetupReq_isUsed = 0u;
+	iso2BodyType->WeldingDetectionReq_isUsed = 0u;
+	iso2BodyType->CurrentDemandReq_isUsed = 0u;
+	iso2BodyType->PreChargeReq_isUsed = 0u;
+	iso2BodyType->CableCheckReq_isUsed = 0u;
+	iso2BodyType->ChargingStatusReq_isUsed = 0u;
+	iso2BodyType->CertificateInstallationReq_isUsed = 0u;
+	iso2BodyType->CertificateUpdateReq_isUsed = 0u;
+	iso2BodyType->SessionStopReq_isUsed = 0u;
+	iso2BodyType->MeteringReceiptReq_isUsed = 0u;
+	iso2BodyType->PowerDeliveryReq_isUsed = 0u;
+	iso2BodyType->ChargeParameterDiscoveryReq_isUsed = 0u;
+	iso2BodyType->AuthorizationReq_isUsed = 0u;
+	iso2BodyType->PaymentDetailsReq_isUsed = 0u;
+	iso2BodyType->PaymentServiceSelectionReq_isUsed = 0u;
+	iso2BodyType->ServiceDetailReq_isUsed = 0u;
+	iso2BodyType->ServiceDiscoveryReq_isUsed = 0u;
+	iso2BodyType->SessionSetupReq_isUsed = 0u;
+	iso2BodyType->V2GResponse_isUsed = 0u;
+	iso2BodyType->DisconnectChargingDeviceRes_isUsed = 0u;
+	iso2BodyType->ConnectChargingDeviceRes_isUsed = 0u;
+	iso2BodyType->SystemStatusRes_isUsed = 0u;
+	iso2BodyType->DC_BidirectionalControlRes_isUsed = 0u;
+	iso2BodyType->AC_BidirectionalControlRes_isUsed = 0u;
+	iso2BodyType->VehicleCheckOutRes_isUsed = 0u;
+	iso2BodyType->VehicleCheckInRes_isUsed = 0u;
+	iso2BodyType->PowerDemandRes_isUsed = 0u;
+	iso2BodyType->PairingRes_isUsed = 0u;
+	iso2BodyType->AlignmentCheckRes_isUsed = 0u;
+	iso2BodyType->FinePositioningRes_isUsed = 0u;
+	iso2BodyType->FinePositioningSetupRes_isUsed = 0u;
+	iso2BodyType->WeldingDetectionRes_isUsed = 0u;
+	iso2BodyType->CurrentDemandRes_isUsed = 0u;
+	iso2BodyType->PreChargeRes_isUsed = 0u;
+	iso2BodyType->CableCheckRes_isUsed = 0u;
+	iso2BodyType->ChargingStatusRes_isUsed = 0u;
+	iso2BodyType->CertificateInstallationRes_isUsed = 0u;
+	iso2BodyType->CertificateUpdateRes_isUsed = 0u;
+	iso2BodyType->SessionStopRes_isUsed = 0u;
+	iso2BodyType->MeteringReceiptRes_isUsed = 0u;
+	iso2BodyType->PowerDeliveryRes_isUsed = 0u;
+	iso2BodyType->ChargeParameterDiscoveryRes_isUsed = 0u;
+	iso2BodyType->AuthorizationRes_isUsed = 0u;
+	iso2BodyType->PaymentDetailsRes_isUsed = 0u;
+	iso2BodyType->PaymentServiceSelectionRes_isUsed = 0u;
+	iso2BodyType->ServiceDetailRes_isUsed = 0u;
+	iso2BodyType->ServiceDiscoveryRes_isUsed = 0u;
+	iso2BodyType->SessionSetupRes_isUsed = 0u;
+}
+
+void init_iso2PreChargeResType(struct iso2PreChargeResType* iso2PreChargeResType) {
+	iso2PreChargeResType->EVSEStatus_isUsed = 0u;
+}
+
+void init_iso2EVSEFinePositioningParametersType(struct iso2EVSEFinePositioningParametersType* iso2EVSEFinePositioningParametersType) {
+	(void)iso2EVSEFinePositioningParametersType; /* avoid unused warning */
+}
+
+void init_iso2PaymentServiceSelectionResType(struct iso2PaymentServiceSelectionResType* iso2PaymentServiceSelectionResType) {
+	iso2PaymentServiceSelectionResType->EVSEStatus_isUsed = 0u;
+}
+
+void init_iso2DigestMethodType(struct iso2DigestMethodType* iso2DigestMethodType) {
+	iso2DigestMethodType->ANY_isUsed = 0u;
+}
+
+void init_iso2TargetPositionType(struct iso2TargetPositionType* iso2TargetPositionType) {
+	(void)iso2TargetPositionType; /* avoid unused warning */
+}
+
+void init_iso2LFA_EVFinePositioningParametersType(struct iso2LFA_EVFinePositioningParametersType* iso2LFA_EVFinePositioningParametersType) {
+	(void)iso2LFA_EVFinePositioningParametersType; /* avoid unused warning */
+}
+
+void init_iso2DC_EVChargeParameterType(struct iso2DC_EVChargeParameterType* iso2DC_EVChargeParameterType) {
+	iso2DC_EVChargeParameterType->EVMaximumChargePower_isUsed = 0u;
+	iso2DC_EVChargeParameterType->EVMinimumChargePower_isUsed = 0u;
+	iso2DC_EVChargeParameterType->EVTargetEnergyRequest_isUsed = 0u;
+	iso2DC_EVChargeParameterType->EVMaximumEnergyRequest_isUsed = 0u;
+	iso2DC_EVChargeParameterType->EVMinimumEnergyRequest_isUsed = 0u;
+	iso2DC_EVChargeParameterType->CurrentSOC_isUsed = 0u;
+	iso2DC_EVChargeParameterType->TargetSOC_isUsed = 0u;
+	iso2DC_EVChargeParameterType->BulkSOC_isUsed = 0u;
+}
+
+void init_iso2ServiceDetailReqType(struct iso2ServiceDetailReqType* iso2ServiceDetailReqType) {
+	(void)iso2ServiceDetailReqType; /* avoid unused warning */
+}
+
+void init_iso2PreChargeReqType(struct iso2PreChargeReqType* iso2PreChargeReqType) {
+	(void)iso2PreChargeReqType; /* avoid unused warning */
+}
+
+void init_iso2ManifestType(struct iso2ManifestType* iso2ManifestType) {
+	iso2ManifestType->Id_isUsed = 0u;
+	iso2ManifestType->Reference.arrayLen = 0u;
+}
+
+void init_iso2AnonType_V2G_Message(struct iso2AnonType_V2G_Message* iso2AnonType_V2G_Message) {
+	(void)iso2AnonType_V2G_Message; /* avoid unused warning */
+}
+
+void init_iso2SelectedServiceListType(struct iso2SelectedServiceListType* iso2SelectedServiceListType) {
+	iso2SelectedServiceListType->SelectedService.arrayLen = 0u;
+}
+
+void init_iso2Generic_EVSEFinePositioningParametersType(struct iso2Generic_EVSEFinePositioningParametersType* iso2Generic_EVSEFinePositioningParametersType) {
+	(void)iso2Generic_EVSEFinePositioningParametersType; /* avoid unused warning */
+}
+
+void init_iso2CartesianCoordinatesType(struct iso2CartesianCoordinatesType* iso2CartesianCoordinatesType) {
+	(void)iso2CartesianCoordinatesType; /* avoid unused warning */
+}
+
+void init_iso2KeyInfoType(struct iso2KeyInfoType* iso2KeyInfoType) {
+	iso2KeyInfoType->Id_isUsed = 0u;
+	iso2KeyInfoType->KeyName.arrayLen = 0u;
+	iso2KeyInfoType->KeyValue.arrayLen = 0u;
+	iso2KeyInfoType->RetrievalMethod.arrayLen = 0u;
+	iso2KeyInfoType->X509Data.arrayLen = 0u;
+	iso2KeyInfoType->PGPData.arrayLen = 0u;
+	iso2KeyInfoType->SPKIData.arrayLen = 0u;
+	iso2KeyInfoType->MgmtData.arrayLen = 0u;
+	iso2KeyInfoType->ANY_isUsed = 0u;
+}
+
+void init_iso2SubCertificatesType(struct iso2SubCertificatesType* iso2SubCertificatesType) {
+	iso2SubCertificatesType->Certificate.arrayLen = 0u;
+}
+
+void init_iso2ListOfRootCertificateIDsType(struct iso2ListOfRootCertificateIDsType* iso2ListOfRootCertificateIDsType) {
+	iso2ListOfRootCertificateIDsType->RootCertificateID.arrayLen = 0u;
+}
+
+void init_iso2EVEnergyTransferParameterType(struct iso2EVEnergyTransferParameterType* iso2EVEnergyTransferParameterType) {
+	(void)iso2EVEnergyTransferParameterType; /* avoid unused warning */
+}
+
+void init_iso2ContractSignatureEncryptedPrivateKeyType(struct iso2ContractSignatureEncryptedPrivateKeyType* iso2ContractSignatureEncryptedPrivateKeyType) {
+	(void)iso2ContractSignatureEncryptedPrivateKeyType; /* avoid unused warning */
+}
+
+void init_iso2MagneticVectorSetupListType(struct iso2MagneticVectorSetupListType* iso2MagneticVectorSetupListType) {
+	iso2MagneticVectorSetupListType->MagneticVectorSetup.arrayLen = 0u;
+}
+
+void init_iso2PairingReqType(struct iso2PairingReqType* iso2PairingReqType) {
+	iso2PairingReqType->PairingParameters_isUsed = 0u;
+}
+
+void init_iso2CurrentDemandResType(struct iso2CurrentDemandResType* iso2CurrentDemandResType) {
+	iso2CurrentDemandResType->EVSEStatus_isUsed = 0u;
+	iso2CurrentDemandResType->EVSEMaximumPower_isUsed = 0u;
+	iso2CurrentDemandResType->EVSEMaximumCurrent_isUsed = 0u;
+	iso2CurrentDemandResType->EVSEMaximumVoltage_isUsed = 0u;
+	iso2CurrentDemandResType->SAScheduleTupleID_isUsed = 0u;
+	iso2CurrentDemandResType->MeterInfo_isUsed = 0u;
+	iso2CurrentDemandResType->ReceiptRequired_isUsed = 0u;
+}
+
+void init_iso2X509IssuerSerialType(struct iso2X509IssuerSerialType* iso2X509IssuerSerialType) {
+	(void)iso2X509IssuerSerialType; /* avoid unused warning */
+}
+
+void init_iso2ChargingStatusReqType(struct iso2ChargingStatusReqType* iso2ChargingStatusReqType) {
+	iso2ChargingStatusReqType->EVMaximumEnergyRequest_isUsed = 0u;
+	iso2ChargingStatusReqType->EVMinimumEnergyRequest_isUsed = 0u;
+	iso2ChargingStatusReqType->DisplayParameters_isUsed = 0u;
+	iso2ChargingStatusReqType->EVMaximumChargePower_isUsed = 0u;
+	iso2ChargingStatusReqType->EVMaximumChargeCurrent_isUsed = 0u;
+	iso2ChargingStatusReqType->EVMinimumChargeCurrent_isUsed = 0u;
+}
+
+void init_iso2CertificateInstallationResType(struct iso2CertificateInstallationResType* iso2CertificateInstallationResType) {
+	iso2CertificateInstallationResType->EVSEStatus_isUsed = 0u;
+}
+
+void init_iso2SensorPackageType(struct iso2SensorPackageType* iso2SensorPackageType) {
+	iso2SensorPackageType->SensorMeasurements.arrayLen = 0u;
+}
+
+void init_iso2PGPDataType(struct iso2PGPDataType* iso2PGPDataType) {
+	iso2PGPDataType->PGPKeyID_isUsed = 0u;
+	iso2PGPDataType->PGPKeyPacket_isUsed = 0u;
+	iso2PGPDataType->ANY_isUsed = 0u;
+}
+
+void init_iso2ServiceDiscoveryResType(struct iso2ServiceDiscoveryResType* iso2ServiceDiscoveryResType) {
+	iso2ServiceDiscoveryResType->EVSEStatus_isUsed = 0u;
+	iso2ServiceDiscoveryResType->VASList_isUsed = 0u;
+}
+
+void init_iso2ServiceIDListType(struct iso2ServiceIDListType* iso2ServiceIDListType) {
+	iso2ServiceIDListType->ServiceID.arrayLen = 0u;
+}
+
+void init_iso2EVFinePositioningSetupParametersType(struct iso2EVFinePositioningSetupParametersType* iso2EVFinePositioningSetupParametersType) {
+	(void)iso2EVFinePositioningSetupParametersType; /* avoid unused warning */
+}
+
+void init_iso2ChargeParameterDiscoveryResType(struct iso2ChargeParameterDiscoveryResType* iso2ChargeParameterDiscoveryResType) {
+	iso2ChargeParameterDiscoveryResType->EVSEStatus_isUsed = 0u;
+	iso2ChargeParameterDiscoveryResType->SAScheduleList_isUsed = 0u;
+	iso2ChargeParameterDiscoveryResType->EVSEEnergyTransferParameter_isUsed = 0u;
+	iso2ChargeParameterDiscoveryResType->AC_EVSEChargeParameter_isUsed = 0u;
+	iso2ChargeParameterDiscoveryResType->AC_EVSEBidirectionalParameter_isUsed = 0u;
+	iso2ChargeParameterDiscoveryResType->DC_EVSEChargeParameter_isUsed = 0u;
+	iso2ChargeParameterDiscoveryResType->DC_EVSEBidirectionalParameter_isUsed = 0u;
+	iso2ChargeParameterDiscoveryResType->WPT_EVSEChargeParameter_isUsed = 0u;
+}
+
+void init_iso2PowerDemandResType(struct iso2PowerDemandResType* iso2PowerDemandResType) {
+	iso2PowerDemandResType->EVSEStatus_isUsed = 0u;
+	iso2PowerDemandResType->SAScheduleTupleID_isUsed = 0u;
+	iso2PowerDemandResType->MeterInfo_isUsed = 0u;
+	iso2PowerDemandResType->ReceiptRequired_isUsed = 0u;
+	iso2PowerDemandResType->PowerDemandParameters_isUsed = 0u;
+}
+
+void init_iso2ChargingProfileType(struct iso2ChargingProfileType* iso2ChargingProfileType) {
+	iso2ChargingProfileType->ProfileEntry.arrayLen = 0u;
+}
+
+void init_iso2FinePositioningReqType(struct iso2FinePositioningReqType* iso2FinePositioningReqType) {
+	iso2FinePositioningReqType->EVFinePositioningParameters_isUsed = 0u;
+	iso2FinePositioningReqType->Generic_EVFinePositioningParameters_isUsed = 0u;
+	iso2FinePositioningReqType->LFA_EVFinePositioningParameters_isUsed = 0u;
+}
+
+void init_iso2SalesTariffType(struct iso2SalesTariffType* iso2SalesTariffType) {
+	iso2SalesTariffType->SalesTariffDescription_isUsed = 0u;
+	iso2SalesTariffType->NumEPriceLevels_isUsed = 0u;
+	iso2SalesTariffType->SalesTariffEntry.arrayLen = 0u;
+}
+
+void init_iso2SensorType(struct iso2SensorType* iso2SensorType) {
+	(void)iso2SensorType; /* avoid unused warning */
+}
+
+void init_iso2SignatureValueType(struct iso2SignatureValueType* iso2SignatureValueType) {
+	iso2SignatureValueType->Id_isUsed = 0u;
+}
+
+void init_iso2SignedInfoType(struct iso2SignedInfoType* iso2SignedInfoType) {
+	iso2SignedInfoType->Id_isUsed = 0u;
+	iso2SignedInfoType->Reference.arrayLen = 0u;
+}
+
+void init_iso2PowerDeliveryResType(struct iso2PowerDeliveryResType* iso2PowerDeliveryResType) {
+	iso2PowerDeliveryResType->EVSEStatus_isUsed = 0u;
+}
+
+void init_iso2CableCheckReqType(struct iso2CableCheckReqType* iso2CableCheckReqType) {
+	(void)iso2CableCheckReqType; /* avoid unused warning */
+}
+
+void init_iso2SelectedServiceType(struct iso2SelectedServiceType* iso2SelectedServiceType) {
+	(void)iso2SelectedServiceType; /* avoid unused warning */
+}
+
+void init_iso2DiffieHellmanPublickeyType(struct iso2DiffieHellmanPublickeyType* iso2DiffieHellmanPublickeyType) {
+	(void)iso2DiffieHellmanPublickeyType; /* avoid unused warning */
+}
+
+void init_iso2EVSEStatusType(struct iso2EVSEStatusType* iso2EVSEStatusType) {
+	(void)iso2EVSEStatusType; /* avoid unused warning */
+}
+
+
+
+#endif /* DEPLOY_ISO2_CODEC */
+
+#endif
+

+ 4189 - 0
EVSE/Projects/CCS/Apps/exi_engine/iso2/iso2EXIDatatypes.h

@@ -0,0 +1,4189 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9.4 
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+ * \file 	EXIDatatypes.h
+ * \brief 	Datatype definitions and structs for given XML Schema definitions and initialization methods
+ *
+ */
+
+#ifndef EXI_iso2_DATATYPES_H
+#define EXI_iso2_DATATYPES_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define SUPPORT_YES 1
+#define SUPPORT_NO 2
+#define DEPLOY_ISO2_CODEC SUPPORT_NO
+#define DEPLOY_ISO2_CODEC_FRAGMENT SUPPORT_NO
+
+#if DEPLOY_ISO2_CODEC == SUPPORT_YES
+
+#include <stdint.h>
+
+#include "EXITypes.h"
+
+
+/* Datatype definitions and structs for given XML Schema definitions */
+
+#define UNION_YES 1
+#define UNION_NO 2
+#define SAVE_MEMORY_WITH_UNNAMED_UNION UNION_YES
+
+/* Note: Please find below a list of occurrence limits that have been applied */
+/* Limit occurrence of element "urn:iso:15118:2:2016:MsgDataTypes":SensorPosition from 255 to 5 (see #define iso2SensorOrderListType_SensorPosition_ARRAY_SIZE) */
+/* Limit occurrence of element "urn:iso:15118:2:2016:MsgDataTypes":MeasurementData from 255 to 5 (see #define iso2MeasurementDataListType_MeasurementData_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":XPath from unbounded to 1 (see #define iso2TransformType_XPath_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":SPKISexp from unbounded to 1 (see #define iso2SPKIDataType_SPKISexp_ARRAY_SIZE) */
+/* Limit occurrence of element "urn:iso:15118:2:2016:MsgDataTypes":MagneticVectorSetup from 255 to 5 (see #define iso2MagneticVectorSetupListType_MagneticVectorSetup_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":X509IssuerSerial from unbounded to 1 (see #define iso2X509DataType_X509IssuerSerial_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":X509SKI from unbounded to 1 (see #define iso2X509DataType_X509SKI_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":X509SubjectName from unbounded to 1 (see #define iso2X509DataType_X509SubjectName_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":X509Certificate from unbounded to 1 (see #define iso2X509DataType_X509Certificate_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":X509CRL from unbounded to 1 (see #define iso2X509DataType_X509CRL_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":SignatureProperty from unbounded to 1 (see #define iso2SignaturePropertiesType_SignatureProperty_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":Transform from unbounded to 1 (see #define iso2TransformsType_Transform_ARRAY_SIZE) */
+/* Limit occurrence of element "urn:iso:15118:2:2016:MsgDataTypes":Sensor from 255 to 5 (see #define iso2SensorListType_Sensor_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":Reference from unbounded to 1 (see #define iso2ManifestType_Reference_ARRAY_SIZE) */
+/* Limit occurrence of element "urn:iso:15118:2:2016:MsgDataTypes":SensorMeasurements from 255 to 5 (see #define iso2SensorPackageType_SensorMeasurements_ARRAY_SIZE) */
+/* Limit occurrence of element "urn:iso:15118:2:2016:MsgDataTypes":ProfileEntry from unbounded to 24 (see #define iso2ChargingProfileType_ProfileEntry_ARRAY_SIZE) */
+/* Limit occurrence of element "urn:iso:15118:2:2016:MsgDataTypes":SalesTariffEntry from unbounded to 5 (see #define iso2SalesTariffType_SalesTariffEntry_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":Reference from unbounded to 1 (see #define iso2SignedInfoType_Reference_ARRAY_SIZE) */
+/* Limit occurrence of element "urn:iso:15118:2:2016:MsgDataTypes":MagneticVector from 255 to 5 (see #define iso2MagneticVectorListType_MagneticVector_ARRAY_SIZE) */
+/* Limit occurrence of element "urn:iso:15118:2:2016:MsgDataTypes":ParameterSet from 255 to 5 (see #define iso2ServiceParameterListType_ParameterSet_ARRAY_SIZE) */
+/* Limit occurrence of element "urn:iso:15118:2:2016:MsgDataTypes":PMaxScheduleEntry from unbounded to 5 (see #define iso2PMaxScheduleType_PMaxScheduleEntry_ARRAY_SIZE) */
+/* Limit occurrence of element "urn:iso:15118:2:2016:MsgDataTypes":SensorPackage from 255 to 5 (see #define iso2SensorPackageListType_SensorPackage_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":KeyName from unbounded to 1 (see #define iso2KeyInfoType_KeyName_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":KeyValue from unbounded to 1 (see #define iso2KeyInfoType_KeyValue_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":RetrievalMethod from unbounded to 1 (see #define iso2KeyInfoType_RetrievalMethod_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":X509Data from unbounded to 1 (see #define iso2KeyInfoType_X509Data_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":PGPData from unbounded to 1 (see #define iso2KeyInfoType_PGPData_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":SPKIData from unbounded to 1 (see #define iso2KeyInfoType_SPKIData_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":MgmtData from unbounded to 1 (see #define iso2KeyInfoType_MgmtData_ARRAY_SIZE) */
+/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":Object from unbounded to 1 (see #define iso2SignatureType_Object_ARRAY_SIZE) */
+
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,RSAKeyValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Modulus,"http://www.w3.org/2000/09/xmldsig#":Exponent)',  derivedBy='RESTRICTION'.  */
+#define iso2RSAKeyValueType_Modulus_BYTES_SIZE 350 
+#define iso2RSAKeyValueType_Exponent_BYTES_SIZE 350 
+struct iso2RSAKeyValueType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Modulus, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[iso2RSAKeyValueType_Modulus_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Modulus ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Exponent, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[iso2RSAKeyValueType_Exponent_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Exponent ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,MeterInfoType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":MeterID,"urn:iso:15118:2:2016:MsgDataTypes":MeterReadingCharged{0-1},"urn:iso:15118:2:2016:MsgDataTypes":MeterReadingDischarged{0-1},"urn:iso:15118:2:2016:MsgDataTypes":SigMeterReading{0-1},"urn:iso:15118:2:2016:MsgDataTypes":MeterStatus{0-1},"urn:iso:15118:2:2016:MsgDataTypes":TMeter{0-1})',  derivedBy='RESTRICTION'.  */
+#define iso2MeterInfoType_MeterID_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2016:MsgDataTypes,meterIDType is 32 */
+#define iso2MeterInfoType_SigMeterReading_BYTES_SIZE 64 /* XML schema facet maxLength for urn:iso:15118:2:2016:MsgDataTypes,sigMeterReadingType is 64 */
+struct iso2MeterInfoType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":MeterID, urn:iso:15118:2:2016:MsgDataTypes,meterIDType */
+	struct {
+		exi_string_character_t characters[iso2MeterInfoType_MeterID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  MeterID ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":MeterReadingCharged, http://www.w3.org/2001/XMLSchema,unsignedLong */
+	uint64_t MeterReadingCharged ;
+	unsigned int MeterReadingCharged_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":MeterReadingDischarged, http://www.w3.org/2001/XMLSchema,unsignedLong */
+	uint64_t MeterReadingDischarged ;
+	unsigned int MeterReadingDischarged_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":SigMeterReading, urn:iso:15118:2:2016:MsgDataTypes,sigMeterReadingType */
+	struct {
+		uint8_t bytes[iso2MeterInfoType_SigMeterReading_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  SigMeterReading ;
+	unsigned int SigMeterReading_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":MeterStatus, urn:iso:15118:2:2016:MsgDataTypes,meterStatusType */
+	int16_t MeterStatus ;
+	unsigned int MeterStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":TMeter, http://www.w3.org/2001/XMLSchema,long */
+	int64_t TMeter ;
+	unsigned int TMeter_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ServiceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":ServiceID,"urn:iso:15118:2:2016:MsgDataTypes":FreeService)',  derivedBy='RESTRICTION'.  */
+struct iso2ServiceType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":ServiceID, urn:iso:15118:2:2016:MsgDataTypes,serviceIDType */
+	uint16_t ServiceID ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":FreeService, http://www.w3.org/2001/XMLSchema,boolean */
+	int FreeService ;
+};
+
+typedef enum {
+	iso2vehicleSpaceType_AutoParking = 0,
+	iso2vehicleSpaceType_MVGuideManual = 1,
+	iso2vehicleSpaceType_Manual = 2
+} iso2vehicleSpaceType;
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ServiceListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Service{1-8})',  derivedBy='RESTRICTION'.  */
+#define iso2ServiceListType_Service_ARRAY_SIZE 8
+struct iso2ServiceListType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":Service, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ServiceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":ServiceID,"urn:iso:15118:2:2016:MsgDataTypes":FreeService)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso2ServiceType array[iso2ServiceListType_Service_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Service;
+};
+
+typedef enum {
+	iso2operationModeType_Ready = 0,
+	iso2operationModeType_NotReady = 1
+} iso2operationModeType;
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,MagneticVectorSetupType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":GAID,"urn:iso:15118:2:2016:MsgDataTypes":FrequencyChannel)',  derivedBy='RESTRICTION'.  */
+#define iso2MagneticVectorSetupType_GAID_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+struct iso2MagneticVectorSetupType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":GAID, http://www.w3.org/2001/XMLSchema,ID */
+	struct {
+		exi_string_character_t characters[iso2MagneticVectorSetupType_GAID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  GAID ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":FrequencyChannel, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t FrequencyChannel ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,RelativeTimeIntervalType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":start,"urn:iso:15118:2:2016:MsgDataTypes":duration{0-1})',  derivedBy='RESTRICTION'.  */
+struct iso2RelativeTimeIntervalType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":start, urn:iso:15118:2:2016:MsgDataTypes,#AnonType_startRelativeTimeIntervalType */
+	uint32_t start ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":duration, urn:iso:15118:2:2016:MsgDataTypes,#AnonType_durationRelativeTimeIntervalType */
+	uint32_t duration ;
+	unsigned int duration_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVFinePositioningParametersType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+struct iso2EVFinePositioningParametersType {
+	int noContent; /* avoid warning */
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,ObjectType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##any])){0-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define iso2ObjectType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2ObjectType_MimeType_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2ObjectType_Encoding_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2ObjectType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+struct iso2ObjectType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso2ObjectType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* attribute: MimeType {http://www.w3.org/2001/XMLSchema,string} */
+	struct {
+		exi_string_character_t characters[iso2ObjectType_MimeType_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  MimeType ;
+	unsigned int MimeType_isUsed:1;
+	/* attribute: Encoding {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[iso2ObjectType_Encoding_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Encoding ;
+	unsigned int Encoding_isUsed:1;
+	/* element: WC[##any] */
+	struct {
+		exi_string_character_t characters[iso2ObjectType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SensorOrderListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":SensorPosition{1-255})',  derivedBy='RESTRICTION'.  */
+#define iso2SensorOrderListType_SensorPosition_ARRAY_SIZE 5
+struct iso2SensorOrderListType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":SensorPosition, http://www.w3.org/2001/XMLSchema,unsignedByte */
+	struct {
+		uint8_t array[iso2SensorOrderListType_SensorPosition_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SensorPosition;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,MeasurementDataListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":MeasurementData{1-255})',  derivedBy='RESTRICTION'.  */
+#define iso2MeasurementDataListType_MeasurementData_ARRAY_SIZE 5
+struct iso2MeasurementDataListType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":MeasurementData, http://www.w3.org/2001/XMLSchema,unsignedShort */
+	struct {
+		uint16_t array[iso2MeasurementDataListType_MeasurementData_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} MeasurementData;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignaturePropertyType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"])){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define iso2SignaturePropertyType_Target_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2SignaturePropertyType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2SignaturePropertyType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+struct iso2SignaturePropertyType {
+	/* attribute: Target {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[iso2SignaturePropertyType_Target_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Target ;
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso2SignaturePropertyType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[iso2SignaturePropertyType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"])|"http://www.w3.org/2000/09/xmldsig#":XPath){0-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define iso2TransformType_Algorithm_CHARACTERS_SIZE 65 + EXTRA_CHAR 
+#define iso2TransformType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2TransformType_XPath_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2TransformType_XPath_ARRAY_SIZE 1
+struct iso2TransformType {
+	/* attribute: Algorithm {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[iso2TransformType_Algorithm_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Algorithm ;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[iso2TransformType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":XPath, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		struct {
+			exi_string_character_t characters[iso2TransformType_XPath_CHARACTERS_SIZE];
+			uint16_t charactersLen;
+		}  array[iso2TransformType_XPath_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} XPath;
+};
+
+typedef enum {
+	iso2EVSENotificationType_StopCharging = 0,
+	iso2EVSENotificationType_ReNegotiation = 1
+} iso2EVSENotificationType;
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EMAIDType',  base type name='eMAIDType',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+#define iso2EMAIDType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2EMAIDType_CONTENT_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+struct iso2EMAIDType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso2EMAIDType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	/* simple content: urn:iso:15118:2:2016:MsgDataTypes,eMAIDType */
+	struct {
+		exi_string_character_t characters[iso2EMAIDType_CONTENT_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  CONTENT ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,DSAKeyValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":P,"http://www.w3.org/2000/09/xmldsig#":Q){0-1},"http://www.w3.org/2000/09/xmldsig#":G{0-1},"http://www.w3.org/2000/09/xmldsig#":Y,"http://www.w3.org/2000/09/xmldsig#":J{0-1},("http://www.w3.org/2000/09/xmldsig#":Seed,"http://www.w3.org/2000/09/xmldsig#":PgenCounter){0-1})',  derivedBy='RESTRICTION'.  */
+#define iso2DSAKeyValueType_P_BYTES_SIZE 350 
+#define iso2DSAKeyValueType_Q_BYTES_SIZE 350 
+#define iso2DSAKeyValueType_G_BYTES_SIZE 350 
+#define iso2DSAKeyValueType_Y_BYTES_SIZE 350 
+#define iso2DSAKeyValueType_J_BYTES_SIZE 350 
+#define iso2DSAKeyValueType_Seed_BYTES_SIZE 350 
+#define iso2DSAKeyValueType_PgenCounter_BYTES_SIZE 350 
+struct iso2DSAKeyValueType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":P, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[iso2DSAKeyValueType_P_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  P ;
+	unsigned int P_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Q, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[iso2DSAKeyValueType_Q_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Q ;
+	unsigned int Q_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":G, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[iso2DSAKeyValueType_G_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  G ;
+	unsigned int G_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Y, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[iso2DSAKeyValueType_Y_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Y ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":J, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[iso2DSAKeyValueType_J_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  J ;
+	unsigned int J_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Seed, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[iso2DSAKeyValueType_Seed_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Seed ;
+	unsigned int Seed_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":PgenCounter, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[iso2DSAKeyValueType_PgenCounter_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  PgenCounter ;
+	unsigned int PgenCounter_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EntryType',  base type name='anyType',  content type='ELEMENT',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":RelativeTimeInterval)',  derivedBy='RESTRICTION'.  */
+struct iso2EntryType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":RelativeTimeInterval, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,RelativeTimeIntervalType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":start,"urn:iso:15118:2:2016:MsgDataTypes":duration{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso2RelativeTimeIntervalType RelativeTimeInterval ;
+};
+
+typedef enum {
+	iso2valueType_bool = 0,
+	iso2valueType_byte = 1,
+	iso2valueType_short = 2,
+	iso2valueType_int = 3,
+	iso2valueType_physicalValue = 4,
+	iso2valueType_string = 5
+} iso2valueType;
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,V2GRequestType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+struct iso2V2GRequestType {
+	int noContent; /* avoid warning */
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEEnergyTransferParameterType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+struct iso2EVSEEnergyTransferParameterType {
+	int noContent; /* avoid warning */
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,MeteringReceiptReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":SessionID,"urn:iso:15118:2:2016:MsgBody":SAScheduleTupleID{0-1},"urn:iso:15118:2:2016:MsgBody":MeterInfo)',  derivedBy='EXTENSION'.  */
+#define iso2MeteringReceiptReqType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2MeteringReceiptReqType_SessionID_BYTES_SIZE 8 /* XML schema facet maxLength for urn:iso:15118:2:2016:MsgDataTypes,sessionIDType is 8 */
+struct iso2MeteringReceiptReqType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso2MeteringReceiptReqType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":SessionID, urn:iso:15118:2:2016:MsgDataTypes,sessionIDType */
+	struct {
+		uint8_t bytes[iso2MeteringReceiptReqType_SessionID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  SessionID ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":SAScheduleTupleID, urn:iso:15118:2:2016:MsgDataTypes,SAIDType */
+	uint8_t SAScheduleTupleID ;
+	unsigned int SAScheduleTupleID_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":MeterInfo, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,MeterInfoType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":MeterID,"urn:iso:15118:2:2016:MsgDataTypes":MeterReadingCharged{0-1},"urn:iso:15118:2:2016:MsgDataTypes":MeterReadingDischarged{0-1},"urn:iso:15118:2:2016:MsgDataTypes":SigMeterReading{0-1},"urn:iso:15118:2:2016:MsgDataTypes":MeterStatus{0-1},"urn:iso:15118:2:2016:MsgDataTypes":TMeter{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso2MeterInfoType MeterInfo ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,KeyValueType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":DSAKeyValue|"http://www.w3.org/2000/09/xmldsig#":RSAKeyValue|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]))',  derivedBy='RESTRICTION'.  */
+#define iso2KeyValueType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+struct iso2KeyValueType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":DSAKeyValue, Complex type name='http://www.w3.org/2000/09/xmldsig#,DSAKeyValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":P,"http://www.w3.org/2000/09/xmldsig#":Q){0-1},"http://www.w3.org/2000/09/xmldsig#":G{0-1},"http://www.w3.org/2000/09/xmldsig#":Y,"http://www.w3.org/2000/09/xmldsig#":J{0-1},("http://www.w3.org/2000/09/xmldsig#":Seed,"http://www.w3.org/2000/09/xmldsig#":PgenCounter){0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso2DSAKeyValueType DSAKeyValue ;
+	unsigned int DSAKeyValue_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":RSAKeyValue, Complex type name='http://www.w3.org/2000/09/xmldsig#,RSAKeyValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Modulus,"http://www.w3.org/2000/09/xmldsig#":Exponent)',  derivedBy='RESTRICTION'.  */
+	struct iso2RSAKeyValueType RSAKeyValue ;
+	unsigned int RSAKeyValue_isUsed:1;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[iso2KeyValueType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+typedef enum {
+	iso2EVCheckInStatusType_CheckIn = 0,
+	iso2EVCheckInStatusType_Processing = 1,
+	iso2EVCheckInStatusType_Completed = 2
+} iso2EVCheckInStatusType;
+
+typedef enum {
+	iso2mechanicalChargingDeviceStatusType_Home = 0,
+	iso2mechanicalChargingDeviceStatusType_Moving = 1,
+	iso2mechanicalChargingDeviceStatusType_EndPosition = 2
+} iso2mechanicalChargingDeviceStatusType;
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,BodyBaseType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+struct iso2BodyBaseType {
+	int noContent; /* avoid warning */
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,AuthorizationReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":GenChallenge{0-1})',  derivedBy='EXTENSION'.  */
+#define iso2AuthorizationReqType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2AuthorizationReqType_GenChallenge_BYTES_SIZE 16 /* XML schema facet length for urn:iso:15118:2:2016:MsgDataTypes,genChallengeType is 16 */
+struct iso2AuthorizationReqType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso2AuthorizationReqType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":GenChallenge, urn:iso:15118:2:2016:MsgDataTypes,genChallengeType */
+	struct {
+		uint8_t bytes[iso2AuthorizationReqType_GenChallenge_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  GenChallenge ;
+	unsigned int GenChallenge_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SPKIDataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":SPKISexp,(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-1}){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define iso2SPKIDataType_SPKISexp_BYTES_SIZE 350 
+#define iso2SPKIDataType_SPKISexp_ARRAY_SIZE 1
+#define iso2SPKIDataType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+struct iso2SPKIDataType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SPKISexp, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		struct {
+			uint8_t bytes[iso2SPKIDataType_SPKISexp_BYTES_SIZE];
+			uint16_t bytesLen;
+		}  array[iso2SPKIDataType_SPKISexp_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SPKISexp;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[iso2SPKIDataType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":HMACOutputLength{0-1},(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define iso2SignatureMethodType_Algorithm_CHARACTERS_SIZE 65 + EXTRA_CHAR 
+#define iso2SignatureMethodType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+struct iso2SignatureMethodType {
+	/* attribute: Algorithm {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[iso2SignatureMethodType_Algorithm_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Algorithm ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":HMACOutputLength, http://www.w3.org/2000/09/xmldsig#,HMACOutputLengthType */
+	int64_t HMACOutputLength ;
+	unsigned int HMACOutputLength_isUsed:1;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[iso2SignatureMethodType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,WeldingDetectionReqType',  base type name='BodyBaseType',  content type='EMPTY',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+struct iso2WeldingDetectionReqType {
+	int noContent; /* avoid warning */
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,SessionSetupReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":EVCCID)',  derivedBy='EXTENSION'.  */
+#define iso2SessionSetupReqType_EVCCID_BYTES_SIZE 6 /* XML schema facet maxLength for urn:iso:15118:2:2016:MsgDataTypes,evccIDType is 6 */
+struct iso2SessionSetupReqType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVCCID, urn:iso:15118:2:2016:MsgDataTypes,evccIDType */
+	struct {
+		uint8_t bytes[iso2SessionSetupReqType_EVCCID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  EVCCID ;
+};
+
+typedef enum {
+	iso2chargeProgressType_Start = 0,
+	iso2chargeProgressType_Stop = 1,
+	iso2chargeProgressType_Renegotiate = 2
+} iso2chargeProgressType;
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,CanonicalizationMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##any]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define iso2CanonicalizationMethodType_Algorithm_CHARACTERS_SIZE 65 + EXTRA_CHAR 
+#define iso2CanonicalizationMethodType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+struct iso2CanonicalizationMethodType {
+	/* attribute: Algorithm {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[iso2CanonicalizationMethodType_Algorithm_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Algorithm ;
+	/* element: WC[##any] */
+	struct {
+		exi_string_character_t characters[iso2CanonicalizationMethodType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+struct iso2PhysicalValueType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":Exponent, urn:iso:15118:2:2016:MsgDataTypes,exponentType */
+	int8_t Exponent ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":Value, http://www.w3.org/2001/XMLSchema,short */
+	int16_t Value ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,SystemStatusReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":OperationMode,"urn:iso:15118:2:2016:MsgBody":EVMechanicalChargingDeviceStatus)',  derivedBy='EXTENSION'.  */
+struct iso2SystemStatusReqType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":OperationMode, urn:iso:15118:2:2016:MsgDataTypes,operationModeType */
+	iso2operationModeType OperationMode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMechanicalChargingDeviceStatus, urn:iso:15118:2:2016:MsgDataTypes,mechanicalChargingDeviceStatusType */
+	iso2mechanicalChargingDeviceStatusType EVMechanicalChargingDeviceStatus ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEFinePositioningSetupParametersType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+struct iso2EVSEFinePositioningSetupParametersType {
+	int noContent; /* avoid warning */
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEFinePositioningParametersType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+struct iso2EVSEFinePositioningParametersType {
+	int noContent; /* avoid warning */
+};
+
+typedef enum {
+	iso2FODStatusType_ObjectOnPad = 0,
+	iso2FODStatusType_PadClear = 1,
+	iso2FODStatusType_UnknownError = 2
+} iso2FODStatusType;
+
+typedef enum {
+	iso2costKindType_relativePricePercentage = 0,
+	iso2costKindType_RenewableGenerationPercentage = 1,
+	iso2costKindType_CarbonDioxideEmission = 2
+} iso2costKindType;
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,DigestMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define iso2DigestMethodType_Algorithm_CHARACTERS_SIZE 65 + EXTRA_CHAR 
+#define iso2DigestMethodType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+struct iso2DigestMethodType {
+	/* attribute: Algorithm {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[iso2DigestMethodType_Algorithm_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Algorithm ;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[iso2DigestMethodType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,TargetPositionType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":TargetOffsetX,"urn:iso:15118:2:2016:MsgDataTypes":TargetOffsetY)',  derivedBy='RESTRICTION'.  */
+struct iso2TargetPositionType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":TargetOffsetX, http://www.w3.org/2001/XMLSchema,unsignedShort */
+	uint16_t TargetOffsetX ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":TargetOffsetY, http://www.w3.org/2001/XMLSchema,unsignedShort */
+	uint16_t TargetOffsetY ;
+};
+
+typedef enum {
+	iso2EVOperationType_Charge = 0,
+	iso2EVOperationType_BPT = 1
+} iso2EVOperationType;
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,DC_EVChargeParameterType',  base type name='EVEnergyTransferParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgDataTypes":DepartureTime),("urn:iso:15118:2:2016:MsgDataTypes":EVMaximumChargePower{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumChargePower{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumChargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumChargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumVoltage,"urn:iso:15118:2:2016:MsgDataTypes":EVTargetEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgDataTypes":CurrentSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":TargetSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":BulkSOC{0-1}))',  derivedBy='EXTENSION'.  */
+struct iso2DC_EVChargeParameterType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":DepartureTime, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t DepartureTime ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMaximumChargePower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumChargePower ;
+	unsigned int EVMaximumChargePower_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMinimumChargePower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMinimumChargePower ;
+	unsigned int EVMinimumChargePower_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMaximumChargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumChargeCurrent ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMinimumChargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMinimumChargeCurrent ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMaximumVoltage, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumVoltage ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVTargetEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVTargetEnergyRequest ;
+	unsigned int EVTargetEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMaximumEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumEnergyRequest ;
+	unsigned int EVMaximumEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMinimumEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMinimumEnergyRequest ;
+	unsigned int EVMinimumEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":CurrentSOC, urn:iso:15118:2:2016:MsgDataTypes,percentValueType */
+	int8_t CurrentSOC ;
+	unsigned int CurrentSOC_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":TargetSOC, urn:iso:15118:2:2016:MsgDataTypes,percentValueType */
+	int8_t TargetSOC ;
+	unsigned int TargetSOC_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":BulkSOC, urn:iso:15118:2:2016:MsgDataTypes,percentValueType */
+	int8_t BulkSOC ;
+	unsigned int BulkSOC_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,ServiceDetailReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":ServiceID)',  derivedBy='EXTENSION'.  */
+struct iso2ServiceDetailReqType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ServiceID, urn:iso:15118:2:2016:MsgDataTypes,serviceIDType */
+	uint16_t ServiceID ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,PreChargeReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":EVTargetVoltage,"urn:iso:15118:2:2016:MsgBody":EVTargetCurrent)',  derivedBy='EXTENSION'.  */
+struct iso2PreChargeReqType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVTargetVoltage, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVTargetVoltage ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVTargetCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVTargetCurrent ;
+};
+
+typedef enum {
+	iso2serviceCategoryType_EVCharging = 0,
+	iso2serviceCategoryType_Internet = 1,
+	iso2serviceCategoryType_ContractCertificate = 2,
+	iso2serviceCategoryType_OtherCustom = 3
+} iso2serviceCategoryType;
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,CartesianCoordinatesType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":XCoordinate,"urn:iso:15118:2:2016:MsgDataTypes":YCoordinate,"urn:iso:15118:2:2016:MsgDataTypes":ZCoordinate)',  derivedBy='RESTRICTION'.  */
+struct iso2CartesianCoordinatesType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":XCoordinate, http://www.w3.org/2001/XMLSchema,short */
+	int16_t XCoordinate ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":YCoordinate, http://www.w3.org/2001/XMLSchema,short */
+	int16_t YCoordinate ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":ZCoordinate, http://www.w3.org/2001/XMLSchema,short */
+	int16_t ZCoordinate ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SubCertificatesType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Certificate{1-4})',  derivedBy='RESTRICTION'.  */
+#define iso2SubCertificatesType_Certificate_BYTES_SIZE 800 /* XML schema facet maxLength for urn:iso:15118:2:2016:MsgDataTypes,certificateType is 800 */
+#define iso2SubCertificatesType_Certificate_ARRAY_SIZE 4
+struct iso2SubCertificatesType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":Certificate, urn:iso:15118:2:2016:MsgDataTypes,certificateType */
+	struct {
+		struct {
+		uint8_t bytes[iso2SubCertificatesType_Certificate_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  array[iso2SubCertificatesType_Certificate_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Certificate;
+};
+
+typedef enum {
+	iso2parkingMethodType_AutoParking = 0,
+	iso2parkingMethodType_MVGuideManual = 1,
+	iso2parkingMethodType_Manual = 2
+} iso2parkingMethodType;
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVEnergyTransferParameterType',  base type name='anyType',  content type='ELEMENT',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":DepartureTime)',  derivedBy='RESTRICTION'.  */
+struct iso2EVEnergyTransferParameterType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":DepartureTime, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t DepartureTime ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ContractSignatureEncryptedPrivateKeyType',  base type name='encryptedPrivateKeyType',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+#define iso2ContractSignatureEncryptedPrivateKeyType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2ContractSignatureEncryptedPrivateKeyType_CONTENT_BYTES_SIZE 350
+struct iso2ContractSignatureEncryptedPrivateKeyType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso2ContractSignatureEncryptedPrivateKeyType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	/* simple content: urn:iso:15118:2:2016:MsgDataTypes,encryptedPrivateKeyType */
+	struct {
+		uint8_t bytes[iso2ContractSignatureEncryptedPrivateKeyType_CONTENT_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  CONTENT ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,MagneticVectorSetupListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":MagneticVectorSetup{1-255})',  derivedBy='RESTRICTION'.  */
+#define iso2MagneticVectorSetupListType_MagneticVectorSetup_ARRAY_SIZE 5
+struct iso2MagneticVectorSetupListType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":MagneticVectorSetup, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,MagneticVectorSetupType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":GAID,"urn:iso:15118:2:2016:MsgDataTypes":FrequencyChannel)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso2MagneticVectorSetupType array[iso2MagneticVectorSetupListType_MagneticVectorSetup_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} MagneticVectorSetup;
+};
+
+typedef enum {
+	iso2responseCodeType_OK = 0,
+	iso2responseCodeType_OK_NewSessionEstablished = 1,
+	iso2responseCodeType_OK_OldSessionJoined = 2,
+	iso2responseCodeType_OK_CertificateExpiresSoon = 3,
+	iso2responseCodeType_OK_IsolationValid = 4,
+	iso2responseCodeType_OK_IsolationWarning = 5,
+	iso2responseCodeType_WARNING_CertificateExpired = 6,
+	iso2responseCodeType_WARNING_NoCertificateAvailable = 7,
+	iso2responseCodeType_WARNING_CertValidationError = 8,
+	iso2responseCodeType_WARNING_CertVerificationError = 9,
+	iso2responseCodeType_WARNING_ContractCanceled = 10,
+	iso2responseCodeType_FAILED = 11,
+	iso2responseCodeType_FAILED_SequenceError = 12,
+	iso2responseCodeType_FAILED_ServiceIDInvalid = 13,
+	iso2responseCodeType_FAILED_UnknownSession = 14,
+	iso2responseCodeType_FAILED_ServiceSelectionInvalid = 15,
+	iso2responseCodeType_FAILED_SignatureError = 16,
+	iso2responseCodeType_FAILED_PaymentSelectionInvalid = 17,
+	iso2responseCodeType_FAILED_ChallengeInvalid = 18,
+	iso2responseCodeType_FAILED_WrongChargeParameter = 19,
+	iso2responseCodeType_FAILED_IsolationFault = 20,
+	iso2responseCodeType_FAILED_PowerDeliveryNotApplied = 21,
+	iso2responseCodeType_FAILED_TariffSelectionInvalid = 22,
+	iso2responseCodeType_FAILED_ChargingProfileInvalid = 23,
+	iso2responseCodeType_FAILED_MeteringSignatureNotValid = 24,
+	iso2responseCodeType_FAILED_NoChargeServiceSelected = 25,
+	iso2responseCodeType_FAILED_WrongEnergyTransferMode = 26,
+	iso2responseCodeType_FAILED_ContactorError = 27,
+	iso2responseCodeType_FAILED_CertificateRevoked = 28,
+	iso2responseCodeType_FAILED_CertificateNotYetValid = 29
+} iso2responseCodeType;
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,X509IssuerSerialType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":X509IssuerName,"http://www.w3.org/2000/09/xmldsig#":X509SerialNumber)',  derivedBy='RESTRICTION'.  */
+#define iso2X509IssuerSerialType_X509IssuerName_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+struct iso2X509IssuerSerialType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509IssuerName, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		exi_string_character_t characters[iso2X509IssuerSerialType_X509IssuerName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  X509IssuerName ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509SerialNumber, http://www.w3.org/2001/XMLSchema,integer */
+	int64_t X509SerialNumber ;
+};
+
+typedef enum {
+	iso2chargingSessionType_Terminate = 0,
+	iso2chargingSessionType_Pause = 1
+} iso2chargingSessionType;
+
+typedef enum {
+	iso2EVSEProcessingType_Finished = 0,
+	iso2EVSEProcessingType_Ongoing = 1,
+	iso2EVSEProcessingType_Ongoing_WaitingForCustomerInteraction = 2
+} iso2EVSEProcessingType;
+
+typedef enum {
+	iso2paymentOptionType_Contract = 0,
+	iso2paymentOptionType_ExternalPayment = 1
+} iso2paymentOptionType;
+
+typedef enum {
+	iso2EVSECheckOutStatusType_Scheduled = 0,
+	iso2EVSECheckOutStatusType_Completed = 1
+} iso2EVSECheckOutStatusType;
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,PGPDataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":PGPKeyID,"http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket{0-1},(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})|("http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket,(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED}))',  derivedBy='RESTRICTION'.  */
+#define iso2PGPDataType_PGPKeyID_BYTES_SIZE 350 
+#define iso2PGPDataType_PGPKeyPacket_BYTES_SIZE 350 
+#define iso2PGPDataType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+struct iso2PGPDataType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":PGPKeyID, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		uint8_t bytes[iso2PGPDataType_PGPKeyID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  PGPKeyID ;
+	unsigned int PGPKeyID_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		uint8_t bytes[iso2PGPDataType_PGPKeyPacket_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  PGPKeyPacket ;
+	unsigned int PGPKeyPacket_isUsed:1;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[iso2PGPDataType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ServiceIDListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":ServiceID{1-10})',  derivedBy='RESTRICTION'.  */
+#define iso2ServiceIDListType_ServiceID_ARRAY_SIZE 10
+struct iso2ServiceIDListType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":ServiceID, urn:iso:15118:2:2016:MsgDataTypes,serviceIDType */
+	struct {
+		uint16_t array[iso2ServiceIDListType_ServiceID_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} ServiceID;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVFinePositioningSetupParametersType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+struct iso2EVFinePositioningSetupParametersType {
+	int noContent; /* avoid warning */
+};
+
+typedef enum {
+	iso2EVCheckOutStatusType_CheckOut = 0,
+	iso2EVCheckOutStatusType_Processing = 1,
+	iso2EVCheckOutStatusType_Completed = 2
+} iso2EVCheckOutStatusType;
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SensorType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":SensorID,"urn:iso:15118:2:2016:MsgDataTypes":SensorPosition,"urn:iso:15118:2:2016:MsgDataTypes":SensorOrientation)',  derivedBy='RESTRICTION'.  */
+struct iso2SensorType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":SensorID, http://www.w3.org/2001/XMLSchema,unsignedByte */
+	uint8_t SensorID ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":SensorPosition, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,CartesianCoordinatesType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":XCoordinate,"urn:iso:15118:2:2016:MsgDataTypes":YCoordinate,"urn:iso:15118:2:2016:MsgDataTypes":ZCoordinate)',  derivedBy='RESTRICTION'.  */
+	struct iso2CartesianCoordinatesType SensorPosition ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":SensorOrientation, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,CartesianCoordinatesType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":XCoordinate,"urn:iso:15118:2:2016:MsgDataTypes":YCoordinate,"urn:iso:15118:2:2016:MsgDataTypes":ZCoordinate)',  derivedBy='RESTRICTION'.  */
+	struct iso2CartesianCoordinatesType SensorOrientation ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureValueType',  base type name='base64Binary',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+#define iso2SignatureValueType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2SignatureValueType_CONTENT_BYTES_SIZE 350
+struct iso2SignatureValueType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso2SignatureValueType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* simple content: http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		uint8_t bytes[iso2SignatureValueType_CONTENT_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  CONTENT ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,CableCheckReqType',  base type name='BodyBaseType',  content type='EMPTY',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+struct iso2CableCheckReqType {
+	int noContent; /* avoid warning */
+};
+
+typedef enum {
+	iso2electricalChargingDeviceStatusType_Connected = 0,
+	iso2electricalChargingDeviceStatusType_Disconnected = 1
+} iso2electricalChargingDeviceStatusType;
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SelectedServiceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":ServiceID,"urn:iso:15118:2:2016:MsgDataTypes":ParameterSetID)',  derivedBy='RESTRICTION'.  */
+struct iso2SelectedServiceType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":ServiceID, urn:iso:15118:2:2016:MsgDataTypes,serviceIDType */
+	uint16_t ServiceID ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":ParameterSetID, http://www.w3.org/2001/XMLSchema,unsignedShort */
+	uint16_t ParameterSetID ;
+};
+
+typedef enum {
+	iso2EVSEErrorCodeType_RESSTemperatureInhibit = 0,
+	iso2EVSEErrorCodeType_ChargerConnectorLockFault = 1,
+	iso2EVSEErrorCodeType_ChargingCurrentdifferential = 2,
+	iso2EVSEErrorCodeType_ChargingVoltageOutOfRange = 3,
+	iso2EVSEErrorCodeType_ChargingSystemIncompatibility = 4,
+	iso2EVSEErrorCodeType_Reserved_A = 5,
+	iso2EVSEErrorCodeType_Reserved_B = 6,
+	iso2EVSEErrorCodeType_Reserved_C = 7
+} iso2EVSEErrorCodeType;
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,DiffieHellmanPublickeyType',  base type name='dHpublickeyType',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+#define iso2DiffieHellmanPublickeyType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2DiffieHellmanPublickeyType_CONTENT_BYTES_SIZE 350
+struct iso2DiffieHellmanPublickeyType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso2DiffieHellmanPublickeyType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	/* simple content: urn:iso:15118:2:2016:MsgDataTypes,dHpublickeyType */
+	struct {
+		uint8_t bytes[iso2DiffieHellmanPublickeyType_CONTENT_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  CONTENT ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+struct iso2EVSEStatusType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay, http://www.w3.org/2001/XMLSchema,unsignedShort */
+	uint16_t NotificationMaxDelay ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSENotification, urn:iso:15118:2:2016:MsgDataTypes,EVSENotificationType */
+	iso2EVSENotificationType EVSENotification ;
+};
+
+typedef enum {
+	iso2EVErrorCodeType_RESSTemperatureInhibit = 0,
+	iso2EVErrorCodeType_EVShiftPosition = 1,
+	iso2EVErrorCodeType_ChargerConnectorLockFault = 2,
+	iso2EVErrorCodeType_EVRESSMalfunction = 3,
+	iso2EVErrorCodeType_ChargingCurrentdifferential = 4,
+	iso2EVErrorCodeType_ChargingVoltageOutOfRange = 5,
+	iso2EVErrorCodeType_ChargingSystemIncompatibility = 6,
+	iso2EVErrorCodeType_Reserved_A = 7,
+	iso2EVErrorCodeType_Reserved_B = 8,
+	iso2EVErrorCodeType_Reserved_C = 9
+} iso2EVErrorCodeType;
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,AuthorizationResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEProcessing))',  derivedBy='EXTENSION'.  */
+struct iso2AuthorizationResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEProcessing, urn:iso:15118:2:2016:MsgDataTypes,EVSEProcessingType */
+	iso2EVSEProcessingType EVSEProcessing ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,MV_EVSEFinePositioningSetupParametersType',  base type name='EVSEFinePositioningSetupParametersType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":FrequencyChannel{0-1},"urn:iso:15118:2:2016:MsgDataTypes":MagneticVectorSetupList{0-1})',  derivedBy='EXTENSION'.  */
+struct iso2MV_EVSEFinePositioningSetupParametersType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":FrequencyChannel, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t FrequencyChannel ;
+	unsigned int FrequencyChannel_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":MagneticVectorSetupList, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,MagneticVectorSetupListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":MagneticVectorSetup{1-255})',  derivedBy='RESTRICTION'.  */
+	struct iso2MagneticVectorSetupListType MagneticVectorSetupList ;
+	unsigned int MagneticVectorSetupList_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,X509DataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":X509IssuerSerial|"http://www.w3.org/2000/09/xmldsig#":X509SKI|"http://www.w3.org/2000/09/xmldsig#":X509SubjectName|"http://www.w3.org/2000/09/xmldsig#":X509Certificate|"http://www.w3.org/2000/09/xmldsig#":X509CRL|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]))){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define iso2X509DataType_X509IssuerSerial_ARRAY_SIZE 1
+#define iso2X509DataType_X509SKI_BYTES_SIZE 350 
+#define iso2X509DataType_X509SKI_ARRAY_SIZE 1
+#define iso2X509DataType_X509SubjectName_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2X509DataType_X509SubjectName_ARRAY_SIZE 1
+#define iso2X509DataType_X509Certificate_BYTES_SIZE 350 
+#define iso2X509DataType_X509Certificate_ARRAY_SIZE 1
+#define iso2X509DataType_X509CRL_BYTES_SIZE 350 
+#define iso2X509DataType_X509CRL_ARRAY_SIZE 1
+#define iso2X509DataType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+struct iso2X509DataType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509IssuerSerial, Complex type name='http://www.w3.org/2000/09/xmldsig#,X509IssuerSerialType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":X509IssuerName,"http://www.w3.org/2000/09/xmldsig#":X509SerialNumber)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso2X509IssuerSerialType array[iso2X509DataType_X509IssuerSerial_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509IssuerSerial;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509SKI, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		struct {
+			uint8_t bytes[iso2X509DataType_X509SKI_BYTES_SIZE];
+			uint16_t bytesLen;
+		}  array[iso2X509DataType_X509SKI_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509SKI;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509SubjectName, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		struct {
+			exi_string_character_t characters[iso2X509DataType_X509SubjectName_CHARACTERS_SIZE];
+			uint16_t charactersLen;
+		}  array[iso2X509DataType_X509SubjectName_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509SubjectName;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509Certificate, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		struct {
+			uint8_t bytes[iso2X509DataType_X509Certificate_BYTES_SIZE];
+			uint16_t bytesLen;
+		}  array[iso2X509DataType_X509Certificate_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509Certificate;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509CRL, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		struct {
+			uint8_t bytes[iso2X509DataType_X509CRL_BYTES_SIZE];
+			uint16_t bytesLen;
+		}  array[iso2X509DataType_X509CRL_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509CRL;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[iso2X509DataType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,DC_BidirectionalControlResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEPresentCurrent,"urn:iso:15118:2:2016:MsgBody":EVSEPresentVoltage,"urn:iso:15118:2:2016:MsgBody":EVSEPowerLimitAchieved,"urn:iso:15118:2:2016:MsgBody":EVSECurrentLimitAchieved,"urn:iso:15118:2:2016:MsgBody":EVSEVoltageLimitAchieved,"urn:iso:15118:2:2016:MsgBody":EVSEMaximumChargePower{0-1},"urn:iso:15118:2:2016:MsgBody":EVSEMaximumDischargePower{0-1},"urn:iso:15118:2:2016:MsgBody":EVSEMaximumChargeCurrent{0-1},"urn:iso:15118:2:2016:MsgBody":EVSEMaximumDischargeCurrent{0-1},"urn:iso:15118:2:2016:MsgBody":EVSEMaximumVoltage{0-1},"urn:iso:15118:2:2016:MsgBody":EVSEMinimumVoltage{0-1},"urn:iso:15118:2:2016:MsgBody":EVSEID,"urn:iso:15118:2:2016:MsgBody":SAScheduleTupleID{0-1},"urn:iso:15118:2:2016:MsgBody":MeterInfo{0-1},"urn:iso:15118:2:2016:MsgBody":ReceiptRequired{0-1}))',  derivedBy='EXTENSION'.  */
+#define iso2DC_BidirectionalControlResType_EVSEID_CHARACTERS_SIZE 37 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2016:MsgDataTypes,evseIDType is 37 */
+struct iso2DC_BidirectionalControlResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEPresentCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEPresentCurrent ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEPresentVoltage, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEPresentVoltage ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEPowerLimitAchieved, http://www.w3.org/2001/XMLSchema,boolean */
+	int EVSEPowerLimitAchieved ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSECurrentLimitAchieved, http://www.w3.org/2001/XMLSchema,boolean */
+	int EVSECurrentLimitAchieved ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEVoltageLimitAchieved, http://www.w3.org/2001/XMLSchema,boolean */
+	int EVSEVoltageLimitAchieved ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEMaximumChargePower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEMaximumChargePower ;
+	unsigned int EVSEMaximumChargePower_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEMaximumDischargePower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEMaximumDischargePower ;
+	unsigned int EVSEMaximumDischargePower_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEMaximumChargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEMaximumChargeCurrent ;
+	unsigned int EVSEMaximumChargeCurrent_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEMaximumDischargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEMaximumDischargeCurrent ;
+	unsigned int EVSEMaximumDischargeCurrent_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEMaximumVoltage, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEMaximumVoltage ;
+	unsigned int EVSEMaximumVoltage_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEMinimumVoltage, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEMinimumVoltage ;
+	unsigned int EVSEMinimumVoltage_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEID, urn:iso:15118:2:2016:MsgDataTypes,evseIDType */
+	struct {
+		exi_string_character_t characters[iso2DC_BidirectionalControlResType_EVSEID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  EVSEID ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":SAScheduleTupleID, urn:iso:15118:2:2016:MsgDataTypes,SAIDType */
+	uint8_t SAScheduleTupleID ;
+	unsigned int SAScheduleTupleID_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":MeterInfo, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,MeterInfoType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":MeterID,"urn:iso:15118:2:2016:MsgDataTypes":MeterReadingCharged{0-1},"urn:iso:15118:2:2016:MsgDataTypes":MeterReadingDischarged{0-1},"urn:iso:15118:2:2016:MsgDataTypes":SigMeterReading{0-1},"urn:iso:15118:2:2016:MsgDataTypes":MeterStatus{0-1},"urn:iso:15118:2:2016:MsgDataTypes":TMeter{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso2MeterInfoType MeterInfo ;
+	unsigned int MeterInfo_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":ReceiptRequired, http://www.w3.org/2001/XMLSchema,boolean */
+	int ReceiptRequired ;
+	unsigned int ReceiptRequired_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,CostType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":costKind,"urn:iso:15118:2:2016:MsgDataTypes":amount)',  derivedBy='RESTRICTION'.  */
+struct iso2CostType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":costKind, urn:iso:15118:2:2016:MsgDataTypes,costKindType */
+	iso2costKindType costKind ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":amount, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType amount ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,ChargingStatusResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEID,"urn:iso:15118:2:2016:MsgBody":SAScheduleTupleID{0-1},"urn:iso:15118:2:2016:MsgBody":MeterInfo{0-1},"urn:iso:15118:2:2016:MsgBody":ReceiptRequired{0-1},"urn:iso:15118:2:2016:MsgBody":EVSETargetPower{0-1}))',  derivedBy='EXTENSION'.  */
+#define iso2ChargingStatusResType_EVSEID_CHARACTERS_SIZE 37 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2016:MsgDataTypes,evseIDType is 37 */
+struct iso2ChargingStatusResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEID, urn:iso:15118:2:2016:MsgDataTypes,evseIDType */
+	struct {
+		exi_string_character_t characters[iso2ChargingStatusResType_EVSEID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  EVSEID ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":SAScheduleTupleID, urn:iso:15118:2:2016:MsgDataTypes,SAIDType */
+	uint8_t SAScheduleTupleID ;
+	unsigned int SAScheduleTupleID_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":MeterInfo, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,MeterInfoType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":MeterID,"urn:iso:15118:2:2016:MsgDataTypes":MeterReadingCharged{0-1},"urn:iso:15118:2:2016:MsgDataTypes":MeterReadingDischarged{0-1},"urn:iso:15118:2:2016:MsgDataTypes":SigMeterReading{0-1},"urn:iso:15118:2:2016:MsgDataTypes":MeterStatus{0-1},"urn:iso:15118:2:2016:MsgDataTypes":TMeter{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso2MeterInfoType MeterInfo ;
+	unsigned int MeterInfo_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":ReceiptRequired, http://www.w3.org/2001/XMLSchema,boolean */
+	int ReceiptRequired ;
+	unsigned int ReceiptRequired_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSETargetPower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSETargetPower ;
+	unsigned int EVSETargetPower_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,AC_EVChargeParameterType',  base type name='EVEnergyTransferParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgDataTypes":DepartureTime),("urn:iso:15118:2:2016:MsgDataTypes":EVMaximumChargePower,"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumChargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumChargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVTargetEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumVoltage))',  derivedBy='EXTENSION'.  */
+struct iso2AC_EVChargeParameterType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":DepartureTime, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t DepartureTime ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMaximumChargePower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumChargePower ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMaximumChargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumChargeCurrent ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMinimumChargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMinimumChargeCurrent ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVTargetEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVTargetEnergyRequest ;
+	unsigned int EVTargetEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMaximumEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumEnergyRequest ;
+	unsigned int EVMaximumEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMinimumEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMinimumEnergyRequest ;
+	unsigned int EVMinimumEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMaximumVoltage, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumVoltage ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,AC_EVSEBidirectionalParameterType',  base type name='AC_EVSEChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumChargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVSENominalVoltage,"urn:iso:15118:2:2016:MsgDataTypes":EVSENominalFrequency),("urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumDischargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVSENominalFrequency))',  derivedBy='EXTENSION'.  */
+struct iso2AC_EVSEBidirectionalParameterType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumChargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEMaximumChargeCurrent ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSENominalVoltage, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSENominalVoltage ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSENominalFrequency, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSENominalFrequency ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumDischargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEMaximumDischargeCurrent ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,VehicleCheckOutResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSECheckOutStatus))',  derivedBy='EXTENSION'.  */
+struct iso2VehicleCheckOutResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSECheckOutStatus, urn:iso:15118:2:2016:MsgDataTypes,EVCheckOutStatusType */
+	iso2EVCheckOutStatusType EVSECheckOutStatus ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,CableCheckResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEProcessing))',  derivedBy='EXTENSION'.  */
+struct iso2CableCheckResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEProcessing, urn:iso:15118:2:2016:MsgDataTypes,EVSEProcessingType */
+	iso2EVSEProcessingType EVSEProcessing ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,ServiceDiscoveryReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":SupportedServiceIDs{0-1})',  derivedBy='EXTENSION'.  */
+struct iso2ServiceDiscoveryReqType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":SupportedServiceIDs, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ServiceIDListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":ServiceID{1-10})',  derivedBy='RESTRICTION'.  */
+	struct iso2ServiceIDListType SupportedServiceIDs ;
+	unsigned int SupportedServiceIDs_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignaturePropertiesType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":SignatureProperty{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define iso2SignaturePropertiesType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2SignaturePropertiesType_SignatureProperty_ARRAY_SIZE 1
+struct iso2SignaturePropertiesType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso2SignaturePropertiesType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SignatureProperty, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignaturePropertyType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"])){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso2SignaturePropertyType array[iso2SignaturePropertiesType_SignatureProperty_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SignatureProperty;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PMaxScheduleEntryType',  base type name='EntryType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgDataTypes":RelativeTimeInterval),("urn:iso:15118:2:2016:MsgDataTypes":PMax{1-3}))',  derivedBy='EXTENSION'.  */
+#define iso2PMaxScheduleEntryType_PMax_ARRAY_SIZE 3
+struct iso2PMaxScheduleEntryType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":RelativeTimeInterval, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,RelativeTimeIntervalType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":start,"urn:iso:15118:2:2016:MsgDataTypes":duration{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso2RelativeTimeIntervalType RelativeTimeInterval ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":PMax, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso2PhysicalValueType array[iso2PMaxScheduleEntryType_PMax_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} PMax;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,VehicleCheckInReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":EVCheckInStatus,"urn:iso:15118:2:2016:MsgBody":ParkingMethod{0-1})',  derivedBy='EXTENSION'.  */
+struct iso2VehicleCheckInReqType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVCheckInStatus, urn:iso:15118:2:2016:MsgDataTypes,EVCheckInStatusType */
+	iso2EVCheckInStatusType EVCheckInStatus ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":ParkingMethod, urn:iso:15118:2:2016:MsgDataTypes,parkingMethodType */
+	iso2parkingMethodType ParkingMethod ;
+	unsigned int ParkingMethod_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,ConnectChargingDeviceResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEProcessing,"urn:iso:15118:2:2016:MsgBody":EVSEElectricalChargingDeviceStatus,"urn:iso:15118:2:2016:MsgBody":EVSEMechanicalChargingDeviceStatus))',  derivedBy='EXTENSION'.  */
+struct iso2ConnectChargingDeviceResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEProcessing, urn:iso:15118:2:2016:MsgDataTypes,EVSEProcessingType */
+	iso2EVSEProcessingType EVSEProcessing ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEElectricalChargingDeviceStatus, urn:iso:15118:2:2016:MsgDataTypes,electricalChargingDeviceStatusType */
+	iso2electricalChargingDeviceStatusType EVSEElectricalChargingDeviceStatus ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEMechanicalChargingDeviceStatus, urn:iso:15118:2:2016:MsgDataTypes,mechanicalChargingDeviceStatusType */
+	iso2mechanicalChargingDeviceStatusType EVSEMechanicalChargingDeviceStatus ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,WeldingDetectionResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEPresentVoltage))',  derivedBy='EXTENSION'.  */
+struct iso2WeldingDetectionResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEPresentVoltage, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEPresentVoltage ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,SessionStopResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1})',  derivedBy='EXTENSION'.  */
+struct iso2SessionStopResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,VehicleCheckInResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":VehicleSpace,"urn:iso:15118:2:2016:MsgBody":TargetOffset{0-1}))',  derivedBy='EXTENSION'.  */
+struct iso2VehicleCheckInResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":VehicleSpace, http://www.w3.org/2001/XMLSchema,unsignedShort */
+	uint16_t VehicleSpace ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":TargetOffset, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,TargetPositionType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":TargetOffsetX,"urn:iso:15118:2:2016:MsgDataTypes":TargetOffsetY)',  derivedBy='RESTRICTION'.  */
+	struct iso2TargetPositionType TargetOffset ;
+	unsigned int TargetOffset_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,AC_EVBidirectionalParameterType',  base type name='AC_EVChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((("urn:iso:15118:2:2016:MsgDataTypes":DepartureTime),("urn:iso:15118:2:2016:MsgDataTypes":EVMaximumChargePower,"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumChargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumChargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVTargetEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumVoltage)),("urn:iso:15118:2:2016:MsgDataTypes":EVMaximumDischargePower,"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumDischargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumDischargeCurrent))',  derivedBy='EXTENSION'.  */
+struct iso2AC_EVBidirectionalParameterType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":DepartureTime, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t DepartureTime ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMaximumChargePower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumChargePower ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMaximumChargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumChargeCurrent ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMinimumChargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMinimumChargeCurrent ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVTargetEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVTargetEnergyRequest ;
+	unsigned int EVTargetEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMaximumEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumEnergyRequest ;
+	unsigned int EVMaximumEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMinimumEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMinimumEnergyRequest ;
+	unsigned int EVMinimumEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMaximumVoltage, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumVoltage ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMaximumDischargePower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumDischargePower ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMaximumDischargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumDischargeCurrent ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMinimumDischargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMinimumDischargeCurrent ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ConsumptionCostType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":startValue,"urn:iso:15118:2:2016:MsgDataTypes":Cost{1-3})',  derivedBy='RESTRICTION'.  */
+#define iso2ConsumptionCostType_Cost_ARRAY_SIZE 3
+struct iso2ConsumptionCostType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":startValue, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType startValue ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":Cost, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,CostType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":costKind,"urn:iso:15118:2:2016:MsgDataTypes":amount)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso2CostType array[iso2ConsumptionCostType_Cost_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Cost;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PaymentOptionListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":PaymentOption{1-2})',  derivedBy='RESTRICTION'.  */
+#define iso2PaymentOptionListType_PaymentOption_ARRAY_SIZE 2
+struct iso2PaymentOptionListType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":PaymentOption, urn:iso:15118:2:2016:MsgDataTypes,paymentOptionType */
+	struct {
+		iso2paymentOptionType array[iso2PaymentOptionListType_PaymentOption_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} PaymentOption;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transform{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define iso2TransformsType_Transform_ARRAY_SIZE 1
+struct iso2TransformsType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Transform, Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"])|"http://www.w3.org/2000/09/xmldsig#":XPath){0-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso2TransformType array[iso2TransformsType_Transform_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Transform;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ParameterType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":boolValue|"urn:iso:15118:2:2016:MsgDataTypes":byteValue|"urn:iso:15118:2:2016:MsgDataTypes":shortValue|"urn:iso:15118:2:2016:MsgDataTypes":intValue|"urn:iso:15118:2:2016:MsgDataTypes":physicalValue|"urn:iso:15118:2:2016:MsgDataTypes":stringValue)',  derivedBy='RESTRICTION'.  */
+#define iso2ParameterType_Name_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2ParameterType_stringValue_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+struct iso2ParameterType {
+	/* attribute: Name {http://www.w3.org/2001/XMLSchema,string} */
+	struct {
+		exi_string_character_t characters[iso2ParameterType_Name_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Name ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":boolValue, http://www.w3.org/2001/XMLSchema,boolean */
+	int boolValue ;
+	unsigned int boolValue_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":byteValue, http://www.w3.org/2001/XMLSchema,byte */
+	int8_t byteValue ;
+	unsigned int byteValue_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":shortValue, http://www.w3.org/2001/XMLSchema,short */
+	int16_t shortValue ;
+	unsigned int shortValue_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":intValue, http://www.w3.org/2001/XMLSchema,int */
+	int32_t intValue ;
+	unsigned int intValue_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":physicalValue, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType physicalValue ;
+	unsigned int physicalValue_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":stringValue, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		exi_string_character_t characters[iso2ParameterType_stringValue_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  stringValue ;
+	unsigned int stringValue_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,SessionStopReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":ChargingSession)',  derivedBy='EXTENSION'.  */
+struct iso2SessionStopReqType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ChargingSession, urn:iso:15118:2:2016:MsgDataTypes,chargingSessionType */
+	iso2chargingSessionType ChargingSession ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SensorMeasurementsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":SensorID,"urn:iso:15118:2:2016:MsgDataTypes":EffectiveRadiatedPower,"urn:iso:15118:2:2016:MsgDataTypes":MeasurementDataList)',  derivedBy='RESTRICTION'.  */
+struct iso2SensorMeasurementsType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":SensorID, http://www.w3.org/2001/XMLSchema,unsignedByte */
+	uint8_t SensorID ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EffectiveRadiatedPower, http://www.w3.org/2001/XMLSchema,byte */
+	int8_t EffectiveRadiatedPower ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":MeasurementDataList, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,MeasurementDataListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":MeasurementData{1-255})',  derivedBy='RESTRICTION'.  */
+	struct iso2MeasurementDataListType MeasurementDataList ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,DC_EVSEChargeParameterType',  base type name='EVSEEnergyTransferParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumChargePower,"urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumChargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVSEMinimumChargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumVoltage,"urn:iso:15118:2:2016:MsgDataTypes":EVSEMinimumVoltage,"urn:iso:15118:2:2016:MsgDataTypes":EVSECurrentRegulationTolerance{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVSEPeakCurrentRipple,"urn:iso:15118:2:2016:MsgDataTypes":EVSEEnergyToBeDelivered{0-1})',  derivedBy='EXTENSION'.  */
+struct iso2DC_EVSEChargeParameterType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumChargePower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEMaximumChargePower ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumChargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEMaximumChargeCurrent ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSEMinimumChargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEMinimumChargeCurrent ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumVoltage, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEMaximumVoltage ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSEMinimumVoltage, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEMinimumVoltage ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSECurrentRegulationTolerance, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSECurrentRegulationTolerance ;
+	unsigned int EVSECurrentRegulationTolerance_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSEPeakCurrentRipple, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEPeakCurrentRipple ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSEEnergyToBeDelivered, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEEnergyToBeDelivered ;
+	unsigned int EVSEEnergyToBeDelivered_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,CertificateChainType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Certificate,"urn:iso:15118:2:2016:MsgDataTypes":SubCertificates{0-1})',  derivedBy='RESTRICTION'.  */
+#define iso2CertificateChainType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2CertificateChainType_Certificate_BYTES_SIZE 800 /* XML schema facet maxLength for urn:iso:15118:2:2016:MsgDataTypes,certificateType is 800 */
+struct iso2CertificateChainType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso2CertificateChainType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":Certificate, urn:iso:15118:2:2016:MsgDataTypes,certificateType */
+	struct {
+		uint8_t bytes[iso2CertificateChainType_Certificate_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Certificate ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":SubCertificates, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SubCertificatesType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Certificate{1-4})',  derivedBy='RESTRICTION'.  */
+	struct iso2SubCertificatesType SubCertificates ;
+	unsigned int SubCertificates_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,WPT_EVChargeParameterType',  base type name='EVEnergyTransferParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgDataTypes":DepartureTime),("urn:iso:15118:2:2016:MsgDataTypes":EVMaximumPower,"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumPower,"urn:iso:15118:2:2016:MsgDataTypes":EVTargetEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumEnergyRequest{0-1}))',  derivedBy='EXTENSION'.  */
+struct iso2WPT_EVChargeParameterType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":DepartureTime, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t DepartureTime ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMaximumPower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumPower ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMinimumPower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMinimumPower ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVTargetEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVTargetEnergyRequest ;
+	unsigned int EVTargetEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMaximumEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumEnergyRequest ;
+	unsigned int EVMaximumEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMinimumEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMinimumEnergyRequest ;
+	unsigned int EVMinimumEnergyRequest_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,DisconnectChargingDeviceReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":EVElectricalChargingDeviceStatus,"urn:iso:15118:2:2016:MsgBody":EVMechanicalChargingDeviceStatus)',  derivedBy='EXTENSION'.  */
+struct iso2DisconnectChargingDeviceReqType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVElectricalChargingDeviceStatus, urn:iso:15118:2:2016:MsgDataTypes,electricalChargingDeviceStatusType */
+	iso2electricalChargingDeviceStatusType EVElectricalChargingDeviceStatus ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMechanicalChargingDeviceStatus, urn:iso:15118:2:2016:MsgDataTypes,mechanicalChargingDeviceStatusType */
+	iso2mechanicalChargingDeviceStatusType EVMechanicalChargingDeviceStatus ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,MeteringReceiptResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1})',  derivedBy='EXTENSION'.  */
+struct iso2MeteringReceiptResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,SessionSetupResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEID,"urn:iso:15118:2:2016:MsgBody":EVSETimeStamp{0-1}))',  derivedBy='EXTENSION'.  */
+#define iso2SessionSetupResType_EVSEID_CHARACTERS_SIZE 37 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2016:MsgDataTypes,evseIDType is 37 */
+struct iso2SessionSetupResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEID, urn:iso:15118:2:2016:MsgDataTypes,evseIDType */
+	struct {
+		exi_string_character_t characters[iso2SessionSetupResType_EVSEID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  EVSEID ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSETimeStamp, http://www.w3.org/2001/XMLSchema,long */
+	int64_t EVSETimeStamp ;
+	unsigned int EVSETimeStamp_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,ReferenceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1},"http://www.w3.org/2000/09/xmldsig#":DigestMethod,"http://www.w3.org/2000/09/xmldsig#":DigestValue)',  derivedBy='RESTRICTION'.  */
+#define iso2ReferenceType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2ReferenceType_URI_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2ReferenceType_Type_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2ReferenceType_DigestValue_BYTES_SIZE 350 
+struct iso2ReferenceType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso2ReferenceType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* attribute: URI {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[iso2ReferenceType_URI_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  URI ;
+	unsigned int URI_isUsed:1;
+	/* attribute: Type {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[iso2ReferenceType_Type_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Type ;
+	unsigned int Type_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Transforms, Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transform{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct iso2TransformsType Transforms ;
+	unsigned int Transforms_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":DigestMethod, Complex type name='http://www.w3.org/2000/09/xmldsig#,DigestMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct iso2DigestMethodType DigestMethod ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":DigestValue, http://www.w3.org/2000/09/xmldsig#,DigestValueType */
+	struct {
+		uint8_t bytes[iso2ReferenceType_DigestValue_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  DigestValue ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SensorListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Sensor{1-255})',  derivedBy='RESTRICTION'.  */
+#define iso2SensorListType_Sensor_ARRAY_SIZE 5
+struct iso2SensorListType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":Sensor, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SensorType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":SensorID,"urn:iso:15118:2:2016:MsgDataTypes":SensorPosition,"urn:iso:15118:2:2016:MsgDataTypes":SensorOrientation)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso2SensorType array[iso2SensorListType_Sensor_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Sensor;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,LFA_EVFinePositioningSetupParametersType',  base type name='EVFinePositioningSetupParametersType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NumberOfSensors,"urn:iso:15118:2:2016:MsgDataTypes":SensorList,"urn:iso:15118:2:2016:MsgDataTypes":SensorOrder,"urn:iso:15118:2:2016:MsgDataTypes":SignalPulseDuration,"urn:iso:15118:2:2016:MsgDataTypes":SignalSeparationTime,"urn:iso:15118:2:2016:MsgDataTypes":PackageSeparationTime,"urn:iso:15118:2:2016:MsgDataTypes":AlignmentOffset)',  derivedBy='EXTENSION'.  */
+struct iso2LFA_EVFinePositioningSetupParametersType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":NumberOfSensors, http://www.w3.org/2001/XMLSchema,unsignedByte */
+	uint8_t NumberOfSensors ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":SensorList, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SensorListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Sensor{1-255})',  derivedBy='RESTRICTION'.  */
+	struct iso2SensorListType SensorList ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":SensorOrder, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SensorOrderListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":SensorPosition{1-255})',  derivedBy='RESTRICTION'.  */
+	struct iso2SensorOrderListType SensorOrder ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":SignalPulseDuration, http://www.w3.org/2001/XMLSchema,unsignedByte */
+	uint8_t SignalPulseDuration ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":SignalSeparationTime, http://www.w3.org/2001/XMLSchema,unsignedByte */
+	uint8_t SignalSeparationTime ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":PackageSeparationTime, http://www.w3.org/2001/XMLSchema,unsignedByte */
+	uint8_t PackageSeparationTime ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":AlignmentOffset, http://www.w3.org/2001/XMLSchema,unsignedShort */
+	uint16_t AlignmentOffset ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,WPT_EVSEChargeParameterType',  base type name='EVSEEnergyTransferParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumPower,"urn:iso:15118:2:2016:MsgDataTypes":EVSEMinimumPower)',  derivedBy='EXTENSION'.  */
+struct iso2WPT_EVSEChargeParameterType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumPower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEMaximumPower ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSEMinimumPower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEMinimumPower ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ParameterSetType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":ParameterSetID,"urn:iso:15118:2:2016:MsgDataTypes":Parameter{1-16})',  derivedBy='RESTRICTION'.  */
+#define iso2ParameterSetType_Parameter_ARRAY_SIZE 16
+struct iso2ParameterSetType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":ParameterSetID, http://www.w3.org/2001/XMLSchema,unsignedShort */
+	uint16_t ParameterSetID ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":Parameter, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ParameterType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":boolValue|"urn:iso:15118:2:2016:MsgDataTypes":byteValue|"urn:iso:15118:2:2016:MsgDataTypes":shortValue|"urn:iso:15118:2:2016:MsgDataTypes":intValue|"urn:iso:15118:2:2016:MsgDataTypes":physicalValue|"urn:iso:15118:2:2016:MsgDataTypes":stringValue)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso2ParameterType array[iso2ParameterSetType_Parameter_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Parameter;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,PaymentDetailsResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":GenChallenge,"urn:iso:15118:2:2016:MsgBody":EVSETimeStamp))',  derivedBy='EXTENSION'.  */
+#define iso2PaymentDetailsResType_GenChallenge_BYTES_SIZE 16 /* XML schema facet length for urn:iso:15118:2:2016:MsgDataTypes,genChallengeType is 16 */
+struct iso2PaymentDetailsResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":GenChallenge, urn:iso:15118:2:2016:MsgDataTypes,genChallengeType */
+	struct {
+		uint8_t bytes[iso2PaymentDetailsResType_GenChallenge_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  GenChallenge ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSETimeStamp, http://www.w3.org/2001/XMLSchema,long */
+	int64_t EVSETimeStamp ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,AC_BidirectionalControlResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEProcessing,"urn:iso:15118:2:2016:MsgBody":EVSETargetPower,"urn:iso:15118:2:2016:MsgBody":EVSETargetReactivePower,"urn:iso:15118:2:2016:MsgBody":EVSEID,"urn:iso:15118:2:2016:MsgBody":SAScheduleTupleID{0-1},"urn:iso:15118:2:2016:MsgBody":MeterInfo{0-1},"urn:iso:15118:2:2016:MsgBody":ReceiptRequired{0-1}))',  derivedBy='EXTENSION'.  */
+#define iso2AC_BidirectionalControlResType_EVSEID_CHARACTERS_SIZE 37 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2016:MsgDataTypes,evseIDType is 37 */
+struct iso2AC_BidirectionalControlResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEProcessing, urn:iso:15118:2:2016:MsgDataTypes,EVSEProcessingType */
+	iso2EVSEProcessingType EVSEProcessing ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSETargetPower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSETargetPower ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSETargetReactivePower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSETargetReactivePower ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEID, urn:iso:15118:2:2016:MsgDataTypes,evseIDType */
+	struct {
+		exi_string_character_t characters[iso2AC_BidirectionalControlResType_EVSEID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  EVSEID ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":SAScheduleTupleID, urn:iso:15118:2:2016:MsgDataTypes,SAIDType */
+	uint8_t SAScheduleTupleID ;
+	unsigned int SAScheduleTupleID_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":MeterInfo, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,MeterInfoType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":MeterID,"urn:iso:15118:2:2016:MsgDataTypes":MeterReadingCharged{0-1},"urn:iso:15118:2:2016:MsgDataTypes":MeterReadingDischarged{0-1},"urn:iso:15118:2:2016:MsgDataTypes":SigMeterReading{0-1},"urn:iso:15118:2:2016:MsgDataTypes":MeterStatus{0-1},"urn:iso:15118:2:2016:MsgDataTypes":TMeter{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso2MeterInfoType MeterInfo ;
+	unsigned int MeterInfo_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":ReceiptRequired, http://www.w3.org/2001/XMLSchema,boolean */
+	int ReceiptRequired ;
+	unsigned int ReceiptRequired_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,VehicleCheckOutReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":EVCheckOutStatus,"urn:iso:15118:2:2016:MsgBody":CheckOutTime)',  derivedBy='EXTENSION'.  */
+struct iso2VehicleCheckOutReqType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVCheckOutStatus, urn:iso:15118:2:2016:MsgDataTypes,EVCheckOutStatusType */
+	iso2EVCheckOutStatusType EVCheckOutStatus ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":CheckOutTime, http://www.w3.org/2001/XMLSchema,unsignedLong */
+	uint64_t CheckOutTime ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,AlignmentCheckResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEProcessing,"urn:iso:15118:2:2016:MsgBody":AlignmentCheckParameters{0-1}))',  derivedBy='EXTENSION'.  */
+struct iso2AlignmentCheckResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEProcessing, urn:iso:15118:2:2016:MsgDataTypes,EVSEProcessingType */
+	iso2EVSEProcessingType EVSEProcessing ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":AlignmentCheckParameters, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ParameterSetType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":ParameterSetID,"urn:iso:15118:2:2016:MsgDataTypes":Parameter{1-16})',  derivedBy='RESTRICTION'.  */
+	struct iso2ParameterSetType AlignmentCheckParameters ;
+	unsigned int AlignmentCheckParameters_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,MinimumPMaxRequestType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":MinimumPMaxScheduleEntry{1-3})',  derivedBy='RESTRICTION'.  */
+#define iso2MinimumPMaxRequestType_MinimumPMaxScheduleEntry_ARRAY_SIZE 3
+struct iso2MinimumPMaxRequestType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":MinimumPMaxScheduleEntry, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PMaxScheduleEntryType',  base type name='EntryType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgDataTypes":RelativeTimeInterval),("urn:iso:15118:2:2016:MsgDataTypes":PMax{1-3}))',  derivedBy='EXTENSION'.  */
+	struct {
+		struct iso2PMaxScheduleEntryType array[iso2MinimumPMaxRequestType_MinimumPMaxScheduleEntry_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} MinimumPMaxScheduleEntry;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,DisconnectChargingDeviceResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEProcessing,"urn:iso:15118:2:2016:MsgBody":EVSEElectricalChargingDeviceStatus,"urn:iso:15118:2:2016:MsgBody":EVSEMechanicalChargingDeviceStatus))',  derivedBy='EXTENSION'.  */
+struct iso2DisconnectChargingDeviceResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEProcessing, urn:iso:15118:2:2016:MsgDataTypes,EVSEProcessingType */
+	iso2EVSEProcessingType EVSEProcessing ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEElectricalChargingDeviceStatus, urn:iso:15118:2:2016:MsgDataTypes,electricalChargingDeviceStatusType */
+	iso2electricalChargingDeviceStatusType EVSEElectricalChargingDeviceStatus ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEMechanicalChargingDeviceStatus, urn:iso:15118:2:2016:MsgDataTypes,mechanicalChargingDeviceStatusType */
+	iso2mechanicalChargingDeviceStatusType EVSEMechanicalChargingDeviceStatus ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,PaymentDetailsReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":eMAID,"urn:iso:15118:2:2016:MsgBody":ContractSignatureCertChain)',  derivedBy='EXTENSION'.  */
+#define iso2PaymentDetailsReqType_eMAID_CHARACTERS_SIZE 15 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2016:MsgDataTypes,eMAIDType is 15 */
+struct iso2PaymentDetailsReqType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":eMAID, urn:iso:15118:2:2016:MsgDataTypes,eMAIDType */
+	struct {
+		exi_string_character_t characters[iso2PaymentDetailsReqType_eMAID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  eMAID ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":ContractSignatureCertChain, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,CertificateChainType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Certificate,"urn:iso:15118:2:2016:MsgDataTypes":SubCertificates{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso2CertificateChainType ContractSignatureCertChain ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,Generic_EVFinePositioningParametersType',  base type name='EVFinePositioningParametersType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":GenericParameters)',  derivedBy='EXTENSION'.  */
+struct iso2Generic_EVFinePositioningParametersType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":GenericParameters, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ParameterSetType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":ParameterSetID,"urn:iso:15118:2:2016:MsgDataTypes":Parameter{1-16})',  derivedBy='RESTRICTION'.  */
+	struct iso2ParameterSetType GenericParameters ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,ConnectChargingDeviceReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":EVElectricalChargingDeviceStatus,"urn:iso:15118:2:2016:MsgBody":EVMechanicalChargingDeviceStatus)',  derivedBy='EXTENSION'.  */
+struct iso2ConnectChargingDeviceReqType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVElectricalChargingDeviceStatus, urn:iso:15118:2:2016:MsgDataTypes,electricalChargingDeviceStatusType */
+	iso2electricalChargingDeviceStatusType EVElectricalChargingDeviceStatus ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMechanicalChargingDeviceStatus, urn:iso:15118:2:2016:MsgDataTypes,mechanicalChargingDeviceStatusType */
+	iso2mechanicalChargingDeviceStatusType EVMechanicalChargingDeviceStatus ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,AC_EVSEChargeParameterType',  base type name='EVSEEnergyTransferParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumChargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVSENominalVoltage,"urn:iso:15118:2:2016:MsgDataTypes":EVSENominalFrequency)',  derivedBy='EXTENSION'.  */
+struct iso2AC_EVSEChargeParameterType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumChargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEMaximumChargeCurrent ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSENominalVoltage, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSENominalVoltage ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSENominalFrequency, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSENominalFrequency ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SalesTariffEntryType',  base type name='EntryType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgDataTypes":RelativeTimeInterval),("urn:iso:15118:2:2016:MsgDataTypes":EPriceLevel{0-1},"urn:iso:15118:2:2016:MsgDataTypes":ConsumptionCost{0-3}))',  derivedBy='EXTENSION'.  */
+#define iso2SalesTariffEntryType_ConsumptionCost_ARRAY_SIZE 3
+struct iso2SalesTariffEntryType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":RelativeTimeInterval, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,RelativeTimeIntervalType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":start,"urn:iso:15118:2:2016:MsgDataTypes":duration{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso2RelativeTimeIntervalType RelativeTimeInterval ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EPriceLevel, http://www.w3.org/2001/XMLSchema,unsignedByte */
+	uint8_t EPriceLevel ;
+	unsigned int EPriceLevel_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":ConsumptionCost, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ConsumptionCostType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":startValue,"urn:iso:15118:2:2016:MsgDataTypes":Cost{1-3})',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso2ConsumptionCostType array[iso2SalesTariffEntryType_ConsumptionCost_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} ConsumptionCost;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,DC_EVSEBidirectionalParameterType',  base type name='DC_EVSEChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumChargePower,"urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumChargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVSEMinimumChargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumVoltage,"urn:iso:15118:2:2016:MsgDataTypes":EVSEMinimumVoltage,"urn:iso:15118:2:2016:MsgDataTypes":EVSECurrentRegulationTolerance{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVSEPeakCurrentRipple,"urn:iso:15118:2:2016:MsgDataTypes":EVSEEnergyToBeDelivered{0-1}),("urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumDischargePower,"urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumDischargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVSEMinimumDischargeCurrent))',  derivedBy='EXTENSION'.  */
+struct iso2DC_EVSEBidirectionalParameterType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumChargePower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEMaximumChargePower ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumChargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEMaximumChargeCurrent ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSEMinimumChargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEMinimumChargeCurrent ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumVoltage, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEMaximumVoltage ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSEMinimumVoltage, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEMinimumVoltage ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSECurrentRegulationTolerance, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSECurrentRegulationTolerance ;
+	unsigned int EVSECurrentRegulationTolerance_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSEPeakCurrentRipple, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEPeakCurrentRipple ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSEEnergyToBeDelivered, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEEnergyToBeDelivered ;
+	unsigned int EVSEEnergyToBeDelivered_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumDischargePower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEMaximumDischargePower ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumDischargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEMaximumDischargeCurrent ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSEMinimumDischargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEMinimumDischargeCurrent ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,DisplayParametersType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":CurrentRange{0-1},"urn:iso:15118:2:2016:MsgDataTypes":CurrentSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":TargetSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":BulkSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":MinimumSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":ChargingPerformance{0-1},"urn:iso:15118:2:2016:MsgDataTypes":RemainingTimeToTargetSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":RemainingTimeToBulkSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":RemainingTimeToMinimumSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":ChargingComplete{0-1},"urn:iso:15118:2:2016:MsgDataTypes":BulkChargingComplete{0-1},"urn:iso:15118:2:2016:MsgDataTypes":InletHot{0-1})',  derivedBy='RESTRICTION'.  */
+struct iso2DisplayParametersType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":CurrentRange, http://www.w3.org/2001/XMLSchema,unsignedShort */
+	uint16_t CurrentRange ;
+	unsigned int CurrentRange_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":CurrentSOC, urn:iso:15118:2:2016:MsgDataTypes,percentValueType */
+	int8_t CurrentSOC ;
+	unsigned int CurrentSOC_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":TargetSOC, urn:iso:15118:2:2016:MsgDataTypes,percentValueType */
+	int8_t TargetSOC ;
+	unsigned int TargetSOC_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":BulkSOC, urn:iso:15118:2:2016:MsgDataTypes,percentValueType */
+	int8_t BulkSOC ;
+	unsigned int BulkSOC_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":MinimumSOC, urn:iso:15118:2:2016:MsgDataTypes,percentValueType */
+	int8_t MinimumSOC ;
+	unsigned int MinimumSOC_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":ChargingPerformance, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType ChargingPerformance ;
+	unsigned int ChargingPerformance_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":RemainingTimeToTargetSOC, urn:iso:15118:2:2016:MsgDataTypes,percentValueType */
+	int8_t RemainingTimeToTargetSOC ;
+	unsigned int RemainingTimeToTargetSOC_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":RemainingTimeToBulkSOC, urn:iso:15118:2:2016:MsgDataTypes,percentValueType */
+	int8_t RemainingTimeToBulkSOC ;
+	unsigned int RemainingTimeToBulkSOC_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":RemainingTimeToMinimumSOC, urn:iso:15118:2:2016:MsgDataTypes,percentValueType */
+	int8_t RemainingTimeToMinimumSOC ;
+	unsigned int RemainingTimeToMinimumSOC_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":ChargingComplete, http://www.w3.org/2001/XMLSchema,boolean */
+	int ChargingComplete ;
+	unsigned int ChargingComplete_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":BulkChargingComplete, http://www.w3.org/2001/XMLSchema,boolean */
+	int BulkChargingComplete ;
+	unsigned int BulkChargingComplete_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":InletHot, http://www.w3.org/2001/XMLSchema,boolean */
+	int InletHot ;
+	unsigned int InletHot_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,DC_EVBidirectionalParameterType',  base type name='DC_EVChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((("urn:iso:15118:2:2016:MsgDataTypes":DepartureTime),("urn:iso:15118:2:2016:MsgDataTypes":EVMaximumChargePower{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumChargePower{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumChargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumChargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumVoltage,"urn:iso:15118:2:2016:MsgDataTypes":EVTargetEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgDataTypes":CurrentSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":TargetSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":BulkSOC{0-1})),("urn:iso:15118:2:2016:MsgDataTypes":EVMaximumDischargePower{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumDischargePower{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumDischargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumDischargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumVoltage,"urn:iso:15118:2:2016:MsgDataTypes":MinimumSOC{0-1}))',  derivedBy='EXTENSION'.  */
+struct iso2DC_EVBidirectionalParameterType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":DepartureTime, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t DepartureTime ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMaximumChargePower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumChargePower ;
+	unsigned int EVMaximumChargePower_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMinimumChargePower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMinimumChargePower ;
+	unsigned int EVMinimumChargePower_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMaximumChargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumChargeCurrent ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMinimumChargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMinimumChargeCurrent ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMaximumVoltage, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumVoltage ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVTargetEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVTargetEnergyRequest ;
+	unsigned int EVTargetEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMaximumEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumEnergyRequest ;
+	unsigned int EVMaximumEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMinimumEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMinimumEnergyRequest ;
+	unsigned int EVMinimumEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":CurrentSOC, urn:iso:15118:2:2016:MsgDataTypes,percentValueType */
+	int8_t CurrentSOC ;
+	unsigned int CurrentSOC_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":TargetSOC, urn:iso:15118:2:2016:MsgDataTypes,percentValueType */
+	int8_t TargetSOC ;
+	unsigned int TargetSOC_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":BulkSOC, urn:iso:15118:2:2016:MsgDataTypes,percentValueType */
+	int8_t BulkSOC ;
+	unsigned int BulkSOC_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMaximumDischargePower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumDischargePower ;
+	unsigned int EVMaximumDischargePower_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMinimumDischargePower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMinimumDischargePower ;
+	unsigned int EVMinimumDischargePower_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMaximumDischargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumDischargeCurrent ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMinimumDischargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMinimumDischargeCurrent ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVMinimumVoltage, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMinimumVoltage ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":MinimumSOC, urn:iso:15118:2:2016:MsgDataTypes,percentValueType */
+	int8_t MinimumSOC ;
+	unsigned int MinimumSOC_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,MagneticVectorType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":GAID,"urn:iso:15118:2:2016:MsgDataTypes":Distance,"urn:iso:15118:2:2016:MsgDataTypes":AngleGAtoVA,"urn:iso:15118:2:2016:MsgDataTypes":RotationVAtoGA,"urn:iso:15118:2:2016:MsgDataTypes":FODStatus)',  derivedBy='RESTRICTION'.  */
+#define iso2MagneticVectorType_GAID_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+struct iso2MagneticVectorType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":GAID, http://www.w3.org/2001/XMLSchema,ID */
+	struct {
+		exi_string_character_t characters[iso2MagneticVectorType_GAID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  GAID ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":Distance, http://www.w3.org/2001/XMLSchema,unsignedShort */
+	uint16_t Distance ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":AngleGAtoVA, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType AngleGAtoVA ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":RotationVAtoGA, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType RotationVAtoGA ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":FODStatus, urn:iso:15118:2:2016:MsgDataTypes,FODStatusType */
+	iso2FODStatusType FODStatus ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,SystemStatusResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":OperationMode,"urn:iso:15118:2:2016:MsgBody":EVSEMechanicalChargingDeviceStatus))',  derivedBy='EXTENSION'.  */
+struct iso2SystemStatusResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":OperationMode, urn:iso:15118:2:2016:MsgDataTypes,operationModeType */
+	iso2operationModeType OperationMode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEMechanicalChargingDeviceStatus, urn:iso:15118:2:2016:MsgDataTypes,mechanicalChargingDeviceStatusType */
+	iso2mechanicalChargingDeviceStatusType EVSEMechanicalChargingDeviceStatus ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,V2GResponseType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1})',  derivedBy='EXTENSION'.  */
+struct iso2V2GResponseType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,PreChargeResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEPresentVoltage))',  derivedBy='EXTENSION'.  */
+struct iso2PreChargeResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEPresentVoltage, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEPresentVoltage ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,PaymentServiceSelectionResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1})',  derivedBy='EXTENSION'.  */
+struct iso2PaymentServiceSelectionResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,ManifestType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Reference{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define iso2ManifestType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2ManifestType_Reference_ARRAY_SIZE 1
+struct iso2ManifestType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso2ManifestType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Reference, Complex type name='http://www.w3.org/2000/09/xmldsig#,ReferenceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1},"http://www.w3.org/2000/09/xmldsig#":DigestMethod,"http://www.w3.org/2000/09/xmldsig#":DigestValue)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso2ReferenceType array[iso2ManifestType_Reference_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Reference;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SelectedServiceListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":SelectedService{1-16})',  derivedBy='RESTRICTION'.  */
+#define iso2SelectedServiceListType_SelectedService_ARRAY_SIZE 16
+struct iso2SelectedServiceListType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":SelectedService, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SelectedServiceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":ServiceID,"urn:iso:15118:2:2016:MsgDataTypes":ParameterSetID)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso2SelectedServiceType array[iso2SelectedServiceListType_SelectedService_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SelectedService;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,Generic_EVSEFinePositioningParametersType',  base type name='EVSEFinePositioningParametersType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":GenericParameters)',  derivedBy='EXTENSION'.  */
+struct iso2Generic_EVSEFinePositioningParametersType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":GenericParameters, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ParameterSetType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":ParameterSetID,"urn:iso:15118:2:2016:MsgDataTypes":Parameter{1-16})',  derivedBy='RESTRICTION'.  */
+	struct iso2ParameterSetType GenericParameters ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ListOfRootCertificateIDsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":RootCertificateID{1-20})',  derivedBy='RESTRICTION'.  */
+#define iso2ListOfRootCertificateIDsType_RootCertificateID_ARRAY_SIZE 20
+struct iso2ListOfRootCertificateIDsType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":RootCertificateID, Complex type name='http://www.w3.org/2000/09/xmldsig#,X509IssuerSerialType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":X509IssuerName,"http://www.w3.org/2000/09/xmldsig#":X509SerialNumber)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso2X509IssuerSerialType array[iso2ListOfRootCertificateIDsType_RootCertificateID_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} RootCertificateID;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,PairingReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":EVProcessing,"urn:iso:15118:2:2016:MsgBody":PairingParameters{0-1})',  derivedBy='EXTENSION'.  */
+struct iso2PairingReqType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVProcessing, urn:iso:15118:2:2016:MsgDataTypes,EVSEProcessingType */
+	iso2EVSEProcessingType EVProcessing ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":PairingParameters, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ParameterSetType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":ParameterSetID,"urn:iso:15118:2:2016:MsgDataTypes":Parameter{1-16})',  derivedBy='RESTRICTION'.  */
+	struct iso2ParameterSetType PairingParameters ;
+	unsigned int PairingParameters_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,CurrentDemandResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEPresentCurrent,"urn:iso:15118:2:2016:MsgBody":EVSEPresentVoltage,"urn:iso:15118:2:2016:MsgBody":EVSEPowerLimitAchieved,"urn:iso:15118:2:2016:MsgBody":EVSECurrentLimitAchieved,"urn:iso:15118:2:2016:MsgBody":EVSEVoltageLimitAchieved,"urn:iso:15118:2:2016:MsgBody":EVSEMaximumPower{0-1},"urn:iso:15118:2:2016:MsgBody":EVSEMaximumCurrent{0-1},"urn:iso:15118:2:2016:MsgBody":EVSEMaximumVoltage{0-1},"urn:iso:15118:2:2016:MsgBody":EVSEID,"urn:iso:15118:2:2016:MsgBody":SAScheduleTupleID{0-1},"urn:iso:15118:2:2016:MsgBody":MeterInfo{0-1},"urn:iso:15118:2:2016:MsgBody":ReceiptRequired{0-1}))',  derivedBy='EXTENSION'.  */
+#define iso2CurrentDemandResType_EVSEID_CHARACTERS_SIZE 37 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2016:MsgDataTypes,evseIDType is 37 */
+struct iso2CurrentDemandResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEPresentCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEPresentCurrent ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEPresentVoltage, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEPresentVoltage ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEPowerLimitAchieved, http://www.w3.org/2001/XMLSchema,boolean */
+	int EVSEPowerLimitAchieved ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSECurrentLimitAchieved, http://www.w3.org/2001/XMLSchema,boolean */
+	int EVSECurrentLimitAchieved ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEVoltageLimitAchieved, http://www.w3.org/2001/XMLSchema,boolean */
+	int EVSEVoltageLimitAchieved ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEMaximumPower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEMaximumPower ;
+	unsigned int EVSEMaximumPower_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEMaximumCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEMaximumCurrent ;
+	unsigned int EVSEMaximumCurrent_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEMaximumVoltage, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEMaximumVoltage ;
+	unsigned int EVSEMaximumVoltage_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEID, urn:iso:15118:2:2016:MsgDataTypes,evseIDType */
+	struct {
+		exi_string_character_t characters[iso2CurrentDemandResType_EVSEID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  EVSEID ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":SAScheduleTupleID, urn:iso:15118:2:2016:MsgDataTypes,SAIDType */
+	uint8_t SAScheduleTupleID ;
+	unsigned int SAScheduleTupleID_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":MeterInfo, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,MeterInfoType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":MeterID,"urn:iso:15118:2:2016:MsgDataTypes":MeterReadingCharged{0-1},"urn:iso:15118:2:2016:MsgDataTypes":MeterReadingDischarged{0-1},"urn:iso:15118:2:2016:MsgDataTypes":SigMeterReading{0-1},"urn:iso:15118:2:2016:MsgDataTypes":MeterStatus{0-1},"urn:iso:15118:2:2016:MsgDataTypes":TMeter{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso2MeterInfoType MeterInfo ;
+	unsigned int MeterInfo_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":ReceiptRequired, http://www.w3.org/2001/XMLSchema,boolean */
+	int ReceiptRequired ;
+	unsigned int ReceiptRequired_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,ChargingStatusReqType',  base type name='ChargeLoopReqType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":EVTargetEnergyRequest,"urn:iso:15118:2:2016:MsgBody":EVMaximumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgBody":EVMinimumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgBody":DisplayParameters{0-1}),("urn:iso:15118:2:2016:MsgBody":EVMaximumChargePower{0-1},"urn:iso:15118:2:2016:MsgBody":EVMaximumChargeCurrent{0-1},"urn:iso:15118:2:2016:MsgBody":EVMinimumChargeCurrent{0-1}))',  derivedBy='EXTENSION'.  */
+struct iso2ChargingStatusReqType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVTargetEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVTargetEnergyRequest ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMaximumEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumEnergyRequest ;
+	unsigned int EVMaximumEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMinimumEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMinimumEnergyRequest ;
+	unsigned int EVMinimumEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":DisplayParameters, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,DisplayParametersType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":CurrentRange{0-1},"urn:iso:15118:2:2016:MsgDataTypes":CurrentSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":TargetSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":BulkSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":MinimumSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":ChargingPerformance{0-1},"urn:iso:15118:2:2016:MsgDataTypes":RemainingTimeToTargetSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":RemainingTimeToBulkSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":RemainingTimeToMinimumSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":ChargingComplete{0-1},"urn:iso:15118:2:2016:MsgDataTypes":BulkChargingComplete{0-1},"urn:iso:15118:2:2016:MsgDataTypes":InletHot{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso2DisplayParametersType DisplayParameters ;
+	unsigned int DisplayParameters_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMaximumChargePower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumChargePower ;
+	unsigned int EVMaximumChargePower_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMaximumChargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumChargeCurrent ;
+	unsigned int EVMaximumChargeCurrent_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMinimumChargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMinimumChargeCurrent ;
+	unsigned int EVMinimumChargeCurrent_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,CertificateInstallationResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":SAProvisioningCertificateChain,"urn:iso:15118:2:2016:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2016:MsgBody":ContractSignatureEncryptedPrivateKey,"urn:iso:15118:2:2016:MsgBody":DHpublickey,"urn:iso:15118:2:2016:MsgBody":eMAID))',  derivedBy='EXTENSION'.  */
+struct iso2CertificateInstallationResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":SAProvisioningCertificateChain, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,CertificateChainType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Certificate,"urn:iso:15118:2:2016:MsgDataTypes":SubCertificates{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso2CertificateChainType SAProvisioningCertificateChain ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":ContractSignatureCertChain, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,CertificateChainType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Certificate,"urn:iso:15118:2:2016:MsgDataTypes":SubCertificates{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso2CertificateChainType ContractSignatureCertChain ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":ContractSignatureEncryptedPrivateKey, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ContractSignatureEncryptedPrivateKeyType',  base type name='encryptedPrivateKeyType',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+	struct iso2ContractSignatureEncryptedPrivateKeyType ContractSignatureEncryptedPrivateKey ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":DHpublickey, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,DiffieHellmanPublickeyType',  base type name='dHpublickeyType',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+	struct iso2DiffieHellmanPublickeyType DHpublickey ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":eMAID, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EMAIDType',  base type name='eMAIDType',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+	struct iso2EMAIDType eMAID ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SensorPackageType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":PackageIndex,"urn:iso:15118:2:2016:MsgDataTypes":SensorMeasurements{1-255})',  derivedBy='RESTRICTION'.  */
+#define iso2SensorPackageType_SensorMeasurements_ARRAY_SIZE 5
+struct iso2SensorPackageType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":PackageIndex, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t PackageIndex ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":SensorMeasurements, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SensorMeasurementsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":SensorID,"urn:iso:15118:2:2016:MsgDataTypes":EffectiveRadiatedPower,"urn:iso:15118:2:2016:MsgDataTypes":MeasurementDataList)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso2SensorMeasurementsType array[iso2SensorPackageType_SensorMeasurements_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SensorMeasurements;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,ServiceDiscoveryResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":PaymentOptionList,"urn:iso:15118:2:2016:MsgBody":EnergyTransferServiceList,"urn:iso:15118:2:2016:MsgBody":VASList{0-1}))',  derivedBy='EXTENSION'.  */
+struct iso2ServiceDiscoveryResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":PaymentOptionList, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PaymentOptionListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":PaymentOption{1-2})',  derivedBy='RESTRICTION'.  */
+	struct iso2PaymentOptionListType PaymentOptionList ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EnergyTransferServiceList, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ServiceListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Service{1-8})',  derivedBy='RESTRICTION'.  */
+	struct iso2ServiceListType EnergyTransferServiceList ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":VASList, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ServiceListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Service{1-8})',  derivedBy='RESTRICTION'.  */
+	struct iso2ServiceListType VASList ;
+	unsigned int VASList_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,PowerDemandResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEOutputPower,"urn:iso:15118:2:2016:MsgBody":EVSEID,"urn:iso:15118:2:2016:MsgBody":SAScheduleTupleID{0-1},"urn:iso:15118:2:2016:MsgBody":MeterInfo{0-1},"urn:iso:15118:2:2016:MsgBody":ReceiptRequired{0-1},"urn:iso:15118:2:2016:MsgBody":PowerDemandParameters{0-1}))',  derivedBy='EXTENSION'.  */
+#define iso2PowerDemandResType_EVSEID_CHARACTERS_SIZE 37 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2016:MsgDataTypes,evseIDType is 37 */
+struct iso2PowerDemandResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEOutputPower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVSEOutputPower ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEID, urn:iso:15118:2:2016:MsgDataTypes,evseIDType */
+	struct {
+		exi_string_character_t characters[iso2PowerDemandResType_EVSEID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  EVSEID ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":SAScheduleTupleID, urn:iso:15118:2:2016:MsgDataTypes,SAIDType */
+	uint8_t SAScheduleTupleID ;
+	unsigned int SAScheduleTupleID_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":MeterInfo, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,MeterInfoType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":MeterID,"urn:iso:15118:2:2016:MsgDataTypes":MeterReadingCharged{0-1},"urn:iso:15118:2:2016:MsgDataTypes":MeterReadingDischarged{0-1},"urn:iso:15118:2:2016:MsgDataTypes":SigMeterReading{0-1},"urn:iso:15118:2:2016:MsgDataTypes":MeterStatus{0-1},"urn:iso:15118:2:2016:MsgDataTypes":TMeter{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso2MeterInfoType MeterInfo ;
+	unsigned int MeterInfo_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":ReceiptRequired, http://www.w3.org/2001/XMLSchema,boolean */
+	int ReceiptRequired ;
+	unsigned int ReceiptRequired_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":PowerDemandParameters, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ParameterSetType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":ParameterSetID,"urn:iso:15118:2:2016:MsgDataTypes":Parameter{1-16})',  derivedBy='RESTRICTION'.  */
+	struct iso2ParameterSetType PowerDemandParameters ;
+	unsigned int PowerDemandParameters_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ChargingProfileType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":ProfileEntry{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define iso2ChargingProfileType_ProfileEntry_ARRAY_SIZE 24
+struct iso2ChargingProfileType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":ProfileEntry, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PMaxScheduleEntryType',  base type name='EntryType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgDataTypes":RelativeTimeInterval),("urn:iso:15118:2:2016:MsgDataTypes":PMax{1-3}))',  derivedBy='EXTENSION'.  */
+	struct {
+		struct iso2PMaxScheduleEntryType array[iso2ChargingProfileType_ProfileEntry_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} ProfileEntry;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SalesTariffType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":SalesTariffID,"urn:iso:15118:2:2016:MsgDataTypes":SalesTariffDescription{0-1},"urn:iso:15118:2:2016:MsgDataTypes":NumEPriceLevels{0-1},"urn:iso:15118:2:2016:MsgDataTypes":SalesTariffEntry{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define iso2SalesTariffType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2SalesTariffType_SalesTariffDescription_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2016:MsgDataTypes,tariffDescriptionType is 32 */
+#define iso2SalesTariffType_SalesTariffEntry_ARRAY_SIZE 5
+struct iso2SalesTariffType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso2SalesTariffType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":SalesTariffID, urn:iso:15118:2:2016:MsgDataTypes,SAIDType */
+	uint8_t SalesTariffID ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":SalesTariffDescription, urn:iso:15118:2:2016:MsgDataTypes,tariffDescriptionType */
+	struct {
+		exi_string_character_t characters[iso2SalesTariffType_SalesTariffDescription_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  SalesTariffDescription ;
+	unsigned int SalesTariffDescription_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":NumEPriceLevels, http://www.w3.org/2001/XMLSchema,unsignedByte */
+	uint8_t NumEPriceLevels ;
+	unsigned int NumEPriceLevels_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":SalesTariffEntry, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SalesTariffEntryType',  base type name='EntryType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgDataTypes":RelativeTimeInterval),("urn:iso:15118:2:2016:MsgDataTypes":EPriceLevel{0-1},"urn:iso:15118:2:2016:MsgDataTypes":ConsumptionCost{0-3}))',  derivedBy='EXTENSION'.  */
+	struct {
+		struct iso2SalesTariffEntryType array[iso2SalesTariffType_SalesTariffEntry_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SalesTariffEntry;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignedInfoType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":CanonicalizationMethod,"http://www.w3.org/2000/09/xmldsig#":SignatureMethod,"http://www.w3.org/2000/09/xmldsig#":Reference{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define iso2SignedInfoType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2SignedInfoType_Reference_ARRAY_SIZE 1
+struct iso2SignedInfoType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso2SignedInfoType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":CanonicalizationMethod, Complex type name='http://www.w3.org/2000/09/xmldsig#,CanonicalizationMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##any]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct iso2CanonicalizationMethodType CanonicalizationMethod ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SignatureMethod, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":HMACOutputLength{0-1},(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct iso2SignatureMethodType SignatureMethod ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Reference, Complex type name='http://www.w3.org/2000/09/xmldsig#,ReferenceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1},"http://www.w3.org/2000/09/xmldsig#":DigestMethod,"http://www.w3.org/2000/09/xmldsig#":DigestValue)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso2ReferenceType array[iso2SignedInfoType_Reference_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Reference;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,PowerDeliveryResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEProcessing))',  derivedBy='EXTENSION'.  */
+struct iso2PowerDeliveryResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEProcessing, urn:iso:15118:2:2016:MsgDataTypes,EVSEProcessingType */
+	iso2EVSEProcessingType EVSEProcessing ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,RetrievalMethodType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1})',  derivedBy='RESTRICTION'.  */
+#define iso2RetrievalMethodType_URI_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2RetrievalMethodType_Type_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+struct iso2RetrievalMethodType {
+	/* attribute: URI {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[iso2RetrievalMethodType_URI_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  URI ;
+	unsigned int URI_isUsed:1;
+	/* attribute: Type {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[iso2RetrievalMethodType_Type_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Type ;
+	unsigned int Type_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Transforms, Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transform{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct iso2TransformsType Transforms ;
+	unsigned int Transforms_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,MagneticVectorListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":MagneticVector{1-255})',  derivedBy='RESTRICTION'.  */
+#define iso2MagneticVectorListType_MagneticVector_ARRAY_SIZE 5
+struct iso2MagneticVectorListType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":MagneticVector, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,MagneticVectorType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":GAID,"urn:iso:15118:2:2016:MsgDataTypes":Distance,"urn:iso:15118:2:2016:MsgDataTypes":AngleGAtoVA,"urn:iso:15118:2:2016:MsgDataTypes":RotationVAtoGA,"urn:iso:15118:2:2016:MsgDataTypes":FODStatus)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso2MagneticVectorType array[iso2MagneticVectorListType_MagneticVector_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} MagneticVector;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ServiceParameterListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":ParameterSet{1-255})',  derivedBy='RESTRICTION'.  */
+#define iso2ServiceParameterListType_ParameterSet_ARRAY_SIZE 5
+struct iso2ServiceParameterListType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":ParameterSet, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ParameterSetType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":ParameterSetID,"urn:iso:15118:2:2016:MsgDataTypes":Parameter{1-16})',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso2ParameterSetType array[iso2ServiceParameterListType_ParameterSet_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} ParameterSet;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PMaxScheduleType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":PMaxScheduleEntry{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define iso2PMaxScheduleType_PMaxScheduleEntry_ARRAY_SIZE 5
+struct iso2PMaxScheduleType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":PMaxScheduleEntry, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PMaxScheduleEntryType',  base type name='EntryType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgDataTypes":RelativeTimeInterval),("urn:iso:15118:2:2016:MsgDataTypes":PMax{1-3}))',  derivedBy='EXTENSION'.  */
+	struct {
+		struct iso2PMaxScheduleEntryType array[iso2PMaxScheduleType_PMaxScheduleEntry_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} PMaxScheduleEntry;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,CertificateUpdateResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":SAProvisioningCertificateChain,"urn:iso:15118:2:2016:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2016:MsgBody":ContractSignatureEncryptedPrivateKey,"urn:iso:15118:2:2016:MsgBody":DHpublickey,"urn:iso:15118:2:2016:MsgBody":eMAID,"urn:iso:15118:2:2016:MsgBody":RetryCounter{0-1}))',  derivedBy='EXTENSION'.  */
+struct iso2CertificateUpdateResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":SAProvisioningCertificateChain, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,CertificateChainType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Certificate,"urn:iso:15118:2:2016:MsgDataTypes":SubCertificates{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso2CertificateChainType SAProvisioningCertificateChain ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":ContractSignatureCertChain, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,CertificateChainType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Certificate,"urn:iso:15118:2:2016:MsgDataTypes":SubCertificates{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso2CertificateChainType ContractSignatureCertChain ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":ContractSignatureEncryptedPrivateKey, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ContractSignatureEncryptedPrivateKeyType',  base type name='encryptedPrivateKeyType',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+	struct iso2ContractSignatureEncryptedPrivateKeyType ContractSignatureEncryptedPrivateKey ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":DHpublickey, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,DiffieHellmanPublickeyType',  base type name='dHpublickeyType',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+	struct iso2DiffieHellmanPublickeyType DHpublickey ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":eMAID, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EMAIDType',  base type name='eMAIDType',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+	struct iso2EMAIDType eMAID ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":RetryCounter, http://www.w3.org/2001/XMLSchema,short */
+	int16_t RetryCounter ;
+	unsigned int RetryCounter_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,DC_BidirectionalControlReqType',  base type name='ChargeLoopReqType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":EVTargetEnergyRequest,"urn:iso:15118:2:2016:MsgBody":EVMaximumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgBody":EVMinimumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgBody":DisplayParameters{0-1}),("urn:iso:15118:2:2016:MsgBody":EVTargetCurrent,"urn:iso:15118:2:2016:MsgBody":EVTargetVoltage,"urn:iso:15118:2:2016:MsgBody":EVMaximumVoltage,"urn:iso:15118:2:2016:MsgBody":EVMinimumVoltage,"urn:iso:15118:2:2016:MsgBody":EVMaximumChargeCurrent,"urn:iso:15118:2:2016:MsgBody":EVMaximumDischargeCurrent{0-1},"urn:iso:15118:2:2016:MsgBody":EVMaximumChargePower{0-1},"urn:iso:15118:2:2016:MsgBody":EVMaximumDischargePower{0-1}))',  derivedBy='EXTENSION'.  */
+struct iso2DC_BidirectionalControlReqType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVTargetEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVTargetEnergyRequest ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMaximumEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumEnergyRequest ;
+	unsigned int EVMaximumEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMinimumEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMinimumEnergyRequest ;
+	unsigned int EVMinimumEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":DisplayParameters, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,DisplayParametersType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":CurrentRange{0-1},"urn:iso:15118:2:2016:MsgDataTypes":CurrentSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":TargetSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":BulkSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":MinimumSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":ChargingPerformance{0-1},"urn:iso:15118:2:2016:MsgDataTypes":RemainingTimeToTargetSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":RemainingTimeToBulkSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":RemainingTimeToMinimumSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":ChargingComplete{0-1},"urn:iso:15118:2:2016:MsgDataTypes":BulkChargingComplete{0-1},"urn:iso:15118:2:2016:MsgDataTypes":InletHot{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso2DisplayParametersType DisplayParameters ;
+	unsigned int DisplayParameters_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVTargetCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVTargetCurrent ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVTargetVoltage, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVTargetVoltage ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMaximumVoltage, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumVoltage ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMinimumVoltage, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMinimumVoltage ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMaximumChargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumChargeCurrent ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMaximumDischargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumDischargeCurrent ;
+	unsigned int EVMaximumDischargeCurrent_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMaximumChargePower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumChargePower ;
+	unsigned int EVMaximumChargePower_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMaximumDischargePower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumDischargePower ;
+	unsigned int EVMaximumDischargePower_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,CertificateUpdateReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2016:MsgBody":eMAID,"urn:iso:15118:2:2016:MsgBody":ListOfRootCertificateIDs)',  derivedBy='EXTENSION'.  */
+#define iso2CertificateUpdateReqType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2CertificateUpdateReqType_eMAID_CHARACTERS_SIZE 15 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2016:MsgDataTypes,eMAIDType is 15 */
+struct iso2CertificateUpdateReqType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso2CertificateUpdateReqType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":ContractSignatureCertChain, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,CertificateChainType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Certificate,"urn:iso:15118:2:2016:MsgDataTypes":SubCertificates{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso2CertificateChainType ContractSignatureCertChain ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":eMAID, urn:iso:15118:2:2016:MsgDataTypes,eMAIDType */
+	struct {
+		exi_string_character_t characters[iso2CertificateUpdateReqType_eMAID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  eMAID ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":ListOfRootCertificateIDs, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ListOfRootCertificateIDsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":RootCertificateID{1-20})',  derivedBy='RESTRICTION'.  */
+	struct iso2ListOfRootCertificateIDsType ListOfRootCertificateIDs ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,LFA_EVSEFinePositioningSetupParametersType',  base type name='EVSEFinePositioningSetupParametersType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NumberOfSensors,"urn:iso:15118:2:2016:MsgDataTypes":SensorList,"urn:iso:15118:2:2016:MsgDataTypes":SensorOrder,"urn:iso:15118:2:2016:MsgDataTypes":SignalPulseDuration,"urn:iso:15118:2:2016:MsgDataTypes":SignalSeparationTime,"urn:iso:15118:2:2016:MsgDataTypes":PackageSeparationTime,"urn:iso:15118:2:2016:MsgDataTypes":AlignmentOffset,"urn:iso:15118:2:2016:MsgDataTypes":SignalFrequency)',  derivedBy='EXTENSION'.  */
+struct iso2LFA_EVSEFinePositioningSetupParametersType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":NumberOfSensors, http://www.w3.org/2001/XMLSchema,unsignedByte */
+	uint8_t NumberOfSensors ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":SensorList, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SensorListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Sensor{1-255})',  derivedBy='RESTRICTION'.  */
+	struct iso2SensorListType SensorList ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":SensorOrder, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SensorOrderListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":SensorPosition{1-255})',  derivedBy='RESTRICTION'.  */
+	struct iso2SensorOrderListType SensorOrder ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":SignalPulseDuration, http://www.w3.org/2001/XMLSchema,unsignedByte */
+	uint8_t SignalPulseDuration ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":SignalSeparationTime, http://www.w3.org/2001/XMLSchema,unsignedByte */
+	uint8_t SignalSeparationTime ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":PackageSeparationTime, http://www.w3.org/2001/XMLSchema,unsignedByte */
+	uint8_t PackageSeparationTime ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":AlignmentOffset, http://www.w3.org/2001/XMLSchema,unsignedShort */
+	uint16_t AlignmentOffset ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":SignalFrequency, http://www.w3.org/2001/XMLSchema,unsignedShort */
+	uint16_t SignalFrequency ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,AlignmentCheckReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":EVProcessing,"urn:iso:15118:2:2016:MsgBody":AlignmentCheckParameters{0-1})',  derivedBy='EXTENSION'.  */
+struct iso2AlignmentCheckReqType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVProcessing, urn:iso:15118:2:2016:MsgDataTypes,EVSEProcessingType */
+	iso2EVSEProcessingType EVProcessing ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":AlignmentCheckParameters, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ParameterSetType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":ParameterSetID,"urn:iso:15118:2:2016:MsgDataTypes":Parameter{1-16})',  derivedBy='RESTRICTION'.  */
+	struct iso2ParameterSetType AlignmentCheckParameters ;
+	unsigned int AlignmentCheckParameters_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,CertificateInstallationReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":OEMProvisioningCert,"urn:iso:15118:2:2016:MsgBody":ListOfRootCertificateIDs)',  derivedBy='EXTENSION'.  */
+#define iso2CertificateInstallationReqType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2CertificateInstallationReqType_OEMProvisioningCert_BYTES_SIZE 800 /* XML schema facet maxLength for urn:iso:15118:2:2016:MsgDataTypes,certificateType is 800 */
+struct iso2CertificateInstallationReqType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso2CertificateInstallationReqType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":OEMProvisioningCert, urn:iso:15118:2:2016:MsgDataTypes,certificateType */
+	struct {
+		uint8_t bytes[iso2CertificateInstallationReqType_OEMProvisioningCert_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  OEMProvisioningCert ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":ListOfRootCertificateIDs, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ListOfRootCertificateIDsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":RootCertificateID{1-20})',  derivedBy='RESTRICTION'.  */
+	struct iso2ListOfRootCertificateIDsType ListOfRootCertificateIDs ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,ChargeParameterDiscoveryReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":MaxSupportingPoints{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVEnergyTransferParameter,"urn:iso:15118:2:2016:MsgBody":MinimumPMaxRequest{0-1})',  derivedBy='EXTENSION'.  */
+struct iso2ChargeParameterDiscoveryReqType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":MaxSupportingPoints, urn:iso:15118:2:2016:MsgDataTypes,maxSupportingPointsSAScheduleTuple */
+	uint16_t MaxSupportingPoints ;
+	unsigned int MaxSupportingPoints_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVEnergyTransferParameter, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVEnergyTransferParameterType',  base type name='anyType',  content type='ELEMENT',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":DepartureTime)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVEnergyTransferParameterType EVEnergyTransferParameter ;
+	unsigned int EVEnergyTransferParameter_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":AC_EVChargeParameter, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,AC_EVChargeParameterType',  base type name='EVEnergyTransferParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgDataTypes":DepartureTime),("urn:iso:15118:2:2016:MsgDataTypes":EVMaximumChargePower,"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumChargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumChargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVTargetEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumVoltage))',  derivedBy='EXTENSION'.  */
+	struct iso2AC_EVChargeParameterType AC_EVChargeParameter ;
+	unsigned int AC_EVChargeParameter_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":AC_EVBidirectionalParameter, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,AC_EVBidirectionalParameterType',  base type name='AC_EVChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((("urn:iso:15118:2:2016:MsgDataTypes":DepartureTime),("urn:iso:15118:2:2016:MsgDataTypes":EVMaximumChargePower,"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumChargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumChargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVTargetEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumVoltage)),("urn:iso:15118:2:2016:MsgDataTypes":EVMaximumDischargePower,"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumDischargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumDischargeCurrent))',  derivedBy='EXTENSION'.  */
+	struct iso2AC_EVBidirectionalParameterType AC_EVBidirectionalParameter ;
+	unsigned int AC_EVBidirectionalParameter_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":DC_EVChargeParameter, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,DC_EVChargeParameterType',  base type name='EVEnergyTransferParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgDataTypes":DepartureTime),("urn:iso:15118:2:2016:MsgDataTypes":EVMaximumChargePower{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumChargePower{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumChargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumChargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumVoltage,"urn:iso:15118:2:2016:MsgDataTypes":EVTargetEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgDataTypes":CurrentSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":TargetSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":BulkSOC{0-1}))',  derivedBy='EXTENSION'.  */
+	struct iso2DC_EVChargeParameterType DC_EVChargeParameter ;
+	unsigned int DC_EVChargeParameter_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":DC_EVBidirectionalParameter, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,DC_EVBidirectionalParameterType',  base type name='DC_EVChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((("urn:iso:15118:2:2016:MsgDataTypes":DepartureTime),("urn:iso:15118:2:2016:MsgDataTypes":EVMaximumChargePower{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumChargePower{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumChargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumChargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumVoltage,"urn:iso:15118:2:2016:MsgDataTypes":EVTargetEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgDataTypes":CurrentSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":TargetSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":BulkSOC{0-1})),("urn:iso:15118:2:2016:MsgDataTypes":EVMaximumDischargePower{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumDischargePower{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumDischargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumDischargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumVoltage,"urn:iso:15118:2:2016:MsgDataTypes":MinimumSOC{0-1}))',  derivedBy='EXTENSION'.  */
+	struct iso2DC_EVBidirectionalParameterType DC_EVBidirectionalParameter ;
+	unsigned int DC_EVBidirectionalParameter_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":WPT_EVChargeParameter, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,WPT_EVChargeParameterType',  base type name='EVEnergyTransferParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgDataTypes":DepartureTime),("urn:iso:15118:2:2016:MsgDataTypes":EVMaximumPower,"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumPower,"urn:iso:15118:2:2016:MsgDataTypes":EVTargetEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMaximumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVMinimumEnergyRequest{0-1}))',  derivedBy='EXTENSION'.  */
+	struct iso2WPT_EVChargeParameterType WPT_EVChargeParameter ;
+	unsigned int WPT_EVChargeParameter_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":MinimumPMaxRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,MinimumPMaxRequestType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":MinimumPMaxScheduleEntry{1-3})',  derivedBy='RESTRICTION'.  */
+	struct iso2MinimumPMaxRequestType MinimumPMaxRequest ;
+	unsigned int MinimumPMaxRequest_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SensorPackageListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":SensorPackage{1-255})',  derivedBy='RESTRICTION'.  */
+#define iso2SensorPackageListType_SensorPackage_ARRAY_SIZE 5
+struct iso2SensorPackageListType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":SensorPackage, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SensorPackageType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":PackageIndex,"urn:iso:15118:2:2016:MsgDataTypes":SensorMeasurements{1-255})',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso2SensorPackageType array[iso2SensorPackageListType_SensorPackage_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SensorPackage;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,ChargeLoopReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":EVTargetEnergyRequest,"urn:iso:15118:2:2016:MsgBody":EVMaximumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgBody":EVMinimumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgBody":DisplayParameters{0-1})',  derivedBy='EXTENSION'.  */
+struct iso2ChargeLoopReqType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVTargetEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVTargetEnergyRequest ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMaximumEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumEnergyRequest ;
+	unsigned int EVMaximumEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMinimumEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMinimumEnergyRequest ;
+	unsigned int EVMinimumEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":DisplayParameters, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,DisplayParametersType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":CurrentRange{0-1},"urn:iso:15118:2:2016:MsgDataTypes":CurrentSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":TargetSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":BulkSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":MinimumSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":ChargingPerformance{0-1},"urn:iso:15118:2:2016:MsgDataTypes":RemainingTimeToTargetSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":RemainingTimeToBulkSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":RemainingTimeToMinimumSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":ChargingComplete{0-1},"urn:iso:15118:2:2016:MsgDataTypes":BulkChargingComplete{0-1},"urn:iso:15118:2:2016:MsgDataTypes":InletHot{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso2DisplayParametersType DisplayParameters ;
+	unsigned int DisplayParameters_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,AC_BidirectionalControlReqType',  base type name='ChargeLoopReqType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":EVTargetEnergyRequest,"urn:iso:15118:2:2016:MsgBody":EVMaximumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgBody":EVMinimumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgBody":DisplayParameters{0-1}),("urn:iso:15118:2:2016:MsgBody":EVOperation{0-1},"urn:iso:15118:2:2016:MsgBody":EVMaximumChargePower,"urn:iso:15118:2:2016:MsgBody":EVMaximumDischargePower{0-1},"urn:iso:15118:2:2016:MsgBody":EVMaximumChargeCurrent,"urn:iso:15118:2:2016:MsgBody":EVMaximumDischargeCurrent{0-1},"urn:iso:15118:2:2016:MsgBody":EVMinimumChargeCurrent,"urn:iso:15118:2:2016:MsgBody":EVMinimumDischargeCurrent{0-1},"urn:iso:15118:2:2016:MsgBody":EVPresentActivePower,"urn:iso:15118:2:2016:MsgBody":EVPresentReactivePower))',  derivedBy='EXTENSION'.  */
+struct iso2AC_BidirectionalControlReqType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVTargetEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVTargetEnergyRequest ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMaximumEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumEnergyRequest ;
+	unsigned int EVMaximumEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMinimumEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMinimumEnergyRequest ;
+	unsigned int EVMinimumEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":DisplayParameters, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,DisplayParametersType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":CurrentRange{0-1},"urn:iso:15118:2:2016:MsgDataTypes":CurrentSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":TargetSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":BulkSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":MinimumSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":ChargingPerformance{0-1},"urn:iso:15118:2:2016:MsgDataTypes":RemainingTimeToTargetSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":RemainingTimeToBulkSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":RemainingTimeToMinimumSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":ChargingComplete{0-1},"urn:iso:15118:2:2016:MsgDataTypes":BulkChargingComplete{0-1},"urn:iso:15118:2:2016:MsgDataTypes":InletHot{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso2DisplayParametersType DisplayParameters ;
+	unsigned int DisplayParameters_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVOperation, urn:iso:15118:2:2016:MsgDataTypes,EVOperationType */
+	iso2EVOperationType EVOperation ;
+	unsigned int EVOperation_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMaximumChargePower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumChargePower ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMaximumDischargePower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumDischargePower ;
+	unsigned int EVMaximumDischargePower_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMaximumChargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumChargeCurrent ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMaximumDischargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumDischargeCurrent ;
+	unsigned int EVMaximumDischargeCurrent_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMinimumChargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMinimumChargeCurrent ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMinimumDischargeCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMinimumDischargeCurrent ;
+	unsigned int EVMinimumDischargeCurrent_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVPresentActivePower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVPresentActivePower ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVPresentReactivePower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVPresentReactivePower ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,MV_EVSEFinePositioningParametersType',  base type name='EVSEFinePositioningParametersType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":MagneticVectorList)',  derivedBy='EXTENSION'.  */
+struct iso2MV_EVSEFinePositioningParametersType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":MagneticVectorList, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,MagneticVectorListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":MagneticVector{1-255})',  derivedBy='RESTRICTION'.  */
+	struct iso2MagneticVectorListType MagneticVectorList ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,CurrentDemandReqType',  base type name='ChargeLoopReqType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":EVTargetEnergyRequest,"urn:iso:15118:2:2016:MsgBody":EVMaximumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgBody":EVMinimumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgBody":DisplayParameters{0-1}),("urn:iso:15118:2:2016:MsgBody":EVTargetCurrent,"urn:iso:15118:2:2016:MsgBody":EVTargetVoltage,"urn:iso:15118:2:2016:MsgBody":EVMaximumCurrent{0-1},"urn:iso:15118:2:2016:MsgBody":EVMaximumPower{0-1},"urn:iso:15118:2:2016:MsgBody":EVMaximumVoltage{0-1}))',  derivedBy='EXTENSION'.  */
+struct iso2CurrentDemandReqType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVTargetEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVTargetEnergyRequest ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMaximumEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumEnergyRequest ;
+	unsigned int EVMaximumEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMinimumEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMinimumEnergyRequest ;
+	unsigned int EVMinimumEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":DisplayParameters, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,DisplayParametersType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":CurrentRange{0-1},"urn:iso:15118:2:2016:MsgDataTypes":CurrentSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":TargetSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":BulkSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":MinimumSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":ChargingPerformance{0-1},"urn:iso:15118:2:2016:MsgDataTypes":RemainingTimeToTargetSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":RemainingTimeToBulkSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":RemainingTimeToMinimumSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":ChargingComplete{0-1},"urn:iso:15118:2:2016:MsgDataTypes":BulkChargingComplete{0-1},"urn:iso:15118:2:2016:MsgDataTypes":InletHot{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso2DisplayParametersType DisplayParameters ;
+	unsigned int DisplayParameters_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVTargetCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVTargetCurrent ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVTargetVoltage, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVTargetVoltage ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMaximumCurrent, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumCurrent ;
+	unsigned int EVMaximumCurrent_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMaximumPower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumPower ;
+	unsigned int EVMaximumPower_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMaximumVoltage, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumVoltage ;
+	unsigned int EVMaximumVoltage_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,FinePositioningSetupReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":EVFinePositioningSetupParameters{0-1})',  derivedBy='EXTENSION'.  */
+struct iso2FinePositioningSetupReqType {
+	/* substitutionGroup */
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	union {
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */ 
+		/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVFinePositioningSetupParameters, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVFinePositioningSetupParametersType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+		struct iso2EVFinePositioningSetupParametersType EVFinePositioningSetupParameters ;
+		/* element: "urn:iso:15118:2:2016:MsgDataTypes":LFA_EVFinePositioningSetupParameters, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,LFA_EVFinePositioningSetupParametersType',  base type name='EVFinePositioningSetupParametersType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NumberOfSensors,"urn:iso:15118:2:2016:MsgDataTypes":SensorList,"urn:iso:15118:2:2016:MsgDataTypes":SensorOrder,"urn:iso:15118:2:2016:MsgDataTypes":SignalPulseDuration,"urn:iso:15118:2:2016:MsgDataTypes":SignalSeparationTime,"urn:iso:15118:2:2016:MsgDataTypes":PackageSeparationTime,"urn:iso:15118:2:2016:MsgDataTypes":AlignmentOffset)',  derivedBy='EXTENSION'.  */
+		struct iso2LFA_EVFinePositioningSetupParametersType LFA_EVFinePositioningSetupParameters ;
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	};
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */ 
+		unsigned int EVFinePositioningSetupParameters_isUsed:1;
+		unsigned int LFA_EVFinePositioningSetupParameters_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SAScheduleTupleType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":SAScheduleTupleID,"urn:iso:15118:2:2016:MsgDataTypes":PMaxSchedule,"urn:iso:15118:2:2016:MsgDataTypes":PMaxDischargeSchedule{0-1},"urn:iso:15118:2:2016:MsgDataTypes":SalesTariff{0-1},"urn:iso:15118:2:2016:MsgDataTypes":BuyBackTariff{0-1})',  derivedBy='RESTRICTION'.  */
+struct iso2SAScheduleTupleType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":SAScheduleTupleID, urn:iso:15118:2:2016:MsgDataTypes,SAIDType */
+	uint8_t SAScheduleTupleID ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":PMaxSchedule, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PMaxScheduleType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":PMaxScheduleEntry{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct iso2PMaxScheduleType PMaxSchedule ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":PMaxDischargeSchedule, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PMaxScheduleType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":PMaxScheduleEntry{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct iso2PMaxScheduleType PMaxDischargeSchedule ;
+	unsigned int PMaxDischargeSchedule_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":SalesTariff, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SalesTariffType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":SalesTariffID,"urn:iso:15118:2:2016:MsgDataTypes":SalesTariffDescription{0-1},"urn:iso:15118:2:2016:MsgDataTypes":NumEPriceLevels{0-1},"urn:iso:15118:2:2016:MsgDataTypes":SalesTariffEntry{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct iso2SalesTariffType SalesTariff ;
+	unsigned int SalesTariff_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":BuyBackTariff, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SalesTariffType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":SalesTariffID,"urn:iso:15118:2:2016:MsgDataTypes":SalesTariffDescription{0-1},"urn:iso:15118:2:2016:MsgDataTypes":NumEPriceLevels{0-1},"urn:iso:15118:2:2016:MsgDataTypes":SalesTariffEntry{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct iso2SalesTariffType BuyBackTariff ;
+	unsigned int BuyBackTariff_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,ServiceDetailResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":ServiceID,"urn:iso:15118:2:2016:MsgBody":ServiceParameterList{0-1}))',  derivedBy='EXTENSION'.  */
+struct iso2ServiceDetailResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":ServiceID, urn:iso:15118:2:2016:MsgDataTypes,serviceIDType */
+	uint16_t ServiceID ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":ServiceParameterList, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ServiceParameterListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":ParameterSet{1-255})',  derivedBy='RESTRICTION'.  */
+	struct iso2ServiceParameterListType ServiceParameterList ;
+	unsigned int ServiceParameterList_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,PowerDeliveryReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":ChargeProgress,"urn:iso:15118:2:2016:MsgBody":EVOperation{0-1},"urn:iso:15118:2:2016:MsgBody":SAScheduleTupleID{0-1},"urn:iso:15118:2:2016:MsgBody":ChargingProfile{0-1})',  derivedBy='EXTENSION'.  */
+struct iso2PowerDeliveryReqType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ChargeProgress, urn:iso:15118:2:2016:MsgDataTypes,chargeProgressType */
+	iso2chargeProgressType ChargeProgress ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVOperation, urn:iso:15118:2:2016:MsgDataTypes,EVOperationType */
+	iso2EVOperationType EVOperation ;
+	unsigned int EVOperation_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":SAScheduleTupleID, urn:iso:15118:2:2016:MsgDataTypes,SAIDType */
+	uint8_t SAScheduleTupleID ;
+	unsigned int SAScheduleTupleID_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":ChargingProfile, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ChargingProfileType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":ProfileEntry{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct iso2ChargingProfileType ChargingProfile ;
+	unsigned int ChargingProfile_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,PairingResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEProcessing,"urn:iso:15118:2:2016:MsgBody":PairingParameters{0-1}))',  derivedBy='EXTENSION'.  */
+struct iso2PairingResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEProcessing, urn:iso:15118:2:2016:MsgDataTypes,EVSEProcessingType */
+	iso2EVSEProcessingType EVSEProcessing ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":PairingParameters, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ParameterSetType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":ParameterSetID,"urn:iso:15118:2:2016:MsgDataTypes":Parameter{1-16})',  derivedBy='RESTRICTION'.  */
+	struct iso2ParameterSetType PairingParameters ;
+	unsigned int PairingParameters_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,PowerDemandReqType',  base type name='ChargeLoopReqType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":EVTargetEnergyRequest,"urn:iso:15118:2:2016:MsgBody":EVMaximumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgBody":EVMinimumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgBody":DisplayParameters{0-1}),("urn:iso:15118:2:2016:MsgBody":EVTargetPower,"urn:iso:15118:2:2016:MsgBody":EVInputPower,"urn:iso:15118:2:2016:MsgBody":PowerDemandParameters{0-1}))',  derivedBy='EXTENSION'.  */
+struct iso2PowerDemandReqType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVTargetEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVTargetEnergyRequest ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMaximumEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMaximumEnergyRequest ;
+	unsigned int EVMaximumEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVMinimumEnergyRequest, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVMinimumEnergyRequest ;
+	unsigned int EVMinimumEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":DisplayParameters, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,DisplayParametersType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":CurrentRange{0-1},"urn:iso:15118:2:2016:MsgDataTypes":CurrentSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":TargetSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":BulkSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":MinimumSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":ChargingPerformance{0-1},"urn:iso:15118:2:2016:MsgDataTypes":RemainingTimeToTargetSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":RemainingTimeToBulkSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":RemainingTimeToMinimumSOC{0-1},"urn:iso:15118:2:2016:MsgDataTypes":ChargingComplete{0-1},"urn:iso:15118:2:2016:MsgDataTypes":BulkChargingComplete{0-1},"urn:iso:15118:2:2016:MsgDataTypes":InletHot{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso2DisplayParametersType DisplayParameters ;
+	unsigned int DisplayParameters_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVTargetPower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVTargetPower ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVInputPower, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":Exponent,"urn:iso:15118:2:2016:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct iso2PhysicalValueType EVInputPower ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":PowerDemandParameters, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,ParameterSetType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":ParameterSetID,"urn:iso:15118:2:2016:MsgDataTypes":Parameter{1-16})',  derivedBy='RESTRICTION'.  */
+	struct iso2ParameterSetType PowerDemandParameters ;
+	unsigned int PowerDemandParameters_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,PaymentServiceSelectionReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":SelectedPaymentOption,"urn:iso:15118:2:2016:MsgBody":SelectedEnergyTransferService,"urn:iso:15118:2:2016:MsgBody":SelectedVASList{0-1})',  derivedBy='EXTENSION'.  */
+struct iso2PaymentServiceSelectionReqType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":SelectedPaymentOption, urn:iso:15118:2:2016:MsgDataTypes,paymentOptionType */
+	iso2paymentOptionType SelectedPaymentOption ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":SelectedEnergyTransferService, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SelectedServiceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":ServiceID,"urn:iso:15118:2:2016:MsgDataTypes":ParameterSetID)',  derivedBy='RESTRICTION'.  */
+	struct iso2SelectedServiceType SelectedEnergyTransferService ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":SelectedVASList, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SelectedServiceListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":SelectedService{1-16})',  derivedBy='RESTRICTION'.  */
+	struct iso2SelectedServiceListType SelectedVASList ;
+	unsigned int SelectedVASList_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,LFA_EVFinePositioningParametersType',  base type name='EVFinePositioningParametersType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NumberOfSignalPackages,"urn:iso:15118:2:2016:MsgDataTypes":SensorPackageList)',  derivedBy='EXTENSION'.  */
+struct iso2LFA_EVFinePositioningParametersType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":NumberOfSignalPackages, http://www.w3.org/2001/XMLSchema,unsignedByte */
+	uint8_t NumberOfSignalPackages ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":SensorPackageList, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SensorPackageListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":SensorPackage{1-255})',  derivedBy='RESTRICTION'.  */
+	struct iso2SensorPackageListType SensorPackageList ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,KeyInfoType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":KeyName|"http://www.w3.org/2000/09/xmldsig#":KeyValue|"http://www.w3.org/2000/09/xmldsig#":RetrievalMethod|"http://www.w3.org/2000/09/xmldsig#":X509Data|"http://www.w3.org/2000/09/xmldsig#":PGPData|"http://www.w3.org/2000/09/xmldsig#":SPKIData|"http://www.w3.org/2000/09/xmldsig#":MgmtData|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"])){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define iso2KeyInfoType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2KeyInfoType_KeyName_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2KeyInfoType_KeyName_ARRAY_SIZE 1
+#define iso2KeyInfoType_KeyValue_ARRAY_SIZE 1
+#define iso2KeyInfoType_RetrievalMethod_ARRAY_SIZE 1
+#define iso2KeyInfoType_X509Data_ARRAY_SIZE 1
+#define iso2KeyInfoType_PGPData_ARRAY_SIZE 1
+#define iso2KeyInfoType_SPKIData_ARRAY_SIZE 1
+#define iso2KeyInfoType_MgmtData_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2KeyInfoType_MgmtData_ARRAY_SIZE 1
+#define iso2KeyInfoType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+struct iso2KeyInfoType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso2KeyInfoType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":KeyName, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		struct {
+			exi_string_character_t characters[iso2KeyInfoType_KeyName_CHARACTERS_SIZE];
+			uint16_t charactersLen;
+		}  array[iso2KeyInfoType_KeyName_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} KeyName;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":KeyValue, Complex type name='http://www.w3.org/2000/09/xmldsig#,KeyValueType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":DSAKeyValue|"http://www.w3.org/2000/09/xmldsig#":RSAKeyValue|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]))',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso2KeyValueType array[iso2KeyInfoType_KeyValue_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} KeyValue;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":RetrievalMethod, Complex type name='http://www.w3.org/2000/09/xmldsig#,RetrievalMethodType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1})',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso2RetrievalMethodType array[iso2KeyInfoType_RetrievalMethod_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} RetrievalMethod;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509Data, Complex type name='http://www.w3.org/2000/09/xmldsig#,X509DataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":X509IssuerSerial|"http://www.w3.org/2000/09/xmldsig#":X509SKI|"http://www.w3.org/2000/09/xmldsig#":X509SubjectName|"http://www.w3.org/2000/09/xmldsig#":X509Certificate|"http://www.w3.org/2000/09/xmldsig#":X509CRL|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]))){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso2X509DataType array[iso2KeyInfoType_X509Data_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509Data;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":PGPData, Complex type name='http://www.w3.org/2000/09/xmldsig#,PGPDataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":PGPKeyID,"http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket{0-1},(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})|("http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket,(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED}))',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso2PGPDataType array[iso2KeyInfoType_PGPData_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} PGPData;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SPKIData, Complex type name='http://www.w3.org/2000/09/xmldsig#,SPKIDataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":SPKISexp,(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-1}){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso2SPKIDataType array[iso2KeyInfoType_SPKIData_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SPKIData;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":MgmtData, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		struct {
+			exi_string_character_t characters[iso2KeyInfoType_MgmtData_CHARACTERS_SIZE];
+			uint16_t charactersLen;
+		}  array[iso2KeyInfoType_MgmtData_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} MgmtData;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[iso2KeyInfoType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,FinePositioningReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":EVProcessing,"urn:iso:15118:2:2016:MsgDataTypes":EVFinePositioningParameters{0-1})',  derivedBy='EXTENSION'.  */
+struct iso2FinePositioningReqType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVProcessing, urn:iso:15118:2:2016:MsgDataTypes,EVSEProcessingType */
+	iso2EVSEProcessingType EVProcessing ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVFinePositioningParameters, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVFinePositioningParametersType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+	struct iso2EVFinePositioningParametersType EVFinePositioningParameters ;
+	unsigned int EVFinePositioningParameters_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":Generic_EVFinePositioningParameters, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,Generic_EVFinePositioningParametersType',  base type name='EVFinePositioningParametersType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":GenericParameters)',  derivedBy='EXTENSION'.  */
+	struct iso2Generic_EVFinePositioningParametersType Generic_EVFinePositioningParameters ;
+	unsigned int Generic_EVFinePositioningParameters_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":LFA_EVFinePositioningParameters, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,LFA_EVFinePositioningParametersType',  base type name='EVFinePositioningParametersType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NumberOfSignalPackages,"urn:iso:15118:2:2016:MsgDataTypes":SensorPackageList)',  derivedBy='EXTENSION'.  */
+	struct iso2LFA_EVFinePositioningParametersType LFA_EVFinePositioningParameters ;
+	unsigned int LFA_EVFinePositioningParameters_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":SignedInfo,"http://www.w3.org/2000/09/xmldsig#":SignatureValue,"http://www.w3.org/2000/09/xmldsig#":KeyInfo{0-1},"http://www.w3.org/2000/09/xmldsig#":Object{0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define iso2SignatureType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define iso2SignatureType_Object_ARRAY_SIZE 1
+struct iso2SignatureType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[iso2SignatureType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SignedInfo, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignedInfoType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":CanonicalizationMethod,"http://www.w3.org/2000/09/xmldsig#":SignatureMethod,"http://www.w3.org/2000/09/xmldsig#":Reference{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct iso2SignedInfoType SignedInfo ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SignatureValue, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureValueType',  base type name='base64Binary',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+	struct iso2SignatureValueType SignatureValue ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":KeyInfo, Complex type name='http://www.w3.org/2000/09/xmldsig#,KeyInfoType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":KeyName|"http://www.w3.org/2000/09/xmldsig#":KeyValue|"http://www.w3.org/2000/09/xmldsig#":RetrievalMethod|"http://www.w3.org/2000/09/xmldsig#":X509Data|"http://www.w3.org/2000/09/xmldsig#":PGPData|"http://www.w3.org/2000/09/xmldsig#":SPKIData|"http://www.w3.org/2000/09/xmldsig#":MgmtData|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"])){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct iso2KeyInfoType KeyInfo ;
+	unsigned int KeyInfo_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Object, Complex type name='http://www.w3.org/2000/09/xmldsig#,ObjectType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##any])){0-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso2ObjectType array[iso2SignatureType_Object_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Object;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,FinePositioningSetupResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgDataTypes":EVSEFinePositioningSetupParameters{0-1}))',  derivedBy='EXTENSION'.  */
+struct iso2FinePositioningSetupResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSEFinePositioningSetupParameters, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEFinePositioningSetupParametersType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEFinePositioningSetupParametersType EVSEFinePositioningSetupParameters ;
+	unsigned int EVSEFinePositioningSetupParameters_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":LFA_EVSEFinePositioningSetupParameters, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,LFA_EVSEFinePositioningSetupParametersType',  base type name='EVSEFinePositioningSetupParametersType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NumberOfSensors,"urn:iso:15118:2:2016:MsgDataTypes":SensorList,"urn:iso:15118:2:2016:MsgDataTypes":SensorOrder,"urn:iso:15118:2:2016:MsgDataTypes":SignalPulseDuration,"urn:iso:15118:2:2016:MsgDataTypes":SignalSeparationTime,"urn:iso:15118:2:2016:MsgDataTypes":PackageSeparationTime,"urn:iso:15118:2:2016:MsgDataTypes":AlignmentOffset,"urn:iso:15118:2:2016:MsgDataTypes":SignalFrequency)',  derivedBy='EXTENSION'.  */
+	struct iso2LFA_EVSEFinePositioningSetupParametersType LFA_EVSEFinePositioningSetupParameters ;
+	unsigned int LFA_EVSEFinePositioningSetupParameters_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":MV_EVSEFinePositioningSetupParameters, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,MV_EVSEFinePositioningSetupParametersType',  base type name='EVSEFinePositioningSetupParametersType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":FrequencyChannel{0-1},"urn:iso:15118:2:2016:MsgDataTypes":MagneticVectorSetupList{0-1})',  derivedBy='EXTENSION'.  */
+	struct iso2MV_EVSEFinePositioningSetupParametersType MV_EVSEFinePositioningSetupParameters ;
+	unsigned int MV_EVSEFinePositioningSetupParameters_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SAScheduleListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":SAScheduleTuple{1-3})',  derivedBy='RESTRICTION'.  */
+#define iso2SAScheduleListType_SAScheduleTuple_ARRAY_SIZE 3
+struct iso2SAScheduleListType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":SAScheduleTuple, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SAScheduleTupleType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":SAScheduleTupleID,"urn:iso:15118:2:2016:MsgDataTypes":PMaxSchedule,"urn:iso:15118:2:2016:MsgDataTypes":PMaxDischargeSchedule{0-1},"urn:iso:15118:2:2016:MsgDataTypes":SalesTariff{0-1},"urn:iso:15118:2:2016:MsgDataTypes":BuyBackTariff{0-1})',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct iso2SAScheduleTupleType array[iso2SAScheduleListType_SAScheduleTuple_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SAScheduleTuple;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDataTypes,LFA_EVSEFinePositioningParametersType',  base type name='EVSEFinePositioningParametersType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NumberOfSignalPackages,"urn:iso:15118:2:2016:MsgDataTypes":SensorPackageList)',  derivedBy='EXTENSION'.  */
+struct iso2LFA_EVSEFinePositioningParametersType {
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":NumberOfSignalPackages, http://www.w3.org/2001/XMLSchema,unsignedByte */
+	uint8_t NumberOfSignalPackages ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":SensorPackageList, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SensorPackageListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":SensorPackage{1-255})',  derivedBy='RESTRICTION'.  */
+	struct iso2SensorPackageListType SensorPackageList ;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgHeader,MessageHeaderType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgHeader":SessionID,"http://www.w3.org/2000/09/xmldsig#":Signature{0-1})',  derivedBy='RESTRICTION'.  */
+#define iso2MessageHeaderType_SessionID_BYTES_SIZE 8 /* XML schema facet maxLength for urn:iso:15118:2:2016:MsgDataTypes,sessionIDType is 8 */
+struct iso2MessageHeaderType {
+	/* element: "urn:iso:15118:2:2016:MsgHeader":SessionID, urn:iso:15118:2:2016:MsgDataTypes,sessionIDType */
+	struct {
+		uint8_t bytes[iso2MessageHeaderType_SessionID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  SessionID ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Signature, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":SignedInfo,"http://www.w3.org/2000/09/xmldsig#":SignatureValue,"http://www.w3.org/2000/09/xmldsig#":KeyInfo{0-1},"http://www.w3.org/2000/09/xmldsig#":Object{0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct iso2SignatureType Signature ;
+	unsigned int Signature_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,FinePositioningResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEProcessing,"urn:iso:15118:2:2016:MsgDataTypes":EVSEFinePositioningParameters{0-1}))',  derivedBy='EXTENSION'.  */
+struct iso2FinePositioningResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEProcessing, urn:iso:15118:2:2016:MsgDataTypes,EVSEProcessingType */
+	iso2EVSEProcessingType EVSEProcessing ;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSEFinePositioningParameters, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEFinePositioningParametersType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEFinePositioningParametersType EVSEFinePositioningParameters ;
+	unsigned int EVSEFinePositioningParameters_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":Generic_EVSEFinePositioningParameters, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,Generic_EVSEFinePositioningParametersType',  base type name='EVSEFinePositioningParametersType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":GenericParameters)',  derivedBy='EXTENSION'.  */
+	struct iso2Generic_EVSEFinePositioningParametersType Generic_EVSEFinePositioningParameters ;
+	unsigned int Generic_EVSEFinePositioningParameters_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":LFA_EVSEFinePositioningParameters, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,LFA_EVSEFinePositioningParametersType',  base type name='EVSEFinePositioningParametersType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NumberOfSignalPackages,"urn:iso:15118:2:2016:MsgDataTypes":SensorPackageList)',  derivedBy='EXTENSION'.  */
+	struct iso2LFA_EVSEFinePositioningParametersType LFA_EVSEFinePositioningParameters ;
+	unsigned int LFA_EVSEFinePositioningParameters_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":MV_EVSEFinePositioningParameters, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,MV_EVSEFinePositioningParametersType',  base type name='EVSEFinePositioningParametersType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":MagneticVectorList)',  derivedBy='EXTENSION'.  */
+	struct iso2MV_EVSEFinePositioningParametersType MV_EVSEFinePositioningParameters ;
+	unsigned int MV_EVSEFinePositioningParameters_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,ChargeParameterDiscoveryResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEProcessing,"urn:iso:15118:2:2016:MsgBody":SAScheduleList{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVSEEnergyTransferParameter))',  derivedBy='EXTENSION'.  */
+struct iso2ChargeParameterDiscoveryResType {
+	/* element: "urn:iso:15118:2:2016:MsgBody":ResponseCode, urn:iso:15118:2:2016:MsgDataTypes,responseCodeType */
+	iso2responseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEStatus, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2016:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgBody":EVSEProcessing, urn:iso:15118:2:2016:MsgDataTypes,EVSEProcessingType */
+	iso2EVSEProcessingType EVSEProcessing ;
+	/* element: "urn:iso:15118:2:2016:MsgBody":SAScheduleList, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,SAScheduleListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":SAScheduleTuple{1-3})',  derivedBy='RESTRICTION'.  */
+	struct iso2SAScheduleListType SAScheduleList ;
+	unsigned int SAScheduleList_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":EVSEEnergyTransferParameter, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,EVSEEnergyTransferParameterType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+	struct iso2EVSEEnergyTransferParameterType EVSEEnergyTransferParameter ;
+	unsigned int EVSEEnergyTransferParameter_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":AC_EVSEChargeParameter, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,AC_EVSEChargeParameterType',  base type name='EVSEEnergyTransferParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumChargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVSENominalVoltage,"urn:iso:15118:2:2016:MsgDataTypes":EVSENominalFrequency)',  derivedBy='EXTENSION'.  */
+	struct iso2AC_EVSEChargeParameterType AC_EVSEChargeParameter ;
+	unsigned int AC_EVSEChargeParameter_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":AC_EVSEBidirectionalParameter, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,AC_EVSEBidirectionalParameterType',  base type name='AC_EVSEChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumChargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVSENominalVoltage,"urn:iso:15118:2:2016:MsgDataTypes":EVSENominalFrequency),("urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumDischargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVSENominalFrequency))',  derivedBy='EXTENSION'.  */
+	struct iso2AC_EVSEBidirectionalParameterType AC_EVSEBidirectionalParameter ;
+	unsigned int AC_EVSEBidirectionalParameter_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":DC_EVSEChargeParameter, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,DC_EVSEChargeParameterType',  base type name='EVSEEnergyTransferParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumChargePower,"urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumChargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVSEMinimumChargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumVoltage,"urn:iso:15118:2:2016:MsgDataTypes":EVSEMinimumVoltage,"urn:iso:15118:2:2016:MsgDataTypes":EVSECurrentRegulationTolerance{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVSEPeakCurrentRipple,"urn:iso:15118:2:2016:MsgDataTypes":EVSEEnergyToBeDelivered{0-1})',  derivedBy='EXTENSION'.  */
+	struct iso2DC_EVSEChargeParameterType DC_EVSEChargeParameter ;
+	unsigned int DC_EVSEChargeParameter_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":DC_EVSEBidirectionalParameter, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,DC_EVSEBidirectionalParameterType',  base type name='DC_EVSEChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumChargePower,"urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumChargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVSEMinimumChargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumVoltage,"urn:iso:15118:2:2016:MsgDataTypes":EVSEMinimumVoltage,"urn:iso:15118:2:2016:MsgDataTypes":EVSECurrentRegulationTolerance{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVSEPeakCurrentRipple,"urn:iso:15118:2:2016:MsgDataTypes":EVSEEnergyToBeDelivered{0-1}),("urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumDischargePower,"urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumDischargeCurrent,"urn:iso:15118:2:2016:MsgDataTypes":EVSEMinimumDischargeCurrent))',  derivedBy='EXTENSION'.  */
+	struct iso2DC_EVSEBidirectionalParameterType DC_EVSEBidirectionalParameter ;
+	unsigned int DC_EVSEBidirectionalParameter_isUsed:1;
+	/* element: "urn:iso:15118:2:2016:MsgDataTypes":WPT_EVSEChargeParameter, Complex type name='urn:iso:15118:2:2016:MsgDataTypes,WPT_EVSEChargeParameterType',  base type name='EVSEEnergyTransferParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":EVSEMaximumPower,"urn:iso:15118:2:2016:MsgDataTypes":EVSEMinimumPower)',  derivedBy='EXTENSION'.  */
+	struct iso2WPT_EVSEChargeParameterType WPT_EVSEChargeParameter ;
+	unsigned int WPT_EVSEChargeParameter_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgBody,BodyType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":BodyElement)',  derivedBy='RESTRICTION'.  */
+struct iso2BodyType {
+	/* substitutionGroup */
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	union {
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */ 
+		/* element: "urn:iso:15118:2:2016:MsgBody":BodyElement, Complex type name='urn:iso:15118:2:2016:MsgBody,BodyBaseType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+		struct iso2BodyBaseType BodyElement ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":V2GRequest, Complex type name='urn:iso:15118:2:2016:MsgBody,BodyBaseType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+		struct iso2BodyBaseType V2GRequest ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":DisconnectChargingDeviceReq, Complex type name='urn:iso:15118:2:2016:MsgBody,DisconnectChargingDeviceReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":EVElectricalChargingDeviceStatus,"urn:iso:15118:2:2016:MsgBody":EVMechanicalChargingDeviceStatus)',  derivedBy='EXTENSION'.  */
+		struct iso2DisconnectChargingDeviceReqType DisconnectChargingDeviceReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":ConnectChargingDeviceReq, Complex type name='urn:iso:15118:2:2016:MsgBody,ConnectChargingDeviceReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":EVElectricalChargingDeviceStatus,"urn:iso:15118:2:2016:MsgBody":EVMechanicalChargingDeviceStatus)',  derivedBy='EXTENSION'.  */
+		struct iso2ConnectChargingDeviceReqType ConnectChargingDeviceReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":SystemStatusReq, Complex type name='urn:iso:15118:2:2016:MsgBody,SystemStatusReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":OperationMode,"urn:iso:15118:2:2016:MsgBody":EVMechanicalChargingDeviceStatus)',  derivedBy='EXTENSION'.  */
+		struct iso2SystemStatusReqType SystemStatusReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":DC_BidirectionalControlReq, Complex type name='urn:iso:15118:2:2016:MsgBody,DC_BidirectionalControlReqType',  base type name='ChargeLoopReqType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":EVTargetEnergyRequest,"urn:iso:15118:2:2016:MsgBody":EVMaximumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgBody":EVMinimumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgBody":DisplayParameters{0-1}),("urn:iso:15118:2:2016:MsgBody":EVTargetCurrent,"urn:iso:15118:2:2016:MsgBody":EVTargetVoltage,"urn:iso:15118:2:2016:MsgBody":EVMaximumVoltage,"urn:iso:15118:2:2016:MsgBody":EVMinimumVoltage,"urn:iso:15118:2:2016:MsgBody":EVMaximumChargeCurrent,"urn:iso:15118:2:2016:MsgBody":EVMaximumDischargeCurrent{0-1},"urn:iso:15118:2:2016:MsgBody":EVMaximumChargePower{0-1},"urn:iso:15118:2:2016:MsgBody":EVMaximumDischargePower{0-1}))',  derivedBy='EXTENSION'.  */
+		struct iso2DC_BidirectionalControlReqType DC_BidirectionalControlReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":AC_BidirectionalControlReq, Complex type name='urn:iso:15118:2:2016:MsgBody,AC_BidirectionalControlReqType',  base type name='ChargeLoopReqType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":EVTargetEnergyRequest,"urn:iso:15118:2:2016:MsgBody":EVMaximumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgBody":EVMinimumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgBody":DisplayParameters{0-1}),("urn:iso:15118:2:2016:MsgBody":EVOperation{0-1},"urn:iso:15118:2:2016:MsgBody":EVMaximumChargePower,"urn:iso:15118:2:2016:MsgBody":EVMaximumDischargePower{0-1},"urn:iso:15118:2:2016:MsgBody":EVMaximumChargeCurrent,"urn:iso:15118:2:2016:MsgBody":EVMaximumDischargeCurrent{0-1},"urn:iso:15118:2:2016:MsgBody":EVMinimumChargeCurrent,"urn:iso:15118:2:2016:MsgBody":EVMinimumDischargeCurrent{0-1},"urn:iso:15118:2:2016:MsgBody":EVPresentActivePower,"urn:iso:15118:2:2016:MsgBody":EVPresentReactivePower))',  derivedBy='EXTENSION'.  */
+		struct iso2AC_BidirectionalControlReqType AC_BidirectionalControlReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":VehicleCheckOutReq, Complex type name='urn:iso:15118:2:2016:MsgBody,VehicleCheckOutReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":EVCheckOutStatus,"urn:iso:15118:2:2016:MsgBody":CheckOutTime)',  derivedBy='EXTENSION'.  */
+		struct iso2VehicleCheckOutReqType VehicleCheckOutReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":VehicleCheckInReq, Complex type name='urn:iso:15118:2:2016:MsgBody,VehicleCheckInReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":EVCheckInStatus,"urn:iso:15118:2:2016:MsgBody":ParkingMethod{0-1})',  derivedBy='EXTENSION'.  */
+		struct iso2VehicleCheckInReqType VehicleCheckInReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":PowerDemandReq, Complex type name='urn:iso:15118:2:2016:MsgBody,PowerDemandReqType',  base type name='ChargeLoopReqType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":EVTargetEnergyRequest,"urn:iso:15118:2:2016:MsgBody":EVMaximumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgBody":EVMinimumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgBody":DisplayParameters{0-1}),("urn:iso:15118:2:2016:MsgBody":EVTargetPower,"urn:iso:15118:2:2016:MsgBody":EVInputPower,"urn:iso:15118:2:2016:MsgBody":PowerDemandParameters{0-1}))',  derivedBy='EXTENSION'.  */
+		struct iso2PowerDemandReqType PowerDemandReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":PairingReq, Complex type name='urn:iso:15118:2:2016:MsgBody,PairingReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":EVProcessing,"urn:iso:15118:2:2016:MsgBody":PairingParameters{0-1})',  derivedBy='EXTENSION'.  */
+		struct iso2PairingReqType PairingReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":AlignmentCheckReq, Complex type name='urn:iso:15118:2:2016:MsgBody,AlignmentCheckReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":EVProcessing,"urn:iso:15118:2:2016:MsgBody":AlignmentCheckParameters{0-1})',  derivedBy='EXTENSION'.  */
+		struct iso2AlignmentCheckReqType AlignmentCheckReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":FinePositioningReq, Complex type name='urn:iso:15118:2:2016:MsgBody,FinePositioningReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":EVProcessing,"urn:iso:15118:2:2016:MsgDataTypes":EVFinePositioningParameters{0-1})',  derivedBy='EXTENSION'.  */
+		struct iso2FinePositioningReqType FinePositioningReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":FinePositioningSetupReq, Complex type name='urn:iso:15118:2:2016:MsgBody,FinePositioningSetupReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDataTypes":EVFinePositioningSetupParameters{0-1})',  derivedBy='EXTENSION'.  */
+		struct iso2FinePositioningSetupReqType FinePositioningSetupReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":WeldingDetectionReq, Complex type name='urn:iso:15118:2:2016:MsgBody,WeldingDetectionReqType',  base type name='BodyBaseType',  content type='EMPTY',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+		struct iso2WeldingDetectionReqType WeldingDetectionReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":CurrentDemandReq, Complex type name='urn:iso:15118:2:2016:MsgBody,CurrentDemandReqType',  base type name='ChargeLoopReqType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":EVTargetEnergyRequest,"urn:iso:15118:2:2016:MsgBody":EVMaximumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgBody":EVMinimumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgBody":DisplayParameters{0-1}),("urn:iso:15118:2:2016:MsgBody":EVTargetCurrent,"urn:iso:15118:2:2016:MsgBody":EVTargetVoltage,"urn:iso:15118:2:2016:MsgBody":EVMaximumCurrent{0-1},"urn:iso:15118:2:2016:MsgBody":EVMaximumPower{0-1},"urn:iso:15118:2:2016:MsgBody":EVMaximumVoltage{0-1}))',  derivedBy='EXTENSION'.  */
+		struct iso2CurrentDemandReqType CurrentDemandReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":PreChargeReq, Complex type name='urn:iso:15118:2:2016:MsgBody,PreChargeReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":EVTargetVoltage,"urn:iso:15118:2:2016:MsgBody":EVTargetCurrent)',  derivedBy='EXTENSION'.  */
+		struct iso2PreChargeReqType PreChargeReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":CableCheckReq, Complex type name='urn:iso:15118:2:2016:MsgBody,CableCheckReqType',  base type name='BodyBaseType',  content type='EMPTY',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+		struct iso2CableCheckReqType CableCheckReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":ChargingStatusReq, Complex type name='urn:iso:15118:2:2016:MsgBody,ChargingStatusReqType',  base type name='ChargeLoopReqType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":EVTargetEnergyRequest,"urn:iso:15118:2:2016:MsgBody":EVMaximumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgBody":EVMinimumEnergyRequest{0-1},"urn:iso:15118:2:2016:MsgBody":DisplayParameters{0-1}),("urn:iso:15118:2:2016:MsgBody":EVMaximumChargePower{0-1},"urn:iso:15118:2:2016:MsgBody":EVMaximumChargeCurrent{0-1},"urn:iso:15118:2:2016:MsgBody":EVMinimumChargeCurrent{0-1}))',  derivedBy='EXTENSION'.  */
+		struct iso2ChargingStatusReqType ChargingStatusReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":CertificateInstallationReq, Complex type name='urn:iso:15118:2:2016:MsgBody,CertificateInstallationReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":OEMProvisioningCert,"urn:iso:15118:2:2016:MsgBody":ListOfRootCertificateIDs)',  derivedBy='EXTENSION'.  */
+		struct iso2CertificateInstallationReqType CertificateInstallationReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":CertificateUpdateReq, Complex type name='urn:iso:15118:2:2016:MsgBody,CertificateUpdateReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2016:MsgBody":eMAID,"urn:iso:15118:2:2016:MsgBody":ListOfRootCertificateIDs)',  derivedBy='EXTENSION'.  */
+		struct iso2CertificateUpdateReqType CertificateUpdateReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":SessionStopReq, Complex type name='urn:iso:15118:2:2016:MsgBody,SessionStopReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":ChargingSession)',  derivedBy='EXTENSION'.  */
+		struct iso2SessionStopReqType SessionStopReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":MeteringReceiptReq, Complex type name='urn:iso:15118:2:2016:MsgBody,MeteringReceiptReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":SessionID,"urn:iso:15118:2:2016:MsgBody":SAScheduleTupleID{0-1},"urn:iso:15118:2:2016:MsgBody":MeterInfo)',  derivedBy='EXTENSION'.  */
+		struct iso2MeteringReceiptReqType MeteringReceiptReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":PowerDeliveryReq, Complex type name='urn:iso:15118:2:2016:MsgBody,PowerDeliveryReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":ChargeProgress,"urn:iso:15118:2:2016:MsgBody":EVOperation{0-1},"urn:iso:15118:2:2016:MsgBody":SAScheduleTupleID{0-1},"urn:iso:15118:2:2016:MsgBody":ChargingProfile{0-1})',  derivedBy='EXTENSION'.  */
+		struct iso2PowerDeliveryReqType PowerDeliveryReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":ChargeParameterDiscoveryReq, Complex type name='urn:iso:15118:2:2016:MsgBody,ChargeParameterDiscoveryReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":MaxSupportingPoints{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVEnergyTransferParameter,"urn:iso:15118:2:2016:MsgBody":MinimumPMaxRequest{0-1})',  derivedBy='EXTENSION'.  */
+		struct iso2ChargeParameterDiscoveryReqType ChargeParameterDiscoveryReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":AuthorizationReq, Complex type name='urn:iso:15118:2:2016:MsgBody,AuthorizationReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":GenChallenge{0-1})',  derivedBy='EXTENSION'.  */
+		struct iso2AuthorizationReqType AuthorizationReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":PaymentDetailsReq, Complex type name='urn:iso:15118:2:2016:MsgBody,PaymentDetailsReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":eMAID,"urn:iso:15118:2:2016:MsgBody":ContractSignatureCertChain)',  derivedBy='EXTENSION'.  */
+		struct iso2PaymentDetailsReqType PaymentDetailsReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":PaymentServiceSelectionReq, Complex type name='urn:iso:15118:2:2016:MsgBody,PaymentServiceSelectionReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":SelectedPaymentOption,"urn:iso:15118:2:2016:MsgBody":SelectedEnergyTransferService,"urn:iso:15118:2:2016:MsgBody":SelectedVASList{0-1})',  derivedBy='EXTENSION'.  */
+		struct iso2PaymentServiceSelectionReqType PaymentServiceSelectionReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":ServiceDetailReq, Complex type name='urn:iso:15118:2:2016:MsgBody,ServiceDetailReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":ServiceID)',  derivedBy='EXTENSION'.  */
+		struct iso2ServiceDetailReqType ServiceDetailReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":ServiceDiscoveryReq, Complex type name='urn:iso:15118:2:2016:MsgBody,ServiceDiscoveryReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":SupportedServiceIDs{0-1})',  derivedBy='EXTENSION'.  */
+		struct iso2ServiceDiscoveryReqType ServiceDiscoveryReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":SessionSetupReq, Complex type name='urn:iso:15118:2:2016:MsgBody,SessionSetupReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":EVCCID)',  derivedBy='EXTENSION'.  */
+		struct iso2SessionSetupReqType SessionSetupReq ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":V2GResponse, Complex type name='urn:iso:15118:2:2016:MsgBody,V2GResponseType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1})',  derivedBy='EXTENSION'.  */
+		struct iso2V2GResponseType V2GResponse ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":DisconnectChargingDeviceRes, Complex type name='urn:iso:15118:2:2016:MsgBody,DisconnectChargingDeviceResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEProcessing,"urn:iso:15118:2:2016:MsgBody":EVSEElectricalChargingDeviceStatus,"urn:iso:15118:2:2016:MsgBody":EVSEMechanicalChargingDeviceStatus))',  derivedBy='EXTENSION'.  */
+		struct iso2DisconnectChargingDeviceResType DisconnectChargingDeviceRes ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":ConnectChargingDeviceRes, Complex type name='urn:iso:15118:2:2016:MsgBody,ConnectChargingDeviceResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEProcessing,"urn:iso:15118:2:2016:MsgBody":EVSEElectricalChargingDeviceStatus,"urn:iso:15118:2:2016:MsgBody":EVSEMechanicalChargingDeviceStatus))',  derivedBy='EXTENSION'.  */
+		struct iso2ConnectChargingDeviceResType ConnectChargingDeviceRes ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":SystemStatusRes, Complex type name='urn:iso:15118:2:2016:MsgBody,SystemStatusResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":OperationMode,"urn:iso:15118:2:2016:MsgBody":EVSEMechanicalChargingDeviceStatus))',  derivedBy='EXTENSION'.  */
+		struct iso2SystemStatusResType SystemStatusRes ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":DC_BidirectionalControlRes, Complex type name='urn:iso:15118:2:2016:MsgBody,DC_BidirectionalControlResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEPresentCurrent,"urn:iso:15118:2:2016:MsgBody":EVSEPresentVoltage,"urn:iso:15118:2:2016:MsgBody":EVSEPowerLimitAchieved,"urn:iso:15118:2:2016:MsgBody":EVSECurrentLimitAchieved,"urn:iso:15118:2:2016:MsgBody":EVSEVoltageLimitAchieved,"urn:iso:15118:2:2016:MsgBody":EVSEMaximumChargePower{0-1},"urn:iso:15118:2:2016:MsgBody":EVSEMaximumDischargePower{0-1},"urn:iso:15118:2:2016:MsgBody":EVSEMaximumChargeCurrent{0-1},"urn:iso:15118:2:2016:MsgBody":EVSEMaximumDischargeCurrent{0-1},"urn:iso:15118:2:2016:MsgBody":EVSEMaximumVoltage{0-1},"urn:iso:15118:2:2016:MsgBody":EVSEMinimumVoltage{0-1},"urn:iso:15118:2:2016:MsgBody":EVSEID,"urn:iso:15118:2:2016:MsgBody":SAScheduleTupleID{0-1},"urn:iso:15118:2:2016:MsgBody":MeterInfo{0-1},"urn:iso:15118:2:2016:MsgBody":ReceiptRequired{0-1}))',  derivedBy='EXTENSION'.  */
+		struct iso2DC_BidirectionalControlResType DC_BidirectionalControlRes ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":AC_BidirectionalControlRes, Complex type name='urn:iso:15118:2:2016:MsgBody,AC_BidirectionalControlResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEProcessing,"urn:iso:15118:2:2016:MsgBody":EVSETargetPower,"urn:iso:15118:2:2016:MsgBody":EVSETargetReactivePower,"urn:iso:15118:2:2016:MsgBody":EVSEID,"urn:iso:15118:2:2016:MsgBody":SAScheduleTupleID{0-1},"urn:iso:15118:2:2016:MsgBody":MeterInfo{0-1},"urn:iso:15118:2:2016:MsgBody":ReceiptRequired{0-1}))',  derivedBy='EXTENSION'.  */
+		struct iso2AC_BidirectionalControlResType AC_BidirectionalControlRes ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":VehicleCheckOutRes, Complex type name='urn:iso:15118:2:2016:MsgBody,VehicleCheckOutResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSECheckOutStatus))',  derivedBy='EXTENSION'.  */
+		struct iso2VehicleCheckOutResType VehicleCheckOutRes ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":VehicleCheckInRes, Complex type name='urn:iso:15118:2:2016:MsgBody,VehicleCheckInResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":VehicleSpace,"urn:iso:15118:2:2016:MsgBody":TargetOffset{0-1}))',  derivedBy='EXTENSION'.  */
+		struct iso2VehicleCheckInResType VehicleCheckInRes ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":PowerDemandRes, Complex type name='urn:iso:15118:2:2016:MsgBody,PowerDemandResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEOutputPower,"urn:iso:15118:2:2016:MsgBody":EVSEID,"urn:iso:15118:2:2016:MsgBody":SAScheduleTupleID{0-1},"urn:iso:15118:2:2016:MsgBody":MeterInfo{0-1},"urn:iso:15118:2:2016:MsgBody":ReceiptRequired{0-1},"urn:iso:15118:2:2016:MsgBody":PowerDemandParameters{0-1}))',  derivedBy='EXTENSION'.  */
+		struct iso2PowerDemandResType PowerDemandRes ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":PairingRes, Complex type name='urn:iso:15118:2:2016:MsgBody,PairingResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEProcessing,"urn:iso:15118:2:2016:MsgBody":PairingParameters{0-1}))',  derivedBy='EXTENSION'.  */
+		struct iso2PairingResType PairingRes ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":AlignmentCheckRes, Complex type name='urn:iso:15118:2:2016:MsgBody,AlignmentCheckResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEProcessing,"urn:iso:15118:2:2016:MsgBody":AlignmentCheckParameters{0-1}))',  derivedBy='EXTENSION'.  */
+		struct iso2AlignmentCheckResType AlignmentCheckRes ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":FinePositioningRes, Complex type name='urn:iso:15118:2:2016:MsgBody,FinePositioningResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEProcessing,"urn:iso:15118:2:2016:MsgDataTypes":EVSEFinePositioningParameters{0-1}))',  derivedBy='EXTENSION'.  */
+		struct iso2FinePositioningResType FinePositioningRes ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":FinePositioningSetupRes, Complex type name='urn:iso:15118:2:2016:MsgBody,FinePositioningSetupResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgDataTypes":EVSEFinePositioningSetupParameters{0-1}))',  derivedBy='EXTENSION'.  */
+		struct iso2FinePositioningSetupResType FinePositioningSetupRes ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":WeldingDetectionRes, Complex type name='urn:iso:15118:2:2016:MsgBody,WeldingDetectionResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEPresentVoltage))',  derivedBy='EXTENSION'.  */
+		struct iso2WeldingDetectionResType WeldingDetectionRes ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":CurrentDemandRes, Complex type name='urn:iso:15118:2:2016:MsgBody,CurrentDemandResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEPresentCurrent,"urn:iso:15118:2:2016:MsgBody":EVSEPresentVoltage,"urn:iso:15118:2:2016:MsgBody":EVSEPowerLimitAchieved,"urn:iso:15118:2:2016:MsgBody":EVSECurrentLimitAchieved,"urn:iso:15118:2:2016:MsgBody":EVSEVoltageLimitAchieved,"urn:iso:15118:2:2016:MsgBody":EVSEMaximumPower{0-1},"urn:iso:15118:2:2016:MsgBody":EVSEMaximumCurrent{0-1},"urn:iso:15118:2:2016:MsgBody":EVSEMaximumVoltage{0-1},"urn:iso:15118:2:2016:MsgBody":EVSEID,"urn:iso:15118:2:2016:MsgBody":SAScheduleTupleID{0-1},"urn:iso:15118:2:2016:MsgBody":MeterInfo{0-1},"urn:iso:15118:2:2016:MsgBody":ReceiptRequired{0-1}))',  derivedBy='EXTENSION'.  */
+		struct iso2CurrentDemandResType CurrentDemandRes ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":PreChargeRes, Complex type name='urn:iso:15118:2:2016:MsgBody,PreChargeResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEPresentVoltage))',  derivedBy='EXTENSION'.  */
+		struct iso2PreChargeResType PreChargeRes ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":CableCheckRes, Complex type name='urn:iso:15118:2:2016:MsgBody,CableCheckResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEProcessing))',  derivedBy='EXTENSION'.  */
+		struct iso2CableCheckResType CableCheckRes ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":ChargingStatusRes, Complex type name='urn:iso:15118:2:2016:MsgBody,ChargingStatusResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEID,"urn:iso:15118:2:2016:MsgBody":SAScheduleTupleID{0-1},"urn:iso:15118:2:2016:MsgBody":MeterInfo{0-1},"urn:iso:15118:2:2016:MsgBody":ReceiptRequired{0-1},"urn:iso:15118:2:2016:MsgBody":EVSETargetPower{0-1}))',  derivedBy='EXTENSION'.  */
+		struct iso2ChargingStatusResType ChargingStatusRes ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":CertificateInstallationRes, Complex type name='urn:iso:15118:2:2016:MsgBody,CertificateInstallationResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":SAProvisioningCertificateChain,"urn:iso:15118:2:2016:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2016:MsgBody":ContractSignatureEncryptedPrivateKey,"urn:iso:15118:2:2016:MsgBody":DHpublickey,"urn:iso:15118:2:2016:MsgBody":eMAID))',  derivedBy='EXTENSION'.  */
+		struct iso2CertificateInstallationResType CertificateInstallationRes ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":CertificateUpdateRes, Complex type name='urn:iso:15118:2:2016:MsgBody,CertificateUpdateResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":SAProvisioningCertificateChain,"urn:iso:15118:2:2016:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2016:MsgBody":ContractSignatureEncryptedPrivateKey,"urn:iso:15118:2:2016:MsgBody":DHpublickey,"urn:iso:15118:2:2016:MsgBody":eMAID,"urn:iso:15118:2:2016:MsgBody":RetryCounter{0-1}))',  derivedBy='EXTENSION'.  */
+		struct iso2CertificateUpdateResType CertificateUpdateRes ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":SessionStopRes, Complex type name='urn:iso:15118:2:2016:MsgBody,SessionStopResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1})',  derivedBy='EXTENSION'.  */
+		struct iso2SessionStopResType SessionStopRes ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":MeteringReceiptRes, Complex type name='urn:iso:15118:2:2016:MsgBody,MeteringReceiptResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1})',  derivedBy='EXTENSION'.  */
+		struct iso2MeteringReceiptResType MeteringReceiptRes ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":PowerDeliveryRes, Complex type name='urn:iso:15118:2:2016:MsgBody,PowerDeliveryResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEProcessing))',  derivedBy='EXTENSION'.  */
+		struct iso2PowerDeliveryResType PowerDeliveryRes ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":ChargeParameterDiscoveryRes, Complex type name='urn:iso:15118:2:2016:MsgBody,ChargeParameterDiscoveryResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEProcessing,"urn:iso:15118:2:2016:MsgBody":SAScheduleList{0-1},"urn:iso:15118:2:2016:MsgDataTypes":EVSEEnergyTransferParameter))',  derivedBy='EXTENSION'.  */
+		struct iso2ChargeParameterDiscoveryResType ChargeParameterDiscoveryRes ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":AuthorizationRes, Complex type name='urn:iso:15118:2:2016:MsgBody,AuthorizationResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEProcessing))',  derivedBy='EXTENSION'.  */
+		struct iso2AuthorizationResType AuthorizationRes ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":PaymentDetailsRes, Complex type name='urn:iso:15118:2:2016:MsgBody,PaymentDetailsResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":GenChallenge,"urn:iso:15118:2:2016:MsgBody":EVSETimeStamp))',  derivedBy='EXTENSION'.  */
+		struct iso2PaymentDetailsResType PaymentDetailsRes ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":PaymentServiceSelectionRes, Complex type name='urn:iso:15118:2:2016:MsgBody,PaymentServiceSelectionResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1})',  derivedBy='EXTENSION'.  */
+		struct iso2PaymentServiceSelectionResType PaymentServiceSelectionRes ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":ServiceDetailRes, Complex type name='urn:iso:15118:2:2016:MsgBody,ServiceDetailResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":ServiceID,"urn:iso:15118:2:2016:MsgBody":ServiceParameterList{0-1}))',  derivedBy='EXTENSION'.  */
+		struct iso2ServiceDetailResType ServiceDetailRes ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":ServiceDiscoveryRes, Complex type name='urn:iso:15118:2:2016:MsgBody,ServiceDiscoveryResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":PaymentOptionList,"urn:iso:15118:2:2016:MsgBody":EnergyTransferServiceList,"urn:iso:15118:2:2016:MsgBody":VASList{0-1}))',  derivedBy='EXTENSION'.  */
+		struct iso2ServiceDiscoveryResType ServiceDiscoveryRes ;
+		/* element: "urn:iso:15118:2:2016:MsgBody":SessionSetupRes, Complex type name='urn:iso:15118:2:2016:MsgBody,SessionSetupResType',  base type name='V2GResponseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2016:MsgBody":ResponseCode,"urn:iso:15118:2:2016:MsgBody":EVSEStatus{0-1}),("urn:iso:15118:2:2016:MsgBody":EVSEID,"urn:iso:15118:2:2016:MsgBody":EVSETimeStamp{0-1}))',  derivedBy='EXTENSION'.  */
+		struct iso2SessionSetupResType SessionSetupRes ;
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	};
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */ 
+		unsigned int BodyElement_isUsed:1;
+		unsigned int V2GRequest_isUsed:1;
+		unsigned int DisconnectChargingDeviceReq_isUsed:1;
+		unsigned int ConnectChargingDeviceReq_isUsed:1;
+		unsigned int SystemStatusReq_isUsed:1;
+		unsigned int DC_BidirectionalControlReq_isUsed:1;
+		unsigned int AC_BidirectionalControlReq_isUsed:1;
+		unsigned int VehicleCheckOutReq_isUsed:1;
+		unsigned int VehicleCheckInReq_isUsed:1;
+		unsigned int PowerDemandReq_isUsed:1;
+		unsigned int PairingReq_isUsed:1;
+		unsigned int AlignmentCheckReq_isUsed:1;
+		unsigned int FinePositioningReq_isUsed:1;
+		unsigned int FinePositioningSetupReq_isUsed:1;
+		unsigned int WeldingDetectionReq_isUsed:1;
+		unsigned int CurrentDemandReq_isUsed:1;
+		unsigned int PreChargeReq_isUsed:1;
+		unsigned int CableCheckReq_isUsed:1;
+		unsigned int ChargingStatusReq_isUsed:1;
+		unsigned int CertificateInstallationReq_isUsed:1;
+		unsigned int CertificateUpdateReq_isUsed:1;
+		unsigned int SessionStopReq_isUsed:1;
+		unsigned int MeteringReceiptReq_isUsed:1;
+		unsigned int PowerDeliveryReq_isUsed:1;
+		unsigned int ChargeParameterDiscoveryReq_isUsed:1;
+		unsigned int AuthorizationReq_isUsed:1;
+		unsigned int PaymentDetailsReq_isUsed:1;
+		unsigned int PaymentServiceSelectionReq_isUsed:1;
+		unsigned int ServiceDetailReq_isUsed:1;
+		unsigned int ServiceDiscoveryReq_isUsed:1;
+		unsigned int SessionSetupReq_isUsed:1;
+		unsigned int V2GResponse_isUsed:1;
+		unsigned int DisconnectChargingDeviceRes_isUsed:1;
+		unsigned int ConnectChargingDeviceRes_isUsed:1;
+		unsigned int SystemStatusRes_isUsed:1;
+		unsigned int DC_BidirectionalControlRes_isUsed:1;
+		unsigned int AC_BidirectionalControlRes_isUsed:1;
+		unsigned int VehicleCheckOutRes_isUsed:1;
+		unsigned int VehicleCheckInRes_isUsed:1;
+		unsigned int PowerDemandRes_isUsed:1;
+		unsigned int PairingRes_isUsed:1;
+		unsigned int AlignmentCheckRes_isUsed:1;
+		unsigned int FinePositioningRes_isUsed:1;
+		unsigned int FinePositioningSetupRes_isUsed:1;
+		unsigned int WeldingDetectionRes_isUsed:1;
+		unsigned int CurrentDemandRes_isUsed:1;
+		unsigned int PreChargeRes_isUsed:1;
+		unsigned int CableCheckRes_isUsed:1;
+		unsigned int ChargingStatusRes_isUsed:1;
+		unsigned int CertificateInstallationRes_isUsed:1;
+		unsigned int CertificateUpdateRes_isUsed:1;
+		unsigned int SessionStopRes_isUsed:1;
+		unsigned int MeteringReceiptRes_isUsed:1;
+		unsigned int PowerDeliveryRes_isUsed:1;
+		unsigned int ChargeParameterDiscoveryRes_isUsed:1;
+		unsigned int AuthorizationRes_isUsed:1;
+		unsigned int PaymentDetailsRes_isUsed:1;
+		unsigned int PaymentServiceSelectionRes_isUsed:1;
+		unsigned int ServiceDetailRes_isUsed:1;
+		unsigned int ServiceDiscoveryRes_isUsed:1;
+		unsigned int SessionSetupRes_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2016:MsgDef,#AnonType_V2G_Message',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgDef":Header,"urn:iso:15118:2:2016:MsgDef":Body)',  derivedBy='RESTRICTION'.  */
+struct iso2AnonType_V2G_Message {
+	/* element: "urn:iso:15118:2:2016:MsgDef":Header, Complex type name='urn:iso:15118:2:2016:MsgHeader,MessageHeaderType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgHeader":SessionID,"http://www.w3.org/2000/09/xmldsig#":Signature{0-1})',  derivedBy='RESTRICTION'.  */
+	struct iso2MessageHeaderType Header ;
+	/* element: "urn:iso:15118:2:2016:MsgDef":Body, Complex type name='urn:iso:15118:2:2016:MsgBody,BodyType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2016:MsgBody":BodyElement)',  derivedBy='RESTRICTION'.  */
+	struct iso2BodyType Body ;
+};
+
+
+
+#define iso2EXIDocument_MgmtData_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso2EXIDocument_KeyName_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso2EXIDocument_DigestValue_BYTES_SIZE 350
+#define iso2EXIFragment_stringValue_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso2EXIFragment_PgenCounter_BYTES_SIZE 350
+#define iso2EXIFragment_SalesTariffDescription_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2016:MsgDataTypes,tariffDescriptionType is 32 */
+#define iso2EXIFragment_SessionID_BYTES_SIZE 8 /* XML schema facet maxLength for urn:iso:15118:2:2016:MsgDataTypes,sessionIDType is 8 */
+#define iso2EXIFragment_XPath_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso2EXIFragment_MgmtData_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso2EXIFragment_OEMProvisioningCert_BYTES_SIZE 800 /* XML schema facet maxLength for urn:iso:15118:2:2016:MsgDataTypes,certificateType is 800 */
+#define iso2EXIFragment_P_BYTES_SIZE 350
+#define iso2EXIFragment_Q_BYTES_SIZE 350
+#define iso2EXIFragment_X509SubjectName_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso2EXIFragment_G_BYTES_SIZE 350
+#define iso2EXIFragment_J_BYTES_SIZE 350
+#define iso2EXIFragment_Y_BYTES_SIZE 350
+#define iso2EXIFragment_DigestValue_BYTES_SIZE 350
+#define iso2EXIFragment_EVCCID_BYTES_SIZE 6 /* XML schema facet maxLength for urn:iso:15118:2:2016:MsgDataTypes,evccIDType is 6 */
+#define iso2EXIFragment_PGPKeyID_BYTES_SIZE 350
+#define iso2EXIFragment_KeyName_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso2EXIFragment_X509SKI_BYTES_SIZE 350
+#define iso2EXIFragment_Certificate_BYTES_SIZE 800 /* XML schema facet maxLength for urn:iso:15118:2:2016:MsgDataTypes,certificateType is 800 */
+#define iso2EXIFragment_Modulus_BYTES_SIZE 350
+#define iso2EXIFragment_SigMeterReading_BYTES_SIZE 64 /* XML schema facet maxLength for urn:iso:15118:2:2016:MsgDataTypes,sigMeterReadingType is 64 */
+#define iso2EXIFragment_Exponent_BYTES_SIZE 350
+#define iso2EXIFragment_PGPKeyPacket_BYTES_SIZE 350
+#define iso2EXIFragment_Seed_BYTES_SIZE 350
+#define iso2EXIFragment_MeterID_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2016:MsgDataTypes,meterIDType is 32 */
+#define iso2EXIFragment_X509CRL_BYTES_SIZE 350
+#define iso2EXIFragment_SPKISexp_BYTES_SIZE 350
+#define iso2EXIFragment_X509Certificate_BYTES_SIZE 350
+#define iso2EXIFragment_EVSEID_CHARACTERS_SIZE 37 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2016:MsgDataTypes,evseIDType is 37 */
+#define iso2EXIFragment_GenChallenge_BYTES_SIZE 16 /* XML schema facet length for urn:iso:15118:2:2016:MsgDataTypes,genChallengeType is 16 */
+#define iso2EXIFragment_GAID_CHARACTERS_SIZE 50 + EXTRA_CHAR
+#define iso2EXIFragment_X509IssuerName_CHARACTERS_SIZE 50 + EXTRA_CHAR
+
+
+/* Global elements of EXI Document */
+struct iso2EXIDocument {
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	union {
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */ 
+	struct iso2AnonType_V2G_Message V2G_Message ;
+	struct iso2ServiceDiscoveryReqType ServiceDiscoveryReq ;
+	struct iso2ServiceDiscoveryResType ServiceDiscoveryRes ;
+	struct iso2FinePositioningReqType FinePositioningReq ;
+	struct iso2FinePositioningResType FinePositioningRes ;
+	struct iso2DisconnectChargingDeviceReqType DisconnectChargingDeviceReq ;
+	struct iso2DisconnectChargingDeviceResType DisconnectChargingDeviceRes ;
+	struct iso2PowerDemandReqType PowerDemandReq ;
+	struct iso2MeteringReceiptReqType MeteringReceiptReq ;
+	struct iso2PaymentDetailsReqType PaymentDetailsReq ;
+	struct iso2PowerDemandResType PowerDemandRes ;
+	struct iso2MeteringReceiptResType MeteringReceiptRes ;
+	struct iso2PaymentDetailsResType PaymentDetailsRes ;
+	struct iso2SessionSetupReqType SessionSetupReq ;
+	struct iso2SessionSetupResType SessionSetupRes ;
+	struct iso2CableCheckReqType CableCheckReq ;
+	struct iso2CableCheckResType CableCheckRes ;
+	struct iso2CertificateInstallationReqType CertificateInstallationReq ;
+	struct iso2CertificateInstallationResType CertificateInstallationRes ;
+	struct iso2SystemStatusReqType SystemStatusReq ;
+	struct iso2SystemStatusResType SystemStatusRes ;
+	struct iso2PairingReqType PairingReq ;
+	struct iso2WeldingDetectionReqType WeldingDetectionReq ;
+	struct iso2ConnectChargingDeviceReqType ConnectChargingDeviceReq ;
+	struct iso2PairingResType PairingRes ;
+	struct iso2WeldingDetectionResType WeldingDetectionRes ;
+	struct iso2ConnectChargingDeviceResType ConnectChargingDeviceRes ;
+	struct iso2CertificateUpdateReqType CertificateUpdateReq ;
+	struct iso2CertificateUpdateResType CertificateUpdateRes ;
+	struct iso2PaymentServiceSelectionReqType PaymentServiceSelectionReq ;
+	struct iso2PowerDeliveryReqType PowerDeliveryReq ;
+	struct iso2PaymentServiceSelectionResType PaymentServiceSelectionRes ;
+	struct iso2PowerDeliveryResType PowerDeliveryRes ;
+	struct iso2ChargingStatusReqType ChargingStatusReq ;
+	struct iso2ChargingStatusResType ChargingStatusRes ;
+	struct iso2BodyBaseType BodyElement ;
+	struct iso2AC_BidirectionalControlReqType AC_BidirectionalControlReq ;
+	struct iso2AC_BidirectionalControlResType AC_BidirectionalControlRes ;
+	struct iso2VehicleCheckInReqType VehicleCheckInReq ;
+	struct iso2CurrentDemandReqType CurrentDemandReq ;
+	struct iso2VehicleCheckInResType VehicleCheckInRes ;
+	struct iso2PreChargeReqType PreChargeReq ;
+	struct iso2CurrentDemandResType CurrentDemandRes ;
+	struct iso2PreChargeResType PreChargeRes ;
+	struct iso2AlignmentCheckReqType AlignmentCheckReq ;
+	struct iso2BodyBaseType V2GRequest ;
+	struct iso2SessionStopReqType SessionStopReq ;
+	struct iso2AuthorizationReqType AuthorizationReq ;
+	struct iso2AlignmentCheckResType AlignmentCheckRes ;
+	struct iso2SessionStopResType SessionStopRes ;
+	struct iso2AuthorizationResType AuthorizationRes ;
+	struct iso2VehicleCheckOutReqType VehicleCheckOutReq ;
+	struct iso2ChargeParameterDiscoveryReqType ChargeParameterDiscoveryReq ;
+	struct iso2VehicleCheckOutResType VehicleCheckOutRes ;
+	struct iso2ChargeParameterDiscoveryResType ChargeParameterDiscoveryRes ;
+	struct iso2V2GResponseType V2GResponse ;
+	struct iso2FinePositioningSetupReqType FinePositioningSetupReq ;
+	struct iso2FinePositioningSetupResType FinePositioningSetupRes ;
+	struct iso2ServiceDetailReqType ServiceDetailReq ;
+	struct iso2DC_BidirectionalControlReqType DC_BidirectionalControlReq ;
+	struct iso2ServiceDetailResType ServiceDetailRes ;
+	struct iso2DC_BidirectionalControlResType DC_BidirectionalControlRes ;
+	struct iso2LFA_EVFinePositioningSetupParametersType LFA_EVFinePositioningSetupParameters ;
+	struct iso2MV_EVSEFinePositioningParametersType MV_EVSEFinePositioningParameters ;
+	struct iso2RelativeTimeIntervalType RelativeTimeInterval ;
+	struct iso2SalesTariffEntryType SalesTariffEntry ;
+	struct iso2LFA_EVSEFinePositioningSetupParametersType LFA_EVSEFinePositioningSetupParameters ;
+	struct iso2AC_EVChargeParameterType AC_EVChargeParameter ;
+	struct iso2MV_EVSEFinePositioningSetupParametersType MV_EVSEFinePositioningSetupParameters ;
+	struct iso2EVEnergyTransferParameterType EVEnergyTransferParameter ;
+	struct iso2DC_EVSEBidirectionalParameterType DC_EVSEBidirectionalParameter ;
+	struct iso2SAScheduleListType SAScheduleList ;
+	struct iso2EVSEFinePositioningSetupParametersType EVSEFinePositioningSetupParameters ;
+	struct iso2Generic_EVSEFinePositioningParametersType Generic_EVSEFinePositioningParameters ;
+	struct iso2DC_EVChargeParameterType DC_EVChargeParameter ;
+	struct iso2DC_EVSEChargeParameterType DC_EVSEChargeParameter ;
+	struct iso2LFA_EVFinePositioningParametersType LFA_EVFinePositioningParameters ;
+	struct iso2EVFinePositioningSetupParametersType EVFinePositioningSetupParameters ;
+	struct iso2AC_EVSEBidirectionalParameterType AC_EVSEBidirectionalParameter ;
+	struct iso2EVFinePositioningParametersType EVFinePositioningParameters ;
+	struct iso2WPT_EVChargeParameterType WPT_EVChargeParameter ;
+	struct iso2LFA_EVSEFinePositioningParametersType LFA_EVSEFinePositioningParameters ;
+	struct iso2EVSEEnergyTransferParameterType EVSEEnergyTransferParameter ;
+	struct iso2AC_EVBidirectionalParameterType AC_EVBidirectionalParameter ;
+	struct iso2EVSEFinePositioningParametersType EVSEFinePositioningParameters ;
+	struct iso2WPT_EVSEChargeParameterType WPT_EVSEChargeParameter ;
+	struct iso2AC_EVSEChargeParameterType AC_EVSEChargeParameter ;
+	struct iso2PMaxScheduleEntryType PMaxScheduleEntry ;
+	struct iso2Generic_EVFinePositioningParametersType Generic_EVFinePositioningParameters ;
+	struct iso2DC_EVBidirectionalParameterType DC_EVBidirectionalParameter ;
+	struct iso2SignaturePropertyType SignatureProperty ;
+	struct iso2DSAKeyValueType DSAKeyValue ;
+	struct iso2SignaturePropertiesType SignatureProperties ;
+	struct iso2KeyValueType KeyValue ;
+	struct iso2TransformsType Transforms ;
+	struct iso2DigestMethodType DigestMethod ;
+	struct iso2SignatureType Signature ;
+	struct iso2RetrievalMethodType RetrievalMethod ;
+	struct iso2ManifestType Manifest ;
+	struct iso2ReferenceType Reference ;
+	struct iso2CanonicalizationMethodType CanonicalizationMethod ;
+	struct iso2RSAKeyValueType RSAKeyValue ;
+	struct iso2TransformType Transform ;
+	struct iso2PGPDataType PGPData ;
+	struct {
+		exi_string_character_t characters[iso2EXIDocument_MgmtData_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  MgmtData ;
+	struct iso2SignatureMethodType SignatureMethod ;
+	struct iso2KeyInfoType KeyInfo ;
+	struct iso2SPKIDataType SPKIData ;
+	struct iso2X509DataType X509Data ;
+	struct iso2SignatureValueType SignatureValue ;
+	struct {
+		exi_string_character_t characters[iso2EXIDocument_KeyName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  KeyName ;
+	struct {
+		uint8_t bytes[iso2EXIDocument_DigestValue_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  DigestValue ;
+	struct iso2SignedInfoType SignedInfo ;
+	struct iso2ObjectType Object ;
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	};
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */ 
+	unsigned int V2G_Message_isUsed:1;
+	unsigned int ServiceDiscoveryReq_isUsed:1;
+	unsigned int ServiceDiscoveryRes_isUsed:1;
+	unsigned int FinePositioningReq_isUsed:1;
+	unsigned int FinePositioningRes_isUsed:1;
+	unsigned int DisconnectChargingDeviceReq_isUsed:1;
+	unsigned int DisconnectChargingDeviceRes_isUsed:1;
+	unsigned int PowerDemandReq_isUsed:1;
+	unsigned int MeteringReceiptReq_isUsed:1;
+	unsigned int PaymentDetailsReq_isUsed:1;
+	unsigned int PowerDemandRes_isUsed:1;
+	unsigned int MeteringReceiptRes_isUsed:1;
+	unsigned int PaymentDetailsRes_isUsed:1;
+	unsigned int SessionSetupReq_isUsed:1;
+	unsigned int SessionSetupRes_isUsed:1;
+	unsigned int CableCheckReq_isUsed:1;
+	unsigned int CableCheckRes_isUsed:1;
+	unsigned int CertificateInstallationReq_isUsed:1;
+	unsigned int CertificateInstallationRes_isUsed:1;
+	unsigned int SystemStatusReq_isUsed:1;
+	unsigned int SystemStatusRes_isUsed:1;
+	unsigned int PairingReq_isUsed:1;
+	unsigned int WeldingDetectionReq_isUsed:1;
+	unsigned int ConnectChargingDeviceReq_isUsed:1;
+	unsigned int PairingRes_isUsed:1;
+	unsigned int WeldingDetectionRes_isUsed:1;
+	unsigned int ConnectChargingDeviceRes_isUsed:1;
+	unsigned int CertificateUpdateReq_isUsed:1;
+	unsigned int CertificateUpdateRes_isUsed:1;
+	unsigned int PaymentServiceSelectionReq_isUsed:1;
+	unsigned int PowerDeliveryReq_isUsed:1;
+	unsigned int PaymentServiceSelectionRes_isUsed:1;
+	unsigned int PowerDeliveryRes_isUsed:1;
+	unsigned int ChargingStatusReq_isUsed:1;
+	unsigned int ChargingStatusRes_isUsed:1;
+	unsigned int BodyElement_isUsed:1;
+	unsigned int AC_BidirectionalControlReq_isUsed:1;
+	unsigned int AC_BidirectionalControlRes_isUsed:1;
+	unsigned int VehicleCheckInReq_isUsed:1;
+	unsigned int CurrentDemandReq_isUsed:1;
+	unsigned int VehicleCheckInRes_isUsed:1;
+	unsigned int PreChargeReq_isUsed:1;
+	unsigned int CurrentDemandRes_isUsed:1;
+	unsigned int PreChargeRes_isUsed:1;
+	unsigned int AlignmentCheckReq_isUsed:1;
+	unsigned int V2GRequest_isUsed:1;
+	unsigned int SessionStopReq_isUsed:1;
+	unsigned int AuthorizationReq_isUsed:1;
+	unsigned int AlignmentCheckRes_isUsed:1;
+	unsigned int SessionStopRes_isUsed:1;
+	unsigned int AuthorizationRes_isUsed:1;
+	unsigned int VehicleCheckOutReq_isUsed:1;
+	unsigned int ChargeParameterDiscoveryReq_isUsed:1;
+	unsigned int VehicleCheckOutRes_isUsed:1;
+	unsigned int ChargeParameterDiscoveryRes_isUsed:1;
+	unsigned int V2GResponse_isUsed:1;
+	unsigned int FinePositioningSetupReq_isUsed:1;
+	unsigned int FinePositioningSetupRes_isUsed:1;
+	unsigned int ServiceDetailReq_isUsed:1;
+	unsigned int DC_BidirectionalControlReq_isUsed:1;
+	unsigned int ServiceDetailRes_isUsed:1;
+	unsigned int DC_BidirectionalControlRes_isUsed:1;
+	unsigned int LFA_EVFinePositioningSetupParameters_isUsed:1;
+	unsigned int MV_EVSEFinePositioningParameters_isUsed:1;
+	unsigned int RelativeTimeInterval_isUsed:1;
+	unsigned int SalesTariffEntry_isUsed:1;
+	unsigned int LFA_EVSEFinePositioningSetupParameters_isUsed:1;
+	unsigned int AC_EVChargeParameter_isUsed:1;
+	unsigned int MV_EVSEFinePositioningSetupParameters_isUsed:1;
+	unsigned int EVEnergyTransferParameter_isUsed:1;
+	unsigned int DC_EVSEBidirectionalParameter_isUsed:1;
+	unsigned int SAScheduleList_isUsed:1;
+	unsigned int EVSEFinePositioningSetupParameters_isUsed:1;
+	unsigned int Generic_EVSEFinePositioningParameters_isUsed:1;
+	unsigned int DC_EVChargeParameter_isUsed:1;
+	unsigned int DC_EVSEChargeParameter_isUsed:1;
+	unsigned int LFA_EVFinePositioningParameters_isUsed:1;
+	unsigned int EVFinePositioningSetupParameters_isUsed:1;
+	unsigned int AC_EVSEBidirectionalParameter_isUsed:1;
+	unsigned int EVFinePositioningParameters_isUsed:1;
+	unsigned int WPT_EVChargeParameter_isUsed:1;
+	unsigned int LFA_EVSEFinePositioningParameters_isUsed:1;
+	unsigned int EVSEEnergyTransferParameter_isUsed:1;
+	unsigned int AC_EVBidirectionalParameter_isUsed:1;
+	unsigned int EVSEFinePositioningParameters_isUsed:1;
+	unsigned int WPT_EVSEChargeParameter_isUsed:1;
+	unsigned int AC_EVSEChargeParameter_isUsed:1;
+	unsigned int PMaxScheduleEntry_isUsed:1;
+	unsigned int Generic_EVFinePositioningParameters_isUsed:1;
+	unsigned int DC_EVBidirectionalParameter_isUsed:1;
+	unsigned int SignatureProperty_isUsed:1;
+	unsigned int DSAKeyValue_isUsed:1;
+	unsigned int SignatureProperties_isUsed:1;
+	unsigned int KeyValue_isUsed:1;
+	unsigned int Transforms_isUsed:1;
+	unsigned int DigestMethod_isUsed:1;
+	unsigned int Signature_isUsed:1;
+	unsigned int RetrievalMethod_isUsed:1;
+	unsigned int Manifest_isUsed:1;
+	unsigned int Reference_isUsed:1;
+	unsigned int CanonicalizationMethod_isUsed:1;
+	unsigned int RSAKeyValue_isUsed:1;
+	unsigned int Transform_isUsed:1;
+	unsigned int PGPData_isUsed:1;
+	unsigned int MgmtData_isUsed:1;
+	unsigned int SignatureMethod_isUsed:1;
+	unsigned int KeyInfo_isUsed:1;
+	unsigned int SPKIData_isUsed:1;
+	unsigned int X509Data_isUsed:1;
+	unsigned int SignatureValue_isUsed:1;
+	unsigned int KeyName_isUsed:1;
+	unsigned int DigestValue_isUsed:1;
+	unsigned int SignedInfo_isUsed:1;
+	unsigned int Object_isUsed:1;
+
+
+	int _warning_;
+};
+
+
+#if DEPLOY_ISO2_CODEC_FRAGMENT == SUPPORT_YES
+/* Possible elements of EXI Fragment */
+struct iso2EXIFragment {
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	union {
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */ 
+	struct iso2PhysicalValueType EVMaximumVoltage ;
+	uint32_t FrequencyChannel ;
+	iso2EVSEProcessingType EVProcessing ;
+	int BulkChargingComplete ;
+	iso2parkingMethodType ParkingMethod ;
+	uint8_t SAScheduleTupleID ;
+	uint16_t Distance ;
+	struct iso2ParameterSetType ParameterSet ;
+	struct iso2PhysicalValueType EVMinimumDischargeCurrent ;
+	uint8_t SignalSeparationTime ;
+	struct iso2EVSEEnergyTransferParameterType EVSEEnergyTransferParameter ;
+	struct iso2PhysicalValueType EVSEMaximumVoltage ;
+	struct iso2DC_EVSEBidirectionalParameterType DC_EVSEBidirectionalParameter ;
+	iso2chargingSessionType ChargingSession ;
+	struct iso2SubCertificatesType SubCertificates ;
+	struct iso2RetrievalMethodType RetrievalMethod ;
+	struct iso2MagneticVectorSetupListType MagneticVectorSetupList ;
+	struct iso2ParameterSetType PairingParameters ;
+	struct iso2PhysicalValueType EVSEMinimumPower ;
+	struct iso2AC_BidirectionalControlReqType AC_BidirectionalControlReq ;
+	struct iso2CostType Cost ;
+	struct iso2AC_BidirectionalControlResType AC_BidirectionalControlRes ;
+	struct iso2SalesTariffType BuyBackTariff ;
+	int16_t XCoordinate ;
+	iso2EVCheckOutStatusType EVSECheckOutStatus ;
+	struct {
+		exi_string_character_t characters[iso2EXIFragment_stringValue_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  stringValue ;
+	int16_t RetryCounter ;
+	struct iso2PhysicalValueType EVSEMaximumDischargeCurrent ;
+	struct iso2SensorType Sensor ;
+	uint64_t MeterReadingCharged ;
+	int64_t HMACOutputLength ;
+	struct iso2V2GResponseType V2GResponse ;
+	struct iso2PhysicalValueType EVMinimumVoltage ;
+	struct iso2PhysicalValueType EVMinimumEnergyRequest ;
+	struct iso2RelativeTimeIntervalType RelativeTimeInterval ;
+	struct iso2WPT_EVChargeParameterType WPT_EVChargeParameter ;
+	struct iso2SAScheduleTupleType SAScheduleTuple ;
+	uint16_t ServiceID ;
+	struct {
+		uint8_t bytes[iso2EXIFragment_PgenCounter_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  PgenCounter ;
+	struct {
+		exi_string_character_t characters[iso2EXIFragment_SalesTariffDescription_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  SalesTariffDescription ;
+	struct iso2PhysicalValueType AngleGAtoVA ;
+	int boolValue ;
+	struct iso2PhysicalValueType EVMaximumDischargeCurrent ;
+	uint16_t NotificationMaxDelay ;
+	struct iso2PhysicalValueType EVSEMaximumDischargePower ;
+	struct iso2PGPDataType PGPData ;
+	struct iso2PhysicalValueType EVSEMaximumChargePower ;
+	struct {
+		uint8_t bytes[iso2EXIFragment_SessionID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  SessionID ;
+	struct iso2PhysicalValueType EVSEEnergyToBeDelivered ;
+	struct iso2PhysicalValueType EVMaximumPower ;
+	struct iso2PhysicalValueType EVMaximumCurrent ;
+	struct iso2RSAKeyValueType RSAKeyValue ;
+	struct iso2PhysicalValueType EVSENominalVoltage ;
+	struct iso2MagneticVectorType MagneticVector ;
+	struct {
+		exi_string_character_t characters[iso2EXIFragment_XPath_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  XPath ;
+	struct iso2SignatureType Signature ;
+	iso2electricalChargingDeviceStatusType EVElectricalChargingDeviceStatus ;
+	iso2EVSEProcessingType EVSEProcessing ;
+	iso2FODStatusType FODStatus ;
+	struct iso2PowerDeliveryResType PowerDeliveryRes ;
+	struct iso2SessionStopResType SessionStopRes ;
+	struct iso2WPT_EVSEChargeParameterType WPT_EVSEChargeParameter ;
+	iso2responseCodeType ResponseCode ;
+	struct iso2PhysicalValueType EVTargetEnergyRequest ;
+	struct iso2FinePositioningSetupReqType FinePositioningSetupReq ;
+	struct iso2PhysicalValueType EVSEPresentCurrent ;
+	struct iso2FinePositioningSetupResType FinePositioningSetupRes ;
+	struct iso2PMaxScheduleEntryType ProfileEntry ;
+	struct {
+		exi_string_character_t characters[iso2EXIFragment_MgmtData_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  MgmtData ;
+	struct iso2CertificateChainType SAProvisioningCertificateChain ;
+	struct iso2PowerDeliveryReqType PowerDeliveryReq ;
+	struct iso2SessionStopReqType SessionStopReq ;
+	int ReceiptRequired ;
+	struct iso2ChargingProfileType ChargingProfile ;
+	uint16_t MaxSupportingPoints ;
+	uint32_t start ;
+	struct iso2PhysicalValueType EVMinimumChargePower ;
+	struct iso2PhysicalValueType amount ;
+	struct iso2PreChargeReqType PreChargeReq ;
+	struct {
+		uint8_t bytes[iso2EXIFragment_OEMProvisioningCert_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  OEMProvisioningCert ;
+	uint32_t PackageIndex ;
+	struct iso2PreChargeResType PreChargeRes ;
+	struct {
+		uint8_t bytes[iso2EXIFragment_P_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  P ;
+	struct {
+		uint8_t bytes[iso2EXIFragment_Q_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Q ;
+	struct {
+		exi_string_character_t characters[iso2EXIFragment_X509SubjectName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  X509SubjectName ;
+	struct {
+		uint8_t bytes[iso2EXIFragment_G_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  G ;
+	struct {
+		uint8_t bytes[iso2EXIFragment_J_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  J ;
+	struct iso2CertificateChainType ContractSignatureCertChain ;
+	struct iso2MV_EVSEFinePositioningSetupParametersType MV_EVSEFinePositioningSetupParameters ;
+	struct iso2PhysicalValueType EVSEMinimumDischargeCurrent ;
+	struct iso2PhysicalValueType EVMaximumChargeCurrent ;
+	uint16_t AlignmentOffset ;
+	struct {
+		uint8_t bytes[iso2EXIFragment_Y_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Y ;
+	int8_t RemainingTimeToTargetSOC ;
+	struct {
+		uint8_t bytes[iso2EXIFragment_DigestValue_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  DigestValue ;
+	struct iso2SensorMeasurementsType SensorMeasurements ;
+	struct iso2SalesTariffType SalesTariff ;
+	struct {
+		uint8_t bytes[iso2EXIFragment_EVCCID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  EVCCID ;
+	struct iso2PhysicalValueType EVSEMaximumPower ;
+	struct iso2TargetPositionType TargetOffset ;
+	struct iso2ParameterSetType PowerDemandParameters ;
+	struct {
+		uint8_t bytes[iso2EXIFragment_PGPKeyID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  PGPKeyID ;
+	struct iso2DisconnectChargingDeviceReqType DisconnectChargingDeviceReq ;
+	struct iso2DisconnectChargingDeviceResType DisconnectChargingDeviceRes ;
+	struct iso2DSAKeyValueType DSAKeyValue ;
+	struct iso2SalesTariffEntryType SalesTariffEntry ;
+	struct iso2CertificateInstallationResType CertificateInstallationRes ;
+	struct iso2CanonicalizationMethodType CanonicalizationMethod ;
+	struct iso2Generic_EVFinePositioningParametersType Generic_EVFinePositioningParameters ;
+	struct iso2PhysicalValueType EVSEMinimumVoltage ;
+	struct iso2SystemStatusResType SystemStatusRes ;
+	struct iso2PhysicalValueType EVSEOutputPower ;
+	struct iso2SignedInfoType SignedInfo ;
+	struct iso2PhysicalValueType EVMinimumChargeCurrent ;
+	iso2costKindType costKind ;
+	struct iso2SystemStatusReqType SystemStatusReq ;
+	struct iso2CableCheckReqType CableCheckReq ;
+	uint8_t NumEPriceLevels ;
+	int EVSEVoltageLimitAchieved ;
+	uint8_t PackageSeparationTime ;
+	struct iso2CableCheckResType CableCheckRes ;
+	iso2EVCheckInStatusType EVCheckInStatus ;
+	struct iso2PMaxScheduleType PMaxDischargeSchedule ;
+	struct iso2PhysicalValueType EVMinimumPower ;
+	struct iso2PhysicalValueType ChargingPerformance ;
+	struct iso2AlignmentCheckReqType AlignmentCheckReq ;
+	iso2mechanicalChargingDeviceStatusType EVMechanicalChargingDeviceStatus ;
+	uint16_t VehicleSpace ;
+	struct iso2AlignmentCheckResType AlignmentCheckRes ;
+	struct iso2PhysicalValueType EVMinimumDischargePower ;
+	int8_t RemainingTimeToMinimumSOC ;
+	struct iso2AuthorizationResType AuthorizationRes ;
+	struct iso2CertificateInstallationReqType CertificateInstallationReq ;
+	struct iso2PaymentDetailsReqType PaymentDetailsReq ;
+	struct iso2PaymentDetailsResType PaymentDetailsRes ;
+	struct iso2AuthorizationReqType AuthorizationReq ;
+	struct iso2PhysicalValueType EVTargetCurrent ;
+	struct iso2SessionSetupReqType SessionSetupReq ;
+	struct iso2SessionSetupResType SessionSetupRes ;
+	struct iso2PhysicalValueType EVSENominalFrequency ;
+	struct iso2MessageHeaderType Header ;
+	uint8_t NumberOfSensors ;
+	int64_t EVSETimeStamp ;
+	int16_t MeterStatus ;
+	struct iso2MV_EVSEFinePositioningParametersType MV_EVSEFinePositioningParameters ;
+	iso2chargeProgressType ChargeProgress ;
+	struct {
+		exi_string_character_t characters[iso2EXIFragment_KeyName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  KeyName ;
+	struct iso2PMaxScheduleType PMaxSchedule ;
+	uint32_t duration ;
+	int8_t RemainingTimeToBulkSOC ;
+	struct iso2CartesianCoordinatesType SensorOrientation ;
+	struct iso2PhysicalValueType EVSEMaximumChargeCurrent ;
+	struct iso2LFA_EVSEFinePositioningParametersType LFA_EVSEFinePositioningParameters ;
+	struct iso2VehicleCheckInResType VehicleCheckInRes ;
+	struct iso2PMaxScheduleEntryType PMaxScheduleEntry ;
+	struct iso2SAScheduleListType SAScheduleList ;
+	struct {
+		uint8_t bytes[iso2EXIFragment_X509SKI_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  X509SKI ;
+	struct iso2PaymentOptionListType PaymentOptionList ;
+	struct iso2ContractSignatureEncryptedPrivateKeyType ContractSignatureEncryptedPrivateKey ;
+	struct iso2VehicleCheckInReqType VehicleCheckInReq ;
+	struct {
+		uint8_t bytes[iso2EXIFragment_Certificate_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Certificate ;
+	uint64_t CheckOutTime ;
+	int8_t CurrentSOC ;
+	int16_t ZCoordinate ;
+	uint16_t MeasurementData ;
+	struct iso2PairingResType PairingRes ;
+	struct iso2PhysicalValueType EVSEMaximumCurrent ;
+	struct iso2LFA_EVFinePositioningParametersType LFA_EVFinePositioningParameters ;
+	struct iso2ParameterSetType AlignmentCheckParameters ;
+	int8_t EffectiveRadiatedPower ;
+	struct iso2PairingReqType PairingReq ;
+	int16_t Value ;
+	int8_t byteValue ;
+	struct iso2CurrentDemandReqType CurrentDemandReq ;
+	struct iso2Generic_EVSEFinePositioningParametersType Generic_EVSEFinePositioningParameters ;
+	struct iso2CurrentDemandResType CurrentDemandRes ;
+	struct iso2AC_EVBidirectionalParameterType AC_EVBidirectionalParameter ;
+	struct {
+		uint8_t bytes[iso2EXIFragment_Modulus_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Modulus ;
+	struct iso2SelectedServiceType SelectedEnergyTransferService ;
+	struct iso2PhysicalValueType startValue ;
+	struct iso2SelectedServiceListType SelectedVASList ;
+	struct iso2ChargeParameterDiscoveryReqType ChargeParameterDiscoveryReq ;
+	struct iso2ChargeParameterDiscoveryResType ChargeParameterDiscoveryRes ;
+	struct {
+		uint8_t bytes[iso2EXIFragment_SigMeterReading_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  SigMeterReading ;
+	int8_t TargetSOC ;
+	struct iso2EVSEStatusType EVSEStatus ;
+	struct iso2PhysicalValueType EVSEMinimumChargeCurrent ;
+	iso2electricalChargingDeviceStatusType EVSEElectricalChargingDeviceStatus ;
+	int64_t X509SerialNumber ;
+	iso2paymentOptionType PaymentOption ;
+	struct iso2TransformsType Transforms ;
+	struct iso2PhysicalValueType EVSEPeakCurrentRipple ;
+	struct iso2ConsumptionCostType ConsumptionCost ;
+	struct iso2EVSEFinePositioningSetupParametersType EVSEFinePositioningSetupParameters ;
+	uint8_t EPriceLevel ;
+	struct {
+		uint8_t bytes[iso2EXIFragment_Exponent_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Exponent ;
+	struct iso2X509IssuerSerialType X509IssuerSerial ;
+	struct iso2SPKIDataType SPKIData ;
+	struct iso2MagneticVectorListType MagneticVectorList ;
+	struct iso2EVSEFinePositioningParametersType EVSEFinePositioningParameters ;
+	struct iso2PhysicalValueType EVTargetPower ;
+	struct iso2SensorPackageListType SensorPackageList ;
+	uint32_t DepartureTime ;
+	int InletHot ;
+	struct iso2PhysicalValueType EVPresentActivePower ;
+	struct iso2X509DataType X509Data ;
+	int16_t YCoordinate ;
+	struct iso2KeyValueType KeyValue ;
+	struct iso2DisplayParametersType DisplayParameters ;
+	int EVSEPowerLimitAchieved ;
+	struct iso2BodyType Body ;
+	struct iso2DC_EVChargeParameterType DC_EVChargeParameter ;
+	struct iso2ServiceType Service ;
+	struct iso2SignaturePropertyType SignatureProperty ;
+	struct {
+		uint8_t bytes[iso2EXIFragment_PGPKeyPacket_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  PGPKeyPacket ;
+	struct {
+		uint8_t bytes[iso2EXIFragment_Seed_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Seed ;
+	struct iso2LFA_EVFinePositioningSetupParametersType LFA_EVFinePositioningSetupParameters ;
+	struct iso2MinimumPMaxRequestType MinimumPMaxRequest ;
+	struct iso2FinePositioningReqType FinePositioningReq ;
+	struct iso2ServiceListType EnergyTransferServiceList ;
+	struct iso2FinePositioningResType FinePositioningRes ;
+	struct iso2AC_EVSEBidirectionalParameterType AC_EVSEBidirectionalParameter ;
+	int FreeService ;
+	struct iso2AC_EVSEChargeParameterType AC_EVSEChargeParameter ;
+	uint8_t SensorID ;
+	struct iso2PhysicalValueType EVSECurrentRegulationTolerance ;
+	iso2mechanicalChargingDeviceStatusType EVSEMechanicalChargingDeviceStatus ;
+	struct iso2EVEnergyTransferParameterType EVEnergyTransferParameter ;
+	uint8_t SignalPulseDuration ;
+	int16_t shortValue ;
+	struct iso2ManifestType Manifest ;
+	struct iso2DC_EVSEChargeParameterType DC_EVSEChargeParameter ;
+	struct iso2MeteringReceiptReqType MeteringReceiptReq ;
+	struct {
+		exi_string_character_t characters[iso2EXIFragment_MeterID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  MeterID ;
+	struct iso2MeteringReceiptResType MeteringReceiptRes ;
+	struct iso2ServiceDiscoveryReqType ServiceDiscoveryReq ;
+	uint8_t SalesTariffID ;
+	struct iso2ServiceDiscoveryResType ServiceDiscoveryRes ;
+	struct {
+		uint8_t bytes[iso2EXIFragment_X509CRL_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  X509CRL ;
+	struct iso2MagneticVectorSetupType MagneticVectorSetup ;
+	struct iso2DigestMethodType DigestMethod ;
+	struct {
+		uint8_t bytes[iso2EXIFragment_SPKISexp_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  SPKISexp ;
+	uint64_t MeterReadingDischarged ;
+	struct iso2MeasurementDataListType MeasurementDataList ;
+	struct iso2SignaturePropertiesType SignatureProperties ;
+	struct iso2CartesianCoordinatesType SensorPosition ;
+	struct iso2LFA_EVSEFinePositioningSetupParametersType LFA_EVSEFinePositioningSetupParameters ;
+	struct iso2EMAIDType eMAID ;
+	struct iso2SensorPackageType SensorPackage ;
+	iso2EVCheckOutStatusType EVCheckOutStatus ;
+	struct {
+		uint8_t bytes[iso2EXIFragment_X509Certificate_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  X509Certificate ;
+	struct iso2X509IssuerSerialType RootCertificateID ;
+	struct iso2DC_BidirectionalControlReqType DC_BidirectionalControlReq ;
+	struct iso2PhysicalValueType EVSEPresentVoltage ;
+	struct iso2DC_BidirectionalControlResType DC_BidirectionalControlRes ;
+	struct iso2ServiceListType VASList ;
+	struct iso2MeterInfoType MeterInfo ;
+	struct iso2PhysicalValueType EVSETargetReactivePower ;
+	struct iso2ChargingStatusReqType ChargingStatusReq ;
+	struct iso2ParameterSetType GenericParameters ;
+	struct iso2ChargingStatusResType ChargingStatusRes ;
+	struct iso2PhysicalValueType EVMaximumChargePower ;
+	int8_t BulkSOC ;
+	uint8_t NumberOfSignalPackages ;
+	uint16_t ParameterSetID ;
+	struct iso2PhysicalValueType PMax ;
+	struct iso2PhysicalValueType EVMaximumEnergyRequest ;
+	iso2EVOperationType EVOperation ;
+	struct iso2CertificateUpdateResType CertificateUpdateRes ;
+	int ChargingComplete ;
+	struct iso2ListOfRootCertificateIDsType ListOfRootCertificateIDs ;
+	struct iso2PhysicalValueType RotationVAtoGA ;
+	struct iso2PhysicalValueType EVTargetVoltage ;
+	struct iso2CertificateUpdateReqType CertificateUpdateReq ;
+	struct iso2ConnectChargingDeviceResType ConnectChargingDeviceRes ;
+	struct iso2DiffieHellmanPublickeyType DHpublickey ;
+	struct iso2ServiceParameterListType ServiceParameterList ;
+	struct iso2SignatureValueType SignatureValue ;
+	struct iso2PhysicalValueType physicalValue ;
+	iso2operationModeType OperationMode ;
+	int EVSECurrentLimitAchieved ;
+	struct iso2ServiceDetailReqType ServiceDetailReq ;
+	struct iso2ServiceDetailResType ServiceDetailRes ;
+	int32_t intValue ;
+	struct iso2PhysicalValueType EVMaximumDischargePower ;
+	int8_t MinimumSOC ;
+	iso2paymentOptionType SelectedPaymentOption ;
+	struct iso2AnonType_V2G_Message V2G_Message ;
+	struct {
+		exi_string_character_t characters[iso2EXIFragment_EVSEID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  EVSEID ;
+	int64_t TMeter ;
+	struct iso2SensorOrderListType SensorOrder ;
+	struct iso2ServiceIDListType SupportedServiceIDs ;
+	struct {
+		uint8_t bytes[iso2EXIFragment_GenChallenge_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  GenChallenge ;
+	struct iso2EVFinePositioningParametersType EVFinePositioningParameters ;
+	struct iso2SensorListType SensorList ;
+	struct iso2KeyInfoType KeyInfo ;
+	struct iso2ConnectChargingDeviceReqType ConnectChargingDeviceReq ;
+	struct iso2AC_EVChargeParameterType AC_EVChargeParameter ;
+	struct iso2ParameterType Parameter ;
+	struct iso2WeldingDetectionResType WeldingDetectionRes ;
+	struct {
+		exi_string_character_t characters[iso2EXIFragment_GAID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  GAID ;
+	uint16_t SignalFrequency ;
+	struct iso2PhysicalValueType EVSETargetPower ;
+	struct iso2DC_EVBidirectionalParameterType DC_EVBidirectionalParameter ;
+	struct iso2SignatureMethodType SignatureMethod ;
+	struct iso2WeldingDetectionReqType WeldingDetectionReq ;
+	struct iso2SelectedServiceType SelectedService ;
+	struct iso2PhysicalValueType EVInputPower ;
+	struct iso2VehicleCheckOutReqType VehicleCheckOutReq ;
+	struct iso2PowerDemandReqType PowerDemandReq ;
+	struct iso2VehicleCheckOutResType VehicleCheckOutRes ;
+	uint16_t CurrentRange ;
+	struct iso2PhysicalValueType EVPresentReactivePower ;
+	struct {
+		exi_string_character_t characters[iso2EXIFragment_X509IssuerName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  X509IssuerName ;
+	struct iso2BodyBaseType V2GRequest ;
+	struct iso2ReferenceType Reference ;
+	struct iso2BodyBaseType BodyElement ;
+	struct iso2PMaxScheduleEntryType MinimumPMaxScheduleEntry ;
+	struct iso2EVFinePositioningSetupParametersType EVFinePositioningSetupParameters ;
+	iso2EVSENotificationType EVSENotification ;
+	struct iso2PaymentServiceSelectionReqType PaymentServiceSelectionReq ;
+	struct iso2PaymentServiceSelectionResType PaymentServiceSelectionRes ;
+	struct iso2TransformType Transform ;
+	struct iso2ObjectType Object ;
+	uint16_t TargetOffsetY ;
+	struct iso2PowerDemandResType PowerDemandRes ;
+	uint16_t TargetOffsetX ;
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	};
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */ 
+	unsigned int EVMaximumVoltage_isUsed:1;
+	unsigned int FrequencyChannel_isUsed:1;
+	unsigned int EVProcessing_isUsed:1;
+	unsigned int BulkChargingComplete_isUsed:1;
+	unsigned int ParkingMethod_isUsed:1;
+	unsigned int SAScheduleTupleID_isUsed:1;
+	unsigned int Distance_isUsed:1;
+	unsigned int ParameterSet_isUsed:1;
+	unsigned int EVMinimumDischargeCurrent_isUsed:1;
+	unsigned int SignalSeparationTime_isUsed:1;
+	unsigned int EVSEEnergyTransferParameter_isUsed:1;
+	unsigned int EVSEMaximumVoltage_isUsed:1;
+	unsigned int DC_EVSEBidirectionalParameter_isUsed:1;
+	unsigned int ChargingSession_isUsed:1;
+	unsigned int SubCertificates_isUsed:1;
+	unsigned int RetrievalMethod_isUsed:1;
+	unsigned int MagneticVectorSetupList_isUsed:1;
+	unsigned int PairingParameters_isUsed:1;
+	unsigned int EVSEMinimumPower_isUsed:1;
+	unsigned int AC_BidirectionalControlReq_isUsed:1;
+	unsigned int Cost_isUsed:1;
+	unsigned int AC_BidirectionalControlRes_isUsed:1;
+	unsigned int BuyBackTariff_isUsed:1;
+	unsigned int XCoordinate_isUsed:1;
+	unsigned int EVSECheckOutStatus_isUsed:1;
+	unsigned int stringValue_isUsed:1;
+	unsigned int RetryCounter_isUsed:1;
+	unsigned int EVSEMaximumDischargeCurrent_isUsed:1;
+	unsigned int Sensor_isUsed:1;
+	unsigned int MeterReadingCharged_isUsed:1;
+	unsigned int HMACOutputLength_isUsed:1;
+	unsigned int V2GResponse_isUsed:1;
+	unsigned int EVMinimumVoltage_isUsed:1;
+	unsigned int EVMinimumEnergyRequest_isUsed:1;
+	unsigned int RelativeTimeInterval_isUsed:1;
+	unsigned int WPT_EVChargeParameter_isUsed:1;
+	unsigned int SAScheduleTuple_isUsed:1;
+	unsigned int ServiceID_isUsed:1;
+	unsigned int PgenCounter_isUsed:1;
+	unsigned int SalesTariffDescription_isUsed:1;
+	unsigned int AngleGAtoVA_isUsed:1;
+	unsigned int boolValue_isUsed:1;
+	unsigned int EVMaximumDischargeCurrent_isUsed:1;
+	unsigned int NotificationMaxDelay_isUsed:1;
+	unsigned int EVSEMaximumDischargePower_isUsed:1;
+	unsigned int PGPData_isUsed:1;
+	unsigned int EVSEMaximumChargePower_isUsed:1;
+	unsigned int SessionID_isUsed:1;
+	unsigned int EVSEEnergyToBeDelivered_isUsed:1;
+	unsigned int EVMaximumPower_isUsed:1;
+	unsigned int EVMaximumCurrent_isUsed:1;
+	unsigned int RSAKeyValue_isUsed:1;
+	unsigned int EVSENominalVoltage_isUsed:1;
+	unsigned int MagneticVector_isUsed:1;
+	unsigned int XPath_isUsed:1;
+	unsigned int Signature_isUsed:1;
+	unsigned int EVElectricalChargingDeviceStatus_isUsed:1;
+	unsigned int EVSEProcessing_isUsed:1;
+	unsigned int FODStatus_isUsed:1;
+	unsigned int PowerDeliveryRes_isUsed:1;
+	unsigned int SessionStopRes_isUsed:1;
+	unsigned int WPT_EVSEChargeParameter_isUsed:1;
+	unsigned int ResponseCode_isUsed:1;
+	unsigned int EVTargetEnergyRequest_isUsed:1;
+	unsigned int FinePositioningSetupReq_isUsed:1;
+	unsigned int EVSEPresentCurrent_isUsed:1;
+	unsigned int FinePositioningSetupRes_isUsed:1;
+	unsigned int ProfileEntry_isUsed:1;
+	unsigned int MgmtData_isUsed:1;
+	unsigned int SAProvisioningCertificateChain_isUsed:1;
+	unsigned int PowerDeliveryReq_isUsed:1;
+	unsigned int SessionStopReq_isUsed:1;
+	unsigned int ReceiptRequired_isUsed:1;
+	unsigned int ChargingProfile_isUsed:1;
+	unsigned int MaxSupportingPoints_isUsed:1;
+	unsigned int start_isUsed:1;
+	unsigned int EVMinimumChargePower_isUsed:1;
+	unsigned int amount_isUsed:1;
+	unsigned int PreChargeReq_isUsed:1;
+	unsigned int OEMProvisioningCert_isUsed:1;
+	unsigned int PackageIndex_isUsed:1;
+	unsigned int PreChargeRes_isUsed:1;
+	unsigned int P_isUsed:1;
+	unsigned int Q_isUsed:1;
+	unsigned int X509SubjectName_isUsed:1;
+	unsigned int G_isUsed:1;
+	unsigned int J_isUsed:1;
+	unsigned int ContractSignatureCertChain_isUsed:1;
+	unsigned int MV_EVSEFinePositioningSetupParameters_isUsed:1;
+	unsigned int EVSEMinimumDischargeCurrent_isUsed:1;
+	unsigned int EVMaximumChargeCurrent_isUsed:1;
+	unsigned int AlignmentOffset_isUsed:1;
+	unsigned int Y_isUsed:1;
+	unsigned int RemainingTimeToTargetSOC_isUsed:1;
+	unsigned int DigestValue_isUsed:1;
+	unsigned int SensorMeasurements_isUsed:1;
+	unsigned int SalesTariff_isUsed:1;
+	unsigned int EVCCID_isUsed:1;
+	unsigned int EVSEMaximumPower_isUsed:1;
+	unsigned int TargetOffset_isUsed:1;
+	unsigned int PowerDemandParameters_isUsed:1;
+	unsigned int PGPKeyID_isUsed:1;
+	unsigned int DisconnectChargingDeviceReq_isUsed:1;
+	unsigned int DisconnectChargingDeviceRes_isUsed:1;
+	unsigned int DSAKeyValue_isUsed:1;
+	unsigned int SalesTariffEntry_isUsed:1;
+	unsigned int CertificateInstallationRes_isUsed:1;
+	unsigned int CanonicalizationMethod_isUsed:1;
+	unsigned int Generic_EVFinePositioningParameters_isUsed:1;
+	unsigned int EVSEMinimumVoltage_isUsed:1;
+	unsigned int SystemStatusRes_isUsed:1;
+	unsigned int EVSEOutputPower_isUsed:1;
+	unsigned int SignedInfo_isUsed:1;
+	unsigned int EVMinimumChargeCurrent_isUsed:1;
+	unsigned int costKind_isUsed:1;
+	unsigned int SystemStatusReq_isUsed:1;
+	unsigned int CableCheckReq_isUsed:1;
+	unsigned int NumEPriceLevels_isUsed:1;
+	unsigned int EVSEVoltageLimitAchieved_isUsed:1;
+	unsigned int PackageSeparationTime_isUsed:1;
+	unsigned int CableCheckRes_isUsed:1;
+	unsigned int EVCheckInStatus_isUsed:1;
+	unsigned int PMaxDischargeSchedule_isUsed:1;
+	unsigned int EVMinimumPower_isUsed:1;
+	unsigned int ChargingPerformance_isUsed:1;
+	unsigned int AlignmentCheckReq_isUsed:1;
+	unsigned int EVMechanicalChargingDeviceStatus_isUsed:1;
+	unsigned int VehicleSpace_isUsed:1;
+	unsigned int AlignmentCheckRes_isUsed:1;
+	unsigned int EVMinimumDischargePower_isUsed:1;
+	unsigned int RemainingTimeToMinimumSOC_isUsed:1;
+	unsigned int AuthorizationRes_isUsed:1;
+	unsigned int CertificateInstallationReq_isUsed:1;
+	unsigned int PaymentDetailsReq_isUsed:1;
+	unsigned int PaymentDetailsRes_isUsed:1;
+	unsigned int AuthorizationReq_isUsed:1;
+	unsigned int EVTargetCurrent_isUsed:1;
+	unsigned int SessionSetupReq_isUsed:1;
+	unsigned int SessionSetupRes_isUsed:1;
+	unsigned int EVSENominalFrequency_isUsed:1;
+	unsigned int Header_isUsed:1;
+	unsigned int NumberOfSensors_isUsed:1;
+	unsigned int EVSETimeStamp_isUsed:1;
+	unsigned int MeterStatus_isUsed:1;
+	unsigned int MV_EVSEFinePositioningParameters_isUsed:1;
+	unsigned int ChargeProgress_isUsed:1;
+	unsigned int KeyName_isUsed:1;
+	unsigned int PMaxSchedule_isUsed:1;
+	unsigned int duration_isUsed:1;
+	unsigned int RemainingTimeToBulkSOC_isUsed:1;
+	unsigned int SensorOrientation_isUsed:1;
+	unsigned int EVSEMaximumChargeCurrent_isUsed:1;
+	unsigned int LFA_EVSEFinePositioningParameters_isUsed:1;
+	unsigned int VehicleCheckInRes_isUsed:1;
+	unsigned int PMaxScheduleEntry_isUsed:1;
+	unsigned int SAScheduleList_isUsed:1;
+	unsigned int X509SKI_isUsed:1;
+	unsigned int PaymentOptionList_isUsed:1;
+	unsigned int ContractSignatureEncryptedPrivateKey_isUsed:1;
+	unsigned int VehicleCheckInReq_isUsed:1;
+	unsigned int Certificate_isUsed:1;
+	unsigned int CheckOutTime_isUsed:1;
+	unsigned int CurrentSOC_isUsed:1;
+	unsigned int ZCoordinate_isUsed:1;
+	unsigned int MeasurementData_isUsed:1;
+	unsigned int PairingRes_isUsed:1;
+	unsigned int EVSEMaximumCurrent_isUsed:1;
+	unsigned int LFA_EVFinePositioningParameters_isUsed:1;
+	unsigned int AlignmentCheckParameters_isUsed:1;
+	unsigned int EffectiveRadiatedPower_isUsed:1;
+	unsigned int PairingReq_isUsed:1;
+	unsigned int Value_isUsed:1;
+	unsigned int byteValue_isUsed:1;
+	unsigned int CurrentDemandReq_isUsed:1;
+	unsigned int Generic_EVSEFinePositioningParameters_isUsed:1;
+	unsigned int CurrentDemandRes_isUsed:1;
+	unsigned int AC_EVBidirectionalParameter_isUsed:1;
+	unsigned int Modulus_isUsed:1;
+	unsigned int SelectedEnergyTransferService_isUsed:1;
+	unsigned int startValue_isUsed:1;
+	unsigned int SelectedVASList_isUsed:1;
+	unsigned int ChargeParameterDiscoveryReq_isUsed:1;
+	unsigned int ChargeParameterDiscoveryRes_isUsed:1;
+	unsigned int SigMeterReading_isUsed:1;
+	unsigned int TargetSOC_isUsed:1;
+	unsigned int EVSEStatus_isUsed:1;
+	unsigned int EVSEMinimumChargeCurrent_isUsed:1;
+	unsigned int EVSEElectricalChargingDeviceStatus_isUsed:1;
+	unsigned int X509SerialNumber_isUsed:1;
+	unsigned int PaymentOption_isUsed:1;
+	unsigned int Transforms_isUsed:1;
+	unsigned int EVSEPeakCurrentRipple_isUsed:1;
+	unsigned int ConsumptionCost_isUsed:1;
+	unsigned int EVSEFinePositioningSetupParameters_isUsed:1;
+	unsigned int EPriceLevel_isUsed:1;
+	unsigned int Exponent_isUsed:1;
+	unsigned int X509IssuerSerial_isUsed:1;
+	unsigned int SPKIData_isUsed:1;
+	unsigned int MagneticVectorList_isUsed:1;
+	unsigned int EVSEFinePositioningParameters_isUsed:1;
+	unsigned int EVTargetPower_isUsed:1;
+	unsigned int SensorPackageList_isUsed:1;
+	unsigned int DepartureTime_isUsed:1;
+	unsigned int InletHot_isUsed:1;
+	unsigned int EVPresentActivePower_isUsed:1;
+	unsigned int X509Data_isUsed:1;
+	unsigned int YCoordinate_isUsed:1;
+	unsigned int KeyValue_isUsed:1;
+	unsigned int DisplayParameters_isUsed:1;
+	unsigned int EVSEPowerLimitAchieved_isUsed:1;
+	unsigned int Body_isUsed:1;
+	unsigned int DC_EVChargeParameter_isUsed:1;
+	unsigned int Service_isUsed:1;
+	unsigned int SignatureProperty_isUsed:1;
+	unsigned int PGPKeyPacket_isUsed:1;
+	unsigned int Seed_isUsed:1;
+	unsigned int LFA_EVFinePositioningSetupParameters_isUsed:1;
+	unsigned int MinimumPMaxRequest_isUsed:1;
+	unsigned int FinePositioningReq_isUsed:1;
+	unsigned int EnergyTransferServiceList_isUsed:1;
+	unsigned int FinePositioningRes_isUsed:1;
+	unsigned int AC_EVSEBidirectionalParameter_isUsed:1;
+	unsigned int FreeService_isUsed:1;
+	unsigned int AC_EVSEChargeParameter_isUsed:1;
+	unsigned int SensorID_isUsed:1;
+	unsigned int EVSECurrentRegulationTolerance_isUsed:1;
+	unsigned int EVSEMechanicalChargingDeviceStatus_isUsed:1;
+	unsigned int EVEnergyTransferParameter_isUsed:1;
+	unsigned int SignalPulseDuration_isUsed:1;
+	unsigned int shortValue_isUsed:1;
+	unsigned int Manifest_isUsed:1;
+	unsigned int DC_EVSEChargeParameter_isUsed:1;
+	unsigned int MeteringReceiptReq_isUsed:1;
+	unsigned int MeterID_isUsed:1;
+	unsigned int MeteringReceiptRes_isUsed:1;
+	unsigned int ServiceDiscoveryReq_isUsed:1;
+	unsigned int SalesTariffID_isUsed:1;
+	unsigned int ServiceDiscoveryRes_isUsed:1;
+	unsigned int X509CRL_isUsed:1;
+	unsigned int MagneticVectorSetup_isUsed:1;
+	unsigned int DigestMethod_isUsed:1;
+	unsigned int SPKISexp_isUsed:1;
+	unsigned int MeterReadingDischarged_isUsed:1;
+	unsigned int MeasurementDataList_isUsed:1;
+	unsigned int SignatureProperties_isUsed:1;
+	unsigned int SensorPosition_isUsed:1;
+	unsigned int LFA_EVSEFinePositioningSetupParameters_isUsed:1;
+	unsigned int eMAID_isUsed:1;
+	unsigned int SensorPackage_isUsed:1;
+	unsigned int EVCheckOutStatus_isUsed:1;
+	unsigned int X509Certificate_isUsed:1;
+	unsigned int RootCertificateID_isUsed:1;
+	unsigned int DC_BidirectionalControlReq_isUsed:1;
+	unsigned int EVSEPresentVoltage_isUsed:1;
+	unsigned int DC_BidirectionalControlRes_isUsed:1;
+	unsigned int VASList_isUsed:1;
+	unsigned int MeterInfo_isUsed:1;
+	unsigned int EVSETargetReactivePower_isUsed:1;
+	unsigned int ChargingStatusReq_isUsed:1;
+	unsigned int GenericParameters_isUsed:1;
+	unsigned int ChargingStatusRes_isUsed:1;
+	unsigned int EVMaximumChargePower_isUsed:1;
+	unsigned int BulkSOC_isUsed:1;
+	unsigned int NumberOfSignalPackages_isUsed:1;
+	unsigned int ParameterSetID_isUsed:1;
+	unsigned int PMax_isUsed:1;
+	unsigned int EVMaximumEnergyRequest_isUsed:1;
+	unsigned int EVOperation_isUsed:1;
+	unsigned int CertificateUpdateRes_isUsed:1;
+	unsigned int ChargingComplete_isUsed:1;
+	unsigned int ListOfRootCertificateIDs_isUsed:1;
+	unsigned int RotationVAtoGA_isUsed:1;
+	unsigned int EVTargetVoltage_isUsed:1;
+	unsigned int CertificateUpdateReq_isUsed:1;
+	unsigned int ConnectChargingDeviceRes_isUsed:1;
+	unsigned int DHpublickey_isUsed:1;
+	unsigned int ServiceParameterList_isUsed:1;
+	unsigned int SignatureValue_isUsed:1;
+	unsigned int physicalValue_isUsed:1;
+	unsigned int OperationMode_isUsed:1;
+	unsigned int EVSECurrentLimitAchieved_isUsed:1;
+	unsigned int ServiceDetailReq_isUsed:1;
+	unsigned int ServiceDetailRes_isUsed:1;
+	unsigned int intValue_isUsed:1;
+	unsigned int EVMaximumDischargePower_isUsed:1;
+	unsigned int MinimumSOC_isUsed:1;
+	unsigned int SelectedPaymentOption_isUsed:1;
+	unsigned int V2G_Message_isUsed:1;
+	unsigned int EVSEID_isUsed:1;
+	unsigned int TMeter_isUsed:1;
+	unsigned int SensorOrder_isUsed:1;
+	unsigned int SupportedServiceIDs_isUsed:1;
+	unsigned int GenChallenge_isUsed:1;
+	unsigned int EVFinePositioningParameters_isUsed:1;
+	unsigned int SensorList_isUsed:1;
+	unsigned int KeyInfo_isUsed:1;
+	unsigned int ConnectChargingDeviceReq_isUsed:1;
+	unsigned int AC_EVChargeParameter_isUsed:1;
+	unsigned int Parameter_isUsed:1;
+	unsigned int WeldingDetectionRes_isUsed:1;
+	unsigned int GAID_isUsed:1;
+	unsigned int SignalFrequency_isUsed:1;
+	unsigned int EVSETargetPower_isUsed:1;
+	unsigned int DC_EVBidirectionalParameter_isUsed:1;
+	unsigned int SignatureMethod_isUsed:1;
+	unsigned int WeldingDetectionReq_isUsed:1;
+	unsigned int SelectedService_isUsed:1;
+	unsigned int EVInputPower_isUsed:1;
+	unsigned int VehicleCheckOutReq_isUsed:1;
+	unsigned int PowerDemandReq_isUsed:1;
+	unsigned int VehicleCheckOutRes_isUsed:1;
+	unsigned int CurrentRange_isUsed:1;
+	unsigned int EVPresentReactivePower_isUsed:1;
+	unsigned int X509IssuerName_isUsed:1;
+	unsigned int V2GRequest_isUsed:1;
+	unsigned int Reference_isUsed:1;
+	unsigned int BodyElement_isUsed:1;
+	unsigned int MinimumPMaxScheduleEntry_isUsed:1;
+	unsigned int EVFinePositioningSetupParameters_isUsed:1;
+	unsigned int EVSENotification_isUsed:1;
+	unsigned int PaymentServiceSelectionReq_isUsed:1;
+	unsigned int PaymentServiceSelectionRes_isUsed:1;
+	unsigned int Transform_isUsed:1;
+	unsigned int Object_isUsed:1;
+	unsigned int TargetOffsetY_isUsed:1;
+	unsigned int PowerDemandRes_isUsed:1;
+	unsigned int TargetOffsetX_isUsed:1;
+
+
+	int _warning_;
+};
+#endif /* DEPLOY_ISO2_CODEC_FRAGMENT */
+
+
+/* Initialization methods for structs */
+
+void init_iso2EXIDocument(struct iso2EXIDocument* exiDoc);
+#if DEPLOY_ISO2_CODEC_FRAGMENT == SUPPORT_YES
+void init_iso2EXIFragment(struct iso2EXIFragment* exiFrag);
+#endif /* DEPLOY_ISO2_CODEC_FRAGMENT */
+void init_iso2RetrievalMethodType(struct iso2RetrievalMethodType* iso2RetrievalMethodType);
+void init_iso2AuthorizationResType(struct iso2AuthorizationResType* iso2AuthorizationResType);
+void init_iso2MV_EVSEFinePositioningSetupParametersType(struct iso2MV_EVSEFinePositioningSetupParametersType* iso2MV_EVSEFinePositioningSetupParametersType);
+void init_iso2X509DataType(struct iso2X509DataType* iso2X509DataType);
+void init_iso2RSAKeyValueType(struct iso2RSAKeyValueType* iso2RSAKeyValueType);
+void init_iso2DC_BidirectionalControlResType(struct iso2DC_BidirectionalControlResType* iso2DC_BidirectionalControlResType);
+void init_iso2CostType(struct iso2CostType* iso2CostType);
+void init_iso2ChargingStatusResType(struct iso2ChargingStatusResType* iso2ChargingStatusResType);
+void init_iso2MeterInfoType(struct iso2MeterInfoType* iso2MeterInfoType);
+void init_iso2AC_EVChargeParameterType(struct iso2AC_EVChargeParameterType* iso2AC_EVChargeParameterType);
+void init_iso2AC_EVSEBidirectionalParameterType(struct iso2AC_EVSEBidirectionalParameterType* iso2AC_EVSEBidirectionalParameterType);
+void init_iso2VehicleCheckOutResType(struct iso2VehicleCheckOutResType* iso2VehicleCheckOutResType);
+void init_iso2MagneticVectorListType(struct iso2MagneticVectorListType* iso2MagneticVectorListType);
+void init_iso2CableCheckResType(struct iso2CableCheckResType* iso2CableCheckResType);
+void init_iso2ServiceDiscoveryReqType(struct iso2ServiceDiscoveryReqType* iso2ServiceDiscoveryReqType);
+void init_iso2ServiceType(struct iso2ServiceType* iso2ServiceType);
+void init_iso2ServiceParameterListType(struct iso2ServiceParameterListType* iso2ServiceParameterListType);
+void init_iso2PMaxScheduleType(struct iso2PMaxScheduleType* iso2PMaxScheduleType);
+void init_iso2SignaturePropertiesType(struct iso2SignaturePropertiesType* iso2SignaturePropertiesType);
+void init_iso2PMaxScheduleEntryType(struct iso2PMaxScheduleEntryType* iso2PMaxScheduleEntryType);
+void init_iso2SignatureType(struct iso2SignatureType* iso2SignatureType);
+void init_iso2VehicleCheckInReqType(struct iso2VehicleCheckInReqType* iso2VehicleCheckInReqType);
+void init_iso2ConnectChargingDeviceResType(struct iso2ConnectChargingDeviceResType* iso2ConnectChargingDeviceResType);
+void init_iso2WeldingDetectionResType(struct iso2WeldingDetectionResType* iso2WeldingDetectionResType);
+void init_iso2SessionStopResType(struct iso2SessionStopResType* iso2SessionStopResType);
+void init_iso2VehicleCheckInResType(struct iso2VehicleCheckInResType* iso2VehicleCheckInResType);
+void init_iso2ServiceListType(struct iso2ServiceListType* iso2ServiceListType);
+void init_iso2CertificateUpdateResType(struct iso2CertificateUpdateResType* iso2CertificateUpdateResType);
+void init_iso2FinePositioningSetupResType(struct iso2FinePositioningSetupResType* iso2FinePositioningSetupResType);
+void init_iso2AC_EVBidirectionalParameterType(struct iso2AC_EVBidirectionalParameterType* iso2AC_EVBidirectionalParameterType);
+void init_iso2DC_BidirectionalControlReqType(struct iso2DC_BidirectionalControlReqType* iso2DC_BidirectionalControlReqType);
+void init_iso2CertificateUpdateReqType(struct iso2CertificateUpdateReqType* iso2CertificateUpdateReqType);
+void init_iso2ConsumptionCostType(struct iso2ConsumptionCostType* iso2ConsumptionCostType);
+void init_iso2SAScheduleListType(struct iso2SAScheduleListType* iso2SAScheduleListType);
+void init_iso2MagneticVectorSetupType(struct iso2MagneticVectorSetupType* iso2MagneticVectorSetupType);
+void init_iso2LFA_EVSEFinePositioningSetupParametersType(struct iso2LFA_EVSEFinePositioningSetupParametersType* iso2LFA_EVSEFinePositioningSetupParametersType);
+void init_iso2PaymentOptionListType(struct iso2PaymentOptionListType* iso2PaymentOptionListType);
+void init_iso2LFA_EVSEFinePositioningParametersType(struct iso2LFA_EVSEFinePositioningParametersType* iso2LFA_EVSEFinePositioningParametersType);
+void init_iso2RelativeTimeIntervalType(struct iso2RelativeTimeIntervalType* iso2RelativeTimeIntervalType);
+void init_iso2EVFinePositioningParametersType(struct iso2EVFinePositioningParametersType* iso2EVFinePositioningParametersType);
+void init_iso2AlignmentCheckReqType(struct iso2AlignmentCheckReqType* iso2AlignmentCheckReqType);
+void init_iso2CertificateInstallationReqType(struct iso2CertificateInstallationReqType* iso2CertificateInstallationReqType);
+void init_iso2TransformsType(struct iso2TransformsType* iso2TransformsType);
+void init_iso2ObjectType(struct iso2ObjectType* iso2ObjectType);
+void init_iso2SensorOrderListType(struct iso2SensorOrderListType* iso2SensorOrderListType);
+void init_iso2ChargeParameterDiscoveryReqType(struct iso2ChargeParameterDiscoveryReqType* iso2ChargeParameterDiscoveryReqType);
+void init_iso2ParameterType(struct iso2ParameterType* iso2ParameterType);
+void init_iso2SessionStopReqType(struct iso2SessionStopReqType* iso2SessionStopReqType);
+void init_iso2SensorMeasurementsType(struct iso2SensorMeasurementsType* iso2SensorMeasurementsType);
+void init_iso2DC_EVSEChargeParameterType(struct iso2DC_EVSEChargeParameterType* iso2DC_EVSEChargeParameterType);
+void init_iso2SensorPackageListType(struct iso2SensorPackageListType* iso2SensorPackageListType);
+void init_iso2MeasurementDataListType(struct iso2MeasurementDataListType* iso2MeasurementDataListType);
+void init_iso2CertificateChainType(struct iso2CertificateChainType* iso2CertificateChainType);
+void init_iso2SignaturePropertyType(struct iso2SignaturePropertyType* iso2SignaturePropertyType);
+void init_iso2TransformType(struct iso2TransformType* iso2TransformType);
+void init_iso2EMAIDType(struct iso2EMAIDType* iso2EMAIDType);
+void init_iso2DSAKeyValueType(struct iso2DSAKeyValueType* iso2DSAKeyValueType);
+void init_iso2EntryType(struct iso2EntryType* iso2EntryType);
+void init_iso2MessageHeaderType(struct iso2MessageHeaderType* iso2MessageHeaderType);
+void init_iso2WPT_EVChargeParameterType(struct iso2WPT_EVChargeParameterType* iso2WPT_EVChargeParameterType);
+void init_iso2DisconnectChargingDeviceReqType(struct iso2DisconnectChargingDeviceReqType* iso2DisconnectChargingDeviceReqType);
+void init_iso2ChargeLoopReqType(struct iso2ChargeLoopReqType* iso2ChargeLoopReqType);
+void init_iso2V2GRequestType(struct iso2V2GRequestType* iso2V2GRequestType);
+void init_iso2MeteringReceiptResType(struct iso2MeteringReceiptResType* iso2MeteringReceiptResType);
+void init_iso2SessionSetupResType(struct iso2SessionSetupResType* iso2SessionSetupResType);
+void init_iso2AC_BidirectionalControlReqType(struct iso2AC_BidirectionalControlReqType* iso2AC_BidirectionalControlReqType);
+void init_iso2MV_EVSEFinePositioningParametersType(struct iso2MV_EVSEFinePositioningParametersType* iso2MV_EVSEFinePositioningParametersType);
+void init_iso2ReferenceType(struct iso2ReferenceType* iso2ReferenceType);
+void init_iso2EVSEEnergyTransferParameterType(struct iso2EVSEEnergyTransferParameterType* iso2EVSEEnergyTransferParameterType);
+void init_iso2MeteringReceiptReqType(struct iso2MeteringReceiptReqType* iso2MeteringReceiptReqType);
+void init_iso2KeyValueType(struct iso2KeyValueType* iso2KeyValueType);
+void init_iso2SensorListType(struct iso2SensorListType* iso2SensorListType);
+void init_iso2CurrentDemandReqType(struct iso2CurrentDemandReqType* iso2CurrentDemandReqType);
+void init_iso2FinePositioningSetupReqType(struct iso2FinePositioningSetupReqType* iso2FinePositioningSetupReqType);
+void init_iso2LFA_EVFinePositioningSetupParametersType(struct iso2LFA_EVFinePositioningSetupParametersType* iso2LFA_EVFinePositioningSetupParametersType);
+void init_iso2SAScheduleTupleType(struct iso2SAScheduleTupleType* iso2SAScheduleTupleType);
+void init_iso2WPT_EVSEChargeParameterType(struct iso2WPT_EVSEChargeParameterType* iso2WPT_EVSEChargeParameterType);
+void init_iso2FinePositioningResType(struct iso2FinePositioningResType* iso2FinePositioningResType);
+void init_iso2BodyBaseType(struct iso2BodyBaseType* iso2BodyBaseType);
+void init_iso2ServiceDetailResType(struct iso2ServiceDetailResType* iso2ServiceDetailResType);
+void init_iso2PowerDeliveryReqType(struct iso2PowerDeliveryReqType* iso2PowerDeliveryReqType);
+void init_iso2PairingResType(struct iso2PairingResType* iso2PairingResType);
+void init_iso2AuthorizationReqType(struct iso2AuthorizationReqType* iso2AuthorizationReqType);
+void init_iso2ParameterSetType(struct iso2ParameterSetType* iso2ParameterSetType);
+void init_iso2SPKIDataType(struct iso2SPKIDataType* iso2SPKIDataType);
+void init_iso2PaymentDetailsResType(struct iso2PaymentDetailsResType* iso2PaymentDetailsResType);
+void init_iso2SignatureMethodType(struct iso2SignatureMethodType* iso2SignatureMethodType);
+void init_iso2AC_BidirectionalControlResType(struct iso2AC_BidirectionalControlResType* iso2AC_BidirectionalControlResType);
+void init_iso2VehicleCheckOutReqType(struct iso2VehicleCheckOutReqType* iso2VehicleCheckOutReqType);
+void init_iso2WeldingDetectionReqType(struct iso2WeldingDetectionReqType* iso2WeldingDetectionReqType);
+void init_iso2AlignmentCheckResType(struct iso2AlignmentCheckResType* iso2AlignmentCheckResType);
+void init_iso2PowerDemandReqType(struct iso2PowerDemandReqType* iso2PowerDemandReqType);
+void init_iso2MinimumPMaxRequestType(struct iso2MinimumPMaxRequestType* iso2MinimumPMaxRequestType);
+void init_iso2DisconnectChargingDeviceResType(struct iso2DisconnectChargingDeviceResType* iso2DisconnectChargingDeviceResType);
+void init_iso2SessionSetupReqType(struct iso2SessionSetupReqType* iso2SessionSetupReqType);
+void init_iso2PaymentDetailsReqType(struct iso2PaymentDetailsReqType* iso2PaymentDetailsReqType);
+void init_iso2Generic_EVFinePositioningParametersType(struct iso2Generic_EVFinePositioningParametersType* iso2Generic_EVFinePositioningParametersType);
+void init_iso2ConnectChargingDeviceReqType(struct iso2ConnectChargingDeviceReqType* iso2ConnectChargingDeviceReqType);
+void init_iso2AC_EVSEChargeParameterType(struct iso2AC_EVSEChargeParameterType* iso2AC_EVSEChargeParameterType);
+void init_iso2SalesTariffEntryType(struct iso2SalesTariffEntryType* iso2SalesTariffEntryType);
+void init_iso2DC_EVSEBidirectionalParameterType(struct iso2DC_EVSEBidirectionalParameterType* iso2DC_EVSEBidirectionalParameterType);
+void init_iso2CanonicalizationMethodType(struct iso2CanonicalizationMethodType* iso2CanonicalizationMethodType);
+void init_iso2DisplayParametersType(struct iso2DisplayParametersType* iso2DisplayParametersType);
+void init_iso2DC_EVBidirectionalParameterType(struct iso2DC_EVBidirectionalParameterType* iso2DC_EVBidirectionalParameterType);
+void init_iso2PaymentServiceSelectionReqType(struct iso2PaymentServiceSelectionReqType* iso2PaymentServiceSelectionReqType);
+void init_iso2MagneticVectorType(struct iso2MagneticVectorType* iso2MagneticVectorType);
+void init_iso2PhysicalValueType(struct iso2PhysicalValueType* iso2PhysicalValueType);
+void init_iso2SystemStatusReqType(struct iso2SystemStatusReqType* iso2SystemStatusReqType);
+void init_iso2SystemStatusResType(struct iso2SystemStatusResType* iso2SystemStatusResType);
+void init_iso2EVSEFinePositioningSetupParametersType(struct iso2EVSEFinePositioningSetupParametersType* iso2EVSEFinePositioningSetupParametersType);
+void init_iso2V2GResponseType(struct iso2V2GResponseType* iso2V2GResponseType);
+void init_iso2BodyType(struct iso2BodyType* iso2BodyType);
+void init_iso2PreChargeResType(struct iso2PreChargeResType* iso2PreChargeResType);
+void init_iso2EVSEFinePositioningParametersType(struct iso2EVSEFinePositioningParametersType* iso2EVSEFinePositioningParametersType);
+void init_iso2PaymentServiceSelectionResType(struct iso2PaymentServiceSelectionResType* iso2PaymentServiceSelectionResType);
+void init_iso2DigestMethodType(struct iso2DigestMethodType* iso2DigestMethodType);
+void init_iso2TargetPositionType(struct iso2TargetPositionType* iso2TargetPositionType);
+void init_iso2LFA_EVFinePositioningParametersType(struct iso2LFA_EVFinePositioningParametersType* iso2LFA_EVFinePositioningParametersType);
+void init_iso2DC_EVChargeParameterType(struct iso2DC_EVChargeParameterType* iso2DC_EVChargeParameterType);
+void init_iso2ServiceDetailReqType(struct iso2ServiceDetailReqType* iso2ServiceDetailReqType);
+void init_iso2PreChargeReqType(struct iso2PreChargeReqType* iso2PreChargeReqType);
+void init_iso2ManifestType(struct iso2ManifestType* iso2ManifestType);
+void init_iso2AnonType_V2G_Message(struct iso2AnonType_V2G_Message* iso2AnonType_V2G_Message);
+void init_iso2SelectedServiceListType(struct iso2SelectedServiceListType* iso2SelectedServiceListType);
+void init_iso2Generic_EVSEFinePositioningParametersType(struct iso2Generic_EVSEFinePositioningParametersType* iso2Generic_EVSEFinePositioningParametersType);
+void init_iso2CartesianCoordinatesType(struct iso2CartesianCoordinatesType* iso2CartesianCoordinatesType);
+void init_iso2KeyInfoType(struct iso2KeyInfoType* iso2KeyInfoType);
+void init_iso2SubCertificatesType(struct iso2SubCertificatesType* iso2SubCertificatesType);
+void init_iso2ListOfRootCertificateIDsType(struct iso2ListOfRootCertificateIDsType* iso2ListOfRootCertificateIDsType);
+void init_iso2EVEnergyTransferParameterType(struct iso2EVEnergyTransferParameterType* iso2EVEnergyTransferParameterType);
+void init_iso2ContractSignatureEncryptedPrivateKeyType(struct iso2ContractSignatureEncryptedPrivateKeyType* iso2ContractSignatureEncryptedPrivateKeyType);
+void init_iso2MagneticVectorSetupListType(struct iso2MagneticVectorSetupListType* iso2MagneticVectorSetupListType);
+void init_iso2PairingReqType(struct iso2PairingReqType* iso2PairingReqType);
+void init_iso2CurrentDemandResType(struct iso2CurrentDemandResType* iso2CurrentDemandResType);
+void init_iso2X509IssuerSerialType(struct iso2X509IssuerSerialType* iso2X509IssuerSerialType);
+void init_iso2ChargingStatusReqType(struct iso2ChargingStatusReqType* iso2ChargingStatusReqType);
+void init_iso2CertificateInstallationResType(struct iso2CertificateInstallationResType* iso2CertificateInstallationResType);
+void init_iso2SensorPackageType(struct iso2SensorPackageType* iso2SensorPackageType);
+void init_iso2PGPDataType(struct iso2PGPDataType* iso2PGPDataType);
+void init_iso2ServiceDiscoveryResType(struct iso2ServiceDiscoveryResType* iso2ServiceDiscoveryResType);
+void init_iso2ServiceIDListType(struct iso2ServiceIDListType* iso2ServiceIDListType);
+void init_iso2EVFinePositioningSetupParametersType(struct iso2EVFinePositioningSetupParametersType* iso2EVFinePositioningSetupParametersType);
+void init_iso2ChargeParameterDiscoveryResType(struct iso2ChargeParameterDiscoveryResType* iso2ChargeParameterDiscoveryResType);
+void init_iso2PowerDemandResType(struct iso2PowerDemandResType* iso2PowerDemandResType);
+void init_iso2ChargingProfileType(struct iso2ChargingProfileType* iso2ChargingProfileType);
+void init_iso2FinePositioningReqType(struct iso2FinePositioningReqType* iso2FinePositioningReqType);
+void init_iso2SalesTariffType(struct iso2SalesTariffType* iso2SalesTariffType);
+void init_iso2SensorType(struct iso2SensorType* iso2SensorType);
+void init_iso2SignatureValueType(struct iso2SignatureValueType* iso2SignatureValueType);
+void init_iso2SignedInfoType(struct iso2SignedInfoType* iso2SignedInfoType);
+void init_iso2PowerDeliveryResType(struct iso2PowerDeliveryResType* iso2PowerDeliveryResType);
+void init_iso2CableCheckReqType(struct iso2CableCheckReqType* iso2CableCheckReqType);
+void init_iso2SelectedServiceType(struct iso2SelectedServiceType* iso2SelectedServiceType);
+void init_iso2DiffieHellmanPublickeyType(struct iso2DiffieHellmanPublickeyType* iso2DiffieHellmanPublickeyType);
+void init_iso2EVSEStatusType(struct iso2EVSEStatusType* iso2EVSEStatusType);
+
+
+#endif /* DEPLOY_ISO2_CODEC */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

文件差异内容过多而无法显示
+ 63551 - 0
EVSE/Projects/CCS/Apps/exi_engine/iso2/iso2EXIDatatypesDecoder.c


+ 65 - 0
EVSE/Projects/CCS/Apps/exi_engine/iso2/iso2EXIDatatypesDecoder.h

@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9.4 
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+ * \file 	EXIDatatypesDecoder.h
+ * \brief 	Decoder for datatype definitions
+ *
+ */
+
+#ifndef EXI_iso2_DATATYPES_DECODER_H
+#define EXI_iso2_DATATYPES_DECODER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "iso2EXIDatatypes.h"
+
+#if DEPLOY_ISO2_CODEC == SUPPORT_YES
+
+#include <stdint.h>
+
+#include "EXITypes.h"
+
+int decode_iso2ExiDocument(bitstream_t* stream, struct iso2EXIDocument* exiDoc);
+
+#if DEPLOY_ISO2_CODEC_FRAGMENT == SUPPORT_YES
+int decode_iso2ExiFragment(bitstream_t* stream, struct iso2EXIFragment* exiFrag);
+#endif /* DEPLOY_ISO2_CODEC_FRAGMENT */
+
+#endif /* DEPLOY_ISO2_CODEC */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

文件差异内容过多而无法显示
+ 44215 - 0
EVSE/Projects/CCS/Apps/exi_engine/iso2/iso2EXIDatatypesEncoder.c


+ 68 - 0
EVSE/Projects/CCS/Apps/exi_engine/iso2/iso2EXIDatatypesEncoder.h

@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9.4 
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+ * \file 	EXIDatatypesEncoder.h
+ * \brief 	Encoder for datatype definitions
+ *
+ */
+
+#ifndef EXI_iso2_DATATYPES_ENCODER_H
+#define EXI_iso2_DATATYPES_ENCODER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "iso2EXIDatatypes.h"
+
+#if DEPLOY_ISO2_CODEC == SUPPORT_YES
+
+#include <stdint.h>
+
+#include "EXITypes.h"
+
+
+int encode_iso2ExiDocument(bitstream_t* stream, struct iso2EXIDocument* exiDoc);
+
+#if DEPLOY_ISO2_CODEC_FRAGMENT == SUPPORT_YES
+int encode_iso2ExiFragment(bitstream_t* stream, struct iso2EXIFragment* exiFrag);
+#endif /* DEPLOY_ISO2_CODEC_FRAGMENT */
+
+
+#endif /* DEPLOY_ISO2_CODEC */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

+ 47 - 0
EVSE/Projects/CCS/Apps/exi_engine/test/main.c

@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @author Sebastian.Kaebisch@siemens.com
+ * @version 0.9.4
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Switch for sample programs: EXI codec only or for entire V2G example</p>
+ *
+ ********************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "main.h"
+
+int main(int argc, char *argv[]) {
+    /* disable buffering of output, especially when piped or redirected */
+    setvbuf(stdout, NULL, _IONBF, 0);
+
+#if CODE_VERSION == CODE_VERSION_EXI
+	/* EXI codec only */
+	return main_databinder(argc, argv);
+#elif CODE_VERSION == CODE_VERSION_SAMPLE
+	/* V2G client / service example  */
+	return main_example(argc, argv);
+#endif
+
+}
+

+ 42 - 0
EVSE/Projects/CCS/Apps/exi_engine/test/main.h

@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @author Sebastian.Kaebisch@siemens.com
+ * @version 0.9.4
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ *
+ ********************************************************************/
+
+
+#define CODE_VERSION_EXI 1
+#define CODE_VERSION_SAMPLE 2
+#define CODE_VERSION CODE_VERSION_SAMPLE
+
+#ifndef MAIN_H_
+#define MAIN_H_
+
+#if CODE_VERSION == CODE_VERSION_EXI
+int main_databinder(int argc, char *argv[]);
+#elif CODE_VERSION == CODE_VERSION_SAMPLE
+int main_example(int argc, char *argv[]);
+#endif
+
+#endif

+ 178 - 0
EVSE/Projects/CCS/Apps/exi_engine/test/main_databinder.c

@@ -0,0 +1,178 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9.4
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/*******************************************************************
+ *
+ * <p>Sample program to illustrate how to read an EXI stream and
+ *  directly write it again to an output</p>
+ *
+ *  <p>e.g., <executable> in.exi out.exi</p>
+ ********************************************************************/
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <stdlib.h>
+
+/* schema-dependent */
+#include "../iso1/iso1EXIDatatypes.h"
+#if DEPLOY_ISO1_CODEC == SUPPORT_YES
+#include "../iso1/iso1EXIDatatypesEncoder.h"
+#include "../iso1/iso1EXIDatatypesDecoder.h"
+#endif /* DEPLOY_ISO1_CODEC == SUPPORT_YES */
+#include "../iso2/iso2EXIDatatypes.h"
+#if DEPLOY_ISO2_CODEC == SUPPORT_YES
+#include "../iso2/iso2EXIDatatypesEncoder.h"
+#include "../iso2/iso2EXIDatatypesDecoder.h"
+#endif /* DEPLOY_ISO2_CODEC == SUPPORT_YES */
+
+#include "../codec/ByteStream.h"
+
+/** EXI Debug mode */
+#define EXI_DEBUG 0
+
+#define BUFFER_SIZE 4096
+uint8_t bufferIn[BUFFER_SIZE];
+uint8_t bufferOut[BUFFER_SIZE];
+
+
+#if EXI_DEBUG == 1
+# define DEBUG_PRINTF(x) printf x
+#else
+# define DEBUG_PRINTF(x) do {} while (0)
+#endif
+
+
+int main_databinder(int argc, char *argv[]) {
+
+#if DEPLOY_DIN_CODEC == SUPPORT_YES
+	struct dinEXIDocument dinDoc;
+#endif /* DEPLOY_DIN_CODEC == SUPPORT_YES */
+#if DEPLOY_ISO1_CODEC == SUPPORT_YES
+	struct iso1EXIDocument exi1Doc;
+#endif /* DEPLOY_ISO1_CODEC == SUPPORT_YES */
+#if DEPLOY_ISO2_CODEC == SUPPORT_YES
+	struct iso2EXIDocument exi2Doc;
+#endif /* DEPLOY_ISO2_CODEC == SUPPORT_YES */
+	int errn = 0;
+
+	bitstream_t iStream, oStream;
+
+#if EXI_STREAM == BYTE_ARRAY
+	size_t posDecode;
+	size_t posEncode;
+#endif /* EXI_STREAM == BYTE_ARRAY */
+
+
+#if EXI_DEBUG == 1
+	/* The Eclipse console has buffering problems on Windows e.g, Debug mode */
+	setvbuf(stdout, NULL, _IONBF, 0);
+	setvbuf(stderr, NULL, _IONBF, 0);
+#endif /*EXI_DEBUG*/
+
+	if (argc != 3) {
+		printf("Usage: %s exiInput exiOutput\n", argv[0]);
+		return -1;
+	}
+
+#if EXI_STREAM == BYTE_ARRAY
+	/* input pos */
+	posDecode = 0;
+	/* parse EXI stream to internal byte structures  */
+	errn = readBytesFromFile(argv[1], bufferIn, BUFFER_SIZE, &posDecode);
+	if (errn != 0) {
+		printf("Problems while reading file into buffer, err==%d\n", errn);
+		return errn;
+	}
+	posDecode = 0; /* reset position */
+#endif /* EXI_STREAM == BYTE_ARRAY */
+
+	/* setup input stream */
+#if EXI_STREAM == BYTE_ARRAY
+	iStream.size = BUFFER_SIZE;
+	iStream.data = bufferIn;
+	iStream.pos = &posDecode;
+#endif /* EXI_STREAM == BYTE_ARRAY */
+
+	iStream.buffer = 0;
+	iStream.capacity = 0;
+
+
+	printf("Start decoding EXI stream to databinding layer \n");
+#if DEPLOY_DIN_CODEC == SUPPORT_YES
+	errn = decode_dinExiDocument(&iStream, &dinDoc);
+#endif /* DEPLOY_DIN_CODEC == SUPPORT_YES */
+#if DEPLOY_ISO1_CODEC == SUPPORT_YES
+	errn = decode_iso1ExiDocument(&iStream, &exi1Doc);
+#endif /* DEPLOY_ISO1_CODEC == SUPPORT_YES */
+#if DEPLOY_ISO2_CODEC == SUPPORT_YES
+	errn = decode_iso2ExiDocument(&iStream, &exi2Doc);
+#endif /* DEPLOY_ISO2_CODEC == SUPPORT_YES */
+	if (errn != 0) {
+		printf("Problems while decoding EXI stream, err==%d\n", errn);
+		return errn;
+	}
+
+#if EXI_STREAM == BYTE_ARRAY
+	/* setup output stream */
+	posEncode = 0;
+	oStream.size = BUFFER_SIZE;
+	oStream.data = bufferOut;
+	oStream.pos = &posEncode;
+#endif
+
+	oStream.buffer = 0;
+	oStream.capacity = 8;
+
+	printf("Start encoding databinding layer to EXI \n");
+
+#if DEPLOY_DIN_CODEC == SUPPORT_YES
+	errn = encode_dinExiDocument(&oStream, &dinDoc);
+#endif /* DEPLOY_DIN_CODEC == SUPPORT_YES */
+#if DEPLOY_ISO1_CODEC == SUPPORT_YES
+	errn = encode_iso1ExiDocument(&oStream, &exi1Doc);
+#endif /* DEPLOY_ISO1_CODEC == SUPPORT_YES */
+#if DEPLOY_ISO2_CODEC == SUPPORT_YES
+	errn = encode_iso2ExiDocument(&oStream, &exi2Doc);
+#endif /* DEPLOY_ISO2_CODEC == SUPPORT_YES */
+	if (errn != 0) {
+		printf("Problems while encoding databinding layer, err==%d\n", errn);
+		return errn;
+	}
+
+	printf("EXI roundtrip done with success\n");
+#if EXI_STREAM == BYTE_ARRAY
+	/* write to file */
+	writeBytesToFile(oStream.data, posEncode, argv[2]);
+#endif
+
+
+	return errn;
+}

+ 2584 - 0
EVSE/Projects/CCS/Apps/exi_engine/test/main_example.c

@@ -0,0 +1,2584 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @author Sebastian.Kaebisch@siemens.com
+ * @version 0.9.4
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ *
+ ********************************************************************/
+
+
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <stdlib.h>
+
+#include <string.h>
+
+#include "../codec/EXITypes.h"
+
+#include "../appHandshake/appHandEXIDatatypes.h"
+#include "../appHandshake/appHandEXIDatatypesEncoder.h"
+#include "../appHandshake/appHandEXIDatatypesDecoder.h"
+
+/* Activate support for DIN */
+#include "../din/dinEXIDatatypes.h"
+#if DEPLOY_DIN_CODEC == SUPPORT_YES
+#include "../din/dinEXIDatatypesEncoder.h"
+#include "../din/dinEXIDatatypesDecoder.h"
+#endif /* DEPLOY_DIN_CODEC == SUPPORT_YES */
+
+/* Activate support for XMLDSIG */
+#include "../xmldsig/xmldsigEXIDatatypes.h"
+#if DEPLOY_XMLDSIG_CODEC == SUPPORT_YES
+#include "../xmldsig/xmldsigEXIDatatypesEncoder.h"
+#include "../xmldsig/xmldsigEXIDatatypesDecoder.h"
+#endif /* DEPLOY_XMLDSIG_CODEC == SUPPORT_YES */
+
+/* Activate support for ISO1 */
+#include "../iso1/iso1EXIDatatypes.h"
+#if DEPLOY_ISO1_CODEC == SUPPORT_YES
+#include "../iso1/iso1EXIDatatypesEncoder.h"
+#include "../iso1/iso1EXIDatatypesDecoder.h"
+#endif /* DEPLOY_ISO1_CODEC == SUPPORT_YES */
+
+/* Activate support for ISO2 */
+#include "../iso2/iso2EXIDatatypes.h"
+#if DEPLOY_ISO2_CODEC == SUPPORT_YES
+#include "../iso2/iso2EXIDatatypesEncoder.h"
+#include "../iso2/iso2EXIDatatypesDecoder.h"
+#endif /* DEPLOY_ISO2_CODEC == SUPPORT_YES */
+
+#include "../transport/v2gtp.h"
+
+#define BUFFER_SIZE 256
+uint8_t buffer1[BUFFER_SIZE];
+uint8_t buffer2[BUFFER_SIZE];
+
+#define ERROR_UNEXPECTED_REQUEST_MESSAGE -601
+#define ERROR_UNEXPECTED_SESSION_SETUP_RESP_MESSAGE -602
+#define ERROR_UNEXPECTED_SERVICE_DISCOVERY_RESP_MESSAGE -602
+#define ERROR_UNEXPECTED_SERVICE_DETAILS_RESP_MESSAGE -603
+#define ERROR_UNEXPECTED_PAYMENT_SERVICE_SELECTION_RESP_MESSAGE -604
+#define ERROR_UNEXPECTED_PAYMENT_DETAILS_RESP_MESSAGE -605
+#define ERROR_UNEXPECTED_AUTHORIZATION_RESP_MESSAGE -606
+#define ERROR_UNEXPECTED_CHARGE_PARAMETER_DISCOVERY_RESP_MESSAGE -607
+#define ERROR_UNEXPECTED_POWER_DELIVERY_RESP_MESSAGE -608
+#define ERROR_UNEXPECTED_CHARGING_STATUS_RESP_MESSAGE -609
+#define ERROR_UNEXPECTED_METERING_RECEIPT_RESP_MESSAGE -610
+#define ERROR_UNEXPECTED_SESSION_STOP_RESP_MESSAGE -611
+#define ERROR_UNEXPECTED_CABLE_CHECK_RESP_MESSAGE -612
+#define ERROR_UNEXPECTED_PRE_CHARGE_RESP_MESSAGE -612
+#define ERROR_UNEXPECTED_CURRENT_DEMAND_RESP_MESSAGE -613
+#define ERROR_UNEXPECTED_WELDING_DETECTION_RESP_MESSAGE -614
+
+
+static int writeStringToEXIString(char* string, exi_string_character_t* exiString) {
+	int pos = 0;
+	while(string[pos]!='\0')
+	{
+		exiString[pos] = string[pos];
+		pos++;
+	}
+
+	return pos;
+}
+
+static void printASCIIString(exi_string_character_t* string, uint16_t len) {
+	unsigned int i;
+	for(i=0; i<len; i++) {
+		printf("%c",(char)string[i]);
+	}
+	printf("\n");
+}
+
+
+static void printBinaryArray(uint8_t* byte, uint16_t len) {
+	unsigned int i;
+	for(i=0; i<len; i++) {
+		printf("%d ",byte[i]);
+	}
+	printf("\n");
+}
+
+static void copyBytes(uint8_t* from, uint16_t len, uint8_t* to) {
+	int i;
+	for(i=0; i<len; i++) {
+		to[i] = from[i];
+	}
+}
+
+
+/** Example implementation of the app handshake protocol for the EVSE side  */
+static int appHandshakeHandler(bitstream_t* iStream, bitstream_t* oStream) {
+	struct appHandEXIDocument appHandResp;
+	int i;
+	struct appHandEXIDocument exiDoc;
+	int errn = 0;
+	uint32_t payloadLengthDec;
+
+
+	if ( (errn = read_v2gtpHeader(iStream->data, &payloadLengthDec)) == 0) {
+		*iStream->pos = V2GTP_HEADER_LENGTH;
+		if( (errn = decode_appHandExiDocument(iStream, &exiDoc)) ) {
+			/* an error occured */
+			return errn;
+		}
+
+	}
+
+
+
+
+
+	printf("EVSE side: List of application handshake protocols of the EV \n");
+
+	for(i=0;i<exiDoc.supportedAppProtocolReq.AppProtocol.arrayLen;i++) {
+		printf("\tProtocol entry #=%d\n",(i+1));
+		printf("\t\tProtocolNamespace=");
+		printASCIIString(exiDoc.supportedAppProtocolReq.AppProtocol.array[i].ProtocolNamespace.characters, exiDoc.supportedAppProtocolReq.AppProtocol.array[i].ProtocolNamespace.charactersLen);
+		printf("\t\tVersion=%d.%d\n", exiDoc.supportedAppProtocolReq.AppProtocol.array[i].VersionNumberMajor, exiDoc.supportedAppProtocolReq.AppProtocol.array[i].VersionNumberMinor);
+		printf("\t\tSchemaID=%d\n", exiDoc.supportedAppProtocolReq.AppProtocol.array[i].SchemaID);
+		printf("\t\tPriority=%d\n", exiDoc.supportedAppProtocolReq.AppProtocol.array[i].Priority);
+	}
+
+	/* prepare response handshake response:
+	 * it is assumed, we support the 15118 1.0 version :-) */
+	init_appHandEXIDocument(&appHandResp);
+	appHandResp.supportedAppProtocolRes_isUsed = 1u;
+	appHandResp.supportedAppProtocolRes.ResponseCode = appHandresponseCodeType_OK_SuccessfulNegotiation;
+	appHandResp.supportedAppProtocolRes.SchemaID = exiDoc.supportedAppProtocolReq.AppProtocol.array[0].SchemaID; /* signal the protocol by the provided schema id*/
+	appHandResp.supportedAppProtocolRes.SchemaID_isUsed = 1u;
+
+	*oStream->pos = V2GTP_HEADER_LENGTH;
+	if( (errn = encode_appHandExiDocument(oStream, &appHandResp)) == 0) {
+		errn = write_v2gtpHeader(oStream->data, (*oStream->pos)-V2GTP_HEADER_LENGTH, V2GTP_EXI_TYPE);
+	}
+
+
+	return errn;
+}
+
+
+static int appHandshake()
+{
+	bitstream_t stream1;
+	bitstream_t stream2;
+
+	uint32_t payloadLengthDec;
+	size_t pos1 = V2GTP_HEADER_LENGTH; /* v2gtp header */
+	size_t pos2 = 0;
+
+	struct appHandEXIDocument handshake;
+	struct appHandEXIDocument handshakeResp;
+
+	int errn = 0;
+
+	char* ns0 = "urn:iso:15118:2:2010:MsgDef";
+	char* ns1 = "urn:din:70121:2012:MsgDef";
+
+	stream1.size = BUFFER_SIZE;
+	stream1.data = buffer1;
+	stream1.pos = &pos1;
+
+	stream2.size = BUFFER_SIZE;
+	stream2.data = buffer2;
+	stream2.pos = &pos2;
+
+	init_appHandEXIDocument(&handshake);
+
+	printf("EV side: setup data for the supported application handshake request message\n");
+
+	/* set up ISO/IEC 15118 Version 1.0 information */
+	handshake.supportedAppProtocolReq_isUsed = 1u;
+	handshake.supportedAppProtocolReq.AppProtocol.arrayLen = 2; /* we have only two protocols implemented */
+
+	handshake.supportedAppProtocolReq.AppProtocol.array[0].ProtocolNamespace.charactersLen =
+			writeStringToEXIString(ns0, handshake.supportedAppProtocolReq.AppProtocol.array[0].ProtocolNamespace.characters);
+	handshake.supportedAppProtocolReq.AppProtocol.array[0].SchemaID = 1;
+	handshake.supportedAppProtocolReq.AppProtocol.array[0].VersionNumberMajor = 1;
+	handshake.supportedAppProtocolReq.AppProtocol.array[0].VersionNumberMinor = 0;
+	handshake.supportedAppProtocolReq.AppProtocol.array[0].Priority = 1;
+
+	handshake.supportedAppProtocolReq.AppProtocol.array[1].ProtocolNamespace.charactersLen =
+			writeStringToEXIString(ns1, handshake.supportedAppProtocolReq.AppProtocol.array[1].ProtocolNamespace.characters);
+	handshake.supportedAppProtocolReq.AppProtocol.array[1].SchemaID = 2;
+	handshake.supportedAppProtocolReq.AppProtocol.array[1].VersionNumberMajor = 1;
+	handshake.supportedAppProtocolReq.AppProtocol.array[1].VersionNumberMinor = 0;
+	handshake.supportedAppProtocolReq.AppProtocol.array[1].Priority = 2;
+
+	/* send app handshake request */
+	if( (errn = encode_appHandExiDocument(&stream1, &handshake)) == 0) {
+		if ( write_v2gtpHeader(stream1.data, pos1-V2GTP_HEADER_LENGTH, V2GTP_EXI_TYPE) == 0 ) {
+			printf("EV side: send message to the EVSE\n");
+		}
+	}
+
+	if (errn == 0) {
+		/* read app handshake request & generate response */
+		errn = appHandshakeHandler(&stream1, &stream2);
+	}
+
+	if (errn == 0) {
+		/* check response */
+		if ( (errn = read_v2gtpHeader(stream2.data, &payloadLengthDec)) == 0) {
+			pos2 = V2GTP_HEADER_LENGTH;
+
+			if(decode_appHandExiDocument(&stream2, &handshakeResp) == 0) {
+				printf("EV side: Response of the EVSE \n");
+				if(handshakeResp.supportedAppProtocolRes.ResponseCode == appHandresponseCodeType_OK_SuccessfulNegotiation) {
+					printf("\t\tResponseCode=OK_SuccessfulNegotiation\n");
+					printf("\t\tSchemaID=%d\n",handshakeResp.supportedAppProtocolRes.SchemaID);
+				}
+			}
+		}
+
+	}
+
+	if (errn != 0) {
+		printf("appHandshake error %d \n", errn);
+	}
+
+
+	return errn;
+
+}
+
+
+
+
+
+#if DEPLOY_ISO2_CODEC == SUPPORT_YES
+
+static void printEVSEStatus2(struct iso2EVSEStatusType* status)
+{
+	printf("\tEVSEStatus:\n");
+	printf("\t\tEVSENotification=%d\n", status->EVSENotification);
+	printf("\t\tNotificationMaxDelay=%d\n", status->NotificationMaxDelay);
+}
+
+/* serializes EXI stream and adds V2G TP header */
+static int serialize2EXI2Stream(struct iso2EXIDocument* exiIn, bitstream_t* stream) {
+	int errn;
+	*stream->pos = V2GTP_HEADER_LENGTH;  /* v2gtp header */
+	if( (errn = encode_iso2ExiDocument(stream, exiIn)) == 0) {
+		errn = write_v2gtpHeader(stream->data, (*stream->pos)-V2GTP_HEADER_LENGTH, V2GTP_EXI_TYPE);
+	}
+	return errn;
+}
+
+
+/* deserializes V2G TP header and decodes right away EXI stream */
+static int deserialize2Stream2EXI(bitstream_t* streamIn, struct iso2EXIDocument* exi) {
+	int errn;
+	uint32_t payloadLength;
+
+	*streamIn->pos = 0;
+	if ( (errn = read_v2gtpHeader(streamIn->data, &payloadLength)) == 0) {
+		*streamIn->pos += V2GTP_HEADER_LENGTH;
+
+		errn = decode_iso2ExiDocument(streamIn, exi);
+	}
+	return errn;
+}
+
+static int sessionSetup2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) {
+	printf("EVSE side: sessionSetup called\n"  );
+	printf("\tReceived data:\n");
+	printf("\tHeader SessionID=");
+	printBinaryArray(exiIn->V2G_Message.Header.SessionID.bytes, exiIn->V2G_Message.Header.SessionID.bytesLen);
+	printf("\t\t EVCCID=%d\n", exiIn->V2G_Message.Body.SessionSetupReq.EVCCID.bytes[0]);
+
+	exiOut->V2G_Message_isUsed = 1u;
+
+	/* generate an unique sessionID */
+	init_iso2MessageHeaderType(&exiOut->V2G_Message.Header);
+	exiOut->V2G_Message.Header.SessionID.bytes[0] = 1;
+	exiOut->V2G_Message.Header.SessionID.bytes[1] = 2;
+	exiOut->V2G_Message.Header.SessionID.bytes[2] = 3;
+	exiOut->V2G_Message.Header.SessionID.bytes[3] = 4;
+	exiOut->V2G_Message.Header.SessionID.bytes[4] = 5;
+	exiOut->V2G_Message.Header.SessionID.bytes[5] = 6;
+	exiOut->V2G_Message.Header.SessionID.bytes[6] = 7;
+	exiOut->V2G_Message.Header.SessionID.bytes[7] = 8;
+	exiOut->V2G_Message.Header.SessionID.bytesLen = 8;
+
+	/* Prepare data for EV */
+	init_iso2BodyType(&exiOut->V2G_Message.Body);
+
+	exiOut->V2G_Message.Body.SessionSetupRes_isUsed = 1u;
+	init_iso2SessionSetupResType(&exiOut->V2G_Message.Body.SessionSetupRes);
+
+	exiOut->V2G_Message.Body.SessionSetupRes.ResponseCode = iso2responseCodeType_OK;
+	exiOut->V2G_Message.Body.SessionSetupRes.EVSEID.characters[0] = 0;
+	exiOut->V2G_Message.Body.SessionSetupRes.EVSEID.characters[1] = 20;
+	exiOut->V2G_Message.Body.SessionSetupRes.EVSEID.charactersLen = 2;
+	exiOut->V2G_Message.Body.SessionSetupRes.EVSETimeStamp_isUsed = 1u;
+	exiOut->V2G_Message.Body.SessionSetupRes.EVSETimeStamp = 123456789;
+
+	return 0;
+}
+
+static int serviceDiscovery2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) {
+	int i;
+
+	printf("EVSE side: serviceDiscovery called\n"  );
+	printf("\tReceived data:\n");
+	printf("\tHeader SessionID=");
+	printBinaryArray(exiIn->V2G_Message.Header.SessionID.bytes, exiIn->V2G_Message.Header.SessionID.bytesLen);
+	if(exiIn->V2G_Message.Body.ServiceDiscoveryReq.SupportedServiceIDs_isUsed) {
+		for(i=0;i<exiIn->V2G_Message.Body.ServiceDiscoveryReq.SupportedServiceIDs.ServiceID.arrayLen; i++) {
+			printf("\t\tSupportedServiceID=%d\n", exiIn->V2G_Message.Body.ServiceDiscoveryReq.SupportedServiceIDs.ServiceID.array[i]);
+		}
+	}
+
+	/* Prepare data for EV */
+	exiOut->V2G_Message_isUsed = 1u;
+	init_iso2BodyType(&exiOut->V2G_Message.Body);
+
+	exiOut->V2G_Message.Body.ServiceDiscoveryRes_isUsed = 1u;
+	init_iso2ServiceDiscoveryResType(&exiOut->V2G_Message.Body.ServiceDiscoveryRes);
+
+
+	exiOut->V2G_Message.Body.ServiceDiscoveryRes.VASList_isUsed = 0u;  /* we do not provide VAS */
+	exiOut->V2G_Message.Body.ServiceDiscoveryRes.ResponseCode = iso2responseCodeType_OK;
+
+	exiOut->V2G_Message.Body.ServiceDiscoveryRes.PaymentOptionList.PaymentOption.array[0] = iso2paymentOptionType_ExternalPayment; /* EVSE handles the payment */
+	exiOut->V2G_Message.Body.ServiceDiscoveryRes.PaymentOptionList.PaymentOption.array[1] = iso2paymentOptionType_Contract;
+	exiOut->V2G_Message.Body.ServiceDiscoveryRes.PaymentOptionList.PaymentOption.arrayLen = 2;
+
+	exiOut->V2G_Message.Body.ServiceDiscoveryRes.EnergyTransferServiceList.Service.arrayLen = 1;
+	exiOut->V2G_Message.Body.ServiceDiscoveryRes.EnergyTransferServiceList.Service.array[0].ServiceID = 1; /* ID of the charge service */
+	exiOut->V2G_Message.Body.ServiceDiscoveryRes.EnergyTransferServiceList.Service.array[0].FreeService = 1;
+
+	exiOut->V2G_Message.Body.ServiceDiscoveryRes.VASList_isUsed = 0u; /* no value added service requested */
+
+	return 0;
+}
+
+
+static int serviceDetail2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) {
+
+	printf("EVSE side: serviceDetail called\n"  );
+	printf("\tReceived data:\n");
+	printf("\tHeader SessionID=");
+	printBinaryArray(exiIn->V2G_Message.Header.SessionID.bytes, exiIn->V2G_Message.Header.SessionID.bytesLen);
+	printf("\t\t ServiceDetailID=%d\n",exiIn->V2G_Message.Body.ServiceDetailReq.ServiceID);
+
+
+	/* Prepare data for EV */
+	exiOut->V2G_Message_isUsed = 1u;
+	init_iso2BodyType(&exiOut->V2G_Message.Body);
+
+	exiOut->V2G_Message.Body.ServiceDetailRes_isUsed= 1u;
+	init_iso2ServiceDetailResType(&exiOut->V2G_Message.Body.ServiceDetailRes);
+
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceID = 1234;
+
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList_isUsed = 1u;
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.arrayLen = 2;
+
+	/* Parameter Set 1*/
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].ParameterSetID = 1;
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.arrayLen = 2;
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].Name.charactersLen = 8;
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].Name.characters[0] = 'P';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].Name.characters[1] = 'r';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].Name.characters[2] = 'o';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].Name.characters[3] = 't';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].Name.characters[4]= 'o';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].Name.characters[5] = 'c';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].Name.characters[6] = 'o';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].Name.characters[7] = 'l';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].intValue = 15119;
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].intValue_isUsed = 1u;
+
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].Name.charactersLen = 4;
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].Name.characters[0] = 'N';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].Name.characters[1] = 'a';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].Name.characters[2] = 'm';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].Name.characters[3] = 'e';
+
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].stringValue_isUsed = 1u;
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].stringValue.charactersLen = 3;
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].stringValue.characters[0] = 'V';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].stringValue.characters[1] = '2';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].stringValue.characters[2] = 'G';
+
+	/* Parameter Set 2 */
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].ParameterSetID = 2;
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.arrayLen = 1;
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].Name.charactersLen = 7;
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].Name.characters[0] = 'C';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].Name.characters[1] = 'h';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].Name.characters[2] = 'a';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].Name.characters[3] = 'n';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].Name.characters[4] = 'n';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].Name.characters[5] = 'e';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].Name.characters[6] = 'l';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].physicalValue_isUsed = 1u;
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].physicalValue.Value = 1234;
+
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].physicalValue.Exponent = 1;
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].physicalValue.Value = 2;
+
+	exiOut->V2G_Message.Body.ServiceDetailRes.ResponseCode = iso2responseCodeType_OK;
+
+	return 0;
+}
+
+
+static int paymentServiceSelection2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) {
+	int i;
+
+	printf("EVSE side: paymentServiceSelection called\n"  );
+	printf("\tReceived data:\n");
+	printf("\tHeader SessionID=");
+	printBinaryArray(exiIn->V2G_Message.Header.SessionID.bytes, exiIn->V2G_Message.Header.SessionID.bytesLen);
+
+	if(exiIn->V2G_Message.Body.PaymentServiceSelectionReq.SelectedPaymentOption == iso2paymentOptionType_ExternalPayment)  {
+		printf("\t\t SelectedPaymentOption=ExternalPayment\n");
+	}
+
+	if(exiIn->V2G_Message.Body.PaymentServiceSelectionReq.SelectedVASList_isUsed) {
+		for(i=0; i<exiIn->V2G_Message.Body.PaymentServiceSelectionReq.SelectedVASList.SelectedService.arrayLen;i++)
+		{
+			printf("\t\t ServiceID=%d\n", exiIn->V2G_Message.Body.PaymentServiceSelectionReq.SelectedVASList.SelectedService.array[i].ServiceID);
+			printf("\t\t ParameterSetID=%d\n", exiIn->V2G_Message.Body.PaymentServiceSelectionReq.SelectedVASList.SelectedService.array[i].ParameterSetID);
+		}
+	}
+
+	/* Prepare data for EV */
+	exiOut->V2G_Message_isUsed = 1u;
+	init_iso2BodyType(&exiOut->V2G_Message.Body);
+
+	exiOut->V2G_Message.Body.PaymentServiceSelectionRes_isUsed= 1u;
+	init_iso2PaymentServiceSelectionResType(&exiOut->V2G_Message.Body.PaymentServiceSelectionRes);
+
+	exiOut->V2G_Message.Body.ServiceDetailRes.ResponseCode = iso2responseCodeType_OK;
+
+	return 0;
+}
+
+
+static int paymentDetails2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) {
+
+	printf("EVSE side: paymentDetails called\n"  );
+	printf("\tReceived data:\n");
+
+	printf("\t\t eMAID=%d\n", exiIn->V2G_Message.Body.PaymentDetailsReq.eMAID.characters[0]);
+	printf("\t\t ID=%c%c\n", exiIn->V2G_Message.Body.PaymentDetailsReq.ContractSignatureCertChain.Id.characters[0], exiIn->V2G_Message.Body.PaymentDetailsReq.ContractSignatureCertChain.Id.characters[1]);
+	printf("\t\t Certificate=%c%c\n", exiIn->V2G_Message.Body.PaymentDetailsReq.ContractSignatureCertChain.Certificate.bytes[0],  exiIn->V2G_Message.Body.PaymentDetailsReq.ContractSignatureCertChain.Certificate.bytes[1]);
+	printf("\t\t SubCertificate 1=%c%c\n", exiIn->V2G_Message.Body.PaymentDetailsReq.ContractSignatureCertChain.SubCertificates.Certificate.array[0].bytes[0], exiIn->V2G_Message.Body.PaymentDetailsReq.ContractSignatureCertChain.SubCertificates.Certificate.array[0].bytes[1]);
+	printf("\t\t SubCertificate 2=%c%c\n", exiIn->V2G_Message.Body.PaymentDetailsReq.ContractSignatureCertChain.SubCertificates.Certificate.array[1].bytes[0], exiIn->V2G_Message.Body.PaymentDetailsReq.ContractSignatureCertChain.SubCertificates.Certificate.array[1].bytes[1]);
+
+	/* Prepare data for EV */
+	exiOut->V2G_Message_isUsed = 1u;
+	init_iso2BodyType(&exiOut->V2G_Message.Body);
+
+	exiOut->V2G_Message.Body.PaymentDetailsRes_isUsed = 1u;
+	init_iso2PaymentDetailsResType(&exiOut->V2G_Message.Body.PaymentDetailsRes);
+
+	exiOut->V2G_Message.Body.PaymentDetailsRes.ResponseCode = iso2responseCodeType_OK;
+	exiOut->V2G_Message.Body.PaymentDetailsRes.GenChallenge.bytesLen = 1;
+	exiOut->V2G_Message.Body.PaymentDetailsRes.GenChallenge.bytes[0] = 1;
+	exiOut->V2G_Message.Body.PaymentDetailsRes.EVSETimeStamp = 123456;
+
+	return 0;
+}
+
+
+static int authorization2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) {
+
+	printf("EVSE: Authorization called\n"  );
+	printf("\tReceived data:\n");
+
+	if(exiIn->V2G_Message.Body.AuthorizationReq.GenChallenge_isUsed) {
+		printf("\t\t\t GenChallenge=%d\n", exiIn->V2G_Message.Body.AuthorizationReq.GenChallenge.bytes[0]);
+	}
+	if(exiIn->V2G_Message.Body.AuthorizationReq.Id_isUsed ) {
+		printf("\t\t\t ID=%c%c%c\n", exiIn->V2G_Message.Body.AuthorizationReq.Id.characters[0], exiIn->V2G_Message.Body.AuthorizationReq.Id.characters[1], exiIn->V2G_Message.Body.AuthorizationReq.Id.characters[2]);
+	}
+
+
+	/* Prepare data for EV */
+	exiOut->V2G_Message_isUsed = 1u;
+	init_iso2BodyType(&exiOut->V2G_Message.Body);
+
+	exiOut->V2G_Message.Body.AuthorizationRes_isUsed = 1u;
+	init_iso2AuthorizationResType(&exiOut->V2G_Message.Body.AuthorizationRes);
+
+	exiOut->V2G_Message.Body.AuthorizationRes.ResponseCode = iso2responseCodeType_OK;
+	exiOut->V2G_Message.Body.AuthorizationRes.EVSEProcessing = iso2EVSEProcessingType_Finished;
+
+	return 0;
+}
+
+
+static int chargeParameterDiscovery2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) {
+
+	printf("EVSE side: chargeParameterDiscovery called\n"  );
+	printf("\tReceived data:\n");
+
+	if(exiIn->V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVBidirectionalParameter_isUsed) {
+		printf("\t\t DepartureTime=%d\n", exiIn->V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVBidirectionalParameter.DepartureTime);
+		printf("\t\t EVMaximumChargeCurrent=%d\n", exiIn->V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVBidirectionalParameter.EVMaximumChargeCurrent.Value);
+	}
+
+	/* Prepare data for EV */
+	exiOut->V2G_Message_isUsed = 1u;
+	init_iso2BodyType(&exiOut->V2G_Message.Body);
+
+	exiOut->V2G_Message.Body.ChargeParameterDiscoveryRes_isUsed = 1u;
+	init_iso2ChargeParameterDiscoveryResType(&exiOut->V2G_Message.Body.ChargeParameterDiscoveryRes);
+
+	exiOut->V2G_Message.Body.ChargeParameterDiscoveryRes.ResponseCode = iso2responseCodeType_OK_CertificateExpiresSoon;
+	exiOut->V2G_Message.Body.ChargeParameterDiscoveryRes.EVSEProcessing = iso2EVSEProcessingType_Ongoing;
+	exiOut->V2G_Message.Body.ChargeParameterDiscoveryRes.EVSEEnergyTransferParameter_isUsed = 1u;
+	/*exiOut->V2G_Message.Body.ChargeParameterDiscoveryRes.EVSEEnergyTransferParameter = 0;*/
+	return 0;
+}
+
+
+static int powerDelivery2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) {
+	printf("EVSE side: powerDelivery called\n"  );
+	printf("\tReceived data:\n");
+
+	printf("\t\t  ChargeProgress=%d\n", exiIn->V2G_Message.Body.PowerDeliveryReq.ChargeProgress);
+	printf("\t\t  SAScheduleTupleID=%d\n", exiIn->V2G_Message.Body.PowerDeliveryReq.SAScheduleTupleID);
+
+	/* Prepare data for EV */
+	exiOut->V2G_Message_isUsed = 1u;
+	init_iso2BodyType(&exiOut->V2G_Message.Body);
+
+	exiOut->V2G_Message.Body.PowerDeliveryRes_isUsed = 1u;
+	init_iso2PowerDeliveryResType(&exiOut->V2G_Message.Body.PowerDeliveryRes);
+
+	exiOut->V2G_Message.Body.PowerDeliveryRes.ResponseCode = iso2responseCodeType_OK;
+
+	exiOut->V2G_Message.Body.PowerDeliveryRes.EVSEStatus_isUsed = 1;
+	exiOut->V2G_Message.Body.PowerDeliveryRes.EVSEStatus.EVSENotification = iso2EVSENotificationType_StopCharging;
+	exiOut->V2G_Message.Body.PowerDeliveryRes.EVSEStatus.NotificationMaxDelay=12;
+
+	exiOut->V2G_Message.Body.PowerDeliveryRes.EVSEProcessing = iso2EVSEProcessingType_Ongoing_WaitingForCustomerInteraction;
+
+	return 0;
+}
+
+
+static int chargingStatus2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) {
+
+	printf("EVSE side: chargingStatus called\n"  );
+
+	/* Prepare data for EV */
+	exiOut->V2G_Message_isUsed = 1u;
+	init_iso2BodyType(&exiOut->V2G_Message.Body);
+
+	exiOut->V2G_Message.Body.ChargingStatusRes_isUsed = 1u;
+	init_iso2ChargingStatusResType(&exiOut->V2G_Message.Body.ChargingStatusRes);
+
+
+	exiOut->V2G_Message.Body.ChargingStatusRes.ResponseCode = iso2responseCodeType_OK;
+	exiOut->V2G_Message.Body.ChargingStatusRes.EVSEID.characters[0]= 'A';
+	exiOut->V2G_Message.Body.ChargingStatusRes.EVSEID.charactersLen =1;
+
+	exiOut->V2G_Message.Body.ChargingStatusRes.EVSEStatus.EVSENotification = iso2EVSENotificationType_ReNegotiation;
+	exiOut->V2G_Message.Body.ChargingStatusRes.EVSEStatus.NotificationMaxDelay=123;
+	exiOut->V2G_Message.Body.ChargingStatusRes.ReceiptRequired = 1;
+	exiOut->V2G_Message.Body.ChargingStatusRes.ReceiptRequired_isUsed = 1;
+
+	return 0;
+}
+
+
+static int meteringReceipt2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) {
+
+	printf("EVSE side: meteringReceipt called\n"  );
+	printf("\tReceived data:\n");
+
+	printf("\t\t ID=%c%c%c\n", exiIn->V2G_Message.Body.MeteringReceiptReq.Id.characters[0], exiIn->V2G_Message.Body.MeteringReceiptReq.Id.characters[1], exiIn->V2G_Message.Body.MeteringReceiptReq.Id.characters[2]);
+	printf("\t\t SAScheduleTupleID=%d\n", exiIn->V2G_Message.Body.MeteringReceiptReq.SAScheduleTupleID);
+	printf("\t\t SessionID=%d\n", exiIn->V2G_Message.Body.MeteringReceiptReq.SessionID.bytes[1]);
+	printf("\t\t MeterInfo.MeterStatus=%d\n", exiIn->V2G_Message.Body.MeteringReceiptReq.MeterInfo.MeterStatus);
+	printf("\t\t MeterInfo.MeterID=%d\n",		exiIn->V2G_Message.Body.MeteringReceiptReq.MeterInfo.MeterID.characters[0]);
+
+	/* Prepare data for EV */
+	exiOut->V2G_Message_isUsed = 1u;
+	init_iso2BodyType(&exiOut->V2G_Message.Body);
+
+	exiOut->V2G_Message.Body.MeteringReceiptRes_isUsed = 1u;
+	init_iso2MeteringReceiptResType(&exiOut->V2G_Message.Body.MeteringReceiptRes);
+
+	exiOut->V2G_Message.Body.MeteringReceiptRes.ResponseCode = iso2responseCodeType_FAILED;
+
+	return 0;
+}
+
+static int sessionStop2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) {
+
+	printf("EVSE side: sessionStop called\n"  );
+	printf("\tReceived data:\n");
+	printf("\tHeader SessionID=");
+	printBinaryArray(exiIn->V2G_Message.Header.SessionID.bytes, exiIn->V2G_Message.Header.SessionID.bytesLen);
+	printf("\t\t ChargingSession=%d\n", exiIn->V2G_Message.Body.SessionStopReq.ChargingSession);
+
+	/* Prepare data for EV */
+	exiOut->V2G_Message_isUsed = 1u;
+	init_iso2BodyType(&exiOut->V2G_Message.Body);
+
+	exiOut->V2G_Message.Body.SessionStopRes_isUsed = 1u;
+	init_iso2SessionStopResType(&exiOut->V2G_Message.Body.SessionStopRes);
+
+	exiOut->V2G_Message.Body.SessionStopRes.ResponseCode = iso2responseCodeType_OK;
+
+	return 0;
+}
+
+static int cableCheck2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) {
+
+	printf("EVSE side: cableCheck called\n"  );
+
+	/* Prepare data for EV */
+	exiOut->V2G_Message_isUsed = 1u;
+	init_iso2BodyType(&exiOut->V2G_Message.Body);
+
+	exiOut->V2G_Message.Body.CableCheckRes_isUsed = 1u;
+	init_iso2CableCheckResType(&exiOut->V2G_Message.Body.CableCheckRes);
+
+	exiOut->V2G_Message.Body.CableCheckRes.ResponseCode = iso2responseCodeType_OK;
+
+	exiOut->V2G_Message.Body.CableCheckRes.EVSEStatus.NotificationMaxDelay = 1234;
+	exiOut->V2G_Message.Body.CableCheckRes.EVSEStatus.EVSENotification= iso2EVSENotificationType_ReNegotiation;
+
+	exiOut->V2G_Message.Body.CableCheckRes.EVSEProcessing = iso2EVSEProcessingType_Finished;
+
+	return 0;
+}
+
+static int preCharge2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) {
+
+	printf("EVSE side: preCharge called\n"  );
+	printf("\tReceived data:\n");
+
+	printf("\t\t EVTargetCurrent=%d (%d)\n", exiIn->V2G_Message.Body.PreChargeReq.EVTargetCurrent.Value, exiIn->V2G_Message.Body.PreChargeReq.EVTargetCurrent.Exponent);
+	printf("\t\t EVTargetVoltage=%d (%d)\n", exiIn->V2G_Message.Body.PreChargeReq.EVTargetVoltage.Value, exiIn->V2G_Message.Body.PreChargeReq.EVTargetVoltage.Exponent);
+
+	/* Prepare data for EV */
+	exiOut->V2G_Message_isUsed = 1u;
+	init_iso2BodyType(&exiOut->V2G_Message.Body);
+
+	exiOut->V2G_Message.Body.PreChargeRes_isUsed = 1u;
+	init_iso2PreChargeResType(&exiOut->V2G_Message.Body.PreChargeRes);
+
+	exiOut->V2G_Message.Body.PreChargeRes.ResponseCode = iso2responseCodeType_OK;
+
+	exiOut->V2G_Message.Body.PreChargeRes.EVSEStatus.EVSENotification = iso2EVSENotificationType_StopCharging;
+	exiOut->V2G_Message.Body.PreChargeRes.EVSEStatus.NotificationMaxDelay= 1234;
+
+	exiOut->V2G_Message.Body.PreChargeRes.EVSEPresentVoltage.Exponent = 3;
+	exiOut->V2G_Message.Body.PreChargeRes.EVSEPresentVoltage.Value= 456;
+
+	return 0;
+}
+
+
+
+static int create_response_message2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) {
+	int errn = ERROR_UNEXPECTED_REQUEST_MESSAGE;
+
+	/* create response message as EXI document */
+	if(exiIn->V2G_Message_isUsed) {
+		init_iso2EXIDocument(exiOut);
+		if (exiIn->V2G_Message.Body.SessionSetupReq_isUsed) {
+			errn = sessionSetup2(exiIn, exiOut);
+		} else if (exiIn->V2G_Message.Body.ServiceDiscoveryReq_isUsed) {
+			errn = serviceDiscovery2(exiIn, exiOut);
+		} else if (exiIn->V2G_Message.Body.ServiceDetailReq_isUsed) {
+			errn = serviceDetail2(exiIn, exiOut);
+		} else if (exiIn->V2G_Message.Body.PaymentServiceSelectionReq_isUsed) {
+			errn = paymentServiceSelection2(exiIn, exiOut);
+		} else if (exiIn->V2G_Message.Body.PaymentDetailsReq_isUsed) {
+			errn = paymentDetails2(exiIn, exiOut);
+		} else if (exiIn->V2G_Message.Body.AuthorizationReq_isUsed) {
+			errn = authorization2(exiIn, exiOut);
+		} else if (exiIn->V2G_Message.Body.ChargeParameterDiscoveryReq_isUsed) {
+			errn = chargeParameterDiscovery2(exiIn, exiOut);
+		} else if (exiIn->V2G_Message.Body.PowerDeliveryReq_isUsed) {
+			errn = powerDelivery2(exiIn, exiOut);
+		} else if (exiIn->V2G_Message.Body.ChargingStatusReq_isUsed) {
+			errn = chargingStatus2(exiIn, exiOut);
+		} else if (exiIn->V2G_Message.Body.MeteringReceiptReq_isUsed) {
+			errn = meteringReceipt2(exiIn, exiOut);
+		} else if (exiIn->V2G_Message.Body.SessionStopReq_isUsed) {
+			errn = sessionStop2(exiIn, exiOut);
+		} else if (exiIn->V2G_Message.Body.CableCheckReq_isUsed) {
+			errn = cableCheck2(exiIn, exiOut);
+		} else if (exiIn->V2G_Message.Body.PreChargeReq_isUsed) {
+			errn = preCharge2(exiIn, exiOut);
+		}
+	}
+
+	return errn;
+}
+
+/* Adapt this to your system setup! */
+/* In this situation EV and EVSE is the same party */
+static int request_response2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) {
+	int errn;
+
+	bitstream_t stream1;
+	bitstream_t stream2;
+
+	size_t pos1;
+	size_t pos2;
+
+	stream1.size = BUFFER_SIZE;
+	stream1.data = buffer1;
+	stream1.pos = &pos1;
+
+	stream2.size = BUFFER_SIZE;
+	stream2.data = buffer2;
+	stream2.pos = &pos2;
+
+	/* EV side */
+	errn = serialize2EXI2Stream(exiIn, &stream1);
+
+	/* --> Start of EVSE side */
+	/* deserialize request message */
+	if (errn == 0) {
+		errn = deserialize2Stream2EXI(&stream1, exiOut);
+	}
+	/* create response message */
+	if (errn == 0) {
+		errn = create_response_message2(exiOut, exiIn);
+	}
+	/* serialize response message */
+	if (errn == 0) {
+		errn = serialize2EXI2Stream(exiIn, &stream2);
+	}
+	/* <-- End of EVSE side */
+
+
+	/* EV side */
+	/* deserialize response message */
+	if (errn == 0) {
+		errn = deserialize2Stream2EXI(&stream2, exiOut);
+	}
+
+	return errn;
+}
+
+
+static int charging2()
+{
+	int errn = 0;
+	int i, j;
+
+	struct iso2EXIDocument exiIn;
+	struct iso2EXIDocument exiOut;
+
+	struct iso2ServiceDetailResType serviceDetailRes;
+	struct iso2PaymentServiceSelectionResType paymentServiceSelectionRes;
+	struct iso2PaymentDetailsResType paymentDetailsRes;
+
+	/* setup header information */
+	init_iso2EXIDocument(&exiIn);
+	exiIn.V2G_Message_isUsed = 1u;
+	init_iso2MessageHeaderType(&exiIn.V2G_Message.Header);
+	exiIn.V2G_Message.Header.SessionID.bytes[0] = 0; /* sessionID is always '0' at the beginning (the response contains the valid sessionID)*/
+	exiIn.V2G_Message.Header.SessionID.bytes[1] = 0;
+	exiIn.V2G_Message.Header.SessionID.bytes[2] = 0;
+	exiIn.V2G_Message.Header.SessionID.bytes[3] = 0;
+	exiIn.V2G_Message.Header.SessionID.bytes[4] = 0;
+	exiIn.V2G_Message.Header.SessionID.bytes[5] = 0;
+	exiIn.V2G_Message.Header.SessionID.bytes[6] = 0;
+	exiIn.V2G_Message.Header.SessionID.bytes[7] = 0;
+	exiIn.V2G_Message.Header.SessionID.bytesLen = 8;
+	exiIn.V2G_Message.Header.Signature_isUsed = 0u;
+
+
+	/************************
+	 * sessionSetup *
+	 ************************/
+	init_iso2BodyType(&exiIn.V2G_Message.Body);
+	exiIn.V2G_Message.Body.SessionSetupReq_isUsed = 1u;
+
+	init_iso2SessionSetupReqType(&exiIn.V2G_Message.Body.SessionSetupReq);
+
+	exiIn.V2G_Message.Body.SessionSetupReq.EVCCID.bytesLen = 1;
+	exiIn.V2G_Message.Body.SessionSetupReq.EVCCID.bytes[0] = 10;
+
+	printf("EV side: call EVSE sessionSetup");
+
+	errn = request_response2(&exiIn, &exiOut);
+
+	if(errn == 0) {
+		/* check, if this is the right response message */
+		if(exiOut.V2G_Message.Body.SessionSetupRes_isUsed) {
+			/* show results of EVSEs answer message */
+			printf("EV side: received response message from EVSE\n");
+			printf("\tHeader SessionID=");
+			printBinaryArray(exiOut.V2G_Message.Header.SessionID.bytes, exiOut.V2G_Message.Header.SessionID.bytesLen);
+			printf("\tResponseCode=%d\n", exiOut.V2G_Message.Body.SessionSetupRes.ResponseCode);
+			printf("\tEVSEID=%d\n",	exiOut.V2G_Message.Body.SessionSetupRes.EVSEID.characters[1]);
+			printf("\tEVSETimeStamp=%li\n", (long int)exiOut.V2G_Message.Body.SessionSetupRes.EVSETimeStamp);
+		} else {
+			errn = ERROR_UNEXPECTED_SESSION_SETUP_RESP_MESSAGE;
+			return errn;
+		}
+	} else {
+		return errn;
+	}
+
+
+	/*******************************************
+	 * serviceDiscovery *
+	 *******************************************/
+	init_iso2BodyType(&exiIn.V2G_Message.Body);
+	exiIn.V2G_Message.Body.ServiceDiscoveryReq_isUsed = 1u;
+
+	init_iso2ServiceDiscoveryReqType(&exiIn.V2G_Message.Body.ServiceDiscoveryReq);
+
+	exiIn.V2G_Message.Body.ServiceDiscoveryReq.SupportedServiceIDs_isUsed = 1u;
+	exiIn.V2G_Message.Body.ServiceDiscoveryReq.SupportedServiceIDs.ServiceID.arrayLen = 1;
+	exiIn.V2G_Message.Body.ServiceDiscoveryReq.SupportedServiceIDs.ServiceID.array[0] = iso2serviceCategoryType_Internet;
+
+	printf("EV side: call EVSE serviceDiscovery");
+
+	errn = request_response2(&exiIn, &exiOut);
+
+	if(errn == 0) {
+		/* check, if this is the right response message */
+		if(exiOut.V2G_Message.Body.ServiceDiscoveryRes_isUsed) {
+			/* show results of EVSEs answer message */
+			printf("EV side: received response message from EVSE\n");
+			printf("\tHeader SessionID=");
+			printBinaryArray(exiOut.V2G_Message.Header.SessionID.bytes, exiOut.V2G_Message.Header.SessionID.bytesLen);
+			printf("\t ResponseCode=%d\n",  exiOut.V2G_Message.Body.ServiceDiscoveryRes.ResponseCode);
+
+			printf("\t Service ResponseCode=%d\n",	exiOut.V2G_Message.Body.ServiceDiscoveryRes.ResponseCode);
+
+			/*printf("\t ServiceID=%d\n",	exiOut.V2G_Message.Body.ServiceDiscoveryRes.ChargeService.ServiceID);
+			printf("\t ServiceName=");
+			printASCIIString(serviceDiscoveryRes.ChargeService.ServiceName.characters, serviceDiscoveryRes.ChargeService.ServiceName.charactersLen);
+			if(serviceDiscoveryRes.PaymentOptionList.PaymentOption.array[1] == v2gpaymentOptionType_Contract) {
+				printf("\t PaymentOption=Contract_paymentOptionType\n");
+			}
+			if(serviceDiscoveryRes.ChargeService.FreeService==1) {
+				printf("\t ChargeService.FreeService=True\n");
+			}
+			if(serviceDiscoveryRes.ChargeService.SupportedEnergyTransferMode.EnergyTransferMode.array[0] == v2gEnergyTransferModeType_DC_combo_core) {
+				printf("\t EnergyTransferMode=AC_single_DC_core\n");
+			}
+			if(serviceDiscoveryRes.ChargeService.SupportedEnergyTransferMode.EnergyTransferMode.array[1] == v2gEnergyTransferModeType_AC_single_phase_core) {
+				printf("\t EnergyTransferMode=AC_single_phase_core_EnergyTransferModeType\n");
+			}
+			printf("\t Value added service list:\n");
+			for(i=0;i<serviceDiscoveryRes.ServiceList.Service.arrayLen;i++)
+			{
+				printf("\n\t\t ServiceID=%d\n",	serviceDiscoveryRes.ServiceList.Service.array[i].ServiceID);
+				printf("\t\t ServiceName=");
+				printASCIIString(serviceDiscoveryRes.ServiceList.Service.array[i].ServiceName.characters, exiOut.V2G_Message.Body.ServiceDiscoveryRes.ServiceList.Service.array[i].ServiceName.charactersLen );
+				if(serviceDiscoveryRes.ServiceList.Service.array[i].ServiceCategory == v2gserviceCategoryType_Internet) {
+					printf("\t\t ServiceCategory=Internet\n");
+				}
+				if(serviceDiscoveryRes.ServiceList.Service.array[i].FreeService==1) {
+					printf("\t\t FreeService=True\n");
+				}
+			}*/
+
+		} else {
+			errn = ERROR_UNEXPECTED_SERVICE_DISCOVERY_RESP_MESSAGE;
+			return errn;
+		}
+	} else {
+		return errn;
+	}
+
+
+	/*********************************
+	 * ServiceDetails *
+	 *********************************/
+	init_iso2BodyType(&exiIn.V2G_Message.Body);
+	exiIn.V2G_Message.Body.ServiceDetailReq_isUsed = 1u;
+
+	init_iso2ServiceDetailReqType(&exiIn.V2G_Message.Body.ServiceDetailReq);
+
+	exiIn.V2G_Message.Body.ServiceDetailReq.ServiceID = 22; /* Value Added Server ID */
+
+	printf("EV side: call EVSE ServiceDetail \n");
+
+	errn = request_response2(&exiIn, &exiOut);
+
+	if(errn == 0) {
+		/* check, if this is the right response message */
+		if(exiOut.V2G_Message.Body.ServiceDetailRes_isUsed) {
+			serviceDetailRes = exiOut.V2G_Message.Body.ServiceDetailRes;
+			/* show results of EVSEs answer message */
+			printf("EV side: received response message from EVSE\n");
+			printf("\tHeader SessionID=");
+			printBinaryArray(exiOut.V2G_Message.Header.SessionID.bytes, exiOut.V2G_Message.Header.SessionID.bytesLen);
+			printf("\t ResponseCode=%d\n",  exiOut.V2G_Message.Body.ServiceDiscoveryRes.ResponseCode);
+			printf("\t ServiceID=%d\n",	exiOut.V2G_Message.Body.ServiceDetailRes.ServiceID);
+
+			if(serviceDetailRes.ServiceParameterList_isUsed) {
+				printf("\t\tLength=%d\n", serviceDetailRes.ServiceParameterList.ParameterSet.arrayLen );/*TEST*/
+
+				for(i=0; i<serviceDetailRes.ServiceParameterList.ParameterSet.arrayLen; i++)
+				{
+					printf("\t\tServiceSetID=%d\n", serviceDetailRes.ServiceParameterList.ParameterSet.array[i].ParameterSetID);
+					printf("\t\tParameters=%d\n", serviceDetailRes.ServiceParameterList.ParameterSet.array[i].Parameter.arrayLen);
+
+					for(j=0; j<serviceDetailRes.ServiceParameterList.ParameterSet.array[i].Parameter.arrayLen; j++)
+					{
+						printf("\t\t\t %d: ParameterName=", j+1);
+						printASCIIString(serviceDetailRes.ServiceParameterList.ParameterSet.array[i].Parameter.array[j].Name.characters, exiOut.V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[i].Parameter.array[j].Name.charactersLen);
+
+						/*if(serviceDetailRes.ServiceParameterList.ParameterSet.array[i].Parameter.array[j].shortValue_isUsed == 1u) {
+							printf("\t\t\t %d: StringValue=", j+1);
+							printASCIIString(serviceDetailRes.ServiceParameterList.ParameterSet.array[i].Parameter.array[j].stringValue.characters, serviceDetailRes.ServiceParameterList.ParameterSet.array[i].Parameter.array[j].stringValue.charactersLen);
+						} else if(serviceDetailRes.ServiceParameterList.ParameterSet.array[i].Parameter.array[j].intValue_isUsed == 1u) {
+							printf("\t\t\t %d: IntValue=%d\n", j+1, serviceDetailRes.ServiceParameterList.ParameterSet.array[i].Parameter.array[j].intValue);
+						} else if(serviceDetailRes.ServiceParameterList.ParameterSet.array[i].Parameter.array[j].physicalValue_isUsed == 1u) {
+							printf("\t\t\t %d: PhysicalValue=%d (%d)\n",  j+1, serviceDetailRes.ServiceParameterList.ParameterSet.array[i].Parameter.array[j].physicalValue.Value, serviceDetailRes.ServiceParameterList.ParameterSet.array[i].Parameter.array[j].physicalValue.Multiplier);
+						}*/
+					}
+				}
+			}
+		} else {
+			errn = ERROR_UNEXPECTED_SERVICE_DETAILS_RESP_MESSAGE;
+			return errn;
+		}
+	} else {
+		return errn;
+	}
+
+
+	/*******************************************
+	 * ServicePaymentSelection *
+	 *******************************************/
+	init_iso2BodyType(&exiIn.V2G_Message.Body);
+	exiIn.V2G_Message.Body.PaymentServiceSelectionReq_isUsed = 1u;
+
+	init_iso2PaymentServiceSelectionReqType(&exiIn.V2G_Message.Body.PaymentServiceSelectionReq);
+
+	exiIn.V2G_Message.Body.PaymentServiceSelectionReq.SelectedPaymentOption = iso2paymentOptionType_ExternalPayment;
+	exiIn.V2G_Message.Body.PaymentServiceSelectionReq.SelectedVASList_isUsed = 0u;
+	exiIn.V2G_Message.Body.PaymentServiceSelectionReq.SelectedEnergyTransferService.ServiceID = 1;
+	exiIn.V2G_Message.Body.PaymentServiceSelectionReq.SelectedEnergyTransferService.ParameterSetID = 4;
+
+	printf("EV side: call EVSE ServicePaymentSelection \n");
+
+	errn = request_response2(&exiIn, &exiOut);
+
+	if(errn == 0) {
+		/* check, if this is the right response message */
+		if(exiOut.V2G_Message.Body.PaymentServiceSelectionRes_isUsed) {
+			paymentServiceSelectionRes = exiOut.V2G_Message.Body.PaymentServiceSelectionRes;
+
+			/* show results of EVSEs answer message */
+			printf("EV side: received response message from EVSE\n");
+			if(exiOut.V2G_Message.Body.PaymentServiceSelectionRes.EVSEStatus_isUsed) {
+				printf("\tHeader SessionID=");
+				printBinaryArray(exiOut.V2G_Message.Header.SessionID.bytes, exiOut.V2G_Message.Header.SessionID.bytesLen);
+			}
+			printf("\t ResponseCode=%d\n",  paymentServiceSelectionRes.ResponseCode);
+
+		} else {
+			errn = ERROR_UNEXPECTED_PAYMENT_SERVICE_SELECTION_RESP_MESSAGE;
+			return errn;
+		}
+	} else {
+		return errn;
+	}
+
+
+	/**********************************
+	 * PaymentDetails *
+	 **********************************/
+	init_iso2BodyType(&exiIn.V2G_Message.Body);
+	exiIn.V2G_Message.Body.PaymentDetailsReq_isUsed = 1u;
+
+	init_iso2PaymentDetailsReqType(&exiIn.V2G_Message.Body.PaymentDetailsReq);
+
+	exiIn.V2G_Message.Body.PaymentDetailsReq.eMAID.characters[0] = 1;
+	exiIn.V2G_Message.Body.PaymentDetailsReq.eMAID.characters[1] = 123;
+	exiIn.V2G_Message.Body.PaymentDetailsReq.eMAID.charactersLen =2;
+
+	exiIn.V2G_Message.Body.PaymentDetailsReq.ContractSignatureCertChain.Certificate.bytes[0] = 'C';
+	exiIn.V2G_Message.Body.PaymentDetailsReq.ContractSignatureCertChain.Certificate.bytes[1] = 'e';
+	exiIn.V2G_Message.Body.PaymentDetailsReq.ContractSignatureCertChain.Certificate.bytesLen = 2;
+	exiIn.V2G_Message.Body.PaymentDetailsReq.ContractSignatureCertChain.SubCertificates_isUsed = 1u;
+	exiIn.V2G_Message.Body.PaymentDetailsReq.ContractSignatureCertChain.SubCertificates.Certificate.array[0].bytes[0] = 'S';
+	exiIn.V2G_Message.Body.PaymentDetailsReq.ContractSignatureCertChain.SubCertificates.Certificate.array[0].bytes[1] = 'u';
+	exiIn.V2G_Message.Body.PaymentDetailsReq.ContractSignatureCertChain.SubCertificates.Certificate.array[0].bytesLen = 2;
+	exiIn.V2G_Message.Body.PaymentDetailsReq.ContractSignatureCertChain.SubCertificates.Certificate.array[1].bytes[0] = 'S';
+	exiIn.V2G_Message.Body.PaymentDetailsReq.ContractSignatureCertChain.SubCertificates.Certificate.array[1].bytes[1] = 'u';
+	exiIn.V2G_Message.Body.PaymentDetailsReq.ContractSignatureCertChain.SubCertificates.Certificate.array[1].bytes[2] = '2';
+	exiIn.V2G_Message.Body.PaymentDetailsReq.ContractSignatureCertChain.SubCertificates.Certificate.array[1].bytesLen = 3;
+	exiIn.V2G_Message.Body.PaymentDetailsReq.ContractSignatureCertChain.SubCertificates.Certificate.arrayLen =2;
+	exiIn.V2G_Message.Body.PaymentDetailsReq.ContractSignatureCertChain.Id_isUsed = 1u;
+	exiIn.V2G_Message.Body.PaymentDetailsReq.ContractSignatureCertChain.Id.charactersLen = 2;
+	exiIn.V2G_Message.Body.PaymentDetailsReq.ContractSignatureCertChain.Id.characters[0] = 'I';
+	exiIn.V2G_Message.Body.PaymentDetailsReq.ContractSignatureCertChain.Id.characters[0] = 'd';
+
+	printf("EV side: call EVSE ServiceDetail \n");
+
+	errn = request_response2(&exiIn, &exiOut);
+
+	if(errn == 0) {
+		/* check, if this is the right response message */
+		if(exiOut.V2G_Message.Body.PaymentDetailsRes_isUsed) {
+
+			paymentDetailsRes = exiOut.V2G_Message.Body.PaymentDetailsRes;
+
+			printf("EV side: received response message from EVSE\n");
+			/* show results of EVSEs answer message */
+			printf("\tHeader SessionID=");
+			printBinaryArray(exiOut.V2G_Message.Header.SessionID.bytes, exiOut.V2G_Message.Header.SessionID.bytesLen);
+			printf("\t ResponseCode=%d\n",  paymentDetailsRes.ResponseCode);
+			printf("\tEVSETimeStamp=%li\n",  (long int) paymentDetailsRes.EVSETimeStamp);
+			printf("\tGenChallenge=%d\n",   paymentDetailsRes.GenChallenge.bytes[0]);
+
+		} else {
+			errn = ERROR_UNEXPECTED_PAYMENT_DETAILS_RESP_MESSAGE;
+			return errn;
+		}
+	} else {
+		return errn;
+	}
+
+
+
+
+	/*******************************************
+	 * Authorization *
+	 *******************************************/
+	init_iso2BodyType(&exiIn.V2G_Message.Body);
+	exiIn.V2G_Message.Body.AuthorizationReq_isUsed = 1u;
+
+	init_iso2AuthorizationReqType(&exiIn.V2G_Message.Body.AuthorizationReq);
+
+	copyBytes(paymentDetailsRes.GenChallenge.bytes, paymentDetailsRes.GenChallenge.bytesLen, exiIn.V2G_Message.Body.AuthorizationReq.GenChallenge.bytes);
+	exiIn.V2G_Message.Body.AuthorizationReq.GenChallenge.bytesLen = paymentDetailsRes.GenChallenge.bytesLen;
+	exiIn.V2G_Message.Body.AuthorizationReq.GenChallenge_isUsed = 1u; /* no challenge needed here*/
+	exiIn.V2G_Message.Body.AuthorizationReq.Id_isUsed = 1u; /* no signature needed here */
+	exiIn.V2G_Message.Body.AuthorizationReq.Id.charactersLen = 3;
+	exiIn.V2G_Message.Body.AuthorizationReq.Id.characters[0] = 'I';
+	exiIn.V2G_Message.Body.AuthorizationReq.Id.characters[1] = 'd';
+	exiIn.V2G_Message.Body.AuthorizationReq.Id.characters[2] = '2';
+
+	printf("EV side: call EVSE Authorization \n");
+
+
+	errn = request_response2(&exiIn, &exiOut);
+
+	if(errn == 0) {
+		/* check, if this is the right response message */
+		if(exiOut.V2G_Message.Body.AuthorizationRes_isUsed) {
+
+			/* show results of EVSEs answer message */
+			printf("EV side: received response message from EVSE\n");
+			printf("\tHeader SessionID=");
+			printBinaryArray(exiOut.V2G_Message.Header.SessionID.bytes, exiOut.V2G_Message.Header.SessionID.bytesLen);
+			printf("\t ResponseCode=%d\n",  exiOut.V2G_Message.Body.AuthorizationRes.ResponseCode);
+
+			if(exiOut.V2G_Message.Body.AuthorizationRes.EVSEProcessing == iso2EVSEProcessingType_Finished) {
+				printf("\t EVSEProcessing=Finished\n");
+			}
+		} else {
+			errn = ERROR_UNEXPECTED_AUTHORIZATION_RESP_MESSAGE;
+			return errn;
+		}
+	} else {
+		return errn;
+	}
+
+
+
+
+	/*******************************************
+	 * chargeParameterDiscovery *
+	 *******************************************/
+	init_iso2BodyType(&exiIn.V2G_Message.Body);
+	exiIn.V2G_Message.Body.ChargeParameterDiscoveryReq_isUsed = 1u;
+
+	init_iso2ChargeParameterDiscoveryReqType(&exiIn.V2G_Message.Body.ChargeParameterDiscoveryReq);
+
+	/* we use here AC based charging parameters */
+	exiIn.V2G_Message.Body.ChargeParameterDiscoveryReq.MaxSupportingPoints_isUsed = 1u;
+	exiIn.V2G_Message.Body.ChargeParameterDiscoveryReq.MaxSupportingPoints = 1234;
+
+	exiIn.V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVBidirectionalParameter_isUsed = 1u;
+	exiIn.V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVBidirectionalParameter.DepartureTime = 12345;
+
+	exiIn.V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVBidirectionalParameter.EVMaximumChargePower.Exponent = 0;
+	exiIn.V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVBidirectionalParameter.EVMaximumChargePower.Value = 100;
+
+	exiIn.V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVBidirectionalParameter.EVMaximumChargeCurrent.Exponent = 0;
+	exiIn.V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVBidirectionalParameter.EVMaximumChargeCurrent.Value = 400;
+
+	exiIn.V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVBidirectionalParameter.EVMinimumChargeCurrent.Exponent = 0;
+	exiIn.V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVBidirectionalParameter.EVMinimumChargeCurrent.Value = 200;
+
+	exiIn.V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVBidirectionalParameter.EVMaximumVoltage.Exponent = 0;
+	exiIn.V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVBidirectionalParameter.EVMaximumVoltage.Value = 400;
+
+	exiIn.V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVBidirectionalParameter.EVMaximumDischargePower.Exponent = 0;
+	exiIn.V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVBidirectionalParameter.EVMaximumDischargePower.Value = 200;
+
+	exiIn.V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVBidirectionalParameter.EVMaximumDischargeCurrent.Exponent = 0;
+	exiIn.V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVBidirectionalParameter.EVMaximumDischargeCurrent.Value = 400;
+
+	exiIn.V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVBidirectionalParameter.EVMinimumDischargeCurrent.Exponent = 0;
+	exiIn.V2G_Message.Body.ChargeParameterDiscoveryReq.AC_EVBidirectionalParameter.EVMinimumDischargeCurrent.Value = 200;
+
+	printf("EV side: call EVSE chargeParameterDiscovery");
+
+	errn = request_response2(&exiIn, &exiOut);
+
+	if(errn == 0) {
+		/* check, if this is the right response message */
+		if(exiOut.V2G_Message.Body.ChargeParameterDiscoveryRes_isUsed) {
+
+			/* show results of EVSEs answer message */
+			printf("EV side: received response message from EVSE\n");
+			printf("\tHeader SessionID=");
+			printBinaryArray(exiOut.V2G_Message.Header.SessionID.bytes, exiOut.V2G_Message.Header.SessionID.bytesLen);
+			printf("\t ResponseCode=%d\n", exiOut.V2G_Message.Body.ChargeParameterDiscoveryRes.ResponseCode);
+
+			/*printACEVSEStatus(&(exiOut.V2G_Message.Body.ChargeParameterDiscoveryRes.AC_EVSEChargeParameter.AC_EVSEStatus));
+			printf("\t EVSEProcessing=%d\n", exiOut.V2G_Message.Body.ChargeParameterDiscoveryRes.EVSEProcessing);
+			printf("\t EVSEMaxCurrent=%d\n", exiOut.V2G_Message.Body.ChargeParameterDiscoveryRes.AC_EVSEChargeParameter.EVSEMaxCurrent.Value);
+			printf("\t EVSENominalVoltage=%d\n", exiOut.V2G_Message.Body.ChargeParameterDiscoveryRes.AC_EVSEChargeParameter.EVSENominalVoltage.Value);*/
+		} else {
+			errn = ERROR_UNEXPECTED_CHARGE_PARAMETER_DISCOVERY_RESP_MESSAGE;
+			return errn;
+		}
+	} else {
+		return errn;
+	}
+
+
+
+
+
+	/*****************************
+	 * cableCheck *
+	 *****************************/
+	init_iso2BodyType(&exiIn.V2G_Message.Body);
+	exiIn.V2G_Message.Body.CableCheckReq_isUsed = 1u;
+
+	/*init_v2gCableCheckReqType(&exiIn.V2G_Message.Body.CableCheckReq);*/
+
+	printf("EV side: call EVSE cableCheck \n");
+
+	errn = request_response2(&exiIn, &exiOut);
+
+	if(errn == 0) {
+		/* check, if this is the right response message */
+		if(exiOut.V2G_Message.Body.CableCheckRes_isUsed) {
+
+			/* show results of EVSEs answer message */
+			printf("EV side: received response message from EVSE\n");
+			printf("\tHeader SessionID=");
+			printBinaryArray(exiOut.V2G_Message.Header.SessionID.bytes, exiOut.V2G_Message.Header.SessionID.bytesLen);
+			printf("\t ResponseCode=%d\n", exiOut.V2G_Message.Body.CableCheckRes.ResponseCode);
+
+			if(exiOut.V2G_Message.Body.CableCheckRes.EVSEProcessing==iso2EVSEProcessingType_Finished) {
+				printf("\tEVSEProcessing=Finished\n");
+			}
+
+			printEVSEStatus2(&(exiOut.V2G_Message.Body.CableCheckRes.EVSEStatus));
+		} else {
+			errn = ERROR_UNEXPECTED_CABLE_CHECK_RESP_MESSAGE;
+			return errn;
+		}
+	} else {
+		return errn;
+	}
+
+
+
+	/*****************************
+	 * preCharge *
+	 *****************************/
+	init_iso2BodyType(&exiIn.V2G_Message.Body);
+	exiIn.V2G_Message.Body.PreChargeReq_isUsed = 1u;
+
+	init_iso2PreChargeReqType(&exiIn.V2G_Message.Body.PreChargeReq);
+
+	exiIn.V2G_Message.Body.PreChargeReq.EVTargetCurrent.Exponent = 1;
+	exiIn.V2G_Message.Body.PreChargeReq.EVTargetCurrent.Value = 234;
+
+	exiIn.V2G_Message.Body.PreChargeReq.EVTargetVoltage.Exponent = 1;
+	exiIn.V2G_Message.Body.PreChargeReq.EVTargetVoltage.Value = 100;
+
+	printf("EV side: call EVSE preCharge \n");
+
+	errn = request_response2(&exiIn, &exiOut);
+
+	if(errn == 0) {
+		/* check, if this is the right response message */
+		if(exiOut.V2G_Message.Body.PreChargeRes_isUsed) {
+
+			/* show results of EVSEs answer message */
+			printf("EV side: received response message from EVSE\n");
+			printf("\tHeader SessionID=");
+			printBinaryArray(exiOut.V2G_Message.Header.SessionID.bytes, exiOut.V2G_Message.Header.SessionID.bytesLen);
+			printf("\t ResponseCode=%d\n", exiOut.V2G_Message.Body.PreChargeRes.ResponseCode);
+
+			printEVSEStatus2(&exiOut.V2G_Message.Body.PreChargeRes.EVSEStatus);
+			printf("\tEVSEPresentVoltage=%d (%d %d)\n", exiOut.V2G_Message.Body.PreChargeRes.EVSEPresentVoltage.Value, exiOut.V2G_Message.Body.PreChargeRes.EVSEPresentVoltage.Value, exiOut.V2G_Message.Body.PreChargeRes.EVSEPresentVoltage.Exponent);
+
+		} else {
+			errn = ERROR_UNEXPECTED_PRE_CHARGE_RESP_MESSAGE;
+			return errn;
+		}
+	} else {
+		return errn;
+	}
+
+
+
+	/*********************************
+	 * PowerDelivery *
+	 *********************************/
+
+	init_iso2BodyType(&exiIn.V2G_Message.Body);
+	exiIn.V2G_Message.Body.PowerDeliveryReq_isUsed = 1u;
+
+	init_iso2PowerDeliveryReqType(&exiIn.V2G_Message.Body.PowerDeliveryReq);
+
+	exiIn.V2G_Message.Body.PowerDeliveryReq.ChargeProgress = iso2chargeProgressType_Start;
+	exiIn.V2G_Message.Body.PowerDeliveryReq.SAScheduleTupleID_isUsed = 1u;
+	exiIn.V2G_Message.Body.PowerDeliveryReq.SAScheduleTupleID = exiOut.V2G_Message.Body.ChargeParameterDiscoveryRes.SAScheduleList.SAScheduleTuple.array[0].SAScheduleTupleID;
+
+	printf("EV side: call EVSE powerDelivery \n");
+
+	errn = request_response2(&exiIn, &exiOut);
+
+	if(errn == 0) {
+		/* check, if this is the right response message */
+		if(exiOut.V2G_Message.Body.PowerDeliveryRes_isUsed) {
+
+			/* show results of EVSEs answer message */
+			printf("EV side: received response message from EVSE\n");
+			printf("\tHeader SessionID=");
+			printBinaryArray(exiOut.V2G_Message.Header.SessionID.bytes, exiOut.V2G_Message.Header.SessionID.bytesLen);
+			printf("\t ResponseCode=%d\n", exiOut.V2G_Message.Body.PowerDeliveryRes.ResponseCode);
+
+			/*printACEVSEStatus(&(exiOut.V2G_Message.Body.PowerDeliveryRes.AC_EVSEStatus));*/
+		} else {
+			errn = ERROR_UNEXPECTED_POWER_DELIVERY_RESP_MESSAGE;
+			return errn;
+		}
+	} else {
+		return errn;
+	}
+
+
+
+	/*********************************
+	 * Setup data for chargingStatus *
+	 *********************************/
+
+	init_iso2BodyType(&exiIn.V2G_Message.Body);
+	exiIn.V2G_Message.Body.ChargingStatusReq_isUsed = 1u;
+
+	init_iso2ChargingStatusReqType(&exiIn.V2G_Message.Body.ChargingStatusReq);
+	exiIn.V2G_Message.Body.ChargingStatusReq.EVTargetEnergyRequest.Exponent = 2;
+	exiIn.V2G_Message.Body.ChargingStatusReq.EVTargetEnergyRequest.Value = 100;
+
+	printf("EV side: call EVSE chargingStatus \n");
+
+	errn = request_response2(&exiIn, &exiOut);
+
+	if(errn == 0) {
+		/* check, if this is the right response message */
+		if(exiOut.V2G_Message.Body.ChargingStatusRes_isUsed) {
+
+			/* show results of EVSEs answer message */
+			printf("EV side: received response message from EVSE\n");
+			printf("\tHeader SessionID=");
+			printBinaryArray(exiOut.V2G_Message.Header.SessionID.bytes, exiOut.V2G_Message.Header.SessionID.bytesLen);
+			printf("\t ResponseCode=%d\n", exiOut.V2G_Message.Body.ChargingStatusRes.ResponseCode);
+
+			/*printACEVSEStatus(&(exiOut.V2G_Message.Body.ChargingStatusRes.AC_EVSEStatus));
+
+			printf("\tReceiptRequired=%d\n", exiOut.V2G_Message.Body.ChargingStatusRes.ReceiptRequired);
+			printf("\tEVSEID=%d\n", exiOut.V2G_Message.Body.ChargingStatusRes.EVSEID.characters[0]);
+			printf("\tSAScheduleTupleID=%d\n", exiOut.V2G_Message.Body.ChargingStatusRes.SAScheduleTupleID);
+			printf("\tEVSEMaxCurrent=%d (%d %d)\n", exiOut.V2G_Message.Body.ChargingStatusRes.EVSEMaxCurrent.Value, exiOut.V2G_Message.Body.ChargingStatusRes.EVSEMaxCurrent.Unit, exiOut.V2G_Message.Body.ChargingStatusRes.EVSEMaxCurrent.Multiplier);
+			printf("\tisused.MeterInfo=%d\n",		exiOut.V2G_Message.Body.ChargingStatusRes.MeterInfo_isUsed);
+			printf("\t\tMeterInfo.MeterID=%d\n",		exiOut.V2G_Message.Body.ChargingStatusRes.MeterInfo.MeterID.characters[0]);
+			printf("\t\tMeterInfo.MeterReading.Value=%li\n",		(long int)exiOut.V2G_Message.Body.ChargingStatusRes.MeterInfo.MeterReading);
+			printf("\t\tMeterInfo.MeterStatus=%d\n",		exiOut.V2G_Message.Body.ChargingStatusRes.MeterInfo.MeterStatus);
+			printf("\t\tMeterInfo.TMeter=%li\n",		(long int)exiOut.V2G_Message.Body.ChargingStatusRes.MeterInfo.TMeter);
+			printf("\t\tMeterInfo.SigMeterReading.data=%d\n",		exiOut.V2G_Message.Body.ChargingStatusRes.MeterInfo.SigMeterReading.bytes[0]);*/
+		} else {
+			errn = ERROR_UNEXPECTED_CHARGING_STATUS_RESP_MESSAGE;
+			return errn;
+		}
+	} else {
+		return errn;
+	}
+
+
+
+
+	/***********************************
+	 * MeteringReceipt *
+	 ***********************************/
+
+	init_iso2BodyType(&exiIn.V2G_Message.Body);
+	exiIn.V2G_Message.Body.MeteringReceiptReq_isUsed = 1u;
+
+	init_iso2MeteringReceiptReqType(&exiIn.V2G_Message.Body.MeteringReceiptReq);
+
+
+	exiIn.V2G_Message.Body.MeteringReceiptReq.Id.characters[0]='I';
+	exiIn.V2G_Message.Body.MeteringReceiptReq.Id.characters[1]='d';
+	exiIn.V2G_Message.Body.MeteringReceiptReq.Id.characters[2]='3';
+	exiIn.V2G_Message.Body.MeteringReceiptReq.Id.charactersLen =3;
+
+	exiIn.V2G_Message.Body.MeteringReceiptReq.SessionID.bytes[0] = 22;
+	exiIn.V2G_Message.Body.MeteringReceiptReq.SessionID.bytesLen = 1;
+
+	init_iso2MeterInfoType(&exiIn.V2G_Message.Body.MeteringReceiptReq.MeterInfo);
+	exiIn.V2G_Message.Body.MeteringReceiptReq.MeterInfo.MeterID.characters[0] = 'M';
+	exiIn.V2G_Message.Body.MeteringReceiptReq.MeterInfo.MeterID.characters[1] = 'i';
+	exiIn.V2G_Message.Body.MeteringReceiptReq.MeterInfo.MeterID.characters[2] = 'd';
+	exiIn.V2G_Message.Body.MeteringReceiptReq.MeterInfo.MeterID.charactersLen = 3;
+
+	printf("EV side: call EVSE meteringReceipt \n");
+
+	errn = request_response2(&exiIn, &exiOut);
+
+	if(errn == 0) {
+		/* check, if this is the right response message */
+		if(exiOut.V2G_Message.Body.MeteringReceiptRes_isUsed) {
+
+			/* show results of EVSEs answer message */
+			printf("EV side: received response message from EVSE\n");
+			printf("\tHeader SessionID=");
+			printBinaryArray(exiOut.V2G_Message.Header.SessionID.bytes, exiOut.V2G_Message.Header.SessionID.bytesLen);
+			printf("\t ResponseCode=%d\n", exiOut.V2G_Message.Body.MeteringReceiptRes.ResponseCode);
+
+		} else {
+			errn = ERROR_UNEXPECTED_METERING_RECEIPT_RESP_MESSAGE;
+			return errn;
+		}
+	} else {
+		return errn;
+	}
+
+
+
+	/***********************************
+	 * SessionStop *
+	 ***********************************/
+
+
+	init_iso2BodyType(&exiIn.V2G_Message.Body);
+	exiIn.V2G_Message.Body.SessionStopReq_isUsed = 1u;
+
+	init_iso2SessionStopReqType(&exiIn.V2G_Message.Body.SessionStopReq);
+	exiIn.V2G_Message.Body.SessionStopReq.ChargingSession = iso2chargingSessionType_Pause;
+
+	printf("EV side: call EVSE stopSession \n");
+
+	errn = request_response2(&exiIn, &exiOut);
+
+	if(errn == 0) {
+		/* check, if this is the right response message */
+		if(exiOut.V2G_Message.Body.SessionStopRes_isUsed) {
+
+			/* show results of EVSEs answer message */
+			printf("EV side: received response message from EVSE\n");
+			printf("\tHeader SessionID=");
+			printBinaryArray(exiOut.V2G_Message.Header.SessionID.bytes, exiOut.V2G_Message.Header.SessionID.bytesLen);
+			printf("\t ResponseCode=%d\n", exiOut.V2G_Message.Body.SessionStopRes.ResponseCode);
+
+		} else {
+			errn = ERROR_UNEXPECTED_SESSION_STOP_RESP_MESSAGE;
+			return errn;
+		}
+	} else {
+		return errn;
+	}
+
+
+
+	return errn;
+
+}
+#endif /* DEPLOY_ISO2_CODEC == SUPPORT_YES */
+
+
+
+
+
+
+#if DEPLOY_ISO1_CODEC == SUPPORT_YES
+
+static void printEVSEStatus1(struct iso1DC_EVSEStatusType* status)
+{
+	printf("\tEVSEStatus:\n");
+	printf("\t\tEVSENotification=%d\n", status->EVSENotification);
+	printf("\t\tNotificationMaxDelay=%d\n", status->NotificationMaxDelay);
+}
+
+
+/* serializes EXI stream and adds V2G TP header */
+static int serialize1EXI2Stream(struct iso1EXIDocument* exiIn, bitstream_t* stream) {
+	int errn;
+	*stream->pos = V2GTP_HEADER_LENGTH;  /* v2gtp header */
+	if( (errn = encode_iso1ExiDocument(stream, exiIn)) == 0) {
+		errn = write_v2gtpHeader(stream->data, (*stream->pos)-V2GTP_HEADER_LENGTH, V2GTP_EXI_TYPE);
+	}
+	return errn;
+}
+
+
+
+/* deserializes V2G TP header and decodes right away EXI stream */
+static int deserialize1Stream2EXI(bitstream_t* streamIn, struct iso1EXIDocument* exi) {
+	int errn;
+	uint32_t payloadLength;
+
+	*streamIn->pos = 0;
+	if ( (errn = read_v2gtpHeader(streamIn->data, &payloadLength)) == 0) {
+		*streamIn->pos += V2GTP_HEADER_LENGTH;
+
+		errn = decode_iso1ExiDocument(streamIn, exi);
+	}
+	return errn;
+}
+
+
+
+static int sessionSetup1(struct iso1EXIDocument* exiIn, struct iso1EXIDocument* exiOut) {
+	printf("EVSE side: sessionSetup called\n"  );
+	printf("\tReceived data:\n");
+	printf("\tHeader SessionID=");
+	printBinaryArray(exiIn->V2G_Message.Header.SessionID.bytes, exiIn->V2G_Message.Header.SessionID.bytesLen);
+	printf("\t\t EVCCID=%d\n", exiIn->V2G_Message.Body.SessionSetupReq.EVCCID.bytes[0]);
+
+	exiOut->V2G_Message_isUsed = 1u;
+
+	/* generate an unique sessionID */
+	init_iso1MessageHeaderType(&exiOut->V2G_Message.Header);
+	exiOut->V2G_Message.Header.SessionID.bytes[0] = 1;
+	exiOut->V2G_Message.Header.SessionID.bytes[1] = 2;
+	exiOut->V2G_Message.Header.SessionID.bytes[2] = 3;
+	exiOut->V2G_Message.Header.SessionID.bytes[3] = 4;
+	exiOut->V2G_Message.Header.SessionID.bytes[4] = 5;
+	exiOut->V2G_Message.Header.SessionID.bytes[5] = 6;
+	exiOut->V2G_Message.Header.SessionID.bytes[6] = 7;
+	exiOut->V2G_Message.Header.SessionID.bytes[7] = 8;
+	exiOut->V2G_Message.Header.SessionID.bytesLen = 8;
+
+	/* Prepare data for EV */
+	init_iso1BodyType(&exiOut->V2G_Message.Body);
+
+	exiOut->V2G_Message.Body.SessionSetupRes_isUsed = 1u;
+	init_iso1SessionSetupResType(&exiOut->V2G_Message.Body.SessionSetupRes);
+
+	exiOut->V2G_Message.Body.SessionSetupRes.ResponseCode = iso1responseCodeType_OK;
+	exiOut->V2G_Message.Body.SessionSetupRes.EVSEID.characters[0] = 0;
+	exiOut->V2G_Message.Body.SessionSetupRes.EVSEID.characters[1] = 20;
+	exiOut->V2G_Message.Body.SessionSetupRes.EVSEID.charactersLen = 2;
+	exiOut->V2G_Message.Body.SessionSetupRes.EVSETimeStamp_isUsed = 1u;
+	exiOut->V2G_Message.Body.SessionSetupRes.EVSETimeStamp = 123456789;
+
+	return 0;
+}
+
+
+
+static int serviceDetail1(struct iso1EXIDocument* exiIn, struct iso1EXIDocument* exiOut) {
+
+	printf("EVSE side: serviceDetail called\n"  );
+	printf("\tReceived data:\n");
+	printf("\tHeader SessionID=");
+	printBinaryArray(exiIn->V2G_Message.Header.SessionID.bytes, exiIn->V2G_Message.Header.SessionID.bytesLen);
+	printf("\t\t ServiceDetailID=%d\n",exiIn->V2G_Message.Body.ServiceDetailReq.ServiceID);
+
+
+	/* Prepare data for EV */
+	exiOut->V2G_Message_isUsed = 1u;
+	init_iso1BodyType(&exiOut->V2G_Message.Body);
+
+	exiOut->V2G_Message.Body.ServiceDetailRes_isUsed= 1u;
+	init_iso1ServiceDetailResType(&exiOut->V2G_Message.Body.ServiceDetailRes);
+
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceID = 1234;
+
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList_isUsed = 1u;
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.arrayLen = 2;
+
+	/* Parameter Set 1*/
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].ParameterSetID = 1;
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.arrayLen = 2;
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].Name.charactersLen = 8;
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].Name.characters[0] = 'P';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].Name.characters[1] = 'r';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].Name.characters[2] = 'o';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].Name.characters[3] = 't';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].Name.characters[4]= 'o';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].Name.characters[5] = 'c';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].Name.characters[6] = 'o';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].Name.characters[7] = 'l';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].intValue = 15119;
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].intValue_isUsed = 1u;
+
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].Name.charactersLen = 4;
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].Name.characters[0] = 'N';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].Name.characters[1] = 'a';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].Name.characters[2] = 'm';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].Name.characters[3] = 'e';
+
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].stringValue_isUsed = 1u;
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].stringValue.charactersLen = 3;
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].stringValue.characters[0] = 'V';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].stringValue.characters[1] = '2';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].stringValue.characters[2] = 'G';
+
+	/* Parameter Set 2 */
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].ParameterSetID = 2;
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.arrayLen = 1;
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].Name.charactersLen = 7;
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].Name.characters[0] = 'C';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].Name.characters[1] = 'h';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].Name.characters[2] = 'a';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].Name.characters[3] = 'n';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].Name.characters[4] = 'n';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].Name.characters[5] = 'e';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].Name.characters[6] = 'l';
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].physicalValue_isUsed = 1u;
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].physicalValue.Value = 1234;
+
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].physicalValue.Multiplier = 1;
+	exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].physicalValue.Value = 2;
+
+	exiOut->V2G_Message.Body.ServiceDetailRes.ResponseCode = iso1responseCodeType_OK;
+
+	return 0;
+}
+
+
+
+static int authorization1(struct iso1EXIDocument* exiIn, struct iso1EXIDocument* exiOut) {
+
+	printf("EVSE: Authorization called\n"  );
+	printf("\tReceived data:\n");
+
+	if(exiIn->V2G_Message.Body.AuthorizationReq.GenChallenge_isUsed) {
+		printf("\t\t\t GenChallenge=%d\n", exiIn->V2G_Message.Body.AuthorizationReq.GenChallenge.bytes[0]);
+	}
+	if(exiIn->V2G_Message.Body.AuthorizationReq.Id_isUsed ) {
+		printf("\t\t\t ID=%c%c%c\n", exiIn->V2G_Message.Body.AuthorizationReq.Id.characters[0], exiIn->V2G_Message.Body.AuthorizationReq.Id.characters[1], exiIn->V2G_Message.Body.AuthorizationReq.Id.characters[2]);
+	}
+
+
+	/* Prepare data for EV */
+	exiOut->V2G_Message_isUsed = 1u;
+	init_iso1BodyType(&exiOut->V2G_Message.Body);
+
+	exiOut->V2G_Message.Body.AuthorizationRes_isUsed = 1u;
+	init_iso1AuthorizationResType(&exiOut->V2G_Message.Body.AuthorizationRes);
+
+	exiOut->V2G_Message.Body.AuthorizationRes.ResponseCode = iso1responseCodeType_OK;
+	exiOut->V2G_Message.Body.AuthorizationRes.EVSEProcessing = iso1EVSEProcessingType_Finished;
+
+	return 0;
+}
+
+
+static int powerDelivery1(struct iso1EXIDocument* exiIn, struct iso1EXIDocument* exiOut) {
+	printf("EVSE side: powerDelivery called\n"  );
+	printf("\tReceived data:\n");
+
+	printf("\t\t  ChargeProgress=%d\n", exiIn->V2G_Message.Body.PowerDeliveryReq.ChargeProgress);
+	printf("\t\t  SAScheduleTupleID=%d\n", exiIn->V2G_Message.Body.PowerDeliveryReq.SAScheduleTupleID);
+
+	/* Prepare data for EV */
+	exiOut->V2G_Message_isUsed = 1u;
+	init_iso1BodyType(&exiOut->V2G_Message.Body);
+
+	exiOut->V2G_Message.Body.PowerDeliveryRes_isUsed = 1u;
+	init_iso1PowerDeliveryResType(&exiOut->V2G_Message.Body.PowerDeliveryRes);
+
+	exiOut->V2G_Message.Body.PowerDeliveryRes.ResponseCode = iso1responseCodeType_OK;
+
+	exiOut->V2G_Message.Body.PowerDeliveryRes.EVSEStatus_isUsed = 1;
+	exiOut->V2G_Message.Body.PowerDeliveryRes.EVSEStatus.EVSENotification = iso1EVSENotificationType_StopCharging;
+	exiOut->V2G_Message.Body.PowerDeliveryRes.EVSEStatus.NotificationMaxDelay=12;
+
+	return 0;
+}
+
+
+static int chargingStatus1(struct iso1EXIDocument* exiIn, struct iso1EXIDocument* exiOut) {
+
+	printf("EVSE side: chargingStatus called\n"  );
+
+	/* Prepare data for EV */
+	exiOut->V2G_Message_isUsed = 1u;
+	init_iso1BodyType(&exiOut->V2G_Message.Body);
+
+	exiOut->V2G_Message.Body.ChargingStatusRes_isUsed = 1u;
+	init_iso1ChargingStatusResType(&exiOut->V2G_Message.Body.ChargingStatusRes);
+
+
+	exiOut->V2G_Message.Body.ChargingStatusRes.ResponseCode = iso1responseCodeType_OK;
+	exiOut->V2G_Message.Body.ChargingStatusRes.EVSEID.characters[0]= 'A';
+	exiOut->V2G_Message.Body.ChargingStatusRes.EVSEID.charactersLen =1;
+
+	exiOut->V2G_Message.Body.ChargingStatusRes.ReceiptRequired = 1;
+	exiOut->V2G_Message.Body.ChargingStatusRes.ReceiptRequired_isUsed = 1;
+
+	return 0;
+}
+
+
+static int meteringReceipt1(struct iso1EXIDocument* exiIn, struct iso1EXIDocument* exiOut) {
+
+	printf("EVSE side: meteringReceipt called\n"  );
+	printf("\tReceived data:\n");
+
+	printf("\t\t ID=%c%c%c\n", exiIn->V2G_Message.Body.MeteringReceiptReq.Id.characters[0], exiIn->V2G_Message.Body.MeteringReceiptReq.Id.characters[1], exiIn->V2G_Message.Body.MeteringReceiptReq.Id.characters[2]);
+	printf("\t\t SAScheduleTupleID=%d\n", exiIn->V2G_Message.Body.MeteringReceiptReq.SAScheduleTupleID);
+	printf("\t\t SessionID=%d\n", exiIn->V2G_Message.Body.MeteringReceiptReq.SessionID.bytes[1]);
+	printf("\t\t MeterInfo.MeterStatus=%d\n", exiIn->V2G_Message.Body.MeteringReceiptReq.MeterInfo.MeterStatus);
+	printf("\t\t MeterInfo.MeterID=%d\n",		exiIn->V2G_Message.Body.MeteringReceiptReq.MeterInfo.MeterID.characters[0]);
+
+	/* Prepare data for EV */
+	exiOut->V2G_Message_isUsed = 1u;
+	init_iso1BodyType(&exiOut->V2G_Message.Body);
+
+	exiOut->V2G_Message.Body.MeteringReceiptRes_isUsed = 1u;
+	init_iso1MeteringReceiptResType(&exiOut->V2G_Message.Body.MeteringReceiptRes);
+
+	exiOut->V2G_Message.Body.MeteringReceiptRes.ResponseCode = iso1responseCodeType_FAILED;
+
+	return 0;
+}
+
+static int sessionStop1(struct iso1EXIDocument* exiIn, struct iso1EXIDocument* exiOut) {
+
+	printf("EVSE side: sessionStop called\n"  );
+	printf("\tReceived data:\n");
+	printf("\tHeader SessionID=");
+	printBinaryArray(exiIn->V2G_Message.Header.SessionID.bytes, exiIn->V2G_Message.Header.SessionID.bytesLen);
+	printf("\t\t ChargingSession=%d\n", exiIn->V2G_Message.Body.SessionStopReq.ChargingSession);
+
+	/* Prepare data for EV */
+	exiOut->V2G_Message_isUsed = 1u;
+	init_iso1BodyType(&exiOut->V2G_Message.Body);
+
+	exiOut->V2G_Message.Body.SessionStopRes_isUsed = 1u;
+	init_iso1SessionStopResType(&exiOut->V2G_Message.Body.SessionStopRes);
+
+	exiOut->V2G_Message.Body.SessionStopRes.ResponseCode = iso1responseCodeType_OK;
+
+	return 0;
+}
+
+static int cableCheck1(struct iso1EXIDocument* exiIn, struct iso1EXIDocument* exiOut) {
+
+	printf("EVSE side: cableCheck called\n"  );
+
+	/* Prepare data for EV */
+	exiOut->V2G_Message_isUsed = 1u;
+	init_iso1BodyType(&exiOut->V2G_Message.Body);
+
+	exiOut->V2G_Message.Body.CableCheckRes_isUsed = 1u;
+	init_iso1CableCheckResType(&exiOut->V2G_Message.Body.CableCheckRes);
+
+	exiOut->V2G_Message.Body.CableCheckRes.ResponseCode = iso1responseCodeType_OK;
+
+	exiOut->V2G_Message.Body.CableCheckRes.DC_EVSEStatus.NotificationMaxDelay = 1234;
+	exiOut->V2G_Message.Body.CableCheckRes.DC_EVSEStatus.EVSENotification= iso1EVSENotificationType_ReNegotiation;
+
+	exiOut->V2G_Message.Body.CableCheckRes.EVSEProcessing = iso1EVSEProcessingType_Finished;
+
+	return 0;
+}
+
+static int preCharge1(struct iso1EXIDocument* exiIn, struct iso1EXIDocument* exiOut) {
+
+	printf("EVSE side: preCharge called\n"  );
+	printf("\tReceived data:\n");
+
+	printf("\t\t EVTargetCurrent=%d (%d)\n", exiIn->V2G_Message.Body.PreChargeReq.EVTargetCurrent.Value, exiIn->V2G_Message.Body.PreChargeReq.EVTargetCurrent.Multiplier);
+	printf("\t\t EVTargetVoltage=%d (%d)\n", exiIn->V2G_Message.Body.PreChargeReq.EVTargetVoltage.Value, exiIn->V2G_Message.Body.PreChargeReq.EVTargetVoltage.Multiplier);
+
+	/* Prepare data for EV */
+	exiOut->V2G_Message_isUsed = 1u;
+	init_iso1BodyType(&exiOut->V2G_Message.Body);
+
+	exiOut->V2G_Message.Body.PreChargeRes_isUsed = 1u;
+	init_iso1PreChargeResType(&exiOut->V2G_Message.Body.PreChargeRes);
+
+	exiOut->V2G_Message.Body.PreChargeRes.ResponseCode = iso1responseCodeType_OK;
+
+	exiOut->V2G_Message.Body.PreChargeRes.DC_EVSEStatus.EVSENotification = iso1EVSENotificationType_StopCharging;
+	exiOut->V2G_Message.Body.PreChargeRes.DC_EVSEStatus.NotificationMaxDelay= 1234;
+
+	exiOut->V2G_Message.Body.PreChargeRes.EVSEPresentVoltage.Multiplier = 3;
+	exiOut->V2G_Message.Body.PreChargeRes.EVSEPresentVoltage.Value= 456;
+
+	return 0;
+}
+
+
+
+
+
+static int create_response_message1(struct iso1EXIDocument* exiIn, struct iso1EXIDocument* exiOut) {
+	int errn = ERROR_UNEXPECTED_REQUEST_MESSAGE;
+
+	/* create response message as EXI document */
+	if(exiIn->V2G_Message_isUsed) {
+		init_iso1EXIDocument(exiOut);
+		if (exiIn->V2G_Message.Body.SessionSetupReq_isUsed) {
+			errn = sessionSetup1(exiIn, exiOut);
+		} else if (exiIn->V2G_Message.Body.ServiceDetailReq_isUsed) {
+			errn = serviceDetail1(exiIn, exiOut);
+		/*} else if (exiIn->V2G_Message.Body.PaymentDetailsReq_isUsed) {
+			errn = paymentDetails1(exiIn, exiOut);*/
+		} else if (exiIn->V2G_Message.Body.AuthorizationReq_isUsed) {
+			errn = authorization1(exiIn, exiOut);
+		} else if (exiIn->V2G_Message.Body.PowerDeliveryReq_isUsed) {
+			errn = powerDelivery1(exiIn, exiOut);
+		} else if (exiIn->V2G_Message.Body.ChargingStatusReq_isUsed) {
+			errn = chargingStatus1(exiIn, exiOut);
+		} else if (exiIn->V2G_Message.Body.MeteringReceiptReq_isUsed) {
+			errn = meteringReceipt1(exiIn, exiOut);
+		} else if (exiIn->V2G_Message.Body.SessionStopReq_isUsed) {
+			errn = sessionStop1(exiIn, exiOut);
+		} else if (exiIn->V2G_Message.Body.CableCheckReq_isUsed) {
+			errn = cableCheck1(exiIn, exiOut);
+		} else if (exiIn->V2G_Message.Body.PreChargeReq_isUsed) {
+			errn = preCharge1(exiIn, exiOut);
+		}
+	}
+
+	return errn;
+}
+
+
+/* Adapt this to your system setup! */
+/* In this situation EV and EVSE is the same party */
+static int request_response1(struct iso1EXIDocument* exiIn, struct iso1EXIDocument* exiOut) {
+	int errn;
+
+	bitstream_t stream1;
+	bitstream_t stream2;
+
+	size_t pos1;
+	size_t pos2;
+
+	stream1.size = BUFFER_SIZE;
+	stream1.data = buffer1;
+	stream1.pos = &pos1;
+
+	stream2.size = BUFFER_SIZE;
+	stream2.data = buffer2;
+	stream2.pos = &pos2;
+
+	/* EV side */
+	errn = serialize1EXI2Stream(exiIn, &stream1);
+
+	/* --> Start of EVSE side */
+	/* deserialize request message */
+	if (errn == 0) {
+		errn = deserialize1Stream2EXI(&stream1, exiOut);
+	}
+	/* create response message */
+	if (errn == 0) {
+		errn = create_response_message1(exiOut, exiIn);
+	}
+	/* serialize response message */
+	if (errn == 0) {
+		errn = serialize1EXI2Stream(exiIn, &stream2);
+	}
+	/* <-- End of EVSE side */
+
+
+	/* EV side */
+	/* deserialize response message */
+	if (errn == 0) {
+		errn = deserialize1Stream2EXI(&stream2, exiOut);
+	}
+
+	return errn;
+}
+
+static int charging1()
+{
+	int errn = 0;
+	int i, j;
+
+	struct iso1EXIDocument exiIn;
+	struct iso1EXIDocument exiOut;
+
+	struct iso1ServiceDetailResType serviceDetailRes;
+	struct iso1PaymentDetailsResType paymentDetailsRes;
+
+	/* setup header information */
+	init_iso1EXIDocument(&exiIn);
+	exiIn.V2G_Message_isUsed = 1u;
+	init_iso1MessageHeaderType(&exiIn.V2G_Message.Header);
+	exiIn.V2G_Message.Header.SessionID.bytes[0] = 0; /* sessionID is always '0' at the beginning (the response contains the valid sessionID)*/
+	exiIn.V2G_Message.Header.SessionID.bytes[1] = 0;
+	exiIn.V2G_Message.Header.SessionID.bytes[2] = 0;
+	exiIn.V2G_Message.Header.SessionID.bytes[3] = 0;
+	exiIn.V2G_Message.Header.SessionID.bytes[4] = 0;
+	exiIn.V2G_Message.Header.SessionID.bytes[5] = 0;
+	exiIn.V2G_Message.Header.SessionID.bytes[6] = 0;
+	exiIn.V2G_Message.Header.SessionID.bytes[7] = 0;
+	exiIn.V2G_Message.Header.SessionID.bytesLen = 8;
+	exiIn.V2G_Message.Header.Signature_isUsed = 0u;
+
+
+	/************************
+	 * sessionSetup *
+	 ************************/
+	init_iso1BodyType(&exiIn.V2G_Message.Body);
+	exiIn.V2G_Message.Body.SessionSetupReq_isUsed = 1u;
+
+	init_iso1SessionSetupReqType(&exiIn.V2G_Message.Body.SessionSetupReq);
+
+	exiIn.V2G_Message.Body.SessionSetupReq.EVCCID.bytesLen = 1;
+	exiIn.V2G_Message.Body.SessionSetupReq.EVCCID.bytes[0] = 10;
+
+	printf("EV side: call EVSE sessionSetup");
+
+	errn = request_response1(&exiIn, &exiOut);
+
+	if(errn == 0) {
+		/* check, if this is the right response message */
+		if(exiOut.V2G_Message.Body.SessionSetupRes_isUsed) {
+			/* show results of EVSEs answer message */
+			printf("EV side: received response message from EVSE\n");
+			printf("\tHeader SessionID=");
+			printBinaryArray(exiOut.V2G_Message.Header.SessionID.bytes, exiOut.V2G_Message.Header.SessionID.bytesLen);
+			printf("\tResponseCode=%d\n", exiOut.V2G_Message.Body.SessionSetupRes.ResponseCode);
+			printf("\tEVSEID=%d\n",	exiOut.V2G_Message.Body.SessionSetupRes.EVSEID.characters[1]);
+			printf("\tEVSETimeStamp=%li\n", (long int)exiOut.V2G_Message.Body.SessionSetupRes.EVSETimeStamp);
+		} else {
+			errn = ERROR_UNEXPECTED_SESSION_SETUP_RESP_MESSAGE;
+			return errn;
+		}
+	} else {
+		return errn;
+	}
+
+
+
+	/*********************************
+	 * ServiceDetails *
+	 *********************************/
+	init_iso1BodyType(&exiIn.V2G_Message.Body);
+	exiIn.V2G_Message.Body.ServiceDetailReq_isUsed = 1u;
+
+	init_iso1ServiceDetailReqType(&exiIn.V2G_Message.Body.ServiceDetailReq);
+
+	exiIn.V2G_Message.Body.ServiceDetailReq.ServiceID = 22; /* Value Added Server ID */
+
+	printf("EV side: call EVSE ServiceDetail \n");
+
+	errn = request_response1(&exiIn, &exiOut);
+
+	if(errn == 0) {
+		/* check, if this is the right response message */
+		if(exiOut.V2G_Message.Body.ServiceDetailRes_isUsed) {
+			serviceDetailRes = exiOut.V2G_Message.Body.ServiceDetailRes;
+			/* show results of EVSEs answer message */
+			printf("EV side: received response message from EVSE\n");
+			printf("\tHeader SessionID=");
+			printBinaryArray(exiOut.V2G_Message.Header.SessionID.bytes, exiOut.V2G_Message.Header.SessionID.bytesLen);
+			printf("\t ResponseCode=%d\n",  exiOut.V2G_Message.Body.ServiceDiscoveryRes.ResponseCode);
+			printf("\t ServiceID=%d\n",	exiOut.V2G_Message.Body.ServiceDetailRes.ServiceID);
+
+			if(serviceDetailRes.ServiceParameterList_isUsed) {
+				printf("\t\tLength=%d\n", serviceDetailRes.ServiceParameterList.ParameterSet.arrayLen );/*TEST*/
+
+				for(i=0; i<serviceDetailRes.ServiceParameterList.ParameterSet.arrayLen; i++)
+				{
+					printf("\t\tServiceSetID=%d\n", serviceDetailRes.ServiceParameterList.ParameterSet.array[i].ParameterSetID);
+					printf("\t\tParameters=%d\n", serviceDetailRes.ServiceParameterList.ParameterSet.array[i].Parameter.arrayLen);
+
+					for(j=0; j<serviceDetailRes.ServiceParameterList.ParameterSet.array[i].Parameter.arrayLen; j++)
+					{
+						printf("\t\t\t %d: ParameterName=", j+1);
+						printASCIIString(serviceDetailRes.ServiceParameterList.ParameterSet.array[i].Parameter.array[j].Name.characters, exiOut.V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[i].Parameter.array[j].Name.charactersLen);
+
+						/*if(serviceDetailRes.ServiceParameterList.ParameterSet.array[i].Parameter.array[j].shortValue_isUsed == 1u) {
+							printf("\t\t\t %d: StringValue=", j+1);
+							printASCIIString(serviceDetailRes.ServiceParameterList.ParameterSet.array[i].Parameter.array[j].stringValue.characters, serviceDetailRes.ServiceParameterList.ParameterSet.array[i].Parameter.array[j].stringValue.charactersLen);
+						} else if(serviceDetailRes.ServiceParameterList.ParameterSet.array[i].Parameter.array[j].intValue_isUsed == 1u) {
+							printf("\t\t\t %d: IntValue=%d\n", j+1, serviceDetailRes.ServiceParameterList.ParameterSet.array[i].Parameter.array[j].intValue);
+						} else if(serviceDetailRes.ServiceParameterList.ParameterSet.array[i].Parameter.array[j].physicalValue_isUsed == 1u) {
+							printf("\t\t\t %d: PhysicalValue=%d (%d)\n",  j+1, serviceDetailRes.ServiceParameterList.ParameterSet.array[i].Parameter.array[j].physicalValue.Value, serviceDetailRes.ServiceParameterList.ParameterSet.array[i].Parameter.array[j].physicalValue.Multiplier);
+						}*/
+					}
+				}
+			}
+		} else {
+			errn = ERROR_UNEXPECTED_SERVICE_DETAILS_RESP_MESSAGE;
+			return errn;
+		}
+	} else {
+		return errn;
+	}
+
+
+
+
+	/*******************************************
+	 * Authorization *
+	 *******************************************/
+	init_iso1BodyType(&exiIn.V2G_Message.Body);
+	exiIn.V2G_Message.Body.AuthorizationReq_isUsed = 1u;
+
+	init_iso1AuthorizationReqType(&exiIn.V2G_Message.Body.AuthorizationReq);
+
+	copyBytes(paymentDetailsRes.GenChallenge.bytes, paymentDetailsRes.GenChallenge.bytesLen, exiIn.V2G_Message.Body.AuthorizationReq.GenChallenge.bytes);
+	exiIn.V2G_Message.Body.AuthorizationReq.GenChallenge.bytesLen = paymentDetailsRes.GenChallenge.bytesLen;
+	exiIn.V2G_Message.Body.AuthorizationReq.GenChallenge_isUsed = 1u; /* no challenge needed here*/
+	exiIn.V2G_Message.Body.AuthorizationReq.Id_isUsed = 1u; /* no signature needed here */
+	exiIn.V2G_Message.Body.AuthorizationReq.Id.charactersLen = 3;
+	exiIn.V2G_Message.Body.AuthorizationReq.Id.characters[0] = 'I';
+	exiIn.V2G_Message.Body.AuthorizationReq.Id.characters[1] = 'd';
+	exiIn.V2G_Message.Body.AuthorizationReq.Id.characters[2] = '2';
+
+	printf("EV side: call EVSE Authorization \n");
+
+
+	errn = request_response1(&exiIn, &exiOut);
+
+	if(errn == 0) {
+		/* check, if this is the right response message */
+		if(exiOut.V2G_Message.Body.AuthorizationRes_isUsed) {
+
+			/* show results of EVSEs answer message */
+			printf("EV side: received response message from EVSE\n");
+			printf("\tHeader SessionID=");
+			printBinaryArray(exiOut.V2G_Message.Header.SessionID.bytes, exiOut.V2G_Message.Header.SessionID.bytesLen);
+			printf("\t ResponseCode=%d\n",  exiOut.V2G_Message.Body.AuthorizationRes.ResponseCode);
+
+			if(exiOut.V2G_Message.Body.AuthorizationRes.EVSEProcessing == iso1EVSEProcessingType_Finished) {
+				printf("\t EVSEProcessing=Finished\n");
+			}
+		} else {
+			errn = ERROR_UNEXPECTED_AUTHORIZATION_RESP_MESSAGE;
+			return errn;
+		}
+	} else {
+		return errn;
+	}
+
+
+
+
+
+	/*****************************
+	 * cableCheck *
+	 *****************************/
+	init_iso1BodyType(&exiIn.V2G_Message.Body);
+	exiIn.V2G_Message.Body.CableCheckReq_isUsed = 1u;
+
+	/*init_v2gCableCheckReqType(&exiIn.V2G_Message.Body.CableCheckReq);*/
+
+	printf("EV side: call EVSE cableCheck \n");
+
+	errn = request_response1(&exiIn, &exiOut);
+
+	if(errn == 0) {
+		/* check, if this is the right response message */
+		if(exiOut.V2G_Message.Body.CableCheckRes_isUsed) {
+
+			/* show results of EVSEs answer message */
+			printf("EV side: received response message from EVSE\n");
+			printf("\tHeader SessionID=");
+			printBinaryArray(exiOut.V2G_Message.Header.SessionID.bytes, exiOut.V2G_Message.Header.SessionID.bytesLen);
+			printf("\t ResponseCode=%d\n", exiOut.V2G_Message.Body.CableCheckRes.ResponseCode);
+
+			if(exiOut.V2G_Message.Body.CableCheckRes.EVSEProcessing==iso1EVSEProcessingType_Finished) {
+				printf("\tEVSEProcessing=Finished\n");
+			}
+
+			printEVSEStatus1(&(exiOut.V2G_Message.Body.CableCheckRes.DC_EVSEStatus));
+		} else {
+			errn = ERROR_UNEXPECTED_CABLE_CHECK_RESP_MESSAGE;
+			return errn;
+		}
+	} else {
+		return errn;
+	}
+
+
+
+	/*****************************
+	 * preCharge *
+	 *****************************/
+	init_iso1BodyType(&exiIn.V2G_Message.Body);
+	exiIn.V2G_Message.Body.PreChargeReq_isUsed = 1u;
+
+	init_iso1PreChargeReqType(&exiIn.V2G_Message.Body.PreChargeReq);
+
+	exiIn.V2G_Message.Body.PreChargeReq.EVTargetCurrent.Multiplier = 1;
+	exiIn.V2G_Message.Body.PreChargeReq.EVTargetCurrent.Value = 234;
+
+	exiIn.V2G_Message.Body.PreChargeReq.EVTargetVoltage.Multiplier = 1;
+	exiIn.V2G_Message.Body.PreChargeReq.EVTargetVoltage.Value = 100;
+
+	printf("EV side: call EVSE preCharge \n");
+
+	errn = request_response1(&exiIn, &exiOut);
+
+	if(errn == 0) {
+		/* check, if this is the right response message */
+		if(exiOut.V2G_Message.Body.PreChargeRes_isUsed) {
+
+			/* show results of EVSEs answer message */
+			printf("EV side: received response message from EVSE\n");
+			printf("\tHeader SessionID=");
+			printBinaryArray(exiOut.V2G_Message.Header.SessionID.bytes, exiOut.V2G_Message.Header.SessionID.bytesLen);
+			printf("\t ResponseCode=%d\n", exiOut.V2G_Message.Body.PreChargeRes.ResponseCode);
+
+			printEVSEStatus1(&exiOut.V2G_Message.Body.PreChargeRes.DC_EVSEStatus);
+			printf("\tEVSEPresentVoltage=%d (%d %d)\n", exiOut.V2G_Message.Body.PreChargeRes.EVSEPresentVoltage.Value, exiOut.V2G_Message.Body.PreChargeRes.EVSEPresentVoltage.Value, exiOut.V2G_Message.Body.PreChargeRes.EVSEPresentVoltage.Multiplier);
+
+		} else {
+			errn = ERROR_UNEXPECTED_PRE_CHARGE_RESP_MESSAGE;
+			return errn;
+		}
+	} else {
+		return errn;
+	}
+
+
+
+	/*********************************
+	 * PowerDelivery *
+	 *********************************/
+
+	init_iso1BodyType(&exiIn.V2G_Message.Body);
+	exiIn.V2G_Message.Body.PowerDeliveryReq_isUsed = 1u;
+
+	init_iso1PowerDeliveryReqType(&exiIn.V2G_Message.Body.PowerDeliveryReq);
+
+	exiIn.V2G_Message.Body.PowerDeliveryReq.ChargeProgress = iso1chargeProgressType_Start;
+	exiIn.V2G_Message.Body.PowerDeliveryReq.SAScheduleTupleID = exiOut.V2G_Message.Body.ChargeParameterDiscoveryRes.SAScheduleList.SAScheduleTuple.array[0].SAScheduleTupleID;
+
+	printf("EV side: call EVSE powerDelivery \n");
+
+	errn = request_response1(&exiIn, &exiOut);
+
+	if(errn == 0) {
+		/* check, if this is the right response message */
+		if(exiOut.V2G_Message.Body.PowerDeliveryRes_isUsed) {
+
+			/* show results of EVSEs answer message */
+			printf("EV side: received response message from EVSE\n");
+			printf("\tHeader SessionID=");
+			printBinaryArray(exiOut.V2G_Message.Header.SessionID.bytes, exiOut.V2G_Message.Header.SessionID.bytesLen);
+			printf("\t ResponseCode=%d\n", exiOut.V2G_Message.Body.PowerDeliveryRes.ResponseCode);
+
+			/*printACEVSEStatus(&(exiOut.V2G_Message.Body.PowerDeliveryRes.AC_EVSEStatus));*/
+		} else {
+			errn = ERROR_UNEXPECTED_POWER_DELIVERY_RESP_MESSAGE;
+			return errn;
+		}
+	} else {
+		return errn;
+	}
+
+
+
+	/*********************************
+	 * Setup data for chargingStatus *
+	 *********************************/
+
+	init_iso1BodyType(&exiIn.V2G_Message.Body);
+	exiIn.V2G_Message.Body.ChargingStatusReq_isUsed = 1u;
+
+	init_iso1ChargingStatusReqType(&exiIn.V2G_Message.Body.ChargingStatusReq);
+
+	printf("EV side: call EVSE chargingStatus \n");
+
+	errn = request_response1(&exiIn, &exiOut);
+
+	if(errn == 0) {
+		/* check, if this is the right response message */
+		if(exiOut.V2G_Message.Body.ChargingStatusRes_isUsed) {
+
+			/* show results of EVSEs answer message */
+			printf("EV side: received response message from EVSE\n");
+			printf("\tHeader SessionID=");
+			printBinaryArray(exiOut.V2G_Message.Header.SessionID.bytes, exiOut.V2G_Message.Header.SessionID.bytesLen);
+			printf("\t ResponseCode=%d\n", exiOut.V2G_Message.Body.ChargingStatusRes.ResponseCode);
+
+			/*printACEVSEStatus(&(exiOut.V2G_Message.Body.ChargingStatusRes.AC_EVSEStatus));
+
+			printf("\tReceiptRequired=%d\n", exiOut.V2G_Message.Body.ChargingStatusRes.ReceiptRequired);
+			printf("\tEVSEID=%d\n", exiOut.V2G_Message.Body.ChargingStatusRes.EVSEID.characters[0]);
+			printf("\tSAScheduleTupleID=%d\n", exiOut.V2G_Message.Body.ChargingStatusRes.SAScheduleTupleID);
+			printf("\tEVSEMaxCurrent=%d (%d %d)\n", exiOut.V2G_Message.Body.ChargingStatusRes.EVSEMaxCurrent.Value, exiOut.V2G_Message.Body.ChargingStatusRes.EVSEMaxCurrent.Unit, exiOut.V2G_Message.Body.ChargingStatusRes.EVSEMaxCurrent.Multiplier);
+			printf("\tisused.MeterInfo=%d\n",		exiOut.V2G_Message.Body.ChargingStatusRes.MeterInfo_isUsed);
+			printf("\t\tMeterInfo.MeterID=%d\n",		exiOut.V2G_Message.Body.ChargingStatusRes.MeterInfo.MeterID.characters[0]);
+			printf("\t\tMeterInfo.MeterReading.Value=%li\n",		(long int)exiOut.V2G_Message.Body.ChargingStatusRes.MeterInfo.MeterReading);
+			printf("\t\tMeterInfo.MeterStatus=%d\n",		exiOut.V2G_Message.Body.ChargingStatusRes.MeterInfo.MeterStatus);
+			printf("\t\tMeterInfo.TMeter=%li\n",		(long int)exiOut.V2G_Message.Body.ChargingStatusRes.MeterInfo.TMeter);
+			printf("\t\tMeterInfo.SigMeterReading.data=%d\n",		exiOut.V2G_Message.Body.ChargingStatusRes.MeterInfo.SigMeterReading.bytes[0]);*/
+		} else {
+			errn = ERROR_UNEXPECTED_CHARGING_STATUS_RESP_MESSAGE;
+			return errn;
+		}
+	} else {
+		return errn;
+	}
+
+
+	/***********************************
+	 * SessionStop *
+	 ***********************************/
+
+
+	init_iso1BodyType(&exiIn.V2G_Message.Body);
+	exiIn.V2G_Message.Body.SessionStopReq_isUsed = 1u;
+
+	init_iso1SessionStopReqType(&exiIn.V2G_Message.Body.SessionStopReq);
+	exiIn.V2G_Message.Body.SessionStopReq.ChargingSession = iso1chargingSessionType_Pause;
+
+	printf("EV side: call EVSE stopSession \n");
+
+	errn = request_response1(&exiIn, &exiOut);
+
+	if(errn == 0) {
+		/* check, if this is the right response message */
+		if(exiOut.V2G_Message.Body.SessionStopRes_isUsed) {
+
+			/* show results of EVSEs answer message */
+			printf("EV side: received response message from EVSE\n");
+			printf("\tHeader SessionID=");
+			printBinaryArray(exiOut.V2G_Message.Header.SessionID.bytes, exiOut.V2G_Message.Header.SessionID.bytesLen);
+			printf("\t ResponseCode=%d\n", exiOut.V2G_Message.Body.SessionStopRes.ResponseCode);
+
+		} else {
+			errn = ERROR_UNEXPECTED_SESSION_STOP_RESP_MESSAGE;
+			return errn;
+		}
+	} else {
+		return errn;
+	}
+
+
+
+	return errn;
+
+}
+#endif /* DEPLOY_ISO1_CODEC == SUPPORT_YES */
+
+
+
+
+#if DEPLOY_DIN_CODEC == SUPPORT_YES
+static int din_test() {
+	int errn = 0;
+
+	struct dinEXIDocument exiDin1;
+	struct dinEXIDocument exiDin2;
+
+	bitstream_t stream1;
+	bitstream_t stream2;
+	size_t pos1 = 0;
+	size_t pos2 = 0;
+
+	stream1.size = BUFFER_SIZE;
+	stream1.data = buffer1;
+	stream1.pos = &pos1;
+
+	stream2.size = BUFFER_SIZE;
+	stream2.data = buffer2;
+	stream2.pos = &pos2;
+
+	/* SetupSessionReq  */
+	/* BMW: 80 9A 00 11 D0 20 00 03 C1 FC 30 00 43 F8 00 */
+	buffer1[0] = 0x80;
+	buffer1[1] = 0x9A;
+	buffer1[2] = 0x00;
+	buffer1[3] = 0x11;
+	buffer1[4] = 0xD0;
+	buffer1[5] = 0x20;
+	buffer1[6] = 0x00;
+	buffer1[7] = 0x03;
+	buffer1[8] = 0xC1;
+	buffer1[9] = 0xFC;
+	buffer1[10] = 0x30;
+	buffer1[11] = 0x00;
+	buffer1[12] = 0x43;
+	buffer1[13] = 0xF8;
+	buffer1[14] = 0x00;
+
+	errn =  decode_dinExiDocument(&stream1, &exiDin1);
+
+	printf("\n\tSessionSetupReq_isUsed = %d\n", exiDin1.V2G_Message.Body.SessionSetupReq_isUsed);
+	printf("\t\tEVCCID Length= %d\n", exiDin1.V2G_Message.Body.SessionSetupReq.EVCCID.bytesLen);
+	printf("\t\tEVCCID = %02X%02X%02X%02X%02X%02X%02X%02X\n",
+			exiDin1.V2G_Message.Body.SessionSetupReq.EVCCID.bytes[0],
+			exiDin1.V2G_Message.Body.SessionSetupReq.EVCCID.bytes[1],
+			exiDin1.V2G_Message.Body.SessionSetupReq.EVCCID.bytes[2],
+			exiDin1.V2G_Message.Body.SessionSetupReq.EVCCID.bytes[3],
+			exiDin1.V2G_Message.Body.SessionSetupReq.EVCCID.bytes[4],
+			exiDin1.V2G_Message.Body.SessionSetupReq.EVCCID.bytes[5],
+			exiDin1.V2G_Message.Body.SessionSetupReq.EVCCID.bytes[6],
+			exiDin1.V2G_Message.Body.SessionSetupReq.EVCCID.bytes[7]
+		);
+
+
+	if(errn != 0) {
+		printf("\n\nDIN test error %d!\n", errn);
+		return errn;
+	} else if (pos1 != 15) {
+		printf("\n\nDIN warning. not all bytes read!\n");
+		errn = -1;
+		return errn;
+	}
+
+
+	/* SetupSessionReq  */
+	/* Chevy: 80 9A 02 00 00 00 00 00 00 00 00 11 D0 18 00 60 8C 44 09 94 00 */
+	buffer2[0] = 0x80;
+	buffer2[1] = 0x9A;
+	buffer2[2] = 0x02;
+	buffer2[3] = 0x00;
+	buffer2[4] = 0x00;
+	buffer2[5] = 0x00;
+	buffer2[6] = 0x00;
+	buffer2[7] = 0x00;
+	buffer2[8] = 0x00;
+	buffer2[9] = 0x00;
+	buffer2[10] = 0x00;
+	buffer2[11] = 0x11;
+	buffer2[12] = 0xD0;
+	buffer2[13] = 0x18;
+	buffer2[14] = 0x00;
+	buffer2[15] = 0x60;
+	buffer2[16] = 0x8C;
+	buffer2[17] = 0x44;
+	buffer2[18] = 0x09;
+	buffer2[19] = 0x94;
+	buffer2[20] = 0x00;
+
+	errn =  decode_dinExiDocument(&stream2, &exiDin2);
+
+	if(errn != 0) {
+		printf("\n\nDIN test error %d!\n", errn);
+		return errn;
+	} else if (pos2 != 21) {
+		printf("\n\nDIN warning. not all bytes read!\n");
+		errn = -1;
+		return errn;
+	}
+
+
+	/* sessionStopReq  */
+	pos2 = 0; /* reset position */
+
+	/* V: 0x80, 0x9a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x91, 0xf0  */
+	buffer2[0] = 0x80;
+	buffer2[1] = 0x9a;
+	buffer2[2] = 0x02;
+	buffer2[3] = 0x00;
+	buffer2[4] = 0x00;
+	buffer2[5] = 0x00;
+	buffer2[6] = 0x00;
+	buffer2[7] = 0x00;
+	buffer2[8] = 0x00;
+	buffer2[9] = 0x00;
+	buffer2[10] = 0x03;
+	buffer2[11] = 0x91;
+	buffer2[12] = 0xf0;
+
+	errn =  decode_dinExiDocument(&stream2, &exiDin2);
+
+	if(errn != 0) {
+		printf("\n\nDIN test error %d!\n", errn);
+		return errn;
+	} else if (pos2 != 13) {
+		printf("\n\nDIN warning. not all bytes read!\n");
+		errn = -1;
+		return errn;
+	} else if(exiDin2.V2G_Message_isUsed == 0 || exiDin2.V2G_Message.Body.SessionStopReq_isUsed == 0) {
+		printf("\n\nDIN warning. no sessionStopReq message!\n");
+		errn = -1;
+		return errn;
+	}
+
+
+	if(errn == 0) {
+		printf("DIN test passed\n");
+	} else {
+		printf("DIN test error %d!\n", errn);
+	}
+
+	return errn;
+}
+#endif /* DEPLOY_DIN_CODEC == SUPPORT_YES */
+
+
+
+#if DEPLOY_XMLDSIG_CODEC == SUPPORT_YES
+#if DEPLOY_ISO_CODEC_FRAGMENT == SUPPORT_YES
+static int xmldsig_test() {
+	int errn = 0, i;
+
+	bitstream_t stream1;
+	size_t pos1 = 0;
+	stream1.size = BUFFER_SIZE;
+	stream1.data = buffer1;
+	stream1.pos = &pos1;
+
+	bitstream_t stream2;
+	size_t pos2 = 0;
+	stream2.size = BUFFER_SIZE;
+	stream2.data = buffer2;
+	stream2.pos = &pos2;
+
+	struct iso2EXIFragment exiV2G_AR;
+	struct xmldsigEXIFragment exiXMLDSIG_SI;
+
+	int sizeIsoStream1 = 25;
+	int isoStream1[] = {0x80, 0x04, 0x01, 0x52, 0x51, 0x0C, 0x40, 0x82, 0x9B, 0x7B, 0x6B, 0x29, 0x02, 0x93, 0x0B, 0x73, 0x23, 0x7B, 0x69, 0x02, 0x23, 0x0B, 0xA3, 0x09, 0xE8};
+
+	int sizeIsoStream2 = 209;
+	int isoStream2[] = {0x80, 0x81, 0x12, 0xB4, 0x3A, 0x3A, 0x38, 0x1D, 0x17, 0x97, 0xBB, 0xBB, 0xBB, 0x97, 0x3B, 0x99, 0x97, 0x37, 0xB9, 0x33, 0x97, 0xAA, 0x29, 0x17, 0xB1, 0xB0, 0xB7, 0x37, 0xB7, 0x34, 0xB1, 0xB0, 0xB6, 0x16, 0xB2, 0xBC, 0x34, 0x97, 0xA1, 0xAB, 0x43, 0xA3, 0xA3, 0x81, 0xD1, 0x79, 0x7B, 0xBB, 0xBB, 0xB9, 0x73, 0xB9, 0x99, 0x73, 0x7B, 0x93, 0x39, 0x79, 0x91, 0x81, 0x81, 0x89, 0x79, 0x81, 0xA1, 0x7B, 0xC3, 0x6B, 0x63, 0x23, 0x9B, 0x4B, 0x39, 0x6B, 0x6B, 0x7B, 0x93, 0x29, 0x1B, 0x2B, 0x1B, 0x23, 0x9B, 0x09, 0x6B, 0x9B, 0x43, 0x09, 0x91, 0xA9, 0xB2, 0x20, 0x62, 0x34, 0x94, 0x43, 0x10, 0x25, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x77, 0x33, 0x2E, 0x6F, 0x72, 0x67, 0x2F, 0x54, 0x52, 0x2F, 0x63, 0x61, 0x6E, 0x6F, 0x6E, 0x69, 0x63, 0x61, 0x6C, 0x2D, 0x65, 0x78, 0x69, 0x2F, 0x48, 0x52, 0xD0, 0xE8, 0xE8, 0xE0, 0x74, 0x5E, 0x5E, 0xEE, 0xEE, 0xEE, 0x5C, 0xEE, 0x66, 0x5C, 0xDE, 0xE4, 0xCE, 0x5E, 0x64, 0x60, 0x60, 0x62, 0x5E, 0x60, 0x68, 0x5E, 0xF0, 0xDA, 0xD8, 0xCA, 0xDC, 0xC6, 0x46, 0xE6, 0xD0, 0xC2, 0x64, 0x6A, 0x6C, 0x84, 0x1A, 0x36, 0xBC, 0x07, 0xA0, 0x0C, 0xB7, 0xDC, 0xAD, 0x66, 0x2F, 0x30, 0x88, 0xA6, 0x0A, 0x3D, 0x6A, 0x99, 0x43, 0x1F, 0x81, 0xC1, 0x22, 0xC2, 0xE9, 0xF1, 0x67, 0x8E, 0xF5, 0x31, 0xE9, 0x55, 0x23, 0x70};
+
+
+	uint8_t digestValue[] = {0xD1, 0xB5, 0xE0, 0x3D, 0x00, 0x65, 0xBE, 0xE5, 0x6B, 0x31, 0x79, 0x84, 0x45, 0x30, 0x51, 0xEB, 0x54, 0xCA, 0x18, 0xFC, 0x0E, 0x09, 0x16, 0x17, 0x4F, 0x8B, 0x3C, 0x77, 0xA9, 0x8F, 0x4A, 0xA9}; /* 32 Bytes */
+
+
+	/*
+	<v2gci_b:AuthorizationReq xmlns:v2gci_b="urn:iso:15118:2:2013:MsgBody" v2gci_b:Id="ID1">
+	    <v2gci_b:GenChallenge>U29tZSBSYW5kb20gRGF0YQ==</v2gci_b:GenChallenge>
+	</v2gci_b:AuthorizationReq>
+	*/
+
+	init_iso2EXIFragment(&exiV2G_AR);
+	exiV2G_AR.AuthorizationReq_isUsed = 1u;
+	init_iso2AuthorizationReqType(&exiV2G_AR.AuthorizationReq);
+	exiV2G_AR.AuthorizationReq.Id_isUsed = 1;
+	exiV2G_AR.AuthorizationReq.Id.charactersLen = 3;
+	exiV2G_AR.AuthorizationReq.Id.characters[0] = 'I';
+	exiV2G_AR.AuthorizationReq.Id.characters[1] = 'D';
+	exiV2G_AR.AuthorizationReq.Id.characters[2] = '1';
+	exiV2G_AR.AuthorizationReq.GenChallenge_isUsed = 1;
+	/* base64 U29tZSBSYW5kb20gRGF0YQ== */
+	exiV2G_AR.AuthorizationReq.GenChallenge.bytesLen = 16;
+	exiV2G_AR.AuthorizationReq.GenChallenge.bytes[0] = 0x53;
+	exiV2G_AR.AuthorizationReq.GenChallenge.bytes[1] = 0x6F;
+	exiV2G_AR.AuthorizationReq.GenChallenge.bytes[2] = 0x6D;
+	exiV2G_AR.AuthorizationReq.GenChallenge.bytes[3] = 0x65;
+	exiV2G_AR.AuthorizationReq.GenChallenge.bytes[4] = 0x20;
+	exiV2G_AR.AuthorizationReq.GenChallenge.bytes[5] = 0x52;
+	exiV2G_AR.AuthorizationReq.GenChallenge.bytes[6] = 0x61;
+	exiV2G_AR.AuthorizationReq.GenChallenge.bytes[7] = 0x6E;
+	exiV2G_AR.AuthorizationReq.GenChallenge.bytes[8] = 0x64;
+	exiV2G_AR.AuthorizationReq.GenChallenge.bytes[9] = 0x6F;
+	exiV2G_AR.AuthorizationReq.GenChallenge.bytes[10] = 0x6D;
+	exiV2G_AR.AuthorizationReq.GenChallenge.bytes[11] = 0x20;
+	exiV2G_AR.AuthorizationReq.GenChallenge.bytes[12] = 0x44;
+	exiV2G_AR.AuthorizationReq.GenChallenge.bytes[13] = 0x61;
+	exiV2G_AR.AuthorizationReq.GenChallenge.bytes[14] = 0x74;
+	exiV2G_AR.AuthorizationReq.GenChallenge.bytes[15] = 0x61;
+
+	/* encode fragment with ISO schema */
+	errn = encode_iso2ExiFragment(&stream1, &exiV2G_AR);
+
+	if((*stream1.pos) != sizeIsoStream1) {
+		errn = -1;
+		printf("EXI1 stream length does not match !\n");
+		return errn;
+	} else {
+		for(i=0; i<sizeIsoStream1; i++) {
+			if(stream1.data[i] != isoStream1[i]) {
+				errn = -1;
+				printf("EXI1 stream does not match at position %d !\n", i);
+				return errn;
+			}
+		}
+	}
+
+	/* TODO Create Hash for stream 1 etc ... */
+	/* SHA-256 is "0bXgPQBlvuVrMXmERTBR61TKGPwOCRYXT4s8d6mPSqk=" */
+
+	/*
+	<xmlsig:SignedInfo xmlns:xmlsig="http://www.w3.org/2000/09/xmldsig#" >
+	    <xmlsig:CanonicalizationMethod Algorithm="http://www.w3.org/TR/canonical-exi/"/>
+	    <xmlsig:SignatureMethod
+	        Algorithm="http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256"/>
+	    <xmlsig:Reference URI="#ID1">
+	        <xmlsig:Transforms>
+	            <xmlsig:Transform Algorithm="http://www.w3.org/TR/canonical-exi/"/>
+	        </xmlsig:Transforms>
+	        <xmlsig:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
+	        <xmlsig:DigestValue>0bXgPQBlvuVrMXmERTBR61TK
+	            GPwOCRYXT4s8d6mPSqk=</xmlsig:DigestValue>
+	    </xmlsig:Reference>
+	</xmlsig:SignedInfo>
+	*/
+
+	/* encode SignedInfo element with xmldsig schema */
+
+	const char arrayCanonicalEXI[35] = {"http://www.w3.org/TR/canonical-exi/"};
+	const char arrayxmldsigSHA256[51] = {"http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256"};
+	const char arrayxmlencSHA256[39] = {"http://www.w3.org/2001/04/xmlenc#sha256"};
+
+	init_xmldsigEXIFragment(&exiXMLDSIG_SI);
+	exiXMLDSIG_SI.SignedInfo_isUsed = 1;
+	init_xmldsigSignedInfoType(&exiXMLDSIG_SI.SignedInfo);
+	{
+		init_xmldsigCanonicalizationMethodType(&exiXMLDSIG_SI.SignedInfo.CanonicalizationMethod);
+		exiXMLDSIG_SI.SignedInfo.CanonicalizationMethod.Algorithm.charactersLen = 35;
+		strncpy(exiXMLDSIG_SI.SignedInfo.CanonicalizationMethod.Algorithm.characters, arrayCanonicalEXI, 35);
+
+		exiXMLDSIG_SI.SignedInfo.SignatureMethod.HMACOutputLength_isUsed = 0;
+		exiXMLDSIG_SI.SignedInfo.SignatureMethod.Algorithm.charactersLen = 51;
+		strncpy(exiXMLDSIG_SI.SignedInfo.SignatureMethod.Algorithm.characters, arrayxmldsigSHA256, 51);
+
+		exiXMLDSIG_SI.SignedInfo.Reference.arrayLen = 1;
+		 /* "#ID1" */
+		exiXMLDSIG_SI.SignedInfo.Reference.array[0].URI_isUsed = 1;
+		exiXMLDSIG_SI.SignedInfo.Reference.array[0].URI.charactersLen = 4;
+		exiXMLDSIG_SI.SignedInfo.Reference.array[0].URI.characters[0] = '#';
+		exiXMLDSIG_SI.SignedInfo.Reference.array[0].URI.characters[1] = 'I';
+		exiXMLDSIG_SI.SignedInfo.Reference.array[0].URI.characters[2] = 'D';
+		exiXMLDSIG_SI.SignedInfo.Reference.array[0].URI.characters[3] = '1';
+		/* "http://www.w3.org/TR/canonical-exi/" */
+		exiXMLDSIG_SI.SignedInfo.Reference.array[0].Transforms_isUsed = 1;
+		exiXMLDSIG_SI.SignedInfo.Reference.array[0].Transforms.Transform.arrayLen = 1;
+		exiXMLDSIG_SI.SignedInfo.Reference.array[0].Transforms.Transform.array[0].Algorithm.charactersLen = 35;
+		strncpy(exiXMLDSIG_SI.SignedInfo.Reference.array[0].Transforms.Transform.array[0].Algorithm.characters, arrayCanonicalEXI, 35); /* Will copy 35 characters from arrayCanonicalEXI to characters */
+		exiXMLDSIG_SI.SignedInfo.Reference.array[0].Transforms.Transform.array[0].XPath.arrayLen = 0;
+
+		exiXMLDSIG_SI.SignedInfo.Reference.array[0].DigestMethod.Algorithm.charactersLen = 39;
+		strncpy(exiXMLDSIG_SI.SignedInfo.Reference.array[0].DigestMethod.Algorithm.characters, arrayxmlencSHA256, 39);
+
+		/* "0bXgPQBlvuVrMXmERTBR61TKGPwOCRYXT4s8d6mPSqk=" --> 16 Bytes 536F6D652052616E646F6D2044617461 */
+		exiXMLDSIG_SI.SignedInfo.Reference.array[0].DigestValue.bytesLen = 32;
+		memcpy(exiXMLDSIG_SI.SignedInfo.Reference.array[0].DigestValue.bytes, digestValue, 32);
+	}
+
+	errn = encode_xmldsigExiFragment(&stream2, &exiXMLDSIG_SI);
+
+	if((*stream2.pos) != sizeIsoStream2) {
+		errn = -1;
+		printf("EXI2 stream length does not match !\n");
+		return errn;
+	} else {
+		for(i=0; i<sizeIsoStream2; i++) {
+			if(stream2.data[i] != isoStream2[i]) {
+				errn = -1;
+				printf("EXI2 stream does not match at position %d !\n", i);
+				return errn;
+			}
+		}
+	}
+
+
+	if(errn == 0) {
+		printf("XMLDSIG test passed\n");
+	} else {
+		printf("XMLDSIG test error %d!\n", errn);
+	}
+
+	return errn;
+}
+#endif /* DEPLOY_ISO_CODEC_FRAGMENT */
+#endif /* DEPLOY_XMLDSIG_CODEC == SUPPORT_YES */
+
+
+int main_example(int argc, char *argv[]) {
+	int errn = 0;
+
+	printf("+++ Start application handshake protocol example +++\n\n");
+	errn = appHandshake();
+	printf("+++ Terminate application handshake protocol example with errn = %d +++\n\n", errn);
+
+	if(errn != 0) {
+		printf("\n\nHandshake error %d!\n", errn);
+		return errn;
+	}
+
+
+#if DEPLOY_ISO1_CODEC == SUPPORT_YES
+	printf("+++ Start V2G client / service example for charging (ISO1) +++\n\n");
+	errn = charging1();
+	printf("\n+++Terminate V2G Client / Service example for charging with errn = %d +++\n\n", errn);
+	if(errn != 0) {
+		printf("\n\ncharging error %d!\n", errn);
+		return errn;
+	}
+#endif /* DEPLOY_ISO1_CODEC == SUPPORT_YES */
+
+
+#if DEPLOY_ISO2_CODEC == SUPPORT_YES
+	printf("+++ Start V2G client / service example for charging (ISO2) +++\n\n");
+	errn = charging2();
+	printf("\n+++Terminate V2G Client / Service example for charging with errn = %d +++\n\n", errn);
+	if(errn != 0) {
+		printf("\n\ncharging error %d!\n", errn);
+		return errn;
+	}
+#endif /* DEPLOY_ISO2_CODEC == SUPPORT_YES */
+
+
+#if DEPLOY_DIN_CODEC == SUPPORT_YES
+	printf("+++ Start simple DIN test +++\n");
+	errn = din_test();
+	printf("+++ Terminate simple DIN test with errn = %d +++\n\n", errn);
+	if(errn != 0) {
+		printf("\nDIN test error %d!\n", errn);
+		return errn;
+	}
+#endif /* DEPLOY_DIN_CODEC == SUPPORT_YES */
+
+#if DEPLOY_XMLDSIG_CODEC == SUPPORT_YES
+#if DEPLOY_ISO_CODEC_FRAGMENT == SUPPORT_YES
+	printf("+++ Start simple XMLDSIG test +++\n");
+	errn = xmldsig_test();
+	printf("+++ Terminate simple XMLDSIG test with errn = %d +++\n\n", errn);
+	if(errn != 0) {
+		printf("\nXMLDSIG test error %d!\n", errn);
+		return errn;
+	}
+#endif /* DEPLOY_ISO_CODEC_FRAGMENT */
+#endif /* DEPLOY_XMLDSIG_CODEC == SUPPORT_YES */
+
+
+	return errn;
+}

+ 92 - 0
EVSE/Projects/CCS/Apps/exi_engine/transport/v2gtp.c

@@ -0,0 +1,92 @@
+
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Sebastian.Kaebisch@siemens.com
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9.4
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ ********************************************************************/
+
+/*
+ * This file implements the v2gtp header writer and reader.
+ *
+ */
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+
+#include "v2gtp.h"
+
+
+int write_v2gtpHeader(uint8_t* outStream, uint32_t outStreamLength, uint16_t payloadType)
+{
+
+	/* write v2gtp version number 1=byte */
+	outStream[0]=V2GTP_VERSION;
+
+	/* write inverse v2gtp version */
+	outStream[1]=V2GTP_VERSION_INV;
+
+
+	/* write payload type */
+	outStream[3] = (uint8_t)(payloadType & 0xFF);
+	outStream[2] = (uint8_t)(payloadType >> 8 & 0xFF);
+
+	/* write payload length */
+	outStream[7] = (uint8_t)(outStreamLength & 0xFF);
+	outStream[6] = (uint8_t)(outStreamLength>>8 & 0xFF);
+	outStream[5] = (uint8_t)(outStreamLength>>16 & 0xFF);
+	outStream[4] = (uint8_t)(outStreamLength>>24 & 0xFF);
+
+	return 0;
+}
+
+int read_v2gtpHeader(uint8_t* inStream, uint32_t* payloadLength)
+{
+	uint16_t payloadType=0;
+
+
+	/* check, if we support this v2gtp version */
+	if(inStream[0]!=V2GTP_VERSION || inStream[1]!=V2GTP_VERSION_INV)
+		return -1;
+
+
+	/* check, if we support this payload type*/
+	payloadType = inStream[2];
+	payloadType = (payloadType << 8 | inStream[3]);
+
+	if(payloadType != V2GTP_EXI_TYPE)
+		return -1;
+
+
+	/* determine payload length*/
+	*payloadLength = inStream[4];
+	*payloadLength = (*payloadLength << 8 | inStream[5]);
+	*payloadLength = (*payloadLength << 8 | inStream[6]);
+	*payloadLength = (*payloadLength << 8 | inStream[7]);
+
+	return 0;
+}
+

+ 55 - 0
EVSE/Projects/CCS/Apps/exi_engine/transport/v2gtp.h

@@ -0,0 +1,55 @@
+
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Sebastian.Kaebisch@siemens.com
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9.4
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ ********************************************************************/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef V2GTP_H_
+#define V2GTP_H_
+
+#include <stdint.h>
+
+/* generic V2GTP header length */
+#define V2GTP_HEADER_LENGTH 8
+
+/* define V2GTP Version */
+#define V2GTP_VERSION 0x01
+#define V2GTP_VERSION_INV 0xFE
+
+/* define V2GTP payload types*/
+#define V2GTP_EXI_TYPE 0x8001
+
+int write_v2gtpHeader(uint8_t* outStream, uint32_t outStreamLength, uint16_t payloadType);
+
+int read_v2gtpHeader(uint8_t* inStream, uint32_t* payloadLength);
+
+#endif /* V2GTP_H_ */
+
+#ifdef __cplusplus
+}
+#endif

+ 255 - 0
EVSE/Projects/CCS/Apps/exi_engine/xmldsig/xmldsigEXIDatatypes.c

@@ -0,0 +1,255 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9.4
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: xmldsig-core-schema.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+#include <stdint.h>
+
+#include "xmldsigEXIDatatypes.h"
+#include "../codec/EXITypes.h"
+
+
+#ifndef EXI_xmldsig_DATATYPES_C
+#define EXI_xmldsig_DATATYPES_C
+
+#if DEPLOY_XMLDSIG_CODEC == SUPPORT_YES
+
+
+void init_xmldsigEXIDocument(struct xmldsigEXIDocument* exiDoc) {
+	exiDoc->SignatureProperty_isUsed = 0u;
+	exiDoc->DSAKeyValue_isUsed = 0u;
+	exiDoc->SignatureProperties_isUsed = 0u;
+	exiDoc->KeyValue_isUsed = 0u;
+	exiDoc->Transforms_isUsed = 0u;
+	exiDoc->DigestMethod_isUsed = 0u;
+	exiDoc->Signature_isUsed = 0u;
+	exiDoc->RetrievalMethod_isUsed = 0u;
+	exiDoc->Manifest_isUsed = 0u;
+	exiDoc->Reference_isUsed = 0u;
+	exiDoc->CanonicalizationMethod_isUsed = 0u;
+	exiDoc->RSAKeyValue_isUsed = 0u;
+	exiDoc->Transform_isUsed = 0u;
+	exiDoc->PGPData_isUsed = 0u;
+	exiDoc->MgmtData_isUsed = 0u;
+	exiDoc->SignatureMethod_isUsed = 0u;
+	exiDoc->KeyInfo_isUsed = 0u;
+	exiDoc->SPKIData_isUsed = 0u;
+	exiDoc->X509Data_isUsed = 0u;
+	exiDoc->SignatureValue_isUsed = 0u;
+	exiDoc->KeyName_isUsed = 0u;
+	exiDoc->DigestValue_isUsed = 0u;
+	exiDoc->SignedInfo_isUsed = 0u;
+	exiDoc->Object_isUsed = 0u;
+}
+
+
+#if DEPLOY_XMLDSIG_CODEC_FRAGMENT == SUPPORT_YES
+void init_xmldsigEXIFragment(struct xmldsigEXIFragment* exiFrag) {
+	exiFrag->DigestValue_isUsed = 0u;
+	exiFrag->X509Data_isUsed = 0u;
+	exiFrag->KeyValue_isUsed = 0u;
+	exiFrag->DigestMethod_isUsed = 0u;
+	exiFrag->SPKISexp_isUsed = 0u;
+	exiFrag->Transforms_isUsed = 0u;
+	exiFrag->KeyName_isUsed = 0u;
+	exiFrag->X509IssuerName_isUsed = 0u;
+	exiFrag->MgmtData_isUsed = 0u;
+	exiFrag->Reference_isUsed = 0u;
+	exiFrag->SignatureProperties_isUsed = 0u;
+	exiFrag->PGPKeyID_isUsed = 0u;
+	exiFrag->PGPData_isUsed = 0u;
+	exiFrag->DSAKeyValue_isUsed = 0u;
+	exiFrag->SignatureValue_isUsed = 0u;
+	exiFrag->KeyInfo_isUsed = 0u;
+	exiFrag->SignatureProperty_isUsed = 0u;
+	exiFrag->PGPKeyPacket_isUsed = 0u;
+	exiFrag->PGPKeyPacket_isUsed = 0u;
+	exiFrag->HMACOutputLength_isUsed = 0u;
+	exiFrag->Exponent_isUsed = 0u;
+	exiFrag->Manifest_isUsed = 0u;
+	exiFrag->P_isUsed = 0u;
+	exiFrag->CanonicalizationMethod_isUsed = 0u;
+	exiFrag->Q_isUsed = 0u;
+	exiFrag->Seed_isUsed = 0u;
+	exiFrag->X509SubjectName_isUsed = 0u;
+	exiFrag->X509Certificate_isUsed = 0u;
+	exiFrag->RSAKeyValue_isUsed = 0u;
+	exiFrag->X509IssuerSerial_isUsed = 0u;
+	exiFrag->SPKIData_isUsed = 0u;
+	exiFrag->G_isUsed = 0u;
+	exiFrag->J_isUsed = 0u;
+	exiFrag->SignedInfo_isUsed = 0u;
+	exiFrag->X509SKI_isUsed = 0u;
+	exiFrag->Transform_isUsed = 0u;
+	exiFrag->XPath_isUsed = 0u;
+	exiFrag->Object_isUsed = 0u;
+	exiFrag->X509SerialNumber_isUsed = 0u;
+	exiFrag->RetrievalMethod_isUsed = 0u;
+	exiFrag->Modulus_isUsed = 0u;
+	exiFrag->X509CRL_isUsed = 0u;
+	exiFrag->Signature_isUsed = 0u;
+	exiFrag->Y_isUsed = 0u;
+	exiFrag->SignatureMethod_isUsed = 0u;
+	exiFrag->PgenCounter_isUsed = 0u;
+}
+#endif /* DEPLOY_XMLDSIG_CODEC_FRAGMENT */
+
+void init_xmldsigCanonicalizationMethodType(struct xmldsigCanonicalizationMethodType* xmldsigCanonicalizationMethodType) {
+	xmldsigCanonicalizationMethodType->ANY_isUsed = 0u;
+}
+
+void init_xmldsigManifestType(struct xmldsigManifestType* xmldsigManifestType) {
+	xmldsigManifestType->Id_isUsed = 0u;
+	xmldsigManifestType->Reference.arrayLen = 0u;
+}
+
+void init_xmldsigObjectType(struct xmldsigObjectType* xmldsigObjectType) {
+	xmldsigObjectType->Id_isUsed = 0u;
+	xmldsigObjectType->MimeType_isUsed = 0u;
+	xmldsigObjectType->Encoding_isUsed = 0u;
+	xmldsigObjectType->ANY_isUsed = 0u;
+}
+
+void init_xmldsigTransformType(struct xmldsigTransformType* xmldsigTransformType) {
+	xmldsigTransformType->ANY_isUsed = 0u;
+	xmldsigTransformType->XPath.arrayLen = 0u;
+}
+
+void init_xmldsigSignatureMethodType(struct xmldsigSignatureMethodType* xmldsigSignatureMethodType) {
+	xmldsigSignatureMethodType->HMACOutputLength_isUsed = 0u;
+	xmldsigSignatureMethodType->ANY_isUsed = 0u;
+}
+
+void init_xmldsigDigestMethodType(struct xmldsigDigestMethodType* xmldsigDigestMethodType) {
+	xmldsigDigestMethodType->ANY_isUsed = 0u;
+}
+
+void init_xmldsigRetrievalMethodType(struct xmldsigRetrievalMethodType* xmldsigRetrievalMethodType) {
+	xmldsigRetrievalMethodType->URI_isUsed = 0u;
+	xmldsigRetrievalMethodType->Type_isUsed = 0u;
+	xmldsigRetrievalMethodType->Transforms_isUsed = 0u;
+}
+
+void init_xmldsigSignatureValueType(struct xmldsigSignatureValueType* xmldsigSignatureValueType) {
+	xmldsigSignatureValueType->Id_isUsed = 0u;
+}
+
+void init_xmldsigX509IssuerSerialType(struct xmldsigX509IssuerSerialType* xmldsigX509IssuerSerialType) {
+	(void)xmldsigX509IssuerSerialType; /* avoid unused warning */
+}
+
+void init_xmldsigSignedInfoType(struct xmldsigSignedInfoType* xmldsigSignedInfoType) {
+	xmldsigSignedInfoType->Id_isUsed = 0u;
+	xmldsigSignedInfoType->Reference.arrayLen = 0u;
+}
+
+void init_xmldsigSignaturePropertiesType(struct xmldsigSignaturePropertiesType* xmldsigSignaturePropertiesType) {
+	xmldsigSignaturePropertiesType->Id_isUsed = 0u;
+	xmldsigSignaturePropertiesType->SignatureProperty.arrayLen = 0u;
+}
+
+void init_xmldsigSignaturePropertyType(struct xmldsigSignaturePropertyType* xmldsigSignaturePropertyType) {
+	xmldsigSignaturePropertyType->Id_isUsed = 0u;
+	xmldsigSignaturePropertyType->ANY_isUsed = 0u;
+}
+
+void init_xmldsigKeyValueType(struct xmldsigKeyValueType* xmldsigKeyValueType) {
+	xmldsigKeyValueType->DSAKeyValue_isUsed = 0u;
+	xmldsigKeyValueType->RSAKeyValue_isUsed = 0u;
+	xmldsigKeyValueType->ANY_isUsed = 0u;
+}
+
+void init_xmldsigRSAKeyValueType(struct xmldsigRSAKeyValueType* xmldsigRSAKeyValueType) {
+	(void)xmldsigRSAKeyValueType; /* avoid unused warning */
+}
+
+void init_xmldsigPGPDataType(struct xmldsigPGPDataType* xmldsigPGPDataType) {
+	xmldsigPGPDataType->PGPKeyID_isUsed = 0u;
+	xmldsigPGPDataType->PGPKeyPacket_isUsed = 0u;
+	xmldsigPGPDataType->ANY_isUsed = 0u;
+}
+
+void init_xmldsigTransformsType(struct xmldsigTransformsType* xmldsigTransformsType) {
+	xmldsigTransformsType->Transform.arrayLen = 0u;
+}
+
+void init_xmldsigX509DataType(struct xmldsigX509DataType* xmldsigX509DataType) {
+	xmldsigX509DataType->X509IssuerSerial.arrayLen = 0u;
+	xmldsigX509DataType->X509SKI.arrayLen = 0u;
+	xmldsigX509DataType->X509SubjectName.arrayLen = 0u;
+	xmldsigX509DataType->X509Certificate.arrayLen = 0u;
+	xmldsigX509DataType->X509CRL.arrayLen = 0u;
+	xmldsigX509DataType->ANY_isUsed = 0u;
+}
+
+void init_xmldsigSignatureType(struct xmldsigSignatureType* xmldsigSignatureType) {
+	xmldsigSignatureType->Id_isUsed = 0u;
+	xmldsigSignatureType->KeyInfo_isUsed = 0u;
+	xmldsigSignatureType->Object.arrayLen = 0u;
+}
+
+void init_xmldsigDSAKeyValueType(struct xmldsigDSAKeyValueType* xmldsigDSAKeyValueType) {
+	xmldsigDSAKeyValueType->P_isUsed = 0u;
+	xmldsigDSAKeyValueType->Q_isUsed = 0u;
+	xmldsigDSAKeyValueType->G_isUsed = 0u;
+	xmldsigDSAKeyValueType->J_isUsed = 0u;
+	xmldsigDSAKeyValueType->Seed_isUsed = 0u;
+	xmldsigDSAKeyValueType->PgenCounter_isUsed = 0u;
+}
+
+void init_xmldsigReferenceType(struct xmldsigReferenceType* xmldsigReferenceType) {
+	xmldsigReferenceType->Id_isUsed = 0u;
+	xmldsigReferenceType->URI_isUsed = 0u;
+	xmldsigReferenceType->Type_isUsed = 0u;
+	xmldsigReferenceType->Transforms_isUsed = 0u;
+}
+
+void init_xmldsigSPKIDataType(struct xmldsigSPKIDataType* xmldsigSPKIDataType) {
+	xmldsigSPKIDataType->SPKISexp.arrayLen = 0u;
+	xmldsigSPKIDataType->ANY_isUsed = 0u;
+}
+
+void init_xmldsigKeyInfoType(struct xmldsigKeyInfoType* xmldsigKeyInfoType) {
+	xmldsigKeyInfoType->Id_isUsed = 0u;
+	xmldsigKeyInfoType->KeyName.arrayLen = 0u;
+	xmldsigKeyInfoType->KeyValue.arrayLen = 0u;
+	xmldsigKeyInfoType->RetrievalMethod.arrayLen = 0u;
+	xmldsigKeyInfoType->X509Data.arrayLen = 0u;
+	xmldsigKeyInfoType->PGPData.arrayLen = 0u;
+	xmldsigKeyInfoType->SPKIData.arrayLen = 0u;
+	xmldsigKeyInfoType->MgmtData.arrayLen = 0u;
+	xmldsigKeyInfoType->ANY_isUsed = 0u;
+}
+
+
+
+#endif /* DEPLOY_XMLDSIG_CODEC */
+
+#endif
+

+ 935 - 0
EVSE/Projects/CCS/Apps/exi_engine/xmldsig/xmldsigEXIDatatypes.h

@@ -0,0 +1,935 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9.4 
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: xmldsig-core-schema.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+ * \file 	EXIDatatypes.h
+ * \brief 	Datatype definitions and structs for given XML Schema definitions and initialization methods
+ *
+ */
+
+#ifndef EXI_xmldsig_DATATYPES_H
+#define EXI_xmldsig_DATATYPES_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define SUPPORT_YES 1
+#define SUPPORT_NO 2
+#define DEPLOY_XMLDSIG_CODEC SUPPORT_NO
+#define DEPLOY_XMLDSIG_CODEC_FRAGMENT SUPPORT_NO
+
+#if DEPLOY_XMLDSIG_CODEC == SUPPORT_YES
+
+#include <stdint.h>
+
+#include "EXITypes.h"
+
+
+/* Datatype definitions and structs for given XML Schema definitions */
+
+#define UNION_YES 1
+#define UNION_NO 2
+#define SAVE_MEMORY_WITH_UNNAMED_UNION UNION_YES
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,CanonicalizationMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##any]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define xmldsigCanonicalizationMethodType_Algorithm_CHARACTERS_SIZE 65 + EXTRA_CHAR 
+#define xmldsigCanonicalizationMethodType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+struct xmldsigCanonicalizationMethodType {
+	/* attribute: Algorithm {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[xmldsigCanonicalizationMethodType_Algorithm_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Algorithm ;
+	/* element: WC[##any] */
+	struct {
+		exi_string_character_t characters[xmldsigCanonicalizationMethodType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,ObjectType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##any])){0-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define xmldsigObjectType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define xmldsigObjectType_MimeType_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define xmldsigObjectType_Encoding_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define xmldsigObjectType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+struct xmldsigObjectType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[xmldsigObjectType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* attribute: MimeType {http://www.w3.org/2001/XMLSchema,string} */
+	struct {
+		exi_string_character_t characters[xmldsigObjectType_MimeType_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  MimeType ;
+	unsigned int MimeType_isUsed:1;
+	/* attribute: Encoding {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[xmldsigObjectType_Encoding_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Encoding ;
+	unsigned int Encoding_isUsed:1;
+	/* element: WC[##any] */
+	struct {
+		exi_string_character_t characters[xmldsigObjectType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"])|"http://www.w3.org/2000/09/xmldsig#":XPath){0-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define xmldsigTransformType_Algorithm_CHARACTERS_SIZE 65 + EXTRA_CHAR 
+#define xmldsigTransformType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define xmldsigTransformType_XPath_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define xmldsigTransformType_XPath_ARRAY_SIZE 1
+struct xmldsigTransformType {
+	/* attribute: Algorithm {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[xmldsigTransformType_Algorithm_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Algorithm ;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[xmldsigTransformType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":XPath, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		struct {
+			exi_string_character_t characters[xmldsigTransformType_XPath_CHARACTERS_SIZE];
+			uint16_t charactersLen;
+		}  array[xmldsigTransformType_XPath_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} XPath;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":HMACOutputLength{0-1},(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define xmldsigSignatureMethodType_Algorithm_CHARACTERS_SIZE 65 + EXTRA_CHAR 
+#define xmldsigSignatureMethodType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+struct xmldsigSignatureMethodType {
+	/* attribute: Algorithm {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[xmldsigSignatureMethodType_Algorithm_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Algorithm ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":HMACOutputLength, http://www.w3.org/2000/09/xmldsig#,HMACOutputLengthType */
+	int64_t HMACOutputLength ;
+	unsigned int HMACOutputLength_isUsed:1;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[xmldsigSignatureMethodType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,DigestMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define xmldsigDigestMethodType_Algorithm_CHARACTERS_SIZE 65 + EXTRA_CHAR 
+#define xmldsigDigestMethodType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+struct xmldsigDigestMethodType {
+	/* attribute: Algorithm {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[xmldsigDigestMethodType_Algorithm_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Algorithm ;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[xmldsigDigestMethodType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureValueType',  base type name='base64Binary',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+#define xmldsigSignatureValueType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define xmldsigSignatureValueType_CONTENT_BYTES_SIZE 350
+struct xmldsigSignatureValueType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[xmldsigSignatureValueType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* simple content: http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		uint8_t bytes[xmldsigSignatureValueType_CONTENT_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  CONTENT ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,X509IssuerSerialType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":X509IssuerName,"http://www.w3.org/2000/09/xmldsig#":X509SerialNumber)',  derivedBy='RESTRICTION'.  */
+#define xmldsigX509IssuerSerialType_X509IssuerName_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+struct xmldsigX509IssuerSerialType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509IssuerName, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		exi_string_character_t characters[xmldsigX509IssuerSerialType_X509IssuerName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  X509IssuerName ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509SerialNumber, http://www.w3.org/2001/XMLSchema,integer */
+	int64_t X509SerialNumber ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignaturePropertyType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"])){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define xmldsigSignaturePropertyType_Target_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define xmldsigSignaturePropertyType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define xmldsigSignaturePropertyType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+struct xmldsigSignaturePropertyType {
+	/* attribute: Target {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[xmldsigSignaturePropertyType_Target_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Target ;
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[xmldsigSignaturePropertyType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[xmldsigSignaturePropertyType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,RSAKeyValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Modulus,"http://www.w3.org/2000/09/xmldsig#":Exponent)',  derivedBy='RESTRICTION'.  */
+#define xmldsigRSAKeyValueType_Modulus_BYTES_SIZE 350 
+#define xmldsigRSAKeyValueType_Exponent_BYTES_SIZE 350 
+struct xmldsigRSAKeyValueType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Modulus, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[xmldsigRSAKeyValueType_Modulus_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Modulus ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Exponent, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[xmldsigRSAKeyValueType_Exponent_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Exponent ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,PGPDataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":PGPKeyID,"http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket{0-1},(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})|("http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket,(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED}))',  derivedBy='RESTRICTION'.  */
+#define xmldsigPGPDataType_PGPKeyID_BYTES_SIZE 350 
+#define xmldsigPGPDataType_PGPKeyPacket_BYTES_SIZE 350 
+#define xmldsigPGPDataType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+struct xmldsigPGPDataType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":PGPKeyID, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		uint8_t bytes[xmldsigPGPDataType_PGPKeyID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  PGPKeyID ;
+	unsigned int PGPKeyID_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		uint8_t bytes[xmldsigPGPDataType_PGPKeyPacket_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  PGPKeyPacket ;
+	unsigned int PGPKeyPacket_isUsed:1;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[xmldsigPGPDataType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transform{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define xmldsigTransformsType_Transform_ARRAY_SIZE 1
+struct xmldsigTransformsType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Transform, Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"])|"http://www.w3.org/2000/09/xmldsig#":XPath){0-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct xmldsigTransformType array[xmldsigTransformsType_Transform_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Transform;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,X509DataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":X509IssuerSerial|"http://www.w3.org/2000/09/xmldsig#":X509SKI|"http://www.w3.org/2000/09/xmldsig#":X509SubjectName|"http://www.w3.org/2000/09/xmldsig#":X509Certificate|"http://www.w3.org/2000/09/xmldsig#":X509CRL|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]))){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define xmldsigX509DataType_X509IssuerSerial_ARRAY_SIZE 1
+#define xmldsigX509DataType_X509SKI_BYTES_SIZE 350 
+#define xmldsigX509DataType_X509SKI_ARRAY_SIZE 1
+#define xmldsigX509DataType_X509SubjectName_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define xmldsigX509DataType_X509SubjectName_ARRAY_SIZE 1
+#define xmldsigX509DataType_X509Certificate_BYTES_SIZE 350 
+#define xmldsigX509DataType_X509Certificate_ARRAY_SIZE 1
+#define xmldsigX509DataType_X509CRL_BYTES_SIZE 350 
+#define xmldsigX509DataType_X509CRL_ARRAY_SIZE 1
+#define xmldsigX509DataType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+struct xmldsigX509DataType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509IssuerSerial, Complex type name='http://www.w3.org/2000/09/xmldsig#,X509IssuerSerialType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":X509IssuerName,"http://www.w3.org/2000/09/xmldsig#":X509SerialNumber)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct xmldsigX509IssuerSerialType array[xmldsigX509DataType_X509IssuerSerial_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509IssuerSerial;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509SKI, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		struct {
+			uint8_t bytes[xmldsigX509DataType_X509SKI_BYTES_SIZE];
+			uint16_t bytesLen;
+		}  array[xmldsigX509DataType_X509SKI_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509SKI;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509SubjectName, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		struct {
+			exi_string_character_t characters[xmldsigX509DataType_X509SubjectName_CHARACTERS_SIZE];
+			uint16_t charactersLen;
+		}  array[xmldsigX509DataType_X509SubjectName_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509SubjectName;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509Certificate, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		struct {
+			uint8_t bytes[xmldsigX509DataType_X509Certificate_BYTES_SIZE];
+			uint16_t bytesLen;
+		}  array[xmldsigX509DataType_X509Certificate_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509Certificate;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509CRL, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		struct {
+			uint8_t bytes[xmldsigX509DataType_X509CRL_BYTES_SIZE];
+			uint16_t bytesLen;
+		}  array[xmldsigX509DataType_X509CRL_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509CRL;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[xmldsigX509DataType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,DSAKeyValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":P,"http://www.w3.org/2000/09/xmldsig#":Q){0-1},"http://www.w3.org/2000/09/xmldsig#":G{0-1},"http://www.w3.org/2000/09/xmldsig#":Y,"http://www.w3.org/2000/09/xmldsig#":J{0-1},("http://www.w3.org/2000/09/xmldsig#":Seed,"http://www.w3.org/2000/09/xmldsig#":PgenCounter){0-1})',  derivedBy='RESTRICTION'.  */
+#define xmldsigDSAKeyValueType_P_BYTES_SIZE 350 
+#define xmldsigDSAKeyValueType_Q_BYTES_SIZE 350 
+#define xmldsigDSAKeyValueType_G_BYTES_SIZE 350 
+#define xmldsigDSAKeyValueType_Y_BYTES_SIZE 350 
+#define xmldsigDSAKeyValueType_J_BYTES_SIZE 350 
+#define xmldsigDSAKeyValueType_Seed_BYTES_SIZE 350 
+#define xmldsigDSAKeyValueType_PgenCounter_BYTES_SIZE 350 
+struct xmldsigDSAKeyValueType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":P, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[xmldsigDSAKeyValueType_P_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  P ;
+	unsigned int P_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Q, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[xmldsigDSAKeyValueType_Q_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Q ;
+	unsigned int Q_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":G, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[xmldsigDSAKeyValueType_G_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  G ;
+	unsigned int G_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Y, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[xmldsigDSAKeyValueType_Y_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Y ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":J, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[xmldsigDSAKeyValueType_J_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  J ;
+	unsigned int J_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Seed, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[xmldsigDSAKeyValueType_Seed_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Seed ;
+	unsigned int Seed_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":PgenCounter, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[xmldsigDSAKeyValueType_PgenCounter_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  PgenCounter ;
+	unsigned int PgenCounter_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,ReferenceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1},"http://www.w3.org/2000/09/xmldsig#":DigestMethod,"http://www.w3.org/2000/09/xmldsig#":DigestValue)',  derivedBy='RESTRICTION'.  */
+#define xmldsigReferenceType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define xmldsigReferenceType_URI_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define xmldsigReferenceType_Type_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define xmldsigReferenceType_DigestValue_BYTES_SIZE 350 
+struct xmldsigReferenceType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[xmldsigReferenceType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* attribute: URI {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[xmldsigReferenceType_URI_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  URI ;
+	unsigned int URI_isUsed:1;
+	/* attribute: Type {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[xmldsigReferenceType_Type_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Type ;
+	unsigned int Type_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Transforms, Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transform{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct xmldsigTransformsType Transforms ;
+	unsigned int Transforms_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":DigestMethod, Complex type name='http://www.w3.org/2000/09/xmldsig#,DigestMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct xmldsigDigestMethodType DigestMethod ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":DigestValue, http://www.w3.org/2000/09/xmldsig#,DigestValueType */
+	struct {
+		uint8_t bytes[xmldsigReferenceType_DigestValue_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  DigestValue ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SPKIDataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":SPKISexp,(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-1}){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define xmldsigSPKIDataType_SPKISexp_BYTES_SIZE 350 
+#define xmldsigSPKIDataType_SPKISexp_ARRAY_SIZE 1
+#define xmldsigSPKIDataType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+struct xmldsigSPKIDataType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SPKISexp, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		struct {
+			uint8_t bytes[xmldsigSPKIDataType_SPKISexp_BYTES_SIZE];
+			uint16_t bytesLen;
+		}  array[xmldsigSPKIDataType_SPKISexp_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SPKISexp;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[xmldsigSPKIDataType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,ManifestType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Reference{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define xmldsigManifestType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define xmldsigManifestType_Reference_ARRAY_SIZE 1
+struct xmldsigManifestType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[xmldsigManifestType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Reference, Complex type name='http://www.w3.org/2000/09/xmldsig#,ReferenceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1},"http://www.w3.org/2000/09/xmldsig#":DigestMethod,"http://www.w3.org/2000/09/xmldsig#":DigestValue)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct xmldsigReferenceType array[xmldsigManifestType_Reference_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Reference;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,RetrievalMethodType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1})',  derivedBy='RESTRICTION'.  */
+#define xmldsigRetrievalMethodType_URI_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define xmldsigRetrievalMethodType_Type_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+struct xmldsigRetrievalMethodType {
+	/* attribute: URI {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[xmldsigRetrievalMethodType_URI_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  URI ;
+	unsigned int URI_isUsed:1;
+	/* attribute: Type {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[xmldsigRetrievalMethodType_Type_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Type ;
+	unsigned int Type_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Transforms, Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transform{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct xmldsigTransformsType Transforms ;
+	unsigned int Transforms_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignedInfoType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":CanonicalizationMethod,"http://www.w3.org/2000/09/xmldsig#":SignatureMethod,"http://www.w3.org/2000/09/xmldsig#":Reference{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define xmldsigSignedInfoType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define xmldsigSignedInfoType_Reference_ARRAY_SIZE 1
+struct xmldsigSignedInfoType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[xmldsigSignedInfoType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":CanonicalizationMethod, Complex type name='http://www.w3.org/2000/09/xmldsig#,CanonicalizationMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##any]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct xmldsigCanonicalizationMethodType CanonicalizationMethod ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SignatureMethod, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":HMACOutputLength{0-1},(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct xmldsigSignatureMethodType SignatureMethod ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Reference, Complex type name='http://www.w3.org/2000/09/xmldsig#,ReferenceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1},"http://www.w3.org/2000/09/xmldsig#":DigestMethod,"http://www.w3.org/2000/09/xmldsig#":DigestValue)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct xmldsigReferenceType array[xmldsigSignedInfoType_Reference_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Reference;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignaturePropertiesType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":SignatureProperty{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define xmldsigSignaturePropertiesType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define xmldsigSignaturePropertiesType_SignatureProperty_ARRAY_SIZE 1
+struct xmldsigSignaturePropertiesType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[xmldsigSignaturePropertiesType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SignatureProperty, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignaturePropertyType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"])){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct xmldsigSignaturePropertyType array[xmldsigSignaturePropertiesType_SignatureProperty_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SignatureProperty;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,KeyValueType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":DSAKeyValue|"http://www.w3.org/2000/09/xmldsig#":RSAKeyValue|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]))',  derivedBy='RESTRICTION'.  */
+#define xmldsigKeyValueType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+struct xmldsigKeyValueType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":DSAKeyValue, Complex type name='http://www.w3.org/2000/09/xmldsig#,DSAKeyValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":P,"http://www.w3.org/2000/09/xmldsig#":Q){0-1},"http://www.w3.org/2000/09/xmldsig#":G{0-1},"http://www.w3.org/2000/09/xmldsig#":Y,"http://www.w3.org/2000/09/xmldsig#":J{0-1},("http://www.w3.org/2000/09/xmldsig#":Seed,"http://www.w3.org/2000/09/xmldsig#":PgenCounter){0-1})',  derivedBy='RESTRICTION'.  */
+	struct xmldsigDSAKeyValueType DSAKeyValue ;
+	unsigned int DSAKeyValue_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":RSAKeyValue, Complex type name='http://www.w3.org/2000/09/xmldsig#,RSAKeyValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Modulus,"http://www.w3.org/2000/09/xmldsig#":Exponent)',  derivedBy='RESTRICTION'.  */
+	struct xmldsigRSAKeyValueType RSAKeyValue ;
+	unsigned int RSAKeyValue_isUsed:1;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[xmldsigKeyValueType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,KeyInfoType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":KeyName|"http://www.w3.org/2000/09/xmldsig#":KeyValue|"http://www.w3.org/2000/09/xmldsig#":RetrievalMethod|"http://www.w3.org/2000/09/xmldsig#":X509Data|"http://www.w3.org/2000/09/xmldsig#":PGPData|"http://www.w3.org/2000/09/xmldsig#":SPKIData|"http://www.w3.org/2000/09/xmldsig#":MgmtData|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"])){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define xmldsigKeyInfoType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define xmldsigKeyInfoType_KeyName_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define xmldsigKeyInfoType_KeyName_ARRAY_SIZE 1
+#define xmldsigKeyInfoType_KeyValue_ARRAY_SIZE 1
+#define xmldsigKeyInfoType_RetrievalMethod_ARRAY_SIZE 1
+#define xmldsigKeyInfoType_X509Data_ARRAY_SIZE 1
+#define xmldsigKeyInfoType_PGPData_ARRAY_SIZE 1
+#define xmldsigKeyInfoType_SPKIData_ARRAY_SIZE 1
+#define xmldsigKeyInfoType_MgmtData_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define xmldsigKeyInfoType_MgmtData_ARRAY_SIZE 1
+#define xmldsigKeyInfoType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+struct xmldsigKeyInfoType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[xmldsigKeyInfoType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":KeyName, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		struct {
+			exi_string_character_t characters[xmldsigKeyInfoType_KeyName_CHARACTERS_SIZE];
+			uint16_t charactersLen;
+		}  array[xmldsigKeyInfoType_KeyName_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} KeyName;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":KeyValue, Complex type name='http://www.w3.org/2000/09/xmldsig#,KeyValueType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":DSAKeyValue|"http://www.w3.org/2000/09/xmldsig#":RSAKeyValue|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]))',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct xmldsigKeyValueType array[xmldsigKeyInfoType_KeyValue_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} KeyValue;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":RetrievalMethod, Complex type name='http://www.w3.org/2000/09/xmldsig#,RetrievalMethodType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1})',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct xmldsigRetrievalMethodType array[xmldsigKeyInfoType_RetrievalMethod_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} RetrievalMethod;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509Data, Complex type name='http://www.w3.org/2000/09/xmldsig#,X509DataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":X509IssuerSerial|"http://www.w3.org/2000/09/xmldsig#":X509SKI|"http://www.w3.org/2000/09/xmldsig#":X509SubjectName|"http://www.w3.org/2000/09/xmldsig#":X509Certificate|"http://www.w3.org/2000/09/xmldsig#":X509CRL|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]))){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct xmldsigX509DataType array[xmldsigKeyInfoType_X509Data_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509Data;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":PGPData, Complex type name='http://www.w3.org/2000/09/xmldsig#,PGPDataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":PGPKeyID,"http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket{0-1},(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})|("http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket,(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED}))',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct xmldsigPGPDataType array[xmldsigKeyInfoType_PGPData_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} PGPData;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SPKIData, Complex type name='http://www.w3.org/2000/09/xmldsig#,SPKIDataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":SPKISexp,(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-1}){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct xmldsigSPKIDataType array[xmldsigKeyInfoType_SPKIData_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SPKIData;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":MgmtData, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		struct {
+			exi_string_character_t characters[xmldsigKeyInfoType_MgmtData_CHARACTERS_SIZE];
+			uint16_t charactersLen;
+		}  array[xmldsigKeyInfoType_MgmtData_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} MgmtData;
+	/* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */
+	struct {
+		exi_string_character_t characters[xmldsigKeyInfoType_ANY_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ANY ;
+	unsigned int ANY_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":SignedInfo,"http://www.w3.org/2000/09/xmldsig#":SignatureValue,"http://www.w3.org/2000/09/xmldsig#":KeyInfo{0-1},"http://www.w3.org/2000/09/xmldsig#":Object{0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define xmldsigSignatureType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define xmldsigSignatureType_Object_ARRAY_SIZE 1
+struct xmldsigSignatureType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[xmldsigSignatureType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SignedInfo, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignedInfoType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":CanonicalizationMethod,"http://www.w3.org/2000/09/xmldsig#":SignatureMethod,"http://www.w3.org/2000/09/xmldsig#":Reference{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct xmldsigSignedInfoType SignedInfo ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SignatureValue, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureValueType',  base type name='base64Binary',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+	struct xmldsigSignatureValueType SignatureValue ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":KeyInfo, Complex type name='http://www.w3.org/2000/09/xmldsig#,KeyInfoType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":KeyName|"http://www.w3.org/2000/09/xmldsig#":KeyValue|"http://www.w3.org/2000/09/xmldsig#":RetrievalMethod|"http://www.w3.org/2000/09/xmldsig#":X509Data|"http://www.w3.org/2000/09/xmldsig#":PGPData|"http://www.w3.org/2000/09/xmldsig#":SPKIData|"http://www.w3.org/2000/09/xmldsig#":MgmtData|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"])){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct xmldsigKeyInfoType KeyInfo ;
+	unsigned int KeyInfo_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Object, Complex type name='http://www.w3.org/2000/09/xmldsig#,ObjectType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##any])){0-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct xmldsigObjectType array[xmldsigSignatureType_Object_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Object;
+};
+
+
+
+#define EXIDocument_MgmtData_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define EXIDocument_KeyName_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define EXIDocument_DigestValue_BYTES_SIZE 350 
+#define EXIFragment_DigestValue_BYTES_SIZE 350 
+#define EXIFragment_SPKISexp_BYTES_SIZE 350 
+#define EXIFragment_KeyName_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define EXIFragment_X509IssuerName_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define EXIFragment_MgmtData_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define EXIFragment_PGPKeyID_BYTES_SIZE 350 
+#define EXIFragment_PGPKeyPacket_BYTES_SIZE 350 
+#define EXIFragment_Exponent_BYTES_SIZE 350 
+#define EXIFragment_P_BYTES_SIZE 350 
+#define EXIFragment_Q_BYTES_SIZE 350 
+#define EXIFragment_Seed_BYTES_SIZE 350 
+#define EXIFragment_X509SubjectName_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define EXIFragment_X509Certificate_BYTES_SIZE 350 
+#define EXIFragment_G_BYTES_SIZE 350 
+#define EXIFragment_J_BYTES_SIZE 350 
+#define EXIFragment_X509SKI_BYTES_SIZE 350 
+#define EXIFragment_XPath_CHARACTERS_SIZE 50 + EXTRA_CHAR 
+#define EXIFragment_Modulus_BYTES_SIZE 350 
+#define EXIFragment_X509CRL_BYTES_SIZE 350 
+#define EXIFragment_Y_BYTES_SIZE 350 
+#define EXIFragment_PgenCounter_BYTES_SIZE 350 
+
+
+/* Global elements of EXI Document */
+struct xmldsigEXIDocument {
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	union {
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */ 
+	struct xmldsigSignaturePropertyType SignatureProperty ;
+	struct xmldsigDSAKeyValueType DSAKeyValue ;
+	struct xmldsigSignaturePropertiesType SignatureProperties ;
+	struct xmldsigKeyValueType KeyValue ;
+	struct xmldsigTransformsType Transforms ;
+	struct xmldsigDigestMethodType DigestMethod ;
+	struct xmldsigSignatureType Signature ;
+	struct xmldsigRetrievalMethodType RetrievalMethod ;
+	struct xmldsigManifestType Manifest ;
+	struct xmldsigReferenceType Reference ;
+	struct xmldsigCanonicalizationMethodType CanonicalizationMethod ;
+	struct xmldsigRSAKeyValueType RSAKeyValue ;
+	struct xmldsigTransformType Transform ;
+	struct xmldsigPGPDataType PGPData ;
+	struct {
+		exi_string_character_t characters[EXIDocument_MgmtData_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  MgmtData ;
+	struct xmldsigSignatureMethodType SignatureMethod ;
+	struct xmldsigKeyInfoType KeyInfo ;
+	struct xmldsigSPKIDataType SPKIData ;
+	struct xmldsigX509DataType X509Data ;
+	struct xmldsigSignatureValueType SignatureValue ;
+	struct {
+		exi_string_character_t characters[EXIDocument_KeyName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  KeyName ;
+	struct {
+		uint8_t bytes[EXIDocument_DigestValue_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  DigestValue ;
+	struct xmldsigSignedInfoType SignedInfo ;
+	struct xmldsigObjectType Object ;
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	};
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */ 
+	unsigned int SignatureProperty_isUsed:1;
+	unsigned int DSAKeyValue_isUsed:1;
+	unsigned int SignatureProperties_isUsed:1;
+	unsigned int KeyValue_isUsed:1;
+	unsigned int Transforms_isUsed:1;
+	unsigned int DigestMethod_isUsed:1;
+	unsigned int Signature_isUsed:1;
+	unsigned int RetrievalMethod_isUsed:1;
+	unsigned int Manifest_isUsed:1;
+	unsigned int Reference_isUsed:1;
+	unsigned int CanonicalizationMethod_isUsed:1;
+	unsigned int RSAKeyValue_isUsed:1;
+	unsigned int Transform_isUsed:1;
+	unsigned int PGPData_isUsed:1;
+	unsigned int MgmtData_isUsed:1;
+	unsigned int SignatureMethod_isUsed:1;
+	unsigned int KeyInfo_isUsed:1;
+	unsigned int SPKIData_isUsed:1;
+	unsigned int X509Data_isUsed:1;
+	unsigned int SignatureValue_isUsed:1;
+	unsigned int KeyName_isUsed:1;
+	unsigned int DigestValue_isUsed:1;
+	unsigned int SignedInfo_isUsed:1;
+	unsigned int Object_isUsed:1;
+
+
+	int _warning_;
+};
+
+
+#if DEPLOY_XMLDSIG_CODEC_FRAGMENT == SUPPORT_YES
+/* Possible elements of EXI Fragment */
+struct xmldsigEXIFragment {
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	union {
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */ 
+	struct {
+		uint8_t bytes[EXIFragment_DigestValue_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  DigestValue ;
+	struct xmldsigX509DataType X509Data ;
+	struct xmldsigKeyValueType KeyValue ;
+	struct xmldsigDigestMethodType DigestMethod ;
+	struct {
+		uint8_t bytes[EXIFragment_SPKISexp_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  SPKISexp ;
+	struct xmldsigTransformsType Transforms ;
+	struct {
+		exi_string_character_t characters[EXIFragment_KeyName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  KeyName ;
+	struct {
+		exi_string_character_t characters[EXIFragment_X509IssuerName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  X509IssuerName ;
+	struct {
+		exi_string_character_t characters[EXIFragment_MgmtData_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  MgmtData ;
+	struct xmldsigReferenceType Reference ;
+	struct xmldsigSignaturePropertiesType SignatureProperties ;
+	struct {
+		uint8_t bytes[EXIFragment_PGPKeyID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  PGPKeyID ;
+	struct xmldsigPGPDataType PGPData ;
+	struct xmldsigDSAKeyValueType DSAKeyValue ;
+	struct xmldsigSignatureValueType SignatureValue ;
+	struct xmldsigKeyInfoType KeyInfo ;
+	struct xmldsigSignaturePropertyType SignatureProperty ;
+	struct {
+		uint8_t bytes[EXIFragment_PGPKeyPacket_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  PGPKeyPacket ;
+	int64_t HMACOutputLength ;
+	struct {
+		uint8_t bytes[EXIFragment_Exponent_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Exponent ;
+	struct xmldsigManifestType Manifest ;
+	struct {
+		uint8_t bytes[EXIFragment_P_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  P ;
+	struct xmldsigCanonicalizationMethodType CanonicalizationMethod ;
+	struct {
+		uint8_t bytes[EXIFragment_Q_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Q ;
+	struct {
+		uint8_t bytes[EXIFragment_Seed_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Seed ;
+	struct {
+		exi_string_character_t characters[EXIFragment_X509SubjectName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  X509SubjectName ;
+	struct {
+		uint8_t bytes[EXIFragment_X509Certificate_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  X509Certificate ;
+	struct xmldsigRSAKeyValueType RSAKeyValue ;
+	struct xmldsigX509IssuerSerialType X509IssuerSerial ;
+	struct xmldsigSPKIDataType SPKIData ;
+	struct {
+		uint8_t bytes[EXIFragment_G_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  G ;
+	struct {
+		uint8_t bytes[EXIFragment_J_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  J ;
+	struct xmldsigSignedInfoType SignedInfo ;
+	struct {
+		uint8_t bytes[EXIFragment_X509SKI_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  X509SKI ;
+	struct xmldsigTransformType Transform ;
+	struct {
+		exi_string_character_t characters[EXIFragment_XPath_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  XPath ;
+	struct xmldsigObjectType Object ;
+	int64_t X509SerialNumber ;
+	struct xmldsigRetrievalMethodType RetrievalMethod ;
+	struct {
+		uint8_t bytes[EXIFragment_Modulus_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Modulus ;
+	struct {
+		uint8_t bytes[EXIFragment_X509CRL_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  X509CRL ;
+	struct xmldsigSignatureType Signature ;
+	struct {
+		uint8_t bytes[EXIFragment_Y_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Y ;
+	struct xmldsigSignatureMethodType SignatureMethod ;
+	struct {
+		uint8_t bytes[EXIFragment_PgenCounter_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  PgenCounter ;
+#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES
+	};
+#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */ 
+	unsigned int DigestValue_isUsed:1;
+	unsigned int X509Data_isUsed:1;
+	unsigned int KeyValue_isUsed:1;
+	unsigned int DigestMethod_isUsed:1;
+	unsigned int SPKISexp_isUsed:1;
+	unsigned int Transforms_isUsed:1;
+	unsigned int KeyName_isUsed:1;
+	unsigned int X509IssuerName_isUsed:1;
+	unsigned int MgmtData_isUsed:1;
+	unsigned int Reference_isUsed:1;
+	unsigned int SignatureProperties_isUsed:1;
+	unsigned int PGPKeyID_isUsed:1;
+	unsigned int PGPData_isUsed:1;
+	unsigned int DSAKeyValue_isUsed:1;
+	unsigned int SignatureValue_isUsed:1;
+	unsigned int KeyInfo_isUsed:1;
+	unsigned int SignatureProperty_isUsed:1;
+	unsigned int PGPKeyPacket_isUsed:1;
+	unsigned int HMACOutputLength_isUsed:1;
+	unsigned int Exponent_isUsed:1;
+	unsigned int Manifest_isUsed:1;
+	unsigned int P_isUsed:1;
+	unsigned int CanonicalizationMethod_isUsed:1;
+	unsigned int Q_isUsed:1;
+	unsigned int Seed_isUsed:1;
+	unsigned int X509SubjectName_isUsed:1;
+	unsigned int X509Certificate_isUsed:1;
+	unsigned int RSAKeyValue_isUsed:1;
+	unsigned int X509IssuerSerial_isUsed:1;
+	unsigned int SPKIData_isUsed:1;
+	unsigned int G_isUsed:1;
+	unsigned int J_isUsed:1;
+	unsigned int SignedInfo_isUsed:1;
+	unsigned int X509SKI_isUsed:1;
+	unsigned int Transform_isUsed:1;
+	unsigned int XPath_isUsed:1;
+	unsigned int Object_isUsed:1;
+	unsigned int X509SerialNumber_isUsed:1;
+	unsigned int RetrievalMethod_isUsed:1;
+	unsigned int Modulus_isUsed:1;
+	unsigned int X509CRL_isUsed:1;
+	unsigned int Signature_isUsed:1;
+	unsigned int Y_isUsed:1;
+	unsigned int SignatureMethod_isUsed:1;
+	unsigned int PgenCounter_isUsed:1;
+
+
+	int _warning_;
+};
+#endif /* DEPLOY_XMLDSIG_CODEC_FRAGMENT */
+
+
+/* Initialization methods for structs */
+
+void init_xmldsigEXIDocument(struct xmldsigEXIDocument* exiDoc);
+#if DEPLOY_XMLDSIG_CODEC_FRAGMENT == SUPPORT_YES
+void init_xmldsigEXIFragment(struct xmldsigEXIFragment* exiFrag);
+#endif /* DEPLOY_XMLDSIG_CODEC_FRAGMENT */
+void init_xmldsigCanonicalizationMethodType(struct xmldsigCanonicalizationMethodType* xmldsigCanonicalizationMethodType);
+void init_xmldsigManifestType(struct xmldsigManifestType* xmldsigManifestType);
+void init_xmldsigObjectType(struct xmldsigObjectType* xmldsigObjectType);
+void init_xmldsigTransformType(struct xmldsigTransformType* xmldsigTransformType);
+void init_xmldsigSignatureMethodType(struct xmldsigSignatureMethodType* xmldsigSignatureMethodType);
+void init_xmldsigDigestMethodType(struct xmldsigDigestMethodType* xmldsigDigestMethodType);
+void init_xmldsigRetrievalMethodType(struct xmldsigRetrievalMethodType* xmldsigRetrievalMethodType);
+void init_xmldsigSignatureValueType(struct xmldsigSignatureValueType* xmldsigSignatureValueType);
+void init_xmldsigX509IssuerSerialType(struct xmldsigX509IssuerSerialType* xmldsigX509IssuerSerialType);
+void init_xmldsigSignedInfoType(struct xmldsigSignedInfoType* xmldsigSignedInfoType);
+void init_xmldsigSignaturePropertiesType(struct xmldsigSignaturePropertiesType* xmldsigSignaturePropertiesType);
+void init_xmldsigSignaturePropertyType(struct xmldsigSignaturePropertyType* xmldsigSignaturePropertyType);
+void init_xmldsigKeyValueType(struct xmldsigKeyValueType* xmldsigKeyValueType);
+void init_xmldsigRSAKeyValueType(struct xmldsigRSAKeyValueType* xmldsigRSAKeyValueType);
+void init_xmldsigPGPDataType(struct xmldsigPGPDataType* xmldsigPGPDataType);
+void init_xmldsigTransformsType(struct xmldsigTransformsType* xmldsigTransformsType);
+void init_xmldsigX509DataType(struct xmldsigX509DataType* xmldsigX509DataType);
+void init_xmldsigSignatureType(struct xmldsigSignatureType* xmldsigSignatureType);
+void init_xmldsigDSAKeyValueType(struct xmldsigDSAKeyValueType* xmldsigDSAKeyValueType);
+void init_xmldsigReferenceType(struct xmldsigReferenceType* xmldsigReferenceType);
+void init_xmldsigSPKIDataType(struct xmldsigSPKIDataType* xmldsigSPKIDataType);
+void init_xmldsigKeyInfoType(struct xmldsigKeyInfoType* xmldsigKeyInfoType);
+
+
+#endif /* DEPLOY_XMLDSIG_CODEC */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

文件差异内容过多而无法显示
+ 4331 - 0
EVSE/Projects/CCS/Apps/exi_engine/xmldsig/xmldsigEXIDatatypesDecoder.c


+ 65 - 0
EVSE/Projects/CCS/Apps/exi_engine/xmldsig/xmldsigEXIDatatypesDecoder.h

@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9.4 
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: xmldsig-core-schema.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+ * \file 	EXIDatatypesDecoder.h
+ * \brief 	Decoder for datatype definitions
+ *
+ */
+
+#ifndef EXI_xmldsig_DATATYPES_DECODER_H
+#define EXI_xmldsig_DATATYPES_DECODER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "xmldsigEXIDatatypes.h"
+
+#if DEPLOY_XMLDSIG_CODEC == SUPPORT_YES
+
+#include <stdint.h>
+
+#include "EXITypes.h"
+
+int decode_xmldsigExiDocument(bitstream_t* stream, struct xmldsigEXIDocument* exiDoc);
+
+#if DEPLOY_XMLDSIG_CODEC_FRAGMENT == SUPPORT_YES
+int decode_xmldsigExiFragment(bitstream_t* stream, struct xmldsigEXIFragment* exiFrag);
+#endif /* DEPLOY_XMLDSIG_CODEC_FRAGMENT */
+
+#endif /* DEPLOY_XMLDSIG_CODEC */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

文件差异内容过多而无法显示
+ 3100 - 0
EVSE/Projects/CCS/Apps/exi_engine/xmldsig/xmldsigEXIDatatypesEncoder.c


+ 66 - 0
EVSE/Projects/CCS/Apps/exi_engine/xmldsig/xmldsigEXIDatatypesEncoder.h

@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2007-2018 Siemens AG
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9.4 
+ * @contact Richard.Kuntschke@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: xmldsig-core-schema.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+ * \file 	EXIDatatypesEncoder.h
+ * \brief 	Encoder for datatype definitions
+ *
+ */
+
+#ifndef EXI_xmldsig_DATATYPES_ENCODER_H
+#define EXI_xmldsig_DATATYPES_ENCODER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "xmldsigEXIDatatypes.h"
+
+#if DEPLOY_XMLDSIG_CODEC == SUPPORT_YES
+
+#include <stdint.h>
+
+#include "EXITypes.h"
+
+int encode_xmldsigExiDocument(bitstream_t* stream, struct xmldsigEXIDocument* exiDoc);
+
+#if DEPLOY_XMLDSIG_CODEC_FRAGMENT == SUPPORT_YES
+int encode_xmldsigExiFragment(bitstream_t* stream, struct xmldsigEXIFragment* exiFrag);
+#endif /* DEPLOY_XMLDSIG_CODEC_FRAGMENT */
+
+
+#endif /* DEPLOY_XMLDSIG_CODEC */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

二进制
EVSE/Projects/CCS/Apps/main


+ 747 - 480
EVSE/Projects/CCS/Apps/main.c

@@ -1,480 +1,747 @@
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <linux/termios.h>
-#include <stdio.h>
-#include <string.h>
-#include <time.h>
-#include <stdlib.h>
-#include <sys/ipc.h>
-#include <sys/shm.h>
-#include <sys/mman.h>
-#include <linux/sockios.h> 
-#include <linux/socket.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <sys/time.h> 
-#include <sys/timeb.h> 
-#include <math.h>//for pow
-#include <unistd.h>
-#include "define.h"
-
-
-//#define Debug
-
-struct SysConfigAndInfo			*ShmSysConfigAndInfo;
-struct StatusCodeData 			*ShmStatusCodeData;
-struct CcsData				*ShmCcsData;
-struct InternalComm			*ShmInternalComm;
-
-#ifdef SystemLogMessage
-int StoreLogMsg(unsigned char *DataString)
-{
-	unsigned char Buf[256];
-	time_t CurrentTime;
-	struct tm *tm;
-			
-	memset(Buf,0,sizeof(Buf));
-	CurrentTime = time(NULL);
-	tm=localtime(&CurrentTime);
-	sprintf(Buf,"echo \"%04d.%02d.%02d %02d:%02d:%02d - %s\" >> /Storage/SystemLog/[%04d.%02d]SystemLog",
-			tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,
-			DataString,
-			tm->tm_year+1900,tm->tm_mon+1);
-	system(Buf);
-	#ifdef Debug
-	printf("%s \n",DataString);
-	#endif
-}		
-#endif
-
-int DiffTimeb(struct timeb ST, struct timeb ET)
-{
-	//return milli-second
-	unsigned int StartTime,StopTime;
-	
-	StartTime=(unsigned int)ST.time;
-	StopTime=(unsigned int)ET.time;
-	return (StopTime-StartTime)*1000+ET.millitm-ST.millitm;
-}	
-
-/**************************************************************************************/
-/**************************Create all share memory *********************************/
-/**************************************************************************************/
-int CreatShareMemory()
-{
-	int MeterSMId;
-	
-	//creat ShmSysConfigAndInfo
-	if ((MeterSMId = shmget(ShmSysConfigAndInfoKey, sizeof(struct SysConfigAndInfo), IPC_CREAT | 0777)) < 0) 
-    	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[main]CreatShareMemory:shmget ShmSysConfigAndInfo NG");
-		#endif			
-		return 0;
-	}
-    	else if ((ShmSysConfigAndInfo = shmat(MeterSMId, NULL, 0)) == (void *) -1) 
-    	{
-    		#ifdef SystemLogMessage	
-		StoreLogMsg("[main]CreatShareMemory:shmat ShmSysConfigAndInfo NG");
-		#endif		
-		return 0;
-   	 }
-   	 memset(ShmSysConfigAndInfo,0,sizeof(struct SysConfigAndInfo));
-   	 //creat ShmStatusCodeData
-   	 if ((MeterSMId = shmget(ShmStatusCodeKey, sizeof(struct StatusCodeData), IPC_CREAT | 0777)) < 0) 
-    	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[main]CreatShareMemory:shmget ShmStatusCodeData NG");
-		#endif		
-		return 0;	
-	}
-    	else if ((ShmStatusCodeData = shmat(MeterSMId, NULL, 0)) == (void *) -1) 
-    	{
-    		#ifdef SystemLogMessage	
-		StoreLogMsg("[main]CreatShareMemory:shmat ShmStatusCodeData NG");
-		#endif		
-		return 0;
-   	 }
-   	 memset(ShmStatusCodeData,0,sizeof(struct StatusCodeData));
-   	 //creat ShmCcsData
-   	 if ((MeterSMId = shmget(ShmCcsCommKey, sizeof(struct CcsData), IPC_CREAT | 0777)) < 0) 
-    	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[main]CreatShareMemory:shmget ShmCcsData NG");
-		#endif			
-		return 0;
-	}
-    	else if ((ShmCcsData = shmat(MeterSMId, NULL, 0)) == (void *) -1) 
-    	{
-    		#ifdef SystemLogMessage	
-		StoreLogMsg("[main]CreatShareMemory:shmat ShmCcsData NG");
-		#endif		
-		return 0;
-   	 }
-   	 memset(ShmCcsData,0,sizeof(struct CcsData));
-   	 
-   	   //creat ShmInternalComm
-   	 if ((MeterSMId = shmget(ShmInternalCommKey, sizeof(struct InternalComm),   IPC_CREAT|0777)) < 0) 
-    	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[main]CreatShareMemory:shmget ShmInternalComm NG");
-		#endif			
-		return 0;
-	}
-    	else if ((ShmInternalComm = shmat(MeterSMId, NULL, 0)) == (void *) -1) 
-    	{
-    		#ifdef SystemLogMessage	
-		StoreLogMsg("[main]CreatShareMemory:shmat ShmInternalComm NG");
-		#endif		
-		return 0;
-   	 }
-    	return 1;
-}
-
-/**************************************************************************************/
-/****************Following functions are CSU initialization***************************/
-/**************************************************************************************/
-void InitGPIO()
-{
-	/*****************0~3, 4 bank, bank x 32+ num*********************/
-	/***************************************************************/
-	/*************** INPUT PIN ***************************************/
-	/***************************************************************/
-	/*GPIO2_0: QCA7000 interrupt */
-	system("echo 64 > /sys/class/gpio/export");
-	system("echo \"in\" > /sys/class/gpio/gpio64/direction");
-	
-	
-	/***************************************************************/
-	/*************** OUTPUT PIN ************************************/
-	/***************************************************************/
-	/*GPIO2_25: AM_IO_2, H: ?; L: ?*/
-	system("echo 89 > /sys/class/gpio/export");
-	system("echo \"out\" > /sys/class/gpio/gpio89/direction");
-	system("echo 0 > /sys/class/gpio/gpio89/value");
-	/*GPIO2_23: AM_IO_1, H: ?; L: ?*/
-	system("echo 87 > /sys/class/gpio/export");
-	system("echo \"out\" > /sys/class/gpio/gpio87/direction");
-	system("echo 0 > /sys/class/gpio/gpio87/value");
-	/*GPIO2_24: AM_QCA_PWR_RST, H: reset, L: noraml*/
-	system("echo 88 > /sys/class/gpio/export");
-	system("echo \"out\" > /sys/class/gpio/gpio88/direction");
-	system("echo 0 > /sys/class/gpio/gpio88/value");
-	/*GPIO2_22: Pilot_state E, H: state E, L: normal*/
-	system("echo 86 > /sys/class/gpio/export");
-	system("echo \"out\" > /sys/class/gpio/gpio86/direction");
-	system("echo 0 > /sys/class/gpio/gpio86/value");
-	
-		
-	#ifdef SystemLogMessage	
-	StoreLogMsg("[main]InitGPIO: Initial GPIO OK");
-	#endif	
-
-}
-
-int LoadSysConfigAndInfo(struct SysConfigData *ptr)
-{
-	int fd,wrd;
-	struct SysConfigData *buf;
-	unsigned char *PtrBuf;
-	unsigned int ChkSum,ChkSumOrg;
-	
-	if((buf=malloc(sizeof(struct SysConfigData)))==NULL)
-	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[main]LoadSysConfigAndInfo:malloc buffer NG,rebooting..");
-		#endif	
-		if(ShmStatusCodeData!=NULL)
-		{
-			ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
-		}	
-		sleep(5);
-		system("reboot -f");
-		sleep(5);
-		system("reboot -f");
-	}	
-	memset(buf, 0, sizeof(struct SysConfigData));
-	fd = open("/dev/mtdblock10", O_RDWR);
-	if (fd < 0) 
-	{
-		free(buf);
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[main]LoadSysConfigAndInfo:open mtdblock10 NG,rebooting..");
-		#endif	
-		if(ShmStatusCodeData!=NULL)
-		{
-			ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
-		}	
-		sleep(5);
-		system("reboot -f");
-		sleep(5);
-		system("reboot -f");
-	}
-    	wrd=read(fd, buf,sizeof(struct SysConfigData));
-	close(fd);
-	if(wrd!=(sizeof(struct SysConfigData)))
-	{
-		free(buf);
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[main]LoadSysConfigAndInfo: read SysConfigData data NG,rebooting..");
-		#endif	
-		if(ShmStatusCodeData!=NULL)
-		{
-			ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
-		}	
-		sleep(5);
-		system("reboot -f");
-		sleep(5);
-		system("reboot -f");
-	}	
-	PtrBuf=(unsigned char *)buf;
-	ChkSum=0;
-	for(wrd=0;wrd<(sizeof(struct SysConfigData)-4);wrd++)
-	{
-		ChkSum+=PtrBuf[wrd];
-	}
-	ChkSumOrg=buf->Checksum;
-	
-	if(ChkSum!=ChkSumOrg)
-	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[main]LoadSysConfigAndInfo: Primary SysConfigData checksum NG, read backup");
-		#endif	
-		fd = open("/dev/mtdblock11", O_RDWR);
-		if (fd < 0) 
-		{
-			free(buf);
-			#ifdef SystemLogMessage	
-			StoreLogMsg("[main]LoadSysConfigAndInfo: open mtdblock11 (backup) NG,rebooting..");
-			#endif	
-			if(ShmStatusCodeData!=NULL)
-			{
-				ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
-			}	
-			sleep(5);
-			system("reboot -f");
-			sleep(5);
-			system("reboot -f");
-	    	}
-	    	memset(buf, 0, sizeof(struct SysConfigData));
-   		wrd=read(fd, buf,sizeof(struct SysConfigData));
-    		close(fd);
-		if(wrd!=sizeof(struct SysConfigData))
-		{
-			free(buf);
-			#ifdef SystemLogMessage	
-			StoreLogMsg("[main]LoadSysConfigAndInfo: read backup SysConfigData data NG,rebooting..");
-			#endif	
-			if(ShmStatusCodeData!=NULL)
-			{
-				ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
-			}	
-			sleep(5);
-			system("reboot -f");
-			sleep(5);
-			system("reboot -f");
-		}	
-		PtrBuf=(unsigned char *)buf;
-		ChkSum=0;
-		for(wrd=0;wrd<(sizeof(struct SysConfigData)-4);wrd++)
-		{
-			ChkSum+=PtrBuf[wrd];
-		}
-		ChkSumOrg=buf->Checksum;
-		if(ChkSum!=ChkSumOrg)
-		{
-			#ifdef SystemLogMessage	
-			StoreLogMsg("[main]LoadSysConfigAndInfo: backup SysConfigData checksum NG, read Factory default");
-			#endif	
-			fd = open("/dev/mtdblock12", O_RDWR);
-			if (fd < 0) 
-			{
-				free(buf);
-				#ifdef SystemLogMessage	
-				StoreLogMsg("[main]LoadSysConfigAndInfo: open mtdblock12 (Factory default) NG,rebooting..");
-				#endif	
-				if(ShmStatusCodeData!=NULL)
-				{
-					ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
-				}	
-				sleep(5);
-				system("reboot -f");
-				sleep(5);
-				system("reboot -f");
-	    		}
-	    		memset(buf, 0, sizeof(struct SysConfigData));
-   			wrd=read(fd, buf,sizeof(struct SysConfigData));
-    			close(fd);
-			if(wrd!=sizeof(struct SysConfigData))
-			{
-				free(buf);
-				#ifdef SystemLogMessage	
-				StoreLogMsg("[main]LoadSysConfigAndInfo: read factory default  SysConfigData data NG,rebooting..");
-				#endif	
-				if(ShmStatusCodeData!=NULL)
-				{
-					ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
-				}	
-				sleep(5);
-				system("reboot -f");
-				sleep(5);
-				system("reboot -f");
-			}	
-			PtrBuf=(unsigned char *)buf;
-			ChkSum=0;
-			for(wrd=0;wrd<(sizeof(struct SysConfigData)-4);wrd++)
-			{
-				ChkSum+=PtrBuf[wrd];
-			}
-			ChkSumOrg=buf->Checksum;
-			if(ChkSum!=ChkSumOrg)
-			{
-				#ifdef SystemLogMessage	
-				StoreLogMsg("[main]LoadSysConfigAndInfo: factory default  SysConfigData checksum NG, restore factory default");
-				#endif	
-				goto DefaultShm;
-			}	
-		}	
-	}	
-	//load OK
-	memcpy((struct SysConfigData *)ptr,(struct SysConfigData *)buf,sizeof(struct SysConfigData));	
-	free(buf);
-	#ifdef SystemLogMessage	
-	StoreLogMsg("[main]LoadSysConfigAndInfo: Load SysConfigData OK");
-	#endif	
-	return 1;
-    
-DefaultShm:
-	system("cd /root;./FactoryConfig");
-	system("sync");
-	sleep(5);
-	system("reboot -f");
-	sleep(5);
-	system("reboot -f");
-}
-
-int Initialization()
-{
-	unsigned char str[256];
-	
-	//init GPIO
-	InitGPIO();
-
-	//init ecap0
-	memset(str,0,sizeof(str));
-	system("echo 0 > /sys/class/pwm/pwmchip0/export");
-	system("echo 1000000 > /sys/class/pwm/pwmchip0/pwm0/period");// nano seconds =>1k Hz
-	system("echo 1000000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle"); //default 100%
-	system("echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable");
-	//system("echo 1 > /sys /class/pwm/pwmchip0/pwm0/polarity");
-
-	LoadSysConfigAndInfo(&ShmSysConfigAndInfo->SysConfig);
-	
-	#ifdef SystemLogMessage	
-	StoreLogMsg("[main]Initialization: Initialization OK");
-	#endif		
-}
-
-int SpawnTask()
-{
-	system("/root/EventLogging &");
-	system("/root/CsuComm &");
-	system("/root/EvComm &");
-}
-
-
-int StoreUsrConfigData(struct SysConfigData *UsrData)
-{
-	int fd,wrd;
-	unsigned int i,Chk;
-	unsigned char *ptr; 
-	
-	Chk=0;
-	ptr=(unsigned char *)UsrData;
-	for(i=0;i<sizeof(struct SysConfigData)-4;i++)
-	{
-		Chk+=*(ptr+i);
-	}
-	UsrData->Checksum=Chk;
-	
-	fd = open("/dev/mtdblock10", O_RDWR);
-	if (fd < 0) 
-	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[main]StoreUsrConfigData: open /dev/mtdblock10 NG");
-		#endif		
-		return 0;
-	}
-   	wrd=write(fd, UsrData, sizeof(struct SysConfigData));   
-    	close(fd);
-    	if(wrd!=(sizeof(struct SysConfigData)))
-	{	
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[main]StoreUsrConfigData: write /dev/mtdblock10 NG");
-		#endif	
-		return 0;
-	}	
-	
-	fd = open("/dev/mtdblock11", O_RDWR);
-	if (fd < 0) 
-	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[main]StoreUsrConfigData: open /dev/mtdblock11(backup) NG");
-		#endif	
-		return 0;
-    	}
-    	wrd=write(fd, UsrData, sizeof(struct SysConfigData));   
-    	close(fd);
-   	if(wrd!=(sizeof(struct SysConfigData)))
-	{	
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[main]StoreUsrConfigData: write /dev/mtdblock11(backup) NG");
-		#endif	
-		return 0;
-	}	
-	return 1;
-}
-
-/**************************************************************/
-/************** main function********************************/
-/*************************************************************/	
-
-int main(int argc,char *argv[])
-{
-	int Rtn=0;
-	unsigned int StartTime;	
-	struct timeb StartChargingTime,CurrentChargingTime,ChargingLoopTime;
-	float ChargingPower,ChargingEnergy;
-	
-	//Create all share memory
-	if(CreatShareMemory()==0)
-	{
-		#ifdef SystemLogMessage	
-		StoreLogMsg("[main]main:CreatShareMemory NG");
-		#endif		
-		if(ShmStatusCodeData!=NULL)
-		{
-			ShmStatusCodeData->AlarmCode.AlarmEvents.bits.FailToCreateShareMemory=1;
-		}	
-		sleep(5);
-		system("reboot -f");
-		sleep(5);
-		system("reboot -f");
-	}	
-	
-	//CSU Initialization 
-	Initialization();
-	
-	//task spawn
-	//SpawnTask();
-
-	/**************************************************************/
-	/************** main Loop********************************/
-	/*****************************************************************/
-	
-	while(1)
-	{
-		sleep(5);
-	}//main while
-}
+/*===========================================================================
+                    Combined Charging System (CCS): SECC
+                                 main.c
+
+                        initiated by Vern, Joseph
+                           (since 2019/07/19)
+=============================================================================*/
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <linux/termios.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+#include <stdlib.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#include <sys/mman.h>
+#include <linux/sockios.h>
+#include <linux/socket.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <sys/time.h>
+#include <sys/timeb.h>
+#include <math.h>//for pow
+#include <unistd.h>
+#include "define.h"
+#include "main.h"
+
+#define Debug
+
+struct SysConfigAndInfo     *ShmSysConfigAndInfo;
+struct StatusCodeData       *ShmStatusCodeData;
+struct CcsData              *ShmCcsData;
+struct InternalComm         *ShmInternalComm;
+
+#ifdef SystemLogMessage
+int StoreLogMsg(unsigned char *DataString);
+#endif
+
+void System_Init();
+void CreateShareMemory_Init();
+void GPIO_Init();
+void PWM_Init();
+void Confinguration_Init();
+int DiffTimeb(struct timeb ST, struct timeb ET);
+int CreatShareMemory();
+int LoadSysConfigAndInfo(struct SysConfigData *ptr);
+int SpawnTask();
+int StoreUsrConfigData(struct SysConfigData *UsrData);
+
+/*===========================================================================
+FUNCTION: main
+DESCRIPTION:
+    1. This main routine will be executed by the "rcS"  when linux is booting up.
+       /opt/ti-processor-sdk-linux-am335x-evm-04.02.00.09/EVSE/rootfs/etc/init.d/rcS
+
+PRE-CONDITION:
+INPUT:
+OUTPUT:
+GLOBAL VARIABLES:
+=============================================================================*/
+int main(int argc, char *argv[])
+{
+    //int Rtn = 0;
+    //unsigned int StartTime;
+    //struct timeb StartChargingTime, CurrentChargingTime, ChargingLoopTime;
+    //float ChargingPower, ChargingEnergy;
+
+    //CSU Initialization
+    System_Init();
+
+    //task spawn
+    //SpawnTask();
+
+    /**************************************************************/
+    /************** main Loop********************************/
+    /*****************************************************************/
+
+    while(1)
+    {
+        sleep(5);
+    }//main while
+
+}
+
+/*===========================================================================
+FUNCTION: System_Init
+DESCRIPTION:
+PRE-CONDITION:
+    1. Pin Assignment Configuration
+       board-support/linux-4.9.59+gitAUTOINC+a75d8e9305-ga75d8e9305/
+       arch/arm/boot/dts/[CCS]am335x-evm.dts
+INPUT:
+OUTPUT:
+GLOBAL VARIABLES:
+=============================================================================*/
+void System_Init()
+{
+    // ---------- Hardware Init ----------
+    //Init GPIO
+    GPIO_Init();
+
+    //Init ecap0
+    PWM_Init();
+
+    // ---------- Software Init ----------
+    //Create all share memory
+    CreateShareMemory_Init();
+
+    //Init System Confinguration
+    Confinguration_Init();
+
+    #ifdef SystemLogMessage
+    StoreLogMsg("--------------------------");
+    StoreLogMsg("[main] System_Init(): DONE");
+    #endif
+}
+
+/*===========================================================================
+FUNCTION: CreateShareMemory_Init
+DESCRIPTION:
+PRE-CONDITION:
+INPUT:
+OUTPUT:
+GLOBAL VARIABLES:
+=============================================================================*/
+void CreateShareMemory_Init()
+{
+    if(CreatShareMemory() == 0)
+    {
+        #ifdef SystemLogMessage
+        StoreLogMsg("[main] CreateShareMemory_Init(): NG");
+        #endif
+
+        if(ShmStatusCodeData != NULL)
+        {
+            ShmStatusCodeData->AlarmCode.AlarmEvents.bits.FailToCreateShareMemory = 1;
+        }
+
+        sleep(5);
+        system("reboot -f");
+        sleep(5);
+        system("reboot -f");
+    }
+    else
+    {
+        #ifdef SystemLogMessage
+        StoreLogMsg("[main] CreateShareMemory_Init(): DONE");
+        #endif
+    }
+}
+
+/**************************************************************************************/
+/**************************Create all share memory *********************************/
+/**************************************************************************************/
+
+/*===========================================================================
+FUNCTION: CreatShareMemory
+
+DESCRIPTION:
+    There are 4 share memory created here, which are listed as below.
+    1) ShmSysConfigAndInfo
+    2) ShmStatusCodeData
+    3) ShmCcsData
+    4) ShmInternalComm
+
+PRE-CONDITION:
+INPUT:
+OUTPUT:
+GLOBAL VARIABLES:
+=============================================================================*/
+int CreatShareMemory()
+{
+    int MeterSMId;
+
+    //creat ShmSysConfigAndInfo
+    if((MeterSMId = shmget(ShmSysConfigAndInfoKey, sizeof(struct SysConfigAndInfo), IPC_CREAT | 0777)) < 0)
+    {
+        #ifdef SystemLogMessage
+        StoreLogMsg("[main]CreatShareMemory:shmget ShmSysConfigAndInfo NG");
+        #endif
+        return 0;
+    }
+    else if((ShmSysConfigAndInfo = shmat(MeterSMId, NULL, 0)) == (void *)-1)
+    {
+        #ifdef SystemLogMessage
+        StoreLogMsg("[main]CreatShareMemory:shmat ShmSysConfigAndInfo NG");
+        #endif
+        return 0;
+    }
+
+    memset(ShmSysConfigAndInfo, 0, sizeof(struct SysConfigAndInfo));
+
+
+    //creat ShmStatusCodeData
+    if((MeterSMId = shmget(ShmStatusCodeKey, sizeof(struct StatusCodeData), IPC_CREAT | 0777)) < 0)
+    {
+        #ifdef SystemLogMessage
+        StoreLogMsg("[main]CreatShareMemory:shmget ShmStatusCodeData NG");
+        #endif
+        return 0;
+    }
+    else if((ShmStatusCodeData = shmat(MeterSMId, NULL, 0)) == (void *)-1)
+    {
+        #ifdef SystemLogMessage
+        StoreLogMsg("[main]CreatShareMemory:shmat ShmStatusCodeData NG");
+        #endif
+        return 0;
+    }
+
+    memset(ShmStatusCodeData, 0, sizeof(struct StatusCodeData));
+
+
+    //creat ShmCcsData
+    if((MeterSMId = shmget(ShmCcsCommKey, sizeof(struct CcsData), IPC_CREAT | 0777)) < 0)
+    {
+        #ifdef SystemLogMessage
+        StoreLogMsg("[main]CreatShareMemory:shmget ShmCcsData NG");
+        #endif
+        return 0;
+    }
+    else if((ShmCcsData = shmat(MeterSMId, NULL, 0)) == (void *)-1)
+    {
+        #ifdef SystemLogMessage
+        StoreLogMsg("[main]CreatShareMemory:shmat ShmCcsData NG");
+        #endif
+        return 0;
+    }
+
+    memset(ShmCcsData, 0, sizeof(struct CcsData));
+
+
+    //creat ShmInternalComm
+    if((MeterSMId = shmget(ShmInternalCommKey, sizeof(struct InternalComm),   IPC_CREAT | 0777)) < 0)
+    {
+        #ifdef SystemLogMessage
+        StoreLogMsg("[main]CreatShareMemory:shmget ShmInternalComm NG");
+        #endif
+        return 0;
+    }
+    else if((ShmInternalComm = shmat(MeterSMId, NULL, 0)) == (void *)-1)
+    {
+        #ifdef SystemLogMessage
+        StoreLogMsg("[main]CreatShareMemory:shmat ShmInternalComm NG");
+        #endif
+        return 0;
+    }
+
+    return 1;
+}
+
+
+/*===========================================================================
+FUNCTION: GPIO_Init
+DESCRIPTION:
+    1. GPIO (input) x 1
+        * gpio2_0(gpio64): QCA7000 interrupt
+
+    2. GPIO (output) x 4
+        * gpio2_25 (gpio89): reserved                       (default = 0)
+        * gpio2_23 (gpio87): reserved                       (default = 0)
+        * gpio2_24 (gpio88): power reset QCA7000            (default = 0)
+        * gpio2_22 (gpio86): Pilot Status E control (0V)    (default = 0)
+
+PRE-CONDITION:
+INPUT:
+OUTPUT:
+GLOBAL VARIABLES:
+=============================================================================*/
+void GPIO_Init()
+{
+    /*****************0~3, 4 bank, bank x 32+ num*********************/
+    /*****************************************************************/
+    /*************** INPUT PIN ***************************************/
+    /*****************************************************************/
+    /*GPIO2_0: QCA7000 interrupt */
+    system("echo 64 > /sys/class/gpio/export");
+    system("echo \"in\" > /sys/class/gpio/gpio64/direction");
+
+
+    /***************************************************************/
+    /*************** OUTPUT PIN ************************************/
+    /***************************************************************/
+    //IO port for Communication Board.(reserved for emergency shutdown PSU, i.e. PSKILL)
+    /*GPIO2_25: AM_IO_2, H: ?; L: ?*/
+    system("echo 89 > /sys/class/gpio/export");
+    system("echo \"out\" > /sys/class/gpio/gpio89/direction");
+    system("echo 0 > /sys/class/gpio/gpio89/value");
+
+    //IO port for Communication Board.(reserved for emergency shutdown PSU, i.e. PSKILL)
+    /*GPIO2_23: AM_IO_1, H: ?; L: ?*/
+    system("echo 87 > /sys/class/gpio/export");
+    system("echo \"out\" > /sys/class/gpio/gpio87/direction");
+    system("echo 0 > /sys/class/gpio/gpio87/value");
+
+    //Power Reset QCA7000
+    /*GPIO2_24: AM_QCA_PWR_RST, H: reset, L: noraml*/
+    system("echo 88 > /sys/class/gpio/export");
+    system("echo \"out\" > /sys/class/gpio/gpio88/direction");
+    system("echo 0 > /sys/class/gpio/gpio88/value");
+
+    //Pilot Status E control (0V)
+    /*GPIO2_22: Pilot_state E, H: state E, L: normal*/
+    system("echo 86 > /sys/class/gpio/export");
+    system("echo \"out\" > /sys/class/gpio/gpio86/direction");
+    system("echo 0 > /sys/class/gpio/gpio86/value");
+
+    #ifdef SystemLogMessage
+    StoreLogMsg("[main] GPIO_Init(): DONE");
+    #endif
+}
+
+
+/*===========================================================================
+FUNCTION: PWM_Init
+DESCRIPTION:
+    - Initialize the PWM channel by the following configuration.
+        * Frequency = 1KHz
+        * Duty = 100%
+
+    - The default voltage should be as below.
+        * 12V: unplugged
+        * 9V: plugged
+
+    - Check Mechanism (to-do)
+        * Read CP Voltage and PWM by AIN3:
+          // cat /sys/bus/iio/devices/iio\\:device0/in_voltage3_raw;
+
+PRE-CONDITION:
+INPUT:
+OUTPUT:
+    - PWM = 100% at 1KHz
+
+GLOBAL VARIABLES:
+=============================================================================*/
+void PWM_Init()
+{
+    //unsigned char str[256];
+
+    //init ecap0
+    //memset(str, 0, sizeof(str));
+    system("echo 0 > /sys/class/pwm/pwmchip0/export");
+    system("echo 1000000 > /sys/class/pwm/pwmchip0/pwm0/period");// nano seconds =>1k Hz
+    system("echo 1000000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle"); //default 100%
+    system("echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable");
+    //system("echo 1 > /sys /class/pwm/pwmchip0/pwm0/polarity");
+
+    //PWM_Init_Check(); //Checking if the PWM analog signal is well-initialized
+                        //as 1KHz,100%, and 12V/9V.
+
+    #ifdef SystemLogMessage
+    StoreLogMsg("[main] PWM_Init(): DONE");
+    #endif
+}
+
+/*===========================================================================
+FUNCTION:
+DESCRIPTION:
+PRE-CONDITION:
+INPUT:
+OUTPUT:
+GLOBAL VARIABLES:
+=============================================================================*/
+void Confinguration_Init()
+{
+    //Load System Confinguration
+    LoadSysConfigAndInfo(&ShmSysConfigAndInfo->SysConfig);
+
+    #ifdef SystemLogMessage
+    StoreLogMsg("[main] Confinguration_Init(): DONE");
+    #endif
+}
+
+/*===========================================================================
+FUNCTION:
+DESCRIPTION:
+PRE-CONDITION:
+INPUT:
+OUTPUT:
+GLOBAL VARIABLES:
+=============================================================================*/
+#ifdef SystemLogMessage
+int StoreLogMsg(unsigned char *DataString)
+{
+    unsigned char Buf[256];
+    time_t CurrentTime;
+    struct tm *tm;
+
+    struct timeval tv;
+    gettimeofday(&tv, NULL); // get microseconds, 10^-6
+
+    //Get uptime in nano-second precision
+    //struct timespec elapsed_from_boot;
+    //clock_gettime(CLOCK_BOOTTIME, &elapsed_from_boot);
+    //Need GLIBC_2.17
+
+    memset(Buf, 0, sizeof(Buf));
+    CurrentTime = time(NULL);
+    tm = localtime(&CurrentTime);
+    sprintf(Buf, "echo \"[%04d.%02d.%02d-%02d:%02d:%02d.%06d] @ %s\" >> /Storage/SystemLog/[%04d.%02d]SystemLog",
+            tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, tv.tv_usec,
+            DataString,
+            tm->tm_year + 1900, tm->tm_mon + 1);
+    system(Buf);
+
+    #ifdef Debug
+    printf("[%04d.%02d.%02d-%02d:%02d:%02d.%06d] @ %s \n",
+            tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, tv.tv_usec,
+            DataString);
+    #endif
+    }
+#endif
+
+/*===========================================================================
+FUNCTION: DiffTimeb
+DESCRIPTION:
+    Caculating the time difference in ms precision (milli-second).
+PRE-CONDITION:
+INPUT:
+OUTPUT:
+GLOBAL VARIABLES:
+=============================================================================*/
+int DiffTimeb(struct timeb ST, struct timeb ET)
+{
+    //return milli-second
+    unsigned int StartTime, StopTime;
+
+    StartTime = (unsigned int)ST.time;
+    StopTime = (unsigned int)ET.time;
+    return (StopTime - StartTime) * 1000 + ET.millitm - ST.millitm;
+}
+
+
+/**************************************************************************************/
+/****************Following functions are CSU initialization***************************/
+/**************************************************************************************/
+
+/*===========================================================================
+FUNCTION:
+DESCRIPTION:
+PRE-CONDITION:
+INPUT:
+OUTPUT:
+GLOBAL VARIABLES:
+=============================================================================*/
+int SpawnTask()
+{
+    system("/root/EventLogging &");
+    system("/root/CsuComm &");
+    system("/root/EvComm &");
+}
+
+
+/*===========================================================================
+FUNCTION:
+DESCRIPTION:
+PRE-CONDITION:
+INPUT:
+OUTPUT:
+GLOBAL VARIABLES:
+=============================================================================*/
+int StoreUsrConfigData(struct SysConfigData *UsrData)
+{
+    int fd, wrd;
+    unsigned int i, Chk;
+    unsigned char *ptr;
+
+    Chk = 0;
+    ptr = (unsigned char *)UsrData;
+
+    for(i = 0; i < sizeof(struct SysConfigData) - 4; i++)
+    {
+        Chk += *(ptr + i);
+    }
+
+    UsrData->Checksum = Chk;
+
+    fd = open("/dev/mtdblock10", O_RDWR);
+
+    if(fd < 0)
+    {
+        #ifdef SystemLogMessage
+            StoreLogMsg("[main]StoreUsrConfigData: open /dev/mtdblock10 NG");
+        #endif
+        return 0;
+    }
+
+    wrd = write(fd, UsrData, sizeof(struct SysConfigData));
+    close(fd);
+
+    if(wrd != (sizeof(struct SysConfigData)))
+    {
+        #ifdef SystemLogMessage
+        StoreLogMsg("[main]StoreUsrConfigData: write /dev/mtdblock10 NG");
+        #endif
+        return 0;
+    }
+
+    fd = open("/dev/mtdblock11", O_RDWR);
+
+    if(fd < 0)
+    {
+        #ifdef SystemLogMessage
+        StoreLogMsg("[main]StoreUsrConfigData: open /dev/mtdblock11(backup) NG");
+        #endif
+        return 0;
+    }
+
+    wrd = write(fd, UsrData, sizeof(struct SysConfigData));
+    close(fd);
+
+    if(wrd != (sizeof(struct SysConfigData)))
+    {
+        #ifdef SystemLogMessage
+        StoreLogMsg("[main]StoreUsrConfigData: write /dev/mtdblock11(backup) NG");
+        #endif
+        return 0;
+    }
+
+    return 1;
+}
+
+/*===========================================================================
+FUNCTION: LoadSysConfigAndInfo
+DESCRIPTION:
+PRE-CONDITION:
+INPUT:
+OUTPUT:
+GLOBAL VARIABLES:
+=============================================================================*/
+int LoadSysConfigAndInfo(struct SysConfigData *ptr)
+{
+    int fd, wrd;
+    struct SysConfigData *buf;
+    unsigned char *PtrBuf;
+    unsigned int ChkSum, ChkSumOrg;
+
+    if((buf = malloc(sizeof(struct SysConfigData))) == NULL)
+    {
+        #ifdef SystemLogMessage
+        StoreLogMsg("[main] LoadSysConfigAndInfo(): malloc buffer NG,rebooting..");
+        #endif
+
+        if(ShmStatusCodeData != NULL)
+        {
+            ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed = 1;
+        }
+
+        sleep(5);
+        system("reboot -f");
+        sleep(5);
+        system("reboot -f");
+    }
+
+    memset(buf, 0, sizeof(struct SysConfigData));
+    fd = open("/dev/mtdblock10", O_RDWR);
+
+    if(fd < 0)
+    {
+        free(buf);
+        #ifdef SystemLogMessage
+        StoreLogMsg("[main] LoadSysConfigAndInfo():open mtdblock10 NG,rebooting..");
+        #endif
+
+        if(ShmStatusCodeData != NULL)
+        {
+            ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed = 1;
+        }
+
+        sleep(5);
+        system("reboot -f");
+        sleep(5);
+        system("reboot -f");
+    }
+
+    wrd = read(fd, buf, sizeof(struct SysConfigData));
+    close(fd);
+
+    if(wrd != (sizeof(struct SysConfigData)))
+    {
+        free(buf);
+        #ifdef SystemLogMessage
+        StoreLogMsg("[main] LoadSysConfigAndInfo(): read SysConfigData data NG,rebooting..");
+        #endif
+
+        if(ShmStatusCodeData != NULL)
+        {
+            ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed = 1;
+        }
+
+        sleep(5);
+        system("reboot -f");
+        sleep(5);
+        system("reboot -f");
+    }
+
+    PtrBuf = (unsigned char *)buf;
+    ChkSum = 0;
+
+    for(wrd = 0; wrd < (sizeof(struct SysConfigData) - 4); wrd++)
+    {
+        ChkSum += PtrBuf[wrd];
+    }
+
+    ChkSumOrg = buf->Checksum;
+
+    if(ChkSum != ChkSumOrg)
+    {
+        #ifdef SystemLogMessage
+        StoreLogMsg("[main] LoadSysConfigAndInfo(): Primary SysConfigData checksum NG, read backup");
+        #endif
+        fd = open("/dev/mtdblock11", O_RDWR);
+
+        if(fd < 0)
+        {
+            free(buf);
+            #ifdef SystemLogMessage
+            StoreLogMsg("[main] LoadSysConfigAndInfo(): open mtdblock11 (backup) NG,rebooting..");
+            #endif
+
+            if(ShmStatusCodeData != NULL)
+            {
+                ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed = 1;
+            }
+
+            sleep(5);
+            system("reboot -f");
+            sleep(5);
+            system("reboot -f");
+        }
+
+        memset(buf, 0, sizeof(struct SysConfigData));
+        wrd = read(fd, buf, sizeof(struct SysConfigData));
+        close(fd);
+
+        if(wrd != sizeof(struct SysConfigData))
+        {
+            free(buf);
+            #ifdef SystemLogMessage
+            StoreLogMsg("[main] LoadSysConfigAndInfo(): read backup SysConfigData data NG,rebooting..");
+            #endif
+
+            if(ShmStatusCodeData != NULL)
+            {
+                ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed = 1;
+            }
+
+            sleep(5);
+            system("reboot -f");
+            sleep(5);
+            system("reboot -f");
+        }
+
+        PtrBuf = (unsigned char *)buf;
+        ChkSum = 0;
+
+        for(wrd = 0; wrd < (sizeof(struct SysConfigData) - 4); wrd++)
+        {
+            ChkSum += PtrBuf[wrd];
+        }
+
+        ChkSumOrg = buf->Checksum;
+
+        if(ChkSum != ChkSumOrg)
+        {
+            #ifdef SystemLogMessage
+            StoreLogMsg("[main] LoadSysConfigAndInfo(): backup SysConfigData checksum NG, read Factory default");
+            #endif
+            fd = open("/dev/mtdblock12", O_RDWR);
+
+            if(fd < 0)
+            {
+                free(buf);
+                #ifdef SystemLogMessage
+                StoreLogMsg("[main] LoadSysConfigAndInfo(): open mtdblock12 (Factory default) NG,rebooting..");
+                #endif
+
+                if(ShmStatusCodeData != NULL)
+                {
+                    ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed = 1;
+                }
+
+                sleep(5);
+                system("reboot -f");
+                sleep(5);
+                system("reboot -f");
+            }
+
+            memset(buf, 0, sizeof(struct SysConfigData));
+            wrd = read(fd, buf, sizeof(struct SysConfigData));
+            close(fd);
+
+            if(wrd != sizeof(struct SysConfigData))
+            {
+                free(buf);
+                #ifdef SystemLogMessage
+                StoreLogMsg("[main] LoadSysConfigAndInfo(): read factory default  SysConfigData data NG,rebooting..");
+                #endif
+
+                if(ShmStatusCodeData != NULL)
+                {
+                    ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed = 1;
+                }
+
+                sleep(5);
+                system("reboot -f");
+                sleep(5);
+                system("reboot -f");
+            }
+
+            PtrBuf = (unsigned char *)buf;
+            ChkSum = 0;
+
+            for(wrd = 0; wrd < (sizeof(struct SysConfigData) - 4); wrd++)
+            {
+                ChkSum += PtrBuf[wrd];
+            }
+
+            ChkSumOrg = buf->Checksum;
+
+            if(ChkSum != ChkSumOrg)
+            {
+                #ifdef SystemLogMessage
+                StoreLogMsg("[main] LoadSysConfigAndInfo(): factory default  SysConfigData checksum NG, restore factory default");
+                #endif
+                goto DefaultShm;
+            }
+        }
+    }
+
+    //load OK
+    memcpy((struct SysConfigData *)ptr, (struct SysConfigData *)buf, sizeof(struct SysConfigData));
+    free(buf);
+    #ifdef SystemLogMessage
+    StoreLogMsg("[main]LoadSysConfigAndInfo(): Load SysConfigData OK");
+    #endif
+    return 1;
+
+DefaultShm:
+    system("cd /root;./FactoryConfig");
+    system("sync");
+    sleep(5);
+    system("reboot -f");
+    sleep(5);
+    system("reboot -f");
+}

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

@@ -0,0 +1,7 @@
+/*===========================================================================
+                    Combined Charging System (CCS): SECC
+                                 main.h
+
+                        initiated by Vern, Joseph
+                           (since 2019/07/19)
+=============================================================================*/

二进制
EVSE/Projects/CCS/Images/MLO → EVSE/Projects/CCS/Images/boot/MLO


+ 73 - 0
EVSE/Projects/CCS/Images/boot/OI.txt

@@ -0,0 +1,73 @@
+[SD Card] v2019-07-24 (from Folus)
+nand erase.chip;
+mw 0x80000000 0xffffffff 0x00080000;fatload mmc 0 0x80000000 MLO;nand erase 0x00000000 0x00080000;nand write 0x80000000 0x00000000 0x00080000;
+mw 0x80000000 0xffffffff 0x00100000;fatload mmc 0 0x80000000 u-boot.img;nand erase 0x00080000 0x00100000;nand write 0x80000000 0x00080000 0x00100000;
+mw 0x80000000 0xffffffff 0x00080000;fatload mmc 0 0x80000000 am335x-evm.dtb;nand erase 0x00300000 0x00080000;nand write 0x80000000 0x00300000 0x00080000;
+mw 0x80000000 0xffffffff 0x00A00000;fatload mmc 0 0x80000000 zimage;nand erase 0x00400000 0x00A00000;nand write 0x80000000 0x00400000 0x00A00000;
+mw 0x80000000 0xffffffff 0x01800000;fatload mmc 0 0x80000000 ramdisk.gz;nand erase 0x03000000 0x03000000;nand write 0x80000000 0x03000000 0x03000000;
+reset;
+
+mw 0x80000000 0xffffffff 0x00600000;fatload mmc 0 0x80000000 FactoryConfig.bin;
+nand erase 0x07800000 0x00600000;nand write 0x80000000 0x07800000 0x00600000;
+nand erase 0x07E00000 0x00600000;nand write 0x80000000 0x07E00000 0x00600000;
+nand erase 0x08400000 0x00600000;nand write 0x80000000 0x08400000 0x00600000;
+
+
+nand erase.chip;
+tftp 0x80000000 MLO;nand erase 0x00000000 0x00080000;nand write 0x80000000 0x00000000 0x00080000;
+tftp 0x80000000 u-boot.img;nand erase 0x00080000 0x00100000;nand write 0x80000000 0x00080000 0x00100000;
+tftp 0x80000000 am335x-evm.dtb;nand erase 0x00300000 0x00080000;nand write 0x80000000 0x00300000 0x00080000;
+tftp 0x80000000 zimage;nand erase 0x00400000 0x00A00000;nand write 0x80000000 0x00400000 0x00A00000;
+tftp 0x80000000 ramdisk.gz;nand erase 0x03000000 0x03000000;nand write 0x80000000 0x03000000 0x03000000;reset;
+
+tftp 0x80000000 FactoryConfig.bin;
+nand erase 0x07800000 0x00600000;nand write 0x80000000 0x07800000 0x00600000;
+nand erase 0x07E00000 0x00600000;nand write 0x80000000 0x07E00000 0x00600000;
+nand erase 0x08400000 0x00600000;nand write 0x80000000 0x08400000 0x00600000;
+
+
+-----------------------------------------
+[SD Card] v2019-07-24 (new, from Vern)
+For SHA: 0805bf64e454aeac7ef511eb4798565b44e9de7e (v2019-07-18)
+
+mw 0x80000000 0xffffffff 0x00080000;fatload mmc 0 0x80000000 MLO;nand erase 0x00000000 0x00080000;nand write 0x80000000 0x00000000 0x00080000;
+mw 0x80000000 0xffffffff 0x00100000;fatload mmc 0 0x80000000 u-boot.img;nand erase 0x00080000 0x00100000;nand write 0x80000000 0x00080000 0x00100000;
+mw 0x80000000 0xffffffff 0x00080000;fatload mmc 0 0x80000000 am335x-evm.dtb;nand erase 0x00300000 0x00080000;nand write 0x80000000 0x00300000 0x00080000;
+mw 0x80000000 0xffffffff 0x00A00000;fatload mmc 0 0x80000000 zimage;nand erase 0x00400000 0x00A00000;nand write 0x80000000 0x00400000 0x00A00000;
+mw 0x80000000 0xffffffff 0x03000000;fatload mmc 0 0x80000000 ramdisk.gz;nand erase 0x01800000 0x03000000;nand write 0x80000000 0x01800000 0x03000000;
+
+-----------------------------------------
+[SD Card] v2019-06-01 (old, from Vern)
+mw 0x80000000 0xffffffff 0x00080000;fatload mmc 0 0x80000000 MLO;nand erase 0x00000000 0x00080000;nand write 0x80000000 0x00000000 0x00080000;
+mw 0x80000000 0xffffffff 0x00100000;fatload mmc 0 0x80000000 u-boot.img;nand erase 0x00080000 0x00100000;nand write 0x80000000 0x00080000 0x00100000;
+mw 0x80000000 0xffffffff 0x00080000;fatload mmc 0 0x80000000 am335x-evm.dtb;nand erase 0x00300000 0x00080000;nand write 0x80000000 0x00300000 0x00080000;
+mw 0x80000000 0xffffffff 0x00A00000;fatload mmc 0 0x80000000 zimage;nand erase 0x00400000 0x00A00000;nand write 0x80000000 0x00400000 0x00A00000;
+mw 0x80000000 0xffffffff 0x01800000;fatload mmc 0 0x80000000 ramdisk.gz;nand erase 0x01800000 0x01800000;nand write 0x80000000 0x01800000 0x01800000;
+
+-----------------------------------------
+[How to updtate SPI driver for QCA7000]
+insmod /lib/qcaspi.ko{U+00A1}{U+00A8}
+-----------------------------------------
+[How to check SD Card?]
+$mmc
+$mmc info
+-----------------------------------------
+[How to mount SD Card?]
+ls /dev/mmc*
+mount /dev/mmcblk0p1 /UsbFlash/
+-----------------------------------------
+[How to Erase All NAND Flash?]
+nand erase.chip
+-----------------------------------------
+[How to Open Terminal in MAC?]
+screen /dev/tty.usbserial-A100GJE3 115200
+-----------------------------------------
+[How to Set PWM Duty?]
+//default 100%
+echo 1000000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
+
+//5%
+echo 50000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
+-----------------------------------------
+[Pilot Status E control (0V)]
+echo 1 > /sys/class/gpio/gpio86/value

二进制
EVSE/Projects/CCS/Images/am335x-evm.dtb → EVSE/Projects/CCS/Images/boot/am335x-evm.dtb


二进制
EVSE/Projects/CCS/Images/ramdisk.gz → EVSE/Projects/CCS/Images/boot/ramdisk.gz


+ 0 - 0
EVSE/Projects/CCS/Images/u-boot-spl.bin → EVSE/Projects/CCS/Images/boot/u-boot-spl.bin


二进制
EVSE/Projects/CCS/Images/u-boot.img → EVSE/Projects/CCS/Images/boot/u-boot.img


二进制
EVSE/Projects/CCS/Images/boot/zImage


二进制
EVSE/Projects/CCS/Images/root/EvComm


二进制
EVSE/Projects/CCS/Images/root/main


二进制
EVSE/Projects/CCS/Images/zImage


+ 6955 - 0
EVSE/Projects/CCS/Log/Debug_Log.txt

@@ -0,0 +1,6955 @@
+/ # CCCCCCCC
+U-Boot SPL 2017.01 (Aug 05 2019 - 13:25:11)
+Trying to boot from NAND
+*** Warning - bad CRC, using default environment
+
+
+
+U-Boot 2017.01 (Aug 05 2019 - 13:25:11 +0000)
+
+CPU  : AM335X-GP rev 2.1
+Model: TI AM335x EVM
+DRAM:  512 MiB
+NAND:  2048 MiB
+MMC:   OMAP SD/MMC: 0, OMAP SD/MMC: 1
+*** Warning - bad CRC, using default environment
+
+<ethaddr> not set. Validating first E-fuse MAC
+Net:   Could not get PHY for cpsw: addr 1
+cpsw, usb_ether
+Hit any key to stop autoboot:  0
+
+NAND read: device 0 offset 0x300000, size 0x80000
+ 524288 bytes read: OK
+
+NAND read: device 0 offset 0x400000, size 0xa00000
+ 10485760 bytes read: OK
+
+NAND read: device 0 offset 0x1800000, size 0x3000000
+Skipping bad block 0x02d00000
+Skipping bad block 0x02d80000
+ 50331648 bytes read: OK
+## Flattened Device Tree blob at 80f80000
+   Booting using the fdt blob at 0x80f80000
+   Loading Device Tree to 9defc000, end 9df0896b ... OK
+
+Starting kernel ...
+
+[    0.000000] Booting Linux on physical CPU 0x0
+[    0.000000] Linux version 4.9.59-ga75d8e9305 (root@joseph) (gcc version 6.2.1 20161016 (Linaro GCC 6.2-2016.11) ) #306 PREEMPT Mon Aug 5 13:35:54 UTC 2019
+[    0.000000] CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c5387d
+[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
+[    0.000000] OF: fdt:Machine model: TI AM335x EVM
+[    0.000000] efi: Getting EFI parameters from FDT:
+[    0.000000] efi: UEFI not found.
+[    0.000000] cma: Reserved 48 MiB at 0x9a800000
+[    0.000000] Memory policy: Data cache writeback
+[    0.000000] CPU: All CPU(s) started in SVC mode.
+[    0.000000] AM335X ES2.1 (neon)
+[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 129920
+[    0.000000] Kernel command line: console=ttyS0,115200n8 mem=512M root=/dev/ram0 rw rootfstype=ext4 initrd=0x81000000,128M ramdisk_size=134217728
+[    0.000000] PID hash table entries: 2048 (order: 1, 8192 bytes)
+[    0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
+[    0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
+[    0.000000] Memory: 324760K/524288K available (9216K kernel code, 321K rwdata, 2752K rodata, 1024K init, 327K bss, 150376K reserved, 49152K cma-reserved, 0K highmem)
+[    0.000000] Virtual kernel memory layout:
+[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
+[    0.000000]     fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)
+[    0.000000]     vmalloc : 0xe0800000 - 0xff800000   ( 496 MB)
+[    0.000000]     lowmem  : 0xc0000000 - 0xe0000000   ( 512 MB)
+[    0.000000]     pkmap   : 0xbfe00000 - 0xc0000000   (   2 MB)
+[    0.000000]     modules : 0xbf000000 - 0xbfe00000   (  14 MB)
+[    0.000000]       .text : 0xc0008000 - 0xc0a00000   (10208 kB)
+[    0.000000]       .init : 0xc0d00000 - 0xc0e00000   (1024 kB)
+[    0.000000]       .data : 0xc0e00000 - 0xc0e505c0   ( 322 kB)
+[    0.000000]        .bss : 0xc0e505c0 - 0xc0ea22d4   ( 328 kB)
+[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
+[    0.000000] Preemptible hierarchical RCU implementation.
+[    0.000000]  Build-time adjustment of leaf fanout to 32.
+[    0.000000] NR_IRQS:16 nr_irqs:16 16
+[    0.000000] IRQ: Found an INTC at 0xfa200000 (revision 5.0) with 128 interrupts
+[    0.000000] OMAP clockevent source: timer2 at 24000000 Hz
+[    0.000019] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 89478484971ns
+[    0.000048] clocksource: timer1: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635851949 ns
+[    0.000061] OMAP clocksource: timer1 at 24000000 Hz
+[    0.000280] clocksource_probe: no matching clocksources found
+[    0.000499] Console: colour dummy device 80x30
+[    0.000551] Calibrating delay loop... 597.60 BogoMIPS (lpj=2988032)
+[    0.118787] pid_max: default: 32768 minimum: 301
+[    0.118953] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
+[    0.118968] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
+[    0.120004] CPU: Testing write buffer coherency: ok
+[    0.120472] Setting up static identity map for 0x80100000 - 0x80100060
+[    0.121585] EFI services will not be available.
+[    0.123420] devtmpfs: initialized
+[    0.139934] VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 3
+[    0.140388] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
+[    0.140421] futex hash table entries: 256 (order: -1, 3072 bytes)
+[    0.145038] pinctrl core: initialized pinctrl subsystem
+[    0.146664] NET: Registered protocol family 16
+[    0.149451] DMA: preallocated 256 KiB pool for atomic coherent allocations
+[    0.168916] omap_hwmod: debugss: _wait_target_disable failed
+[    0.248792] cpuidle: using governor ladder
+[    0.278781] cpuidle: using governor menu
+[    0.287249] OMAP GPIO hardware version 0.1
+[    0.307143] omap-gpmc 50000000.gpmc: could not find pctldev for node /ocp/l4_wkup@44c00000/scm@210000/pinmux@800/nandflash_pins_default, deferring probe
+[    0.309720] No ATAGs?
+[    0.309748] hw-breakpoint: debug architecture 0x4 unsupported.
+[    0.360239] edma 49000000.edma: TI EDMA DMA engine driver
+[    0.365360] SCSI subsystem initialized
+[    0.365783] usbcore: registered new interface driver usbfs
+[    0.365883] usbcore: registered new interface driver hub
+[    0.366017] usbcore: registered new device driver usb
+[    0.366562] omap_i2c 44e0b000.i2c: could not find pctldev for node /ocp/l4_wkup@44c00000/scm@210000/pinmux@800/pinmux_i2c0_pins, deferring probe
+[    0.366636] omap_i2c 4802a000.i2c: could not find pctldev for node /ocp/l4_wkup@44c00000/scm@210000/pinmux@800/pinmux_i2c1_pins, deferring probe
+[    0.366790] media: Linux media interface: v0.10
+[    0.366866] Linux video capture interface: v2.00
+[    0.366935] pps_core: LinuxPPS API ver. 1 registered
+[    0.366946] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
+[    0.366980] PTP clock support registered
+[    0.367033] EDAC MC: Ver: 3.0.0
+[    0.368458] omap-mailbox 480c8000.mailbox: omap mailbox rev 0x400
+[    0.369725] Bluetooth: Core ver 2.22
+[    0.369794] NET: Registered protocol family 31
+[    0.369806] Bluetooth: HCI device and connection manager initialized
+[    0.369831] Bluetooth: HCI socket layer initialized
+[    0.369848] Bluetooth: L2CAP socket layer initialized
+[    0.369892] Bluetooth: SCO socket layer initialized
+[    0.371127] nfc: nfc_init: NFC Core ver 0.1
+[    0.371212] NET: Registered protocol family 39
+[    0.371735] clocksource: Switched to clocksource timer1
+[    0.385996] NET: Registered protocol family 2
+[    0.387018] TCP established hash table entries: 4096 (order: 2, 16384 bytes)
+[    0.387089] TCP bind hash table entries: 4096 (order: 2, 16384 bytes)
+[    0.387152] TCP: Hash tables configured (established 4096 bind 4096)
+[    0.387245] UDP hash table entries: 256 (order: 0, 4096 bytes)
+[    0.387271] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
+[    0.387452] NET: Registered protocol family 1
+[    0.388195] Trying to unpack rootfs image as initramfs...
+[    0.389270] rootfs image is not initramfs (no cpio magic); looks like an initrd
+[    1.316729] Freeing initrd memory: 131072K
+[    1.317476] hw perfevents: enabled with armv7_cortex_a8 PMU driver, 5 counters available
+[    1.320927] workingset: timestamp_bits=14 max_order=17 bucket_order=3
+[    1.331574] ntfs: driver 2.1.32 [Flags: R/O].
+[    1.332143] jffs2: version 2.2. (NAND) (SUMMARY)  © 2001-2006 Red Hat, Inc.
+[    1.339540] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 246)
+[    1.339569] io scheduler noop registered
+[    1.339579] io scheduler deadline registered
+[    1.339795] io scheduler cfq registered (default)
+[    1.341997] pinctrl-single 44e10800.pinmux: 142 pins at pa f9e10800 size 568
+[    1.431364] Serial: 8250/16550 driver, 10 ports, IRQ sharing disabled
+[    1.436754] console [ttyS0] disabled
+[    1.436876] 44e09000.serial: ttyS0 at MMIO 0x44e09000 (irq = 158, base_baud = 3000000) is a 8250
+[    2.068235] console [ttyS0] enabled
+[    2.073241] 48024000.serial: ttyS2 at MMIO 0x48024000 (irq = 159, base_baud = 3000000) is a 8250
+[    2.083455] 481a8000.serial: ttyS4 at MMIO 0x481a8000 (irq = 160, base_baud = 3000000) is a 8250
+[    2.093626] 481aa000.serial: ttyS5 at MMIO 0x481aa000 (irq = 161, base_baud = 3000000) is a 8250
+[    2.104887] omap_rng 48310000.rng: OMAP Random Number Generator ver. 20
+[    2.111705] [drm] Initialized
+[    2.117963] brd: module loaded
+[    2.129706] loop: module loaded
+[    2.135562] mtdoops: mtd device (mtddev=name/number) must be supplied
+[    2.145724] libphy: Fixed MDIO Bus: probed
+[    2.151472] CAN device driver interface
+[    2.156946] c_can_platform 481cc000.can: c_can_platform device registered (regs=fa1cc000, irq=166)
+[    2.167193] c_can_platform 481d0000.can: c_can_platform device registered (regs=fa1d0000, irq=167)
+[    2.177169] qcaspi spi1.0: ver=0.2.7-i, clkspeed=10000000, burst_len=5000, pluggable=0
+[    2.185266] qcaspi spi1.0: Using random MAC address: 52:cd:04:5a:23:b4
+[    2.192828] qcaspi spi1.0: qca->net_dev->name = eth0
+[    2.197883] qcaspi spi1.0: SPI_REG_SIGNATURE (0xAA55)
+[    2.203108] qcaspi spi1.0: SPI_REG_BFR_SIZE (0x0050)
+[    2.208153] qcaspi spi1.0: SPI_REG_WRBUF_SPC_AVA (0x0C5B)
+[    2.213660] qcaspi spi1.0: SPI_REG_RDBUF_BYTE_AVA (0x0000)
+[    2.219225] qcaspi spi1.0: SPI_REG_SPI_CONFIG (0x0000)
+[    2.224465] qcaspi spi1.0: SPI_REG_RDBUF_WATERMARK (0x0001)
+[    2.230117] qcaspi spi1.0: SPI_REG_WRBUF_WATERMARK (0x0040)
+[    2.236750] PPP generic driver version 2.4.2
+[    2.241415] PPP BSD Compression module registered
+[    2.246203] PPP Deflate Compression module registered
+[    2.251301] PPP MPPE Compression module registered
+[    2.256137] NET: Registered protocol family 24
+[    2.260768] usbcore: registered new interface driver cdc_ether
+[    2.266730] usbcore: registered new interface driver rndis_host
+[    2.273389] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
+[    2.279956] ehci-pci: EHCI PCI platform driver
+[    2.284561] ehci-platform: EHCI generic platform driver
+[    2.290064] ehci-omap: OMAP-EHCI Host Controller driver
+[    2.296054] usbcore: registered new interface driver cdc_acm
+[    2.301780] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
+[    2.309889] usbcore: registered new interface driver cdc_wdm
+[    2.315661] usbcore: registered new interface driver usbtmc
+[    2.321355] usbcore: registered new interface driver usb-storage
+[    2.327463] usbcore: registered new interface driver ums-sddr09
+[    2.333483] usbcore: registered new interface driver ums-sddr55
+[    2.339479] usbcore: registered new interface driver ums-usbat
+[    2.345521] usbcore: registered new interface driver usbserial
+[    2.351437] usbcore: registered new interface driver usbserial_generic
+[    2.358077] usbserial: USB Serial support registered for generic
+[    2.364186] usbcore: registered new interface driver ftdi_sio
+[    2.370006] usbserial: USB Serial support registered for FTDI USB Serial Device
+[    2.377421] usbcore: registered new interface driver ipw
+[    2.382829] usbserial: USB Serial support registered for IPWireless converter
+[    2.390050] usbcore: registered new interface driver option
+[    2.395720] usbserial: USB Serial support registered for GSM modem (1-port)
+[    2.402787] usbcore: registered new interface driver pl2303
+[    2.408434] usbserial: USB Serial support registered for pl2303
+[    2.414455] usbcore: registered new interface driver qcserial
+[    2.420284] usbserial: USB Serial support registered for Qualcomm USB modem
+[    2.429966] 47401300.usb-phy supply vcc not found, using dummy regulator
+[    2.442514] 47401b00.usb-phy supply vcc not found, using dummy regulator
+[    2.462971] mousedev: PS/2 mouse device common for all mice
+[    2.469279] i2c /dev entries driver
+[    2.475660] omap_wdt: OMAP Watchdog Timer Rev 0x01: initial timeout 60 sec
+[    2.494137] ISDN subsystem Rev: 1.1.2.3/[    2.497930] 1.1.2.2/
+1.1.2.3/[    2.500838] none/
+1.1.2.2[    2.503457]
+[    2.505095] Modular ISDN core version 1.1.29
+[    2.509678] NET: Registered protocol family 34
+[    2.514184] gigaset: Driver for Gigaset 307x
+[    2.518473] gigaset: Kernel CAPI interface
+[    2.523994] cpuidle: enable-method property 'ti,am3352' found operations
+[    2.531482] sdhci: Secure Digital Host Controller Interface driver
+[    2.537785] sdhci: Copyright(c) Pierre Ossman
+[    2.543468] omap_hsmmc 48060000.mmc: Got CD GPIO
+[    2.549578] Synopsys Designware Multimedia Card Interface Driver
+[    2.556617] VUB300 Driver rom wait states = 1C irqpoll timeout = 0400[    2.563632] usbcore: registered new interface driver vub300
+[    2.569312] usbcore: registered new interface driver ushc
+[    2.575261] sdhci-pltfm: SDHCI platform and OF driver helper
+[    2.581797] ledtrig-cpu: registered to indicate activity on CPUs
+[    2.588149] usbcore: registered new interface driver usbhid
+[    2.593787] usbhid: USB HID core driver
+[    2.599757] Netfilter messages via NETLINK v0.30.
+[    2.604637] ip_set: protocol 6
+[    2.607993] ip_tables: (C) 2000-2006 Netfilter Core Team
+[    2.613361] random: fast init done
+[    2.616797] Initializing XFRM netlink socket
+[    2.621810] NET: Registered protocol family 10
+[    2.628053] ip6_tables: (C) 2000-2006 Netfilter Core Team
+[    2.633599] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
+[    2.640652] NET: Registered protocol family 17
+[    2.645248] NET: Registered protocol family 15
+[    2.649807] Bridge firewalling registered
+[    2.653873] Ebtables v2.0 registered
+[    2.657465] can: controller area network core (rev 20120528 abi 9)
+[    2.663786] NET: Registered protocol family 29
+[    2.668295] can: raw protocol (rev 20120528)
+[    2.672610] can: broadcast manager protocol (rev 20161123 t)
+[    2.678305] can: netlink gateway (rev 20130117) max_hops=1
+[    2.684332] NET: Registered protocol family 36
+[    2.688840] Key type dns_resolver registered
+[    2.693481] omap_voltage_late_init: Voltage driver support not added
+[    2.707137] omap-gpmc 50000000.gpmc: GPMC revision 6.0
+[    2.712533] gpmc_mem_init: disabling cs 0 mapped at 0x0-0x1000000
+[    2.721012] nand: device found, Manufacturer ID: 0x2c, Chip ID: 0x48
+[    2.727572] nand: Micron MT29F16G08ABACAWP
+[    2.731696] nand: 2048 MiB, SLC, erase size: 512 KiB, page size: 4096, OOB size: 224
+[    2.739572] nand: using OMAP_ECC_BCH8_CODE_HW ECC scheme
+[    2.745093] 14 ofpart partitions found on MTD device omap2-nand.0
+[    2.751217] Creating 14 MTD partitions on "omap2-nand.0":
+[    2.756689] 0x000000000000-0x000000080000 : "SPL"
+[    2.763295] 0x000000080000-0x000000180000 : "Primary u-boot"
+[    2.770581] 0x000000180000-0x000000200000 : "u-boot-env"
+[    2.777550] 0x000000200000-0x000000300000 : "Secondary u-boot"
+[    2.785051] 0x000000300000-0x000000380000 : "Primary dtb"
+[    2.792082] 0x000000380000-0x000000400000 : "Secondary dtb"
+[    2.799322] 0x000000400000-0x000000e00000 : "Primary kernel"
+[    2.807193] 0x000000e00000-0x000001800000 : "Secondary kernel"
+[    2.815223] 0x000001800000-0x000004800000 : "Primary rootfs"
+[    2.825669] 0x000004800000-0x000007800000 : "Secondary rootfs"
+[    2.836326] 0x000007800000-0x000007e00000 : "Primary user configuration"
+[    2.845045] 0x000007e00000-0x000008400000 : "Secondary user configuration"
+[    2.853979] 0x000008400000-0x000008a00000 : "Factory default configuration"
+[    2.863044] 0x000008a00000-0x000080000000 : "Storage"
+[    3.022091] tps65910 0-002d: No interrupt support, no core IRQ
+[    3.030338] vrtc: supplied by vbat
+[    3.037773] vio: supplied by vbat
+[    3.042854] vdd1: supplied by vbat
+[    3.048289] vdd2: supplied by vbat
+[    3.055293] vdig1: supplied by vbat
+[    3.060385] vdig2: supplied by vbat
+[    3.065492] vpll: supplied by vbat
+[    3.070472] vdac: supplied by vbat
+[    3.075500] vaux1: supplied by vbat
+[    3.080574] vaux2: supplied by vbat
+[    3.085693] vaux33: supplied by vbat
+[    3.090850] vmmc: supplied by vbat
+[    3.095895] vbb: supplied by vbat
+[    3.100689] omap_i2c 44e0b000.i2c: bus 0 rev0.11 at 400 kHz
+[    3.107860] omap_i2c 4802a000.i2c: bus 1 rev0.11 at 400 kHz
+[    3.123245] musb-hdrc musb-hdrc.0: MUSB HDRC host driver
+[    3.129003] musb-hdrc musb-hdrc.0: new USB bus registered, assigned bus number 1
+[    3.136749] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
+[    3.143610] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
+[    3.150870] usb usb1: Product: MUSB HDRC host driver
+[    3.155878] usb usb1: Manufacturer: Linux 4.9.59-ga75d8e9305 musb-hcd
+[    3.162368] usb usb1: SerialNumber: musb-hdrc.0
+[    3.167892] hub 1-0:1.0: USB hub found
+[    3.171715] hub 1-0:1.0: 1 port detected
+[    3.186155] musb-hdrc musb-hdrc.1: MUSB HDRC host driver
+[    3.191963] musb-hdrc musb-hdrc.1: new USB bus registered, assigned bus number 2
+[    3.199645] usb usb2: New USB device found, idVendor=1d6b, idProduct=0002
+[    3.206515] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
+[    3.213793] usb usb2: Product: MUSB HDRC host driver
+[    3.218783] usb usb2: Manufacturer: Linux 4.9.59-ga75d8e9305 musb-hcd
+[    3.225280] usb usb2: SerialNumber: musb-hdrc.1
+[    3.230748] hub 2-0:1.0: USB hub found
+[    3.234651] hub 2-0:1.0: 1 port detected
+[    3.241665] omap_hsmmc 48060000.mmc: Got CD GPIO
+[    3.302810] hctosys: unable to open rtc device (rtc0)
+[    3.308418] lis3_reg: disabling
+[    3.311799] mmc0: mmc_rescan_try_freq: trying to init card at 400000 Hz
+[    3.321956] RAMDISK: gzip image found at block 0
+[    3.848577] musb-hdrc musb-hdrc.1: VBUS_ERROR in a_wait_vrise (80, <SessEnd), retry #3, port1 0008010c
+[    6.995051] EXT4-fs (ram0): mounted filesystem without journal. Opts: (null)
+[    7.002485] VFS: Mounted root (ext4 filesystem) on device 1:0.
+[    7.009004] devtmpfs: mounted
+[    7.013676] Freeing unused kernel memory: 1024K
+Bad inittab entry at line 2
+[   12.193012] jffs2: notice: (96) jffs2_build_xattr_subsystem: complete building xattr subsystem, 0 of xdatum (0 unchecked, 0 orphan) and 0 of xref (0 dead, 0 orphan) found.
+[   12.227074] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
+[   12.233161] eth0: SPI thread created
+[   13.281943] eth0: SPI thread exit
+[   14.293961] eth0: SPI thread created
+ Starting SSH                   :
+
+ Starting FTPD                  :
+
+ Starting LIGHTTPD              :
+
+[112] Jan 01 00:00:14 Running in background
+/ # 1970-01-01 00:00:14: (log.c.118) opening errorlog '/var/log/lighttpd/error.log' failed: Permission denied
+
+/ #
+/ # [   57.331831] mmc0: mmc_rescan_try_freq: trying to init card at 400000 Hz
+[   57.499068] mmc0: host does not support reading read-only switch, assuming write-enable
+[   57.509100] mmc0: new high speed SDHC card at address 1234
+[   57.521155] mmcblk0: mmc0:1234 SA32G 28.8 GiB
+[   57.527818]  mmcblk0: p1
+
+/ # mount /dev/mmcblk0p1 /UsbFlash/;cp /UsbFlash/EvComm /root/;
+[   62.569206] FAT-fs (mmcblk0p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
+cp: overwrite '/root/EvComm'? y
+/ # echo 50000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle;
+/ # /root/EvComm &
+/ # V2gFlowStatus=0
+RawSock=3
+GetQca7kMac: send size =20
+V2gFlowStatus=0
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=60
+ODA: 52:cd:04:5a:23:b4
+OSA: 00:18:23:07:88:81
+MTYPE: 0x88e1
+MMV: 0x0
+MMTYPE: 0xa039
+FMI 0x0, 0xb0
+--- MMTYPE_VENDOR_VS_NW_INFO_CNF ---
+QcaMac: 00:18:23:07:88:81
+SendSetKey: send size =57
+V2gFlowStatus=13
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=60
+ODA: 52:cd:04:5a:23:b4
+OSA: 00:18:23:07:88:81
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x6009
+FMI 0x0, 0x0
+--- MMTYPE_CM_SET_KEY_CNF ---
+Result: 0x1
+V2gFlowStatus=14
+
+/ # tcpdump -i eth0 -w /UsbFlash/packets.pcap;
+[   85.906016] device eth0 entered promiscuous mode
+tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=74
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 5c:cc:a0:10:00:87
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x6064
+FMI 0x0, 0x0
+--- MMTYPE_CM_SLAC_PARM_REQ ---
+APPLICATION_TYPE: 0x0
+SECURITY_TYPE: 0x0
+RunID: 5c,cc,a0,10,00,87,00,00
+CipherSuiteSetSize: 0x0
+CipherSuite [1]: 0x0,0x0
+
+
+***** Response MME Packet *****
+SendMmePacket.ODA: 5c:cc:a0:10:00:87:
+SendMmePacket.OSA: 52:cd:04:5a:23:b4:
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x6065
+FMI 0x0, 0x0
+--- CM_SLAC_PARM_CNF ---
+M-SOUND_TARGET: ff:ff:ff:ff:ff:ff
+NUM_SOUNDS: 0xa
+Time_Out: 0x6
+RESP_TYPE: 0x1
+M-FORWARDING_STA: 5c:cc:a0:10:00:87:
+APPLICATION_TYPE: 0x0
+SECURITY_TYPE: 0x0
+RunID: 5c,cc,a0,10,00,87,00,00
+SendMmePacketSize=44,Rtn=44
+V2gFlowStatus=2
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=74
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 5c:cc:a0:10:00:87
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x606a
+FMI 0x0, 0x0
+--- MMTYPE_CM_START_ATTEN_CHAR_IND (counter : 1/3 ) ---
+APPLICATION_TYPE: 0x0
+SECURITY_TYPE: 0x0
+NUM_SOUNDS: 0xa
+Time_Out 0x6
+RESP_TYPE 0x1
+FORWARDING_STA: 5c:cc:a0:10:00:87
+RunID: 5c,cc,a0,10,00,87,00,00
+V2gFlowStatus=3
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=74
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 5c:cc:a0:10:00:87
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x606a
+FMI 0x0, 0x0
+--- MMTYPE_CM_START_ATTEN_CHAR_IND (counter : 2/3 ) ---
+APPLICATION_TYPE: 0x0
+SECURITY_TYPE: 0x0
+NUM_SOUNDS: 0xa
+Time_Out 0x6
+RESP_TYPE 0x1
+FORWARDING_STA: 5c:cc:a0:10:00:87
+RunID: 5c,cc,a0,10,00,87,00,00
+V2gFlowStatus=3
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=74
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 5c:cc:a0:10:00:87
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x606a
+FMI 0x0, 0x0
+--- MMTYPE_CM_START_ATTEN_CHAR_IND (counter : 3/3 ) ---
+APPLICATION_TYPE: 0x0
+SECURITY_TYPE: 0x0
+NUM_SOUNDS: 0xa
+Time_Out 0x6
+RESP_TYPE 0x1
+FORWARDING_STA: 5c:cc:a0:10:00:87
+RunID: 5c,cc,a0,10,00,87,00,00
+V2gFlowStatus=3
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=74
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 5c:cc:a0:10:00:87
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x6076
+FMI 0x0, 0x0
+--- MMTYPE_CM_MNBC_SOUND_IND (counter : 1/10) ---
+APPLICATION_TYPE: 0x0
+SECURITY_TYPE: 0x0
+SenderID: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
+Cnt: 0xa
+RunID: 5c,cc,a0,10,00,87,00,00
+RSVD: 00,00,00,00,00,00,00,00
+Rnd: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
+V2gFlowStatus=4
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=94
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 00:18:23:07:88:81
+MTYPE: 0x88e1
+MMV: 0x0
+MMTYPE: 0xa14e
+FMI 0x0, 0x0
+--- MMTYPE_VENDOR_ATTEN_CHAR ---
+V2gFlowStatus=4
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=85
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 00:18:23:07:88:81
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x6086
+FMI 0x0, 0x0
+--- MMTYPE_CM_ATTEN_PROFILE_IND (counter : 1/10) ---
+EV MAC: 5c:cc:a0:10:00:87
+NumGroups: 0x3a
+RSVD: 0x0
+AAG:
+49, 52, 46, 52, 51, 56, 4a, 50, 51, 4b, 4d, 51, 5a, 4e, 52, 52, 4c, 52, 50, 56, 4f, 51, 4b, 46, 43, 40, 3e, 3d, 3d, 3e, 3e, 3f, 3f, 40, 43, 43, 46, 48, 4b, 4d, 4c, 47, 3e, 3e, 40, 44, 4b, 40, 47, 44, 3f, 44, 3e, 4c, 40, 3a, 3c, 3f,
+V2gFlowStatus=4
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=74
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 5c:cc:a0:10:00:87
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x6076
+FMI 0x0, 0x0
+--- MMTYPE_CM_MNBC_SOUND_IND (counter : 2/10) ---
+APPLICATION_TYPE: 0x0
+SECURITY_TYPE: 0x0
+SenderID: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
+Cnt: 0x9
+RunID: 5c,cc,a0,10,00,87,00,00
+RSVD: 00,00,00,00,00,00,00,00
+Rnd: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
+V2gFlowStatus=4
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=94
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 00:18:23:07:88:81
+MTYPE: 0x88e1
+MMV: 0x0
+MMTYPE: 0xa14e
+FMI 0x0, 0x0
+--- MMTYPE_VENDOR_ATTEN_CHAR ---
+V2gFlowStatus=4
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=85
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 00:18:23:07:88:81
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x6086
+FMI 0x0, 0x0
+--- MMTYPE_CM_ATTEN_PROFILE_IND (counter : 2/10) ---
+EV MAC: 5c:cc:a0:10:00:87
+NumGroups: 0x3a
+RSVD: 0x0
+AAG:
+47, 4e, 48, 4d, 4d, 4e, 44, 4e, 4e, 49, 4b, 53, 55, 4e, 52, 54, 4a, 4f, 4c, 58, 4b, 50, 4b, 46, 44, 40, 3d, 3e, 3c, 3c, 3d, 3d, 3c, 3c, 3f, 3f, 3f, 3f, 41, 43, 42, 46, 3c, 3e, 3f, 44, 42, 3b, 41, 41, 3e, 40, 38, 40, 3f, 3a, 3a, 3e,
+V2gFlowStatus=4
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=74
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 5c:cc:a0:10:00:87
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x6076
+FMI 0x0, 0x0
+--- MMTYPE_CM_MNBC_SOUND_IND (counter : 3/10) ---
+APPLICATION_TYPE: 0x0
+SECURITY_TYPE: 0x0
+SenderID: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
+Cnt: 0x8
+RunID: 5c,cc,a0,10,00,87,00,00
+RSVD: 00,00,00,00,00,00,00,00
+Rnd: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
+V2gFlowStatus=4
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=94
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 00:18:23:07:88:81
+MTYPE: 0x88e1
+MMV: 0x0
+MMTYPE: 0xa14e
+FMI 0x0, 0x0
+--- MMTYPE_VENDOR_ATTEN_CHAR ---
+V2gFlowStatus=4
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=85
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 00:18:23:07:88:81
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x6086
+FMI 0x0, 0x0
+--- MMTYPE_CM_ATTEN_PROFILE_IND (counter : 3/10) ---
+EV MAC: 5c:cc:a0:10:00:87
+NumGroups: 0x3a
+RSVD: 0x0
+AAG:
+48, 52, 45, 4e, 50, 4c, 44, 4b, 4e, 4b, 51, 4f, 55, 4d, 5a, 51, 4a, 50, 4e, 53, 4c, 53, 48, 46, 43, 40, 3d, 3d, 3c, 3c, 3c, 3c, 3d, 3e, 40, 3f, 40, 42, 43, 45, 43, 46, 3d, 3e, 3f, 44, 44, 3d, 42, 41, 3f, 42, 3a, 42, 3f, 39, 3a, 3e,
+V2gFlowStatus=4
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=74
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 5c:cc:a0:10:00:87
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x6076
+FMI 0x0, 0x0
+--- MMTYPE_CM_MNBC_SOUND_IND (counter : 4/10) ---
+APPLICATION_TYPE: 0x0
+SECURITY_TYPE: 0x0
+SenderID: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
+Cnt: 0x7
+RunID: 5c,cc,a0,10,00,87,00,00
+RSVD: 00,00,00,00,00,00,00,00
+Rnd: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
+V2gFlowStatus=4
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=94
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 00:18:23:07:88:81
+MTYPE: 0x88e1
+MMV: 0x0
+MMTYPE: 0xa14e
+FMI 0x0, 0x0
+--- MMTYPE_VENDOR_ATTEN_CHAR ---
+V2gFlowStatus=4
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=85
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 00:18:23:07:88:81
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x6086
+FMI 0x0, 0x0
+--- MMTYPE_CM_ATTEN_PROFILE_IND (counter : 4/10) ---
+EV MAC: 5c:cc:a0:10:00:87
+NumGroups: 0x3a
+RSVD: 0x0
+AAG:
+3f, 3d, 3c, 40, 3f, 41, 3f, 3a, 3a, 3c, 39, 39, 38, 38, 36, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 38, 39, 3a, 3b, 3b, 3b, 3c, 3c, 3c, 3d, 3c, 3c, 3c, 3c, 3c, 3b, 3c, 3a, 3a, 3a, 39, 38, 37, 37, 3b, 37, 35, 35, 34, 33, 33, 34, 43,
+V2gFlowStatus=4
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=74
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 5c:cc:a0:10:00:87
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x6076
+FMI 0x0, 0x0
+--- MMTYPE_CM_MNBC_SOUND_IND (counter : 5/10) ---
+APPLICATION_TYPE: 0x0
+SECURITY_TYPE: 0x0
+SenderID: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
+Cnt: 0x6
+RunID: 5c,cc,a0,10,00,87,00,00
+RSVD: 00,00,00,00,00,00,00,00
+Rnd: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
+V2gFlowStatus=4
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=94
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 00:18:23:07:88:81
+MTYPE: 0x88e1
+MMV: 0x0
+MMTYPE: 0xa14e
+FMI 0x0, 0x0
+--- MMTYPE_VENDOR_ATTEN_CHAR ---
+V2gFlowStatus=4
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=85
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 00:18:23:07:88:81
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x6086
+FMI 0x0, 0x0
+--- MMTYPE_CM_ATTEN_PROFILE_IND (counter : 5/10) ---
+EV MAC: 5c:cc:a0:10:00:87
+NumGroups: 0x3a
+RSVD: 0x0
+AAG:
+5e, 62, 5b, 61, 61, 65, 6a, 5e, 5d, 60, 5c, 6a, 66, 5d, 5e, 69, 67, 5d, 5f, 61, 65, 66, 61, 6a, 61, 69, 6c, 66, 64, 65, 62, 68, 5d, 69, 67, 5f, 60, 68, 60, 63, 6f, 6c, 5f, 68, 65, 62, 62, 62, 63, 62, 5f, 5d, 5d, 5f, 5d, 5d, 58, 5a,
+V2gFlowStatus=4
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=74
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 5c:cc:a0:10:00:87
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x6076
+FMI 0x0, 0x0
+--- MMTYPE_CM_MNBC_SOUND_IND (counter : 6/10) ---
+APPLICATION_TYPE: 0x0
+SECURITY_TYPE: 0x0
+SenderID: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
+Cnt: 0x5
+RunID: 5c,cc,a0,10,00,87,00,00
+RSVD: 00,00,00,00,00,00,00,00
+Rnd: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
+V2gFlowStatus=4
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=94
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 00:18:23:07:88:81
+MTYPE: 0x88e1
+MMV: 0x0
+MMTYPE: 0xa14e
+FMI 0x0, 0x0
+--- MMTYPE_VENDOR_ATTEN_CHAR ---
+V2gFlowStatus=4
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=85
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 00:18:23:07:88:81
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x6086
+FMI 0x0, 0x0
+--- MMTYPE_CM_ATTEN_PROFILE_IND (counter : 6/10) ---
+EV MAC: 5c:cc:a0:10:00:87
+NumGroups: 0x3a
+RSVD: 0x0
+AAG:
+53, 57, 58, 62, 5c, 5b, 59, 56, 5a, 57, 5b, 56, 57, 5d, 5f, 69, 57, 5a, 58, 60, 5c, 5f, 5e, 58, 55, 54, 4d, 4f, 4b, 4c, 4f, 4d, 4d, 4e, 4f, 52, 52, 53, 54, 55, 54, 59, 50, 50, 4f, 55, 55, 4d, 54, 53, 50, 52, 4a, 52, 4e, 4b, 4b, 50,
+V2gFlowStatus=4
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=74
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 5c:cc:a0:10:00:87
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x6076
+FMI 0x0, 0x0
+--- MMTYPE_CM_MNBC_SOUND_IND (counter : 7/10) ---
+APPLICATION_TYPE: 0x0
+SECURITY_TYPE: 0x0
+SenderID: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
+Cnt: 0x4
+RunID: 5c,cc,a0,10,00,87,00,00
+RSVD: 00,00,00,00,00,00,00,00
+Rnd: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
+V2gFlowStatus=4
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=94
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 00:18:23:07:88:81
+MTYPE: 0x88e1
+MMV: 0x0
+MMTYPE: 0xa14e
+FMI 0x0, 0x0
+--- MMTYPE_VENDOR_ATTEN_CHAR ---
+
+
+***** Send MME Packet *****
+SendMmePacket.ODA: 5c:cc:a0:10:00:87:
+SendMmePacket.OSA: 52:cd:04:5a:23:b4:
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x606e
+FMI 0x0, 0x0
+--- CM_ATTEN_CHAR_IND ---
+APPLICATION_TYPE: 0x0
+SECURITY_TYPE: 0x0
+SOURCE_ADDRESS: 5c:cc:a0:10:00:87
+RunID: 5c,cc,a0,10,00,87,00,00
+SOURCE_ID:
+00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
+RESP_ID:
+00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
+NumSounds: 0x6
+ATTEN_PROFILE:
+3a, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+SendMmePacketSize=129,Rtn=129
+V2gFlowStatus=5
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=85
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 00:18:23:07:88:81
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x6086
+FMI 0x0, 0x0
+V2gFlowStatus=5
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=74
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 5c:cc:a0:10:00:87
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x6076
+FMI 0x0, 0x0
+V2gFlowStatus=5
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=94
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 00:18:23:07:88:81
+MTYPE: 0x88e1
+MMV: 0x0
+MMTYPE: 0xa14e
+FMI 0x0, 0x0
+--- MMTYPE_VENDOR_ATTEN_CHAR ---
+V2gFlowStatus=5
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=85
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 00:18:23:07:88:81
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x6086
+FMI 0x0, 0x0
+V2gFlowStatus=5
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=74
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 5c:cc:a0:10:00:87
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x6076
+FMI 0x0, 0x0
+V2gFlowStatus=5
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=94
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 00:18:23:07:88:81
+MTYPE: 0x88e1
+MMV: 0x0
+MMTYPE: 0xa14e
+FMI 0x0, 0x0
+--- MMTYPE_VENDOR_ATTEN_CHAR ---
+V2gFlowStatus=5
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=85
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 00:18:23:07:88:81
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x6086
+FMI 0x0, 0x0
+V2gFlowStatus=5
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=74
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 5c:cc:a0:10:00:87
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x6076
+FMI 0x0, 0x0
+V2gFlowStatus=5
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=94
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 00:18:23:07:88:81
+MTYPE: 0x88e1
+MMV: 0x0
+MMTYPE: 0xa14e
+FMI 0x0, 0x0
+--- MMTYPE_VENDOR_ATTEN_CHAR ---
+V2gFlowStatus=5
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=85
+ODA: ff:ff:ff:ff:ff:ff
+OSA: 00:18:23:07:88:81
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x6086
+FMI 0x0, 0x0
+V2gFlowStatus=5
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=74
+ODA: 52:cd:04:5a:23:b4
+OSA: 5c:cc:a0:10:00:87
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x606f
+FMI 0x0, 0x0
+--- MMTYPE_CM_ATTN_CHAR_RSP ---
+APPLICATION_TYPE: 0x0
+SECURITY_TYPE: 0x0
+SOURCE_ADDRESS: 5c:cc:a0:10:00:87
+RunID: 5c,cc,a0,10,00,87,00,00
+SOURCE_ID:
+00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
+RESP_ID:
+00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
+Result: 0x0
+V2gFlowStatus=6
+
+
+***********************************
+***** Received MME Packet *****
+***********************************
+DataLength=85
+ODA: 52:cd:04:5a:23:b4
+OSA: 5c:cc:a0:10:00:87
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x607c
+FMI 0x0, 0x0
+--- MMTYPE_CM_SLAC_MATCH_REQ ---
+APPLICATION_TYPE: 0x0
+SECURITY_TYPE: 0x0
+MVFLength: 0x3e, 0x0
+PEV ID:
+00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
+PEV MAC:
+5c, cc, a0, 10, 00, 87,
+EVSE ID:
+00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
+EVSE MAC:
+52, cd, 04, 5a, 23, b4,
+RunID:
+5c, cc, a0, 10, 00, 87, 00, 00,
+RSVD:
+00, 00, 00, 00, 00, 00, 00, 00,
+
+
+***** Response MME Packet *****
+SendMmePacket.ODA: 5c:cc:a0:10:00:87:
+SendMmePacket.OSA: 52:cd:04:5a:23:b4:
+MTYPE: 0x88e1
+MMV: 0x1
+MMTYPE: 0x607d
+FMI 0x0, 0x0
+--- CM_SLAC_MATCH_CNF ---
+APPLICATION_TYPE: 0x0
+SECURITY_TYPE: 0x0
+MVFLength: 0x0, 0x56
+PEV ID:
+00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
+PEV MAC:
+5c, cc, a0, 10, 00, 87,
+EVSE ID:
+00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
+EVSE MAC:
+52, cd, 04, 5a, 23, b4,
+RunID:
+5c, cc, a0, 10, 00, 87, 00, 00,
+RSVD:
+00, 00, 00, 00, 00, 00, 00, 00,
+NID:
+28, f8, 57, d3, d5, f2, 08,
+RSVD: 0x0
+NMK:
+93, 11, 53, 98, 92, b2, f0, cb, c7, 1a, 8b, af, 30, 67, fb, a2,
+SendMmePacketSize=109,Rtn=109
+V2gFlowStatus=15
+UdpSock=4
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=-1
+V2gFlowStatus=15
+packet_size=10
+
+
+***********************************
+***** Received SDP Packet *****
+***********************************
+ClientAddress=fe80:0000:0000:0000:5ecc:a0ff:fe10:0087:
+ClientPort=27678
+ProtocolVersion=1
+InverseProtocolVersion=0xfe
+PayloadType=0x9000
+PayloadLength=0x2
+Security=0x10
+TransportProtocol=0x0
+
+
+***** Response SDP Packet *****
+Send size=28
+Destination Address=fe, 80, 00, 00, 00, 00, 00, 00, 5e, cc, a0, ff, fe, 10, 00, 87,
+Destination Port=27678
+ProtocolVersion=1
+InverseProtocolVersion=0xfe
+PayloadType=0x9001
+PayloadLength=0x14
+SECC Ipv6 Address=fe:80:00:00:00:00:00:00:50:cd:04:ff:fe:5a:23:b4:
+SECC Port=59438
+Security=0x0
+TransportProtocol=0x0
+V2gFlowStatus=16
+TcpSock=5
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Wait TCP connection
+V2gFlowStatus=16
+Accept one TCP connection:
+AcceptFd=6
+ClientAddress=fe80:0000:0000:0000:5ecc:a0ff:fe10:0087:
+ClientPort=448
+V2gFlowStatus=17
+
+
+***********************************
+***** Received V2G Packet *****
+***********************************
+ProtocolVersion=1
+InverseProtocolVersion=0xfe
+PayloadType=0x8001
+PayloadLength=0x22
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+^C50 packets captured[  124.275640] device eth0 left promiscuous mode
+
+50 packets received by filter
+0 packets dropped by kernel
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17
+V2gFlowStatus=17

二进制
EVSE/Projects/CCS/Log/packets.pcap


+ 46 - 0
EVSE/Projects/CCS/Rules.make

@@ -0,0 +1,46 @@
+#platform
+PLATFORM=am335x-evm
+
+#defconfig
+DEFCONFIG=tisdk_am335x-evm_defconfig
+
+#Architecture
+ARCH=armv7-a
+
+#u-boot machine
+UBOOT_MACHINE=am335x_evm_config
+
+#Points to the root of the TI SDK
+export TI_SDK_PATH=/opt/ti-processor-sdk-linux-am335x-evm-04.02.00.09
+
+#root of the target file system for installing applications
+DESTDIR=__DESTDIR__
+
+#Points to the root of the Linux libraries and headers matching the
+#demo file system.
+export LINUX_DEVKIT_PATH=$(TI_SDK_PATH)/linux-devkit
+
+#Cross compiler prefix
+export CROSS_COMPILE=$(LINUX_DEVKIT_PATH)/sysroots/x86_64-arago-linux/usr/bin/arm-linux-gnueabihf-
+
+#Default CC value to be used when cross compiling.  This is so that the
+#GNU Make default of "cc" is not used to point to the host compiler
+export CC=$(CROSS_COMPILE)gcc
+
+#Location of environment-setup file
+export ENV_SETUP=$(LINUX_DEVKIT_PATH)/environment-setup
+
+#The directory that points to the SDK kernel source tree
+LINUXKERNEL_INSTALL_DIR=$(TI_SDK_PATH)/board-support/linux-4.9.59+gitAUTOINC+a75d8e9305-ga75d8e9305
+
+CFLAGS= -march=armv7-a -marm -mfpu=neon  -mfloat-abi=hard
+
+#Strip modules when installing to conserve disk space
+INSTALL_MOD_STRIP=1
+
+SDK_PATH_TARGET=$(TI_SDK_PATH)/linux-devkit/sysroots/armv7ahf-neon-linux-gnueabi/
+
+# Set EXEC_DIR to install example binaries
+EXEC_DIR=__EXEC_DIR__
+
+MAKE_JOBS=1

+ 1578 - 0
EVSE/Projects/CCS/uncrustify.cfg

@@ -0,0 +1,1578 @@
+# Uncrustify 0.60
+
+#
+# General options
+#
+
+# The type of line endings
+newlines                                 = auto     # auto/lf/crlf/cr
+
+# The original size of tabs in the input
+input_tab_size                           = 4        # number
+
+# The size of tabs in the output (only used if align_with_tabs=true)
+output_tab_size                          = 4        # number
+
+# The ASCII value of the string escape char, usually 92 (\) or 94 (^). (Pawn)
+string_escape_char                       = 92       # number
+
+# Alternate string escape char for Pawn. Only works right before the quote char.
+string_escape_char2                      = 0        # number
+
+# Allow interpreting '>=' and '>>=' as part of a template in 'void f(list<list<B>>=val);'.
+# If true (default), 'assert(x<0 && y>=3)' will be broken.
+# Improvements to template detection may make this option obsolete.
+tok_split_gte                            = false    # false/true
+
+# Control what to do with the UTF-8 BOM (recommend 'remove')
+utf8_bom                                 = ignore   # ignore/add/remove/force
+
+# If the file contains bytes with values between 128 and 255, but is not UTF-8, then output as UTF-8
+utf8_byte                                = false    # false/true
+
+# Force the output encoding to UTF-8
+utf8_force                               = true    # false/true
+
+#
+# Indenting
+#
+
+# The number of columns to indent per level.
+# Usually 2, 3, 4, or 8.
+indent_columns                           = 4        # number
+
+# The continuation indent. If non-zero, this overrides the indent of '(' and '=' continuation indents.
+# For FreeBSD, this is set to 4. Negative value is absolute and not increased for each ( level
+indent_continue                          = 0        # number
+
+# How to use tabs when indenting code
+# 0=spaces only
+# 1=indent with tabs to brace level, align with spaces
+# 2=indent and align with tabs, using spaces when not on a tabstop
+indent_with_tabs                         = 0        # number
+
+# Comments that are not a brace level are indented with tabs on a tabstop.
+# Requires indent_with_tabs=2. If false, will use spaces.
+indent_cmt_with_tabs                     = false    # false/true
+
+# Whether to indent strings broken by '\' so that they line up
+indent_align_string                      = false    # false/true
+
+# The number of spaces to indent multi-line XML strings.
+# Requires indent_align_string=True
+indent_xml_string                        = 0        # number
+
+# Spaces to indent '{' from level
+indent_brace                             = 0        # number
+
+# Whether braces are indented to the body level
+indent_braces                            = false    # false/true
+
+# Disabled indenting function braces if indent_braces is true
+indent_braces_no_func                    = false    # false/true
+
+# Disabled indenting class braces if indent_braces is true
+indent_braces_no_class                   = false    # false/true
+
+# Disabled indenting struct braces if indent_braces is true
+indent_braces_no_struct                  = false    # false/true
+
+# Indent based on the size of the brace parent, i.e. 'if' => 3 spaces, 'for' => 4 spaces, etc.
+indent_brace_parent                      = false    # false/true
+
+# Whether the 'namespace' body is indented
+indent_namespace                         = false    # false/true
+
+# The number of spaces to indent a namespace block
+indent_namespace_level                   = 0        # number
+
+# If the body of the namespace is longer than this number, it won't be indented.
+# Requires indent_namespace=true. Default=0 (no limit)
+indent_namespace_limit                   = 0        # number
+
+# Whether the 'extern "C"' body is indented
+indent_extern                            = false    # false/true
+
+# Whether the 'class' body is indented
+indent_class                             = true    # false/true
+
+# Whether to indent the stuff after a leading class colon
+indent_class_colon                       = false    # false/true
+
+# Virtual indent from the ':' for member initializers. Default is 2
+indent_ctor_init_leading                 = 2        # number
+
+# Additional indenting for constructor initializer list
+indent_ctor_init                         = 0        # number
+
+# False=treat 'else\nif' as 'else if' for indenting purposes
+# True=indent the 'if' one level
+indent_else_if                           = false    # false/true
+
+# Amount to indent variable declarations after a open brace. neg=relative, pos=absolute
+indent_var_def_blk                       = 0        # number
+
+# Indent continued variable declarations instead of aligning.
+indent_var_def_cont                      = false    # false/true
+
+# True:  force indentation of function definition to start in column 1
+# False: use the default behavior
+indent_func_def_force_col1               = false    # false/true
+
+# True:  indent continued function call parameters one indent level
+# False: align parameters under the open paren
+indent_func_call_param                   = false    # false/true
+
+# Same as indent_func_call_param, but for function defs
+indent_func_def_param                    = false    # false/true
+
+# Same as indent_func_call_param, but for function protos
+indent_func_proto_param                  = false    # false/true
+
+# Same as indent_func_call_param, but for class declarations
+indent_func_class_param                  = false    # false/true
+
+# Same as indent_func_call_param, but for class variable constructors
+indent_func_ctor_var_param               = false    # false/true
+
+# Same as indent_func_call_param, but for templates
+indent_template_param                    = false    # false/true
+
+# Double the indent for indent_func_xxx_param options
+indent_func_param_double                 = false    # false/true
+
+# Indentation column for standalone 'const' function decl/proto qualifier
+indent_func_const                        = 0        # number
+
+# Indentation column for standalone 'throw' function decl/proto qualifier
+indent_func_throw                        = 0        # number
+
+# The number of spaces to indent a continued '->' or '.'
+# Usually set to 0, 1, or indent_columns.
+indent_member                            = 0        # number
+
+# Spaces to indent single line ('//') comments on lines before code
+indent_sing_line_comments                = 0        # number
+
+# If set, will indent trailing single line ('//') comments relative
+# to the code instead of trying to keep the same absolute column
+indent_relative_single_line_comments     = false    # false/true
+
+# Spaces to indent 'case' from 'switch'
+# Usually 0 or indent_columns.
+indent_switch_case                       = 0        # number
+
+# Spaces to shift the 'case' line, without affecting any other lines
+# Usually 0.
+indent_case_shift                        = 0        # number
+
+# Spaces to indent '{' from 'case'.
+# By default, the brace will appear under the 'c' in case.
+# Usually set to 0 or indent_columns.
+indent_case_brace                        = 0        # number
+
+# Whether to indent comments found in first column
+indent_col1_comment                      = false    # false/true
+
+# How to indent goto labels
+#  >0 : absolute column where 1 is the leftmost column
+#  <=0 : subtract from brace indent
+indent_label                             = 1        # number
+
+# Same as indent_label, but for access specifiers that are followed by a colon
+indent_access_spec                       = 1        # number
+
+# Indent the code after an access specifier by one level.
+# If set, this option forces 'indent_access_spec=0'
+indent_access_spec_body                  = false    # false/true
+
+# If an open paren is followed by a newline, indent the next line so that it lines up after the open paren (not recommended)
+indent_paren_nl                          = false    # false/true
+
+# Controls the indent of a close paren after a newline.
+# 0: Indent to body level
+# 1: Align under the open paren
+# 2: Indent to the brace level
+indent_paren_close                       = 0        # number
+
+# Controls the indent of a comma when inside a paren.If TRUE, aligns under the open paren
+indent_comma_paren                       = false    # false/true
+
+# Controls the indent of a BOOL operator when inside a paren.If TRUE, aligns under the open paren
+indent_bool_paren                        = false    # false/true
+
+# If 'indent_bool_paren' is true, controls the indent of the first expression. If TRUE, aligns the first expression to the following ones
+indent_first_bool_expr                   = false    # false/true
+
+# If an open square is followed by a newline, indent the next line so that it lines up after the open square (not recommended)
+indent_square_nl                         = false    # false/true
+
+# Don't change the relative indent of ESQL/C 'EXEC SQL' bodies
+indent_preserve_sql                      = false    # false/true
+
+# Align continued statements at the '='. Default=True
+# If FALSE or the '=' is followed by a newline, the next line is indent one tab.
+indent_align_assign                      = true     # false/true
+
+# Indent OC blocks at brace level instead of usual rules.
+indent_oc_block                          = false    # false/true
+
+# Indent OC blocks in a message relative to the parameter name.
+# 0=use indent_oc_block rules, 1+=spaces to indent
+indent_oc_block_msg                      = 0        # number
+
+# Minimum indent for subsequent parameters
+indent_oc_msg_colon                      = 0        # number
+
+#
+# Spacing options
+#
+
+# Add or remove space around arithmetic operator '+', '-', '/', '*', etc
+sp_arith                                 = ignore   # ignore/add/remove/force
+
+# Add or remove space around assignment operator '=', '+=', etc
+sp_assign                                = ignore   # ignore/add/remove/force
+
+# Add or remove space around '=' in C++11 lambda capture specifications. Overrides sp_assign
+sp_cpp_lambda_assign                     = ignore   # ignore/add/remove/force
+
+# Add or remove space after the capture specification in C++11 lambda.
+sp_cpp_lambda_paren                      = ignore   # ignore/add/remove/force
+
+# Add or remove space around assignment operator '=' in a prototype
+sp_assign_default                        = ignore   # ignore/add/remove/force
+
+# Add or remove space before assignment operator '=', '+=', etc. Overrides sp_assign.
+sp_before_assign                         = ignore   # ignore/add/remove/force
+
+# Add or remove space after assignment operator '=', '+=', etc. Overrides sp_assign.
+sp_after_assign                          = ignore   # ignore/add/remove/force
+
+# Add or remove space around assignment '=' in enum
+sp_enum_assign                           = ignore   # ignore/add/remove/force
+
+# Add or remove space before assignment '=' in enum. Overrides sp_enum_assign.
+sp_enum_before_assign                    = ignore   # ignore/add/remove/force
+
+# Add or remove space after assignment '=' in enum. Overrides sp_enum_assign.
+sp_enum_after_assign                     = ignore   # ignore/add/remove/force
+
+# Add or remove space around preprocessor '##' concatenation operator. Default=Add
+sp_pp_concat                             = add      # ignore/add/remove/force
+
+# Add or remove space after preprocessor '#' stringify operator. Also affects the '#@' charizing operator.
+sp_pp_stringify                          = ignore   # ignore/add/remove/force
+
+# Add or remove space before preprocessor '#' stringify operator as in '#define x(y) L#y'.
+sp_before_pp_stringify                   = ignore   # ignore/add/remove/force
+
+# Add or remove space around boolean operators '&&' and '||'
+sp_bool                                  = ignore   # ignore/add/remove/force
+
+# Add or remove space around compare operator '<', '>', '==', etc
+sp_compare                               = ignore   # ignore/add/remove/force
+
+# Add or remove space inside '(' and ')'
+sp_inside_paren                          = ignore   # ignore/add/remove/force
+
+# Add or remove space between nested parens
+sp_paren_paren                           = ignore   # ignore/add/remove/force
+
+# Whether to balance spaces inside nested parens
+sp_balance_nested_parens                 = false    # false/true
+
+# Add or remove space between ')' and '{'
+sp_paren_brace                           = ignore   # ignore/add/remove/force
+
+# Add or remove space before pointer star '*'
+sp_before_ptr_star                       = ignore   # ignore/add/remove/force
+
+# Add or remove space before pointer star '*' that isn't followed by a variable name
+# If set to 'ignore', sp_before_ptr_star is used instead.
+sp_before_unnamed_ptr_star               = ignore   # ignore/add/remove/force
+
+# Add or remove space between pointer stars '*'
+sp_between_ptr_star                      = ignore   # ignore/add/remove/force
+
+# Add or remove space after pointer star '*', if followed by a word.
+sp_after_ptr_star                        = ignore   # ignore/add/remove/force
+
+# Add or remove space after a pointer star '*', if followed by a func proto/def.
+sp_after_ptr_star_func                   = ignore   # ignore/add/remove/force
+
+# Add or remove space after a pointer star '*', if followed by an open paren (function types).
+sp_ptr_star_paren                        = ignore   # ignore/add/remove/force
+
+# Add or remove space before a pointer star '*', if followed by a func proto/def.
+sp_before_ptr_star_func                  = ignore   # ignore/add/remove/force
+
+# Add or remove space before a reference sign '&'
+sp_before_byref                          = ignore   # ignore/add/remove/force
+
+# Add or remove space before a reference sign '&' that isn't followed by a variable name
+# If set to 'ignore', sp_before_byref is used instead.
+sp_before_unnamed_byref                  = ignore   # ignore/add/remove/force
+
+# Add or remove space after reference sign '&', if followed by a word.
+sp_after_byref                           = ignore   # ignore/add/remove/force
+
+# Add or remove space after a reference sign '&', if followed by a func proto/def.
+sp_after_byref_func                      = ignore   # ignore/add/remove/force
+
+# Add or remove space before a reference sign '&', if followed by a func proto/def.
+sp_before_byref_func                     = ignore   # ignore/add/remove/force
+
+# Add or remove space between type and word. Default=Force
+sp_after_type                            = force    # ignore/add/remove/force
+
+# Add or remove space before the paren in the D constructs 'template Foo(' and 'class Foo('.
+sp_before_template_paren                 = ignore   # ignore/add/remove/force
+
+# Add or remove space in 'template <' vs 'template<'.
+# If set to ignore, sp_before_angle is used.
+sp_template_angle                        = ignore   # ignore/add/remove/force
+
+# Add or remove space before '<>'
+sp_before_angle                          = ignore   # ignore/add/remove/force
+
+# Add or remove space inside '<' and '>'
+sp_inside_angle                          = ignore   # ignore/add/remove/force
+
+# Add or remove space after '<>'
+sp_after_angle                           = ignore   # ignore/add/remove/force
+
+# Add or remove space between '<>' and '(' as found in 'new List<byte>();'
+sp_angle_paren                           = ignore   # ignore/add/remove/force
+
+# Add or remove space between '<>' and a word as in 'List<byte> m;'
+sp_angle_word                            = ignore   # ignore/add/remove/force
+
+# Add or remove space between '>' and '>' in '>>' (template stuff C++/C# only). Default=Add
+sp_angle_shift                           = add      # ignore/add/remove/force
+
+# Permit removal of the space between '>>' in 'foo<bar<int> >' (C++11 only). Default=False
+# sp_angle_shift cannot remove the space without this option.
+sp_permit_cpp11_shift                    = false    # false/true
+
+# Add or remove space before '(' of 'if', 'for', 'switch', and 'while'
+sp_before_sparen                         = ignore   # ignore/add/remove/force
+
+# Add or remove space inside if-condition '(' and ')'
+sp_inside_sparen                         = ignore   # ignore/add/remove/force
+
+# Add or remove space before if-condition ')'. Overrides sp_inside_sparen.
+sp_inside_sparen_close                   = ignore   # ignore/add/remove/force
+
+# Add or remove space before if-condition '('. Overrides sp_inside_sparen.
+sp_inside_sparen_open                    = ignore   # ignore/add/remove/force
+
+# Add or remove space after ')' of 'if', 'for', 'switch', and 'while'
+sp_after_sparen                          = ignore   # ignore/add/remove/force
+
+# Add or remove space between ')' and '{' of 'if', 'for', 'switch', and 'while'
+sp_sparen_brace                          = ignore   # ignore/add/remove/force
+
+# Add or remove space between 'invariant' and '(' in the D language.
+sp_invariant_paren                       = ignore   # ignore/add/remove/force
+
+# Add or remove space after the ')' in 'invariant (C) c' in the D language.
+sp_after_invariant_paren                 = ignore   # ignore/add/remove/force
+
+# Add or remove space before empty statement ';' on 'if', 'for' and 'while'
+sp_special_semi                          = ignore   # ignore/add/remove/force
+
+# Add or remove space before ';'. Default=Remove
+sp_before_semi                           = remove   # ignore/add/remove/force
+
+# Add or remove space before ';' in non-empty 'for' statements
+sp_before_semi_for                       = ignore   # ignore/add/remove/force
+
+# Add or remove space before a semicolon of an empty part of a for statement.
+sp_before_semi_for_empty                 = ignore   # ignore/add/remove/force
+
+# Add or remove space after ';', except when followed by a comment. Default=Add
+sp_after_semi                            = add      # ignore/add/remove/force
+
+# Add or remove space after ';' in non-empty 'for' statements. Default=Force
+sp_after_semi_for                        = force    # ignore/add/remove/force
+
+# Add or remove space after the final semicolon of an empty part of a for statement: for ( ; ; <here> ).
+sp_after_semi_for_empty                  = ignore   # ignore/add/remove/force
+
+# Add or remove space before '[' (except '[]')
+sp_before_square                         = ignore   # ignore/add/remove/force
+
+# Add or remove space before '[]'
+sp_before_squares                        = ignore   # ignore/add/remove/force
+
+# Add or remove space inside a non-empty '[' and ']'
+sp_inside_square                         = ignore   # ignore/add/remove/force
+
+# Add or remove space after ','
+sp_after_comma                           = ignore   # ignore/add/remove/force
+
+# Add or remove space before ','
+sp_before_comma                          = remove   # ignore/add/remove/force
+
+# Add or remove space between an open paren and comma: '(,' vs '( ,'
+sp_paren_comma                           = force    # ignore/add/remove/force
+
+# Add or remove space before the variadic '...' when preceded by a non-punctuator
+sp_before_ellipsis                       = ignore   # ignore/add/remove/force
+
+# Add or remove space after class ':'
+sp_after_class_colon                     = ignore   # ignore/add/remove/force
+
+# Add or remove space before class ':'
+sp_before_class_colon                    = ignore   # ignore/add/remove/force
+
+# Add or remove space before case ':'. Default=Remove
+sp_before_case_colon                     = remove   # ignore/add/remove/force
+
+# Add or remove space between 'operator' and operator sign
+sp_after_operator                        = ignore   # ignore/add/remove/force
+
+# Add or remove space between the operator symbol and the open paren, as in 'operator ++('
+sp_after_operator_sym                    = ignore   # ignore/add/remove/force
+
+# Add or remove space after C/D cast, i.e. 'cast(int)a' vs 'cast(int) a' or '(int)a' vs '(int) a'
+sp_after_cast                            = ignore   # ignore/add/remove/force
+
+# Add or remove spaces inside cast parens
+sp_inside_paren_cast                     = ignore   # ignore/add/remove/force
+
+# Add or remove space between the type and open paren in a C++ cast, i.e. 'int(exp)' vs 'int (exp)'
+sp_cpp_cast_paren                        = ignore   # ignore/add/remove/force
+
+# Add or remove space between 'sizeof' and '('
+sp_sizeof_paren                          = ignore   # ignore/add/remove/force
+
+# Add or remove space after the tag keyword (Pawn)
+sp_after_tag                             = ignore   # ignore/add/remove/force
+
+# Add or remove space inside enum '{' and '}'
+sp_inside_braces_enum                    = ignore   # ignore/add/remove/force
+
+# Add or remove space inside struct/union '{' and '}'
+sp_inside_braces_struct                  = ignore   # ignore/add/remove/force
+
+# Add or remove space inside '{' and '}'
+sp_inside_braces                         = ignore   # ignore/add/remove/force
+
+# Add or remove space inside '{}'
+sp_inside_braces_empty                   = ignore   # ignore/add/remove/force
+
+# Add or remove space between return type and function name
+# A minimum of 1 is forced except for pointer return types.
+sp_type_func                             = ignore   # ignore/add/remove/force
+
+# Add or remove space between function name and '(' on function declaration
+sp_func_proto_paren                      = ignore   # ignore/add/remove/force
+
+# Add or remove space between function name and '(' on function definition
+sp_func_def_paren                        = ignore   # ignore/add/remove/force
+
+# Add or remove space inside empty function '()'
+sp_inside_fparens                        = ignore   # ignore/add/remove/force
+
+# Add or remove space inside function '(' and ')'
+sp_inside_fparen                         = ignore   # ignore/add/remove/force
+
+# Add or remove space inside the first parens in the function type: 'void (*x)(...)'
+sp_inside_tparen                         = ignore   # ignore/add/remove/force
+
+# Add or remove between the parens in the function type: 'void (*x)(...)'
+sp_after_tparen_close                    = ignore   # ignore/add/remove/force
+
+# Add or remove space between ']' and '(' when part of a function call.
+sp_square_fparen                         = ignore   # ignore/add/remove/force
+
+# Add or remove space between ')' and '{' of function
+sp_fparen_brace                          = ignore   # ignore/add/remove/force
+
+# Add or remove space between function name and '(' on function calls
+sp_func_call_paren                       = ignore   # ignore/add/remove/force
+
+# Add or remove space between function name and '()' on function calls without parameters.
+# If set to 'ignore' (the default), sp_func_call_paren is used.
+sp_func_call_paren_empty                 = ignore   # ignore/add/remove/force
+
+# Add or remove space between the user function name and '(' on function calls
+# You need to set a keyword to be a user function, like this: 'set func_call_user _' in the config file.
+sp_func_call_user_paren                  = ignore   # ignore/add/remove/force
+
+# Add or remove space between a constructor/destructor and the open paren
+sp_func_class_paren                      = ignore   # ignore/add/remove/force
+
+# Add or remove space between 'return' and '('
+sp_return_paren                          = ignore   # ignore/add/remove/force
+
+# Add or remove space between '__attribute__' and '('
+sp_attribute_paren                       = ignore   # ignore/add/remove/force
+
+# Add or remove space between 'defined' and '(' in '#if defined (FOO)'
+sp_defined_paren                         = ignore   # ignore/add/remove/force
+
+# Add or remove space between 'throw' and '(' in 'throw (something)'
+sp_throw_paren                           = ignore   # ignore/add/remove/force
+
+# Add or remove space between 'throw' and anything other than '(' as in '@throw [...];'
+sp_after_throw                           = ignore   # ignore/add/remove/force
+
+# Add or remove space between 'catch' and '(' in 'catch (something) { }'
+# If set to ignore, sp_before_sparen is used.
+sp_catch_paren                           = ignore   # ignore/add/remove/force
+
+# Add or remove space between 'version' and '(' in 'version (something) { }' (D language)
+# If set to ignore, sp_before_sparen is used.
+sp_version_paren                         = ignore   # ignore/add/remove/force
+
+# Add or remove space between 'scope' and '(' in 'scope (something) { }' (D language)
+# If set to ignore, sp_before_sparen is used.
+sp_scope_paren                           = ignore   # ignore/add/remove/force
+
+# Add or remove space between macro and value
+sp_macro                                 = ignore   # ignore/add/remove/force
+
+# Add or remove space between macro function ')' and value
+sp_macro_func                            = ignore   # ignore/add/remove/force
+
+# Add or remove space between 'else' and '{' if on the same line
+sp_else_brace                            = ignore   # ignore/add/remove/force
+
+# Add or remove space between '}' and 'else' if on the same line
+sp_brace_else                            = ignore   # ignore/add/remove/force
+
+# Add or remove space between '}' and the name of a typedef on the same line
+sp_brace_typedef                         = ignore   # ignore/add/remove/force
+
+# Add or remove space between 'catch' and '{' if on the same line
+sp_catch_brace                           = ignore   # ignore/add/remove/force
+
+# Add or remove space between '}' and 'catch' if on the same line
+sp_brace_catch                           = ignore   # ignore/add/remove/force
+
+# Add or remove space between 'finally' and '{' if on the same line
+sp_finally_brace                         = ignore   # ignore/add/remove/force
+
+# Add or remove space between '}' and 'finally' if on the same line
+sp_brace_finally                         = ignore   # ignore/add/remove/force
+
+# Add or remove space between 'try' and '{' if on the same line
+sp_try_brace                             = ignore   # ignore/add/remove/force
+
+# Add or remove space between get/set and '{' if on the same line
+sp_getset_brace                          = ignore   # ignore/add/remove/force
+
+# Add or remove space before the '::' operator
+sp_before_dc                             = ignore   # ignore/add/remove/force
+
+# Add or remove space after the '::' operator
+sp_after_dc                              = ignore   # ignore/add/remove/force
+
+# Add or remove around the D named array initializer ':' operator
+sp_d_array_colon                         = ignore   # ignore/add/remove/force
+
+# Add or remove space after the '!' (not) operator. Default=Remove
+sp_not                                   = remove   # ignore/add/remove/force
+
+# Add or remove space after the '~' (invert) operator. Default=Remove
+sp_inv                                   = remove   # ignore/add/remove/force
+
+# Add or remove space after the '&' (address-of) operator. Default=Remove
+# This does not affect the spacing after a '&' that is part of a type.
+sp_addr                                  = remove   # ignore/add/remove/force
+
+# Add or remove space around the '.' or '->' operators. Default=Remove
+sp_member                                = remove   # ignore/add/remove/force
+
+# Add or remove space after the '*' (dereference) operator. Default=Remove
+# This does not affect the spacing after a '*' that is part of a type.
+sp_deref                                 = remove   # ignore/add/remove/force
+
+# Add or remove space after '+' or '-', as in 'x = -5' or 'y = +7'. Default=Remove
+sp_sign                                  = remove   # ignore/add/remove/force
+
+# Add or remove space before or after '++' and '--', as in '(--x)' or 'y++;'. Default=Remove
+sp_incdec                                = remove   # ignore/add/remove/force
+
+# Add or remove space before a backslash-newline at the end of a line. Default=Add
+sp_before_nl_cont                        = add      # ignore/add/remove/force
+
+# Add or remove space after the scope '+' or '-', as in '-(void) foo;' or '+(int) bar;'
+sp_after_oc_scope                        = ignore   # ignore/add/remove/force
+
+# Add or remove space after the colon in message specs
+# '-(int) f:(int) x;' vs '-(int) f: (int) x;'
+sp_after_oc_colon                        = ignore   # ignore/add/remove/force
+
+# Add or remove space before the colon in message specs
+# '-(int) f: (int) x;' vs '-(int) f : (int) x;'
+sp_before_oc_colon                       = ignore   # ignore/add/remove/force
+
+# Add or remove space after the colon in immutable dictionary expression
+# 'NSDictionary *test = @{@"foo" :@"bar"};'
+sp_after_oc_dict_colon                   = ignore   # ignore/add/remove/force
+
+# Add or remove space before the colon in immutable dictionary expression
+# 'NSDictionary *test = @{@"foo" :@"bar"};'
+sp_before_oc_dict_colon                  = ignore   # ignore/add/remove/force
+
+# Add or remove space after the colon in message specs
+# '[object setValue:1];' vs '[object setValue: 1];'
+sp_after_send_oc_colon                   = ignore   # ignore/add/remove/force
+
+# Add or remove space before the colon in message specs
+# '[object setValue:1];' vs '[object setValue :1];'
+sp_before_send_oc_colon                  = ignore   # ignore/add/remove/force
+
+# Add or remove space after the (type) in message specs
+# '-(int)f: (int) x;' vs '-(int)f: (int)x;'
+sp_after_oc_type                         = ignore   # ignore/add/remove/force
+
+# Add or remove space after the first (type) in message specs
+# '-(int) f:(int)x;' vs '-(int)f:(int)x;'
+sp_after_oc_return_type                  = ignore   # ignore/add/remove/force
+
+# Add or remove space between '@selector' and '('
+# '@selector(msgName)' vs '@selector (msgName)'
+# Also applies to @protocol() constructs
+sp_after_oc_at_sel                       = ignore   # ignore/add/remove/force
+
+# Add or remove space between '@selector(x)' and the following word
+# '@selector(foo) a:' vs '@selector(foo)a:'
+sp_after_oc_at_sel_parens                = ignore   # ignore/add/remove/force
+
+# Add or remove space inside '@selector' parens
+# '@selector(foo)' vs '@selector( foo )'
+# Also applies to @protocol() constructs
+sp_inside_oc_at_sel_parens               = ignore   # ignore/add/remove/force
+
+# Add or remove space before a block pointer caret
+# '^int (int arg){...}' vs. ' ^int (int arg){...}'
+sp_before_oc_block_caret                 = ignore   # ignore/add/remove/force
+
+# Add or remove space after a block pointer caret
+# '^int (int arg){...}' vs. '^ int (int arg){...}'
+sp_after_oc_block_caret                  = ignore   # ignore/add/remove/force
+
+# Add or remove space between the receiver and selector in a message.
+# '[receiver selector ...]'
+sp_after_oc_msg_receiver                 = ignore   # ignore/add/remove/force
+
+# Add or remove space after @property.
+sp_after_oc_property                     = ignore   # ignore/add/remove/force
+
+# Add or remove space around the ':' in 'b ? t : f'
+sp_cond_colon                            = ignore   # ignore/add/remove/force
+
+# Add or remove space around the '?' in 'b ? t : f'
+sp_cond_question                         = ignore   # ignore/add/remove/force
+
+# Fix the spacing between 'case' and the label. Only 'ignore' and 'force' make sense here.
+sp_case_label                            = ignore   # ignore/add/remove/force
+
+# Control the space around the D '..' operator.
+sp_range                                 = ignore   # ignore/add/remove/force
+
+# Control the spacing after ':' in 'for (TYPE VAR : EXPR)' (Java)
+sp_after_for_colon                       = ignore   # ignore/add/remove/force
+
+# Control the spacing before ':' in 'for (TYPE VAR : EXPR)' (Java)
+sp_before_for_colon                      = ignore   # ignore/add/remove/force
+
+# Control the spacing in 'extern (C)' (D)
+sp_extern_paren                          = ignore   # ignore/add/remove/force
+
+# Control the space after the opening of a C++ comment '// A' vs '//A'
+sp_cmt_cpp_start                         = ignore   # ignore/add/remove/force
+
+# Controls the spaces between #else or #endif and a trailing comment
+sp_endif_cmt                             = ignore   # ignore/add/remove/force
+
+# Controls the spaces after 'new', 'delete', and 'delete[]'
+sp_after_new                             = ignore   # ignore/add/remove/force
+
+# Controls the spaces before a trailing or embedded comment
+sp_before_tr_emb_cmt                     = ignore   # ignore/add/remove/force
+
+# Number of spaces before a trailing or embedded comment
+sp_num_before_tr_emb_cmt                 = 0        # number
+
+# Control space between a Java annotation and the open paren.
+sp_annotation_paren                      = ignore   # ignore/add/remove/force
+
+#
+# Code alignment (not left column spaces/tabs)
+#
+
+# Whether to keep non-indenting tabs
+align_keep_tabs                          = false    # false/true
+
+# Whether to use tabs for aligning
+align_with_tabs                          = false    # false/true
+
+# Whether to bump out to the next tab when aligning
+align_on_tabstop                         = false    # false/true
+
+# Whether to left-align numbers
+#align_number_left                        = false    # false/true
+
+# Align variable definitions in prototypes and functions
+align_func_params                        = false    # false/true
+
+# Align parameters in single-line functions that have the same name.
+# The function names must already be aligned with each other.
+align_same_func_call_params              = false    # false/true
+
+# The span for aligning variable definitions (0=don't align)
+align_var_def_span                       = 0        # number
+
+# How to align the star in variable definitions.
+#  0=Part of the type     'void *   foo;'
+#  1=Part of the variable 'void     *foo;'
+#  2=Dangling             'void    *foo;'
+align_var_def_star_style                 = 0        # number
+
+# How to align the '&' in variable definitions.
+#  0=Part of the type
+#  1=Part of the variable
+#  2=Dangling
+align_var_def_amp_style                  = 0        # number
+
+# The threshold for aligning variable definitions (0=no limit)
+align_var_def_thresh                     = 0        # number
+
+# The gap for aligning variable definitions
+align_var_def_gap                        = 0        # number
+
+# Whether to align the colon in struct bit fields
+align_var_def_colon                      = false    # false/true
+
+# Whether to align any attribute after the variable name
+align_var_def_attribute                  = false    # false/true
+
+# Whether to align inline struct/enum/union variable definitions
+align_var_def_inline                     = false    # false/true
+
+# The span for aligning on '=' in assignments (0=don't align)
+align_assign_span                        = 0        # number
+
+# The threshold for aligning on '=' in assignments (0=no limit)
+align_assign_thresh                      = 0        # number
+
+# The span for aligning on '=' in enums (0=don't align)
+align_enum_equ_span                      = 0        # number
+
+# The threshold for aligning on '=' in enums (0=no limit)
+align_enum_equ_thresh                    = 0        # number
+
+# The span for aligning struct/union (0=don't align)
+align_var_struct_span                    = 0        # number
+
+# The threshold for aligning struct/union member definitions (0=no limit)
+align_var_struct_thresh                  = 0        # number
+
+# The gap for aligning struct/union member definitions
+align_var_struct_gap                     = 0        # number
+
+# The span for aligning struct initializer values (0=don't align)
+align_struct_init_span                   = 0        # number
+
+# The minimum space between the type and the synonym of a typedef
+align_typedef_gap                        = 0        # number
+
+# The span for aligning single-line typedefs (0=don't align)
+align_typedef_span                       = 0        # number
+
+# How to align typedef'd functions with other typedefs
+# 0: Don't mix them at all
+# 1: align the open paren with the types
+# 2: align the function type name with the other type names
+align_typedef_func                       = 0        # number
+
+# Controls the positioning of the '*' in typedefs. Just try it.
+# 0: Align on typedef type, ignore '*'
+# 1: The '*' is part of type name: typedef int  *pint;
+# 2: The '*' is part of the type, but dangling: typedef int *pint;
+align_typedef_star_style                 = 0        # number
+
+# Controls the positioning of the '&' in typedefs. Just try it.
+# 0: Align on typedef type, ignore '&'
+# 1: The '&' is part of type name: typedef int  &pint;
+# 2: The '&' is part of the type, but dangling: typedef int &pint;
+align_typedef_amp_style                  = 0        # number
+
+# The span for aligning comments that end lines (0=don't align)
+align_right_cmt_span                     = 0        # number
+
+# If aligning comments, mix with comments after '}' and #endif with less than 3 spaces before the comment
+align_right_cmt_mix                      = false    # false/true
+
+# If a trailing comment is more than this number of columns away from the text it follows,
+# it will qualify for being aligned. This has to be > 0 to do anything.
+align_right_cmt_gap                      = 0        # number
+
+# Align trailing comment at or beyond column N; 'pulls in' comments as a bonus side effect (0=ignore)
+align_right_cmt_at_col                   = 0        # number
+
+# The span for aligning function prototypes (0=don't align)
+align_func_proto_span                    = 0        # number
+
+# Minimum gap between the return type and the function name.
+align_func_proto_gap                     = 0        # number
+
+# Align function protos on the 'operator' keyword instead of what follows
+align_on_operator                        = false    # false/true
+
+# Whether to mix aligning prototype and variable declarations.
+# If true, align_var_def_XXX options are used instead of align_func_proto_XXX options.
+align_mix_var_proto                      = false    # false/true
+
+# Align single-line functions with function prototypes, uses align_func_proto_span
+align_single_line_func                   = false    # false/true
+
+# Aligning the open brace of single-line functions.
+# Requires align_single_line_func=true, uses align_func_proto_span
+align_single_line_brace                  = false    # false/true
+
+# Gap for align_single_line_brace.
+align_single_line_brace_gap              = 0        # number
+
+# The span for aligning ObjC msg spec (0=don't align)
+align_oc_msg_spec_span                   = 0        # number
+
+# Whether to align macros wrapped with a backslash and a newline.
+# This will not work right if the macro contains a multi-line comment.
+align_nl_cont                            = false    # false/true
+
+# # Align macro functions and variables together
+align_pp_define_together                 = false    # false/true
+
+# The minimum space between label and value of a preprocessor define
+align_pp_define_gap                      = 0        # number
+
+# The span for aligning on '#define' bodies (0=don't align)
+align_pp_define_span                     = 0        # number
+
+# Align lines that start with '<<' with previous '<<'. Default=true
+align_left_shift                         = true     # false/true
+
+# Span for aligning parameters in an Obj-C message call on the ':' (0=don't align)
+align_oc_msg_colon_span                  = 0        # number
+
+# If true, always align with the first parameter, even if it is too short.
+align_oc_msg_colon_first                 = false    # false/true
+
+# Aligning parameters in an Obj-C '+' or '-' declaration on the ':'
+align_oc_decl_colon                      = false    # false/true
+
+#
+# Newline adding and removing options
+#
+
+# Whether to collapse empty blocks between '{' and '}'
+nl_collapse_empty_body                   = false    # false/true
+
+# Don't split one-line braced assignments - 'foo_t f = { 1, 2 };'
+nl_assign_leave_one_liners               = false    # false/true
+
+# Don't split one-line braced statements inside a class xx { } body
+nl_class_leave_one_liners                = false    # false/true
+
+# Don't split one-line enums: 'enum foo { BAR = 15 };'
+nl_enum_leave_one_liners                 = false    # false/true
+
+# Don't split one-line get or set functions
+nl_getset_leave_one_liners               = false    # false/true
+
+# Don't split one-line function definitions - 'int foo() { return 0; }'
+nl_func_leave_one_liners                 = false    # false/true
+
+# Don't split one-line if/else statements - 'if(a) b++;'
+nl_if_leave_one_liners                   = false    # false/true
+
+# Don't split one-line OC messages
+nl_oc_msg_leave_one_liner                = false    # false/true
+
+# Add or remove newlines at the start of the file
+nl_start_of_file                         = ignore   # ignore/add/remove/force
+
+# The number of newlines at the start of the file (only used if nl_start_of_file is 'add' or 'force'
+nl_start_of_file_min                     = 0        # number
+
+# Add or remove newline at the end of the file
+nl_end_of_file                           = ignore   # ignore/add/remove/force
+
+# The number of newlines at the end of the file (only used if nl_end_of_file is 'add' or 'force')
+nl_end_of_file_min                       = 0        # number
+
+# Add or remove newline between '=' and '{'
+nl_assign_brace                          = ignore   # ignore/add/remove/force
+
+# Add or remove newline between '=' and '[' (D only)
+nl_assign_square                         = ignore   # ignore/add/remove/force
+
+# Add or remove newline after '= [' (D only). Will also affect the newline before the ']'
+nl_after_square_assign                   = ignore   # ignore/add/remove/force
+
+# The number of blank lines after a block of variable definitions at the top of a function body
+# 0 = No change (default)
+nl_func_var_def_blk                      = 0        # number
+
+# The number of newlines before a block of typedefs
+# 0 = No change (default)
+nl_typedef_blk_start                     = 0        # number
+
+# The number of newlines after a block of typedefs
+# 0 = No change (default)
+nl_typedef_blk_end                       = 0        # number
+
+# The maximum consecutive newlines within a block of typedefs
+# 0 = No change (default)
+nl_typedef_blk_in                        = 0        # number
+
+# The number of newlines before a block of variable definitions not at the top of a function body
+# 0 = No change (default)
+nl_var_def_blk_start                     = 0        # number
+
+# The number of newlines after a block of variable definitions not at the top of a function body
+# 0 = No change (default)
+nl_var_def_blk_end                       = 0        # number
+
+# The maximum consecutive newlines within a block of variable definitions
+# 0 = No change (default)
+nl_var_def_blk_in                        = 0        # number
+
+# Add or remove newline between a function call's ')' and '{', as in:
+# list_for_each(item, &list) { }
+nl_fcall_brace                           = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'enum' and '{'
+nl_enum_brace                            = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'struct and '{'
+nl_struct_brace                          = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'union' and '{'
+nl_union_brace                           = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'if' and '{'
+nl_if_brace                              = ignore   # ignore/add/remove/force
+
+# Add or remove newline between '}' and 'else'
+nl_brace_else                            = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'else if' and '{'
+# If set to ignore, nl_if_brace is used instead
+nl_elseif_brace                          = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'else' and '{'
+nl_else_brace                            = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'else' and 'if'
+nl_else_if                               = ignore   # ignore/add/remove/force
+
+# Add or remove newline between '}' and 'finally'
+nl_brace_finally                         = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'finally' and '{'
+nl_finally_brace                         = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'try' and '{'
+nl_try_brace                             = ignore   # ignore/add/remove/force
+
+# Add or remove newline between get/set and '{'
+nl_getset_brace                          = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'for' and '{'
+nl_for_brace                             = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'catch' and '{'
+nl_catch_brace                           = ignore   # ignore/add/remove/force
+
+# Add or remove newline between '}' and 'catch'
+nl_brace_catch                           = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'while' and '{'
+nl_while_brace                           = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'scope (x)' and '{' (D)
+nl_scope_brace                           = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'unittest' and '{' (D)
+nl_unittest_brace                        = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'version (x)' and '{' (D)
+nl_version_brace                         = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'using' and '{'
+nl_using_brace                           = ignore   # ignore/add/remove/force
+
+# Add or remove newline between two open or close braces.
+# Due to general newline/brace handling, REMOVE may not work.
+nl_brace_brace                           = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'do' and '{'
+nl_do_brace                              = ignore   # ignore/add/remove/force
+
+# Add or remove newline between '}' and 'while' of 'do' statement
+nl_brace_while                           = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'switch' and '{'
+nl_switch_brace                          = ignore   # ignore/add/remove/force
+
+# Add a newline between ')' and '{' if the ')' is on a different line than the if/for/etc.
+# Overrides nl_for_brace, nl_if_brace, nl_switch_brace, nl_while_switch, and nl_catch_brace.
+nl_multi_line_cond                       = false    # false/true
+
+# Force a newline in a define after the macro name for multi-line defines.
+nl_multi_line_define                     = false    # false/true
+
+# Whether to put a newline before 'case' statement
+nl_before_case                           = false    # false/true
+
+# Add or remove newline between ')' and 'throw'
+nl_before_throw                          = ignore   # ignore/add/remove/force
+
+# Whether to put a newline after 'case' statement
+nl_after_case                            = false    # false/true
+
+# Add or remove a newline between a case ':' and '{'. Overrides nl_after_case.
+nl_case_colon_brace                      = ignore   # ignore/add/remove/force
+
+# Newline between namespace and {
+nl_namespace_brace                       = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'template<>' and whatever follows.
+nl_template_class                        = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'class' and '{'
+nl_class_brace                           = ignore   # ignore/add/remove/force
+
+# Add or remove newline after each ',' in the constructor member initialization
+nl_class_init_args                       = ignore   # ignore/add/remove/force
+
+# Add or remove newline between return type and function name in a function definition
+nl_func_type_name                        = ignore   # ignore/add/remove/force
+
+# Add or remove newline between return type and function name inside a class {}
+# Uses nl_func_type_name or nl_func_proto_type_name if set to ignore.
+nl_func_type_name_class                  = ignore   # ignore/add/remove/force
+
+# Add or remove newline between function scope and name in a definition
+# Controls the newline after '::' in 'void A::f() { }'
+nl_func_scope_name                       = ignore   # ignore/add/remove/force
+
+# Add or remove newline between return type and function name in a prototype
+nl_func_proto_type_name                  = ignore   # ignore/add/remove/force
+
+# Add or remove newline between a function name and the opening '('
+nl_func_paren                            = ignore   # ignore/add/remove/force
+
+# Add or remove newline between a function name and the opening '(' in the definition
+nl_func_def_paren                        = ignore   # ignore/add/remove/force
+
+# Add or remove newline after '(' in a function declaration
+nl_func_decl_start                       = ignore   # ignore/add/remove/force
+
+# Add or remove newline after '(' in a function definition
+nl_func_def_start                        = ignore   # ignore/add/remove/force
+
+# Overrides nl_func_decl_start when there is only one parameter.
+nl_func_decl_start_single                = ignore   # ignore/add/remove/force
+
+# Overrides nl_func_def_start when there is only one parameter.
+nl_func_def_start_single                 = ignore   # ignore/add/remove/force
+
+# Add or remove newline after each ',' in a function declaration
+nl_func_decl_args                        = ignore   # ignore/add/remove/force
+
+# Add or remove newline after each ',' in a function definition
+nl_func_def_args                         = ignore   # ignore/add/remove/force
+
+# Add or remove newline before the ')' in a function declaration
+nl_func_decl_end                         = ignore   # ignore/add/remove/force
+
+# Add or remove newline before the ')' in a function definition
+nl_func_def_end                          = ignore   # ignore/add/remove/force
+
+# Overrides nl_func_decl_end when there is only one parameter.
+nl_func_decl_end_single                  = ignore   # ignore/add/remove/force
+
+# Overrides nl_func_def_end when there is only one parameter.
+nl_func_def_end_single                   = ignore   # ignore/add/remove/force
+
+# Add or remove newline between '()' in a function declaration.
+nl_func_decl_empty                       = ignore   # ignore/add/remove/force
+
+# Add or remove newline between '()' in a function definition.
+nl_func_def_empty                        = ignore   # ignore/add/remove/force
+
+# Whether to put each OC message parameter on a separate line
+# See nl_oc_msg_leave_one_liner
+nl_oc_msg_args                           = false    # false/true
+
+# Add or remove newline between function signature and '{'
+nl_fdef_brace                            = ignore   # ignore/add/remove/force
+
+# Add or remove a newline between the return keyword and return expression.
+nl_return_expr                           = ignore   # ignore/add/remove/force
+
+# Whether to put a newline after semicolons, except in 'for' statements
+nl_after_semicolon                       = false    # false/true
+
+# Whether to put a newline after brace open.
+# This also adds a newline before the matching brace close.
+nl_after_brace_open                      = false    # false/true
+
+# If nl_after_brace_open and nl_after_brace_open_cmt are true, a newline is
+# placed between the open brace and a trailing single-line comment.
+nl_after_brace_open_cmt                  = false    # false/true
+
+# Whether to put a newline after a virtual brace open with a non-empty body.
+# These occur in un-braced if/while/do/for statement bodies.
+nl_after_vbrace_open                     = false    # false/true
+
+# Whether to put a newline after a virtual brace open with an empty body.
+# These occur in un-braced if/while/do/for statement bodies.
+nl_after_vbrace_open_empty               = false    # false/true
+
+# Whether to put a newline after a brace close.
+# Does not apply if followed by a necessary ';'.
+nl_after_brace_close                     = false    # false/true
+
+# Whether to put a newline after a virtual brace close.
+# Would add a newline before return in: 'if (foo) a++; return;'
+nl_after_vbrace_close                    = false    # false/true
+
+# Control the newline between the close brace and 'b' in: 'struct { int a; } b;'
+# Affects enums, unions, and structures. If set to ignore, uses nl_after_brace_close
+nl_brace_struct_var                      = ignore   # ignore/add/remove/force
+
+# Whether to alter newlines in '#define' macros
+nl_define_macro                          = false    # false/true
+
+# Whether to not put blanks after '#ifxx', '#elxx', or before '#endif'
+nl_squeeze_ifdef                         = false    # false/true
+
+# Add or remove blank line before 'if'
+nl_before_if                             = ignore   # ignore/add/remove/force
+
+# Add or remove blank line after 'if' statement
+nl_after_if                              = ignore   # ignore/add/remove/force
+
+# Add or remove blank line before 'for'
+nl_before_for                            = ignore   # ignore/add/remove/force
+
+# Add or remove blank line after 'for' statement
+nl_after_for                             = ignore   # ignore/add/remove/force
+
+# Add or remove blank line before 'while'
+nl_before_while                          = ignore   # ignore/add/remove/force
+
+# Add or remove blank line after 'while' statement
+nl_after_while                           = ignore   # ignore/add/remove/force
+
+# Add or remove blank line before 'switch'
+nl_before_switch                         = ignore   # ignore/add/remove/force
+
+# Add or remove blank line after 'switch' statement
+nl_after_switch                          = ignore   # ignore/add/remove/force
+
+# Add or remove blank line before 'do'
+nl_before_do                             = ignore   # ignore/add/remove/force
+
+# Add or remove blank line after 'do/while' statement
+nl_after_do                              = ignore   # ignore/add/remove/force
+
+# Whether to double-space commented-entries in struct/enum
+nl_ds_struct_enum_cmt                    = false    # false/true
+
+# Whether to double-space before the close brace of a struct/union/enum
+# (lower priority than 'eat_blanks_before_close_brace')
+nl_ds_struct_enum_close_brace            = false    # false/true
+
+# Add or remove a newline around a class colon.
+# Related to pos_class_colon, nl_class_init_args, and pos_comma.
+nl_class_colon                           = ignore   # ignore/add/remove/force
+
+# Change simple unbraced if statements into a one-liner
+# 'if(b)\n i++;' => 'if(b) i++;'
+nl_create_if_one_liner                   = false    # false/true
+
+# Change simple unbraced for statements into a one-liner
+# 'for (i=0;i<5;i++)\n foo(i);' => 'for (i=0;i<5;i++) foo(i);'
+nl_create_for_one_liner                  = false    # false/true
+
+# Change simple unbraced while statements into a one-liner
+# 'while (i<5)\n foo(i++);' => 'while (i<5) foo(i++);'
+nl_create_while_one_liner                = false    # false/true
+
+#
+# Positioning options
+#
+
+# The position of arithmetic operators in wrapped expressions
+pos_arith                                = ignore   # ignore/join/lead/lead_break/lead_force/trail/trail_break/trail_force
+
+# The position of assignment in wrapped expressions.
+# Do not affect '=' followed by '{'
+pos_assign                               = ignore   # ignore/join/lead/lead_break/lead_force/trail/trail_break/trail_force
+
+# The position of boolean operators in wrapped expressions
+pos_bool                                 = ignore   # ignore/join/lead/lead_break/lead_force/trail/trail_break/trail_force
+
+# The position of comparison operators in wrapped expressions
+pos_compare                              = ignore   # ignore/join/lead/lead_break/lead_force/trail/trail_break/trail_force
+
+# The position of conditional (b ? t : f) operators in wrapped expressions
+pos_conditional                          = ignore   # ignore/join/lead/lead_break/lead_force/trail/trail_break/trail_force
+
+# The position of the comma in wrapped expressions
+pos_comma                                = ignore   # ignore/join/lead/lead_break/lead_force/trail/trail_break/trail_force
+
+# The position of the comma in the constructor initialization list
+pos_class_comma                          = ignore   # ignore/join/lead/lead_break/lead_force/trail/trail_break/trail_force
+
+# The position of colons between constructor and member initialization
+pos_class_colon                          = ignore   # ignore/join/lead/lead_break/lead_force/trail/trail_break/trail_force
+
+#
+# Line Splitting options
+#
+
+# Try to limit code width to N number of columns
+code_width                               = 0        # number
+
+# Whether to fully split long 'for' statements at semi-colons
+ls_for_split_full                        = false    # false/true
+
+# Whether to fully split long function protos/calls at commas
+ls_func_split_full                       = false    # false/true
+
+# Whether to split lines as close to code_width as possible and ignore some groupings
+ls_code_width                            = false    # false/true
+
+#
+# Blank line options
+#
+
+# The maximum consecutive newlines
+nl_max                                   = 0        # number
+
+# The number of newlines after a function prototype, if followed by another function prototype
+nl_after_func_proto                      = 0        # number
+
+# The number of newlines after a function prototype, if not followed by another function prototype
+nl_after_func_proto_group                = 0        # number
+
+# The number of newlines after '}' of a multi-line function body
+nl_after_func_body                       = 0        # number
+
+# The number of newlines after '}' of a multi-line function body in a class declaration
+nl_after_func_body_class                 = 0        # number
+
+# The number of newlines after '}' of a single line function body
+nl_after_func_body_one_liner             = 0        # number
+
+# The minimum number of newlines before a multi-line comment.
+# Doesn't apply if after a brace open or another multi-line comment.
+nl_before_block_comment                  = 0        # number
+
+# The minimum number of newlines before a single-line C comment.
+# Doesn't apply if after a brace open or other single-line C comments.
+nl_before_c_comment                      = 0        # number
+
+# The minimum number of newlines before a CPP comment.
+# Doesn't apply if after a brace open or other CPP comments.
+nl_before_cpp_comment                    = 0        # number
+
+# Whether to force a newline after a multi-line comment.
+nl_after_multiline_comment               = false    # false/true
+
+# The number of newlines after '}' or ';' of a struct/enum/union definition
+nl_after_struct                          = 0        # number
+
+# The number of newlines after '}' or ';' of a class definition
+nl_after_class                           = 0        # number
+
+# The number of newlines before a 'private:', 'public:', 'protected:', 'signals:', or 'slots:' label.
+# Will not change the newline count if after a brace open.
+# 0 = No change.
+nl_before_access_spec                    = 0        # number
+
+# The number of newlines after a 'private:', 'public:', 'protected:', 'signals:', or 'slots:' label.
+# 0 = No change.
+nl_after_access_spec                     = 0        # number
+
+# The number of newlines between a function def and the function comment.
+# 0 = No change.
+nl_comment_func_def                      = 0        # number
+
+# The number of newlines after a try-catch-finally block that isn't followed by a brace close.
+# 0 = No change.
+nl_after_try_catch_finally               = 0        # number
+
+# The number of newlines before and after a property, indexer or event decl.
+# 0 = No change.
+nl_around_cs_property                    = 0        # number
+
+# The number of newlines between the get/set/add/remove handlers in C#.
+# 0 = No change.
+nl_between_get_set                       = 0        # number
+
+# Add or remove newline between C# property and the '{'
+nl_property_brace                        = ignore   # ignore/add/remove/force
+
+# Whether to remove blank lines after '{'
+eat_blanks_after_open_brace              = false    # false/true
+
+# Whether to remove blank lines before '}'
+eat_blanks_before_close_brace            = false    # false/true
+
+# How aggressively to remove extra newlines not in preproc.
+# 0: No change
+# 1: Remove most newlines not handled by other config
+# 2: Remove all newlines and reformat completely by config
+nl_remove_extra_newlines                 = 0        # number
+
+# Whether to put a blank line before 'return' statements, unless after an open brace.
+nl_before_return                         = false    # false/true
+
+# Whether to put a blank line after 'return' statements, unless followed by a close brace.
+nl_after_return                          = false    # false/true
+
+# Whether to put a newline after a Java annotation statement.
+# Only affects annotations that are after a newline.
+nl_after_annotation                      = ignore   # ignore/add/remove/force
+
+# Controls the newline between two annotations.
+nl_between_annotation                    = ignore   # ignore/add/remove/force
+
+#
+# Code modifying options (non-whitespace)
+#
+
+# Add or remove braces on single-line 'do' statement
+mod_full_brace_do                        = ignore   # ignore/add/remove/force
+
+# Add or remove braces on single-line 'for' statement
+mod_full_brace_for                       = ignore   # ignore/add/remove/force
+
+# Add or remove braces on single-line function definitions. (Pawn)
+mod_full_brace_function                  = ignore   # ignore/add/remove/force
+
+# Add or remove braces on single-line 'if' statement. Will not remove the braces if they contain an 'else'.
+mod_full_brace_if                        = ignore   # ignore/add/remove/force
+
+# Make all if/elseif/else statements in a chain be braced or not. Overrides mod_full_brace_if.
+# If any must be braced, they are all braced.  If all can be unbraced, then the braces are removed.
+mod_full_brace_if_chain                  = false    # false/true
+
+# Don't remove braces around statements that span N newlines
+mod_full_brace_nl                        = 0        # number
+
+# Add or remove braces on single-line 'while' statement
+mod_full_brace_while                     = ignore   # ignore/add/remove/force
+
+# Add or remove braces on single-line 'using ()' statement
+mod_full_brace_using                     = ignore   # ignore/add/remove/force
+
+# Add or remove unnecessary paren on 'return' statement
+mod_paren_on_return                      = ignore   # ignore/add/remove/force
+
+# Whether to change optional semicolons to real semicolons
+mod_pawn_semicolon                       = false    # false/true
+
+# Add parens on 'while' and 'if' statement around bools
+mod_full_paren_if_bool                   = false    # false/true
+
+# Whether to remove superfluous semicolons
+mod_remove_extra_semicolon               = false    # false/true
+
+# If a function body exceeds the specified number of newlines and doesn't have a comment after
+# the close brace, a comment will be added.
+mod_add_long_function_closebrace_comment = 0        # number
+
+# If a switch body exceeds the specified number of newlines and doesn't have a comment after
+# the close brace, a comment will be added.
+mod_add_long_switch_closebrace_comment   = 0        # number
+
+# If an #ifdef body exceeds the specified number of newlines and doesn't have a comment after
+# the #endif, a comment will be added.
+mod_add_long_ifdef_endif_comment         = 0        # number
+
+# If an #ifdef or #else body exceeds the specified number of newlines and doesn't have a comment after
+# the #else, a comment will be added.
+mod_add_long_ifdef_else_comment          = 0        # number
+
+# If TRUE, will sort consecutive single-line 'import' statements [Java, D]
+mod_sort_import                          = false    # false/true
+
+# If TRUE, will sort consecutive single-line 'using' statements [C#]
+mod_sort_using                           = false    # false/true
+
+# If TRUE, will sort consecutive single-line '#include' statements [C/C++] and '#import' statements [Obj-C]
+# This is generally a bad idea, as it may break your code.
+mod_sort_include                         = false    # false/true
+
+# If TRUE, it will move a 'break' that appears after a fully braced 'case' before the close brace.
+mod_move_case_break                      = false    # false/true
+
+# Will add or remove the braces around a fully braced case statement.
+# Will only remove the braces if there are no variable declarations in the block.
+mod_case_brace                           = ignore   # ignore/add/remove/force
+
+# If TRUE, it will remove a void 'return;' that appears as the last statement in a function.
+mod_remove_empty_return                  = false    # false/true
+
+#
+# Comment modifications
+#
+
+# Try to wrap comments at cmt_width columns
+cmt_width                                = 0        # number
+
+# Set the comment reflow mode (default: 0)
+# 0: no reflowing (apart from the line wrapping due to cmt_width)
+# 1: no touching at all
+# 2: full reflow
+cmt_reflow_mode                          = 0        # number
+
+# If false, disable all multi-line comment changes, including cmt_width. keyword substitution, and leading chars.
+# Default is true.
+cmt_indent_multi                         = true     # false/true
+
+# Whether to group c-comments that look like they are in a block
+cmt_c_group                              = false    # false/true
+
+# Whether to put an empty '/*' on the first line of the combined c-comment
+cmt_c_nl_start                           = false    # false/true
+
+# Whether to put a newline before the closing '*/' of the combined c-comment
+cmt_c_nl_end                             = false    # false/true
+
+# Whether to group cpp-comments that look like they are in a block
+cmt_cpp_group                            = false    # false/true
+
+# Whether to put an empty '/*' on the first line of the combined cpp-comment
+cmt_cpp_nl_start                         = false    # false/true
+
+# Whether to put a newline before the closing '*/' of the combined cpp-comment
+cmt_cpp_nl_end                           = false    # false/true
+
+# Whether to change cpp-comments into c-comments
+cmt_cpp_to_c                             = false    # false/true
+
+# Whether to put a star on subsequent comment lines
+cmt_star_cont                            = false    # false/true
+
+# The number of spaces to insert at the start of subsequent comment lines
+cmt_sp_before_star_cont                  = 0        # number
+
+# The number of spaces to insert after the star on subsequent comment lines
+cmt_sp_after_star_cont                   = 0        # number
+
+# For multi-line comments with a '*' lead, remove leading spaces if the first and last lines of
+# the comment are the same length. Default=True
+cmt_multi_check_last                     = true     # false/true
+
+# The filename that contains text to insert at the head of a file if the file doesn't start with a C/C++ comment.
+# Will substitute $(filename) with the current file's name.
+cmt_insert_file_header                   = ""         # string
+
+# The filename that contains text to insert at the end of a file if the file doesn't end with a C/C++ comment.
+# Will substitute $(filename) with the current file's name.
+cmt_insert_file_footer                   = ""         # string
+
+# The filename that contains text to insert before a function implementation if the function isn't preceded with a C/C++ comment.
+# Will substitute $(function) with the function name and $(javaparam) with the javadoc @param and @return stuff.
+# Will also substitute $(fclass) with the class name: void CFoo::Bar() { ... }
+cmt_insert_func_header                   = ""         # string
+
+# The filename that contains text to insert before a class if the class isn't preceded with a C/C++ comment.
+# Will substitute $(class) with the class name.
+cmt_insert_class_header                  = ""         # string
+
+# The filename that contains text to insert before a Obj-C message specification if the method isn't preceeded with a C/C++ comment.
+# Will substitute $(message) with the function name and $(javaparam) with the javadoc @param and @return stuff.
+cmt_insert_oc_msg_header                 = ""         # string
+
+# If a preprocessor is encountered when stepping backwards from a function name, then
+# this option decides whether the comment should be inserted.
+# Affects cmt_insert_oc_msg_header, cmt_insert_func_header and cmt_insert_class_header.
+cmt_insert_before_preproc                = false    # false/true
+
+#
+# Preprocessor options
+#
+
+# Control indent of preprocessors inside #if blocks at brace level 0
+pp_indent                                = ignore   # ignore/add/remove/force
+
+# Whether to indent #if/#else/#endif at the brace level (true) or from column 1 (false)
+pp_indent_at_level                       = false    # false/true
+
+# If pp_indent_at_level=false, specifies the number of columns to indent per level. Default=1.
+pp_indent_count                          = 1        # number
+
+# Add or remove space after # based on pp_level of #if blocks
+pp_space                                 = ignore   # ignore/add/remove/force
+
+# Sets the number of spaces added with pp_space
+pp_space_count                           = 0        # number
+
+# The indent for #region and #endregion in C# and '#pragma region' in C/C++
+pp_indent_region                         = 0        # number
+
+# Whether to indent the code between #region and #endregion
+pp_region_indent_code                    = false    # false/true
+
+# If pp_indent_at_level=true, sets the indent for #if, #else, and #endif when not at file-level
+pp_indent_if                             = 0        # number
+
+# Control whether to indent the code between #if, #else and #endif when not at file-level
+pp_if_indent_code                        = false    # false/true
+
+# Whether to indent '#define' at the brace level (true) or from column 1 (false)
+pp_define_at_level                       = false    # false/true
+
+# You can force a token to be a type with the 'type' option.
+# Example:
+# type myfoo1 myfoo2
+#
+# You can create custom macro-based indentation using macro-open,
+# macro-else and macro-close.
+# Example:
+# macro-open  BEGIN_TEMPLATE_MESSAGE_MAP
+# macro-open  BEGIN_MESSAGE_MAP
+# macro-close END_MESSAGE_MAP
+#
+# You can assign any keyword to any type with the set option.
+# set func_call_user _ N_
+#
+# The full syntax description of all custom definition config entries
+# is shown below:
+#
+# define custom tokens as:
+# - embed whitespace in token using '' escape character, or
+#   put token in quotes
+# - these: ' " and ` are recognized as quote delimiters
+#
+# type token1 token2 token3 ...
+#             ^ optionally specify multiple tokens on a single line
+# define def_token output_token
+#                  ^ output_token is optional, then NULL is assumed
+# macro-open token
+# macro-close token
+# macro-else token
+# set id token1 token2 ...
+#               ^ optionally specify multiple tokens on a single line
+#     ^ id is one of the names in token_enum.h sans the CT_ prefix,
+#       e.g. PP_PRAGMA
+#
+# all tokens are separated by any mix of ',' commas, '=' equal signs
+# and whitespace (space, tab)
+#

部分文件因为文件数量过多而无法显示