瀏覽代碼

[Improve][Modularization][Module_OcppBackend]

2020.09.13 / Folus Wen

Actions:
1. EVSE/Modularization/ocppfiles/MessageHandler.c fix handleHeartbeatResponse() release wrong pointer name.
2. EVSE/Projects/define.h OCPP 2.0 share memory struct content improve.
3. EVSE/Projects/AW-CCS/Apps/CCS/Module_CCS.c V2G status debug info add message name.

Files:
1. As follow commit history

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

Hardware PWB P/N : XXXXXXX
Hardware Version : XXXXXXX
FolusWen 4 年之前
父節點
當前提交
93d132469e
共有 3 個文件被更改,包括 512 次插入236 次删除
  1. 1 1
      EVSE/Modularization/ocppfiles/MessageHandler.c
  2. 202 8
      EVSE/Projects/AW-CCS/Apps/CCS/Module_CCS.c
  3. 309 227
      EVSE/Projects/define.h

+ 1 - 1
EVSE/Modularization/ocppfiles/MessageHandler.c

@@ -11150,7 +11150,7 @@ void handleHeartbeatResponse(char *payload, int gun_index)
 		sprintf((char *)ShmOCPP16Data->Heartbeat.ResponseCurrentTime, "%s", json_object_get_string(json_object_object_get(Heartbeat,"currentTime")));
 
 	}
-	json_object_put(BootNotification);
+	json_object_put(Heartbeat);
 
 	if(FirstHeartBeat == 0)
 	{

+ 202 - 8
EVSE/Projects/AW-CCS/Apps/CCS/Module_CCS.c

@@ -44,6 +44,195 @@ struct timeb SeqStartTime, SeqEndTime;
 unsigned char AagGroupsNum, MnbcSoundNum, AttenProfileCnt;
 unsigned char NewNmkKey[16], Nid[7];
 
+uint8_t get_V2G_Status_Name(uint8_t statusCode, char *statusName)
+{
+	int result = PASS;
+
+	switch(statusCode)
+	{
+		case IDLE:
+			sprintf(statusName, "IDLE");
+			break;
+		case CM_SLAC_PARM_REQ:
+			sprintf(statusName, "CM_SLAC_PARM_REQ");
+			break;
+		case CM_SLAC_PARM_CONF:
+			sprintf(statusName, "CM_SLAC_PARM_CONF");
+			break;
+		case CM_START_ATTEN_CHAR_IND:
+			sprintf(statusName, "CM_START_ATTEN_CHAR_IND");
+			break;
+		case CM_MNBC_SOUND_IND:
+			sprintf(statusName, "CM_MNBC_SOUND_IND");
+			break;
+		case CM_ATTEN_CHAR_IND:
+			sprintf(statusName, "CM_ATTEN_CHAR_IND");
+			break;
+		case CM_ATTEN_CHAR_RSP:
+			sprintf(statusName, "CM_ATTEN_CHAR_RSP");
+			break;
+		case CM_VALIDATE_REQ:
+			sprintf(statusName, "CM_VALIDATE_REQ");
+			break;
+		case CM_VALIDATE_CNF:
+			sprintf(statusName, "CM_VALIDATE_CNF");
+			break;
+		case CM_SLAC_MATCH_REQ:
+			sprintf(statusName, "CM_SLAC_MATCH_REQ");
+			break;
+		case CM_SLAC_MATCH_CNF:
+			sprintf(statusName, "CM_SLAC_MATCH_CNF");
+			break;
+		case CM_AMP_MAP_REQ:
+			sprintf(statusName, "CM_AMP_MAP_REQ");
+			break;
+		case CM_AMP_MAP_CNF:
+			sprintf(statusName, "CM_AMP_MAP_CNF");
+			break;
+		case CM_SET_KEY_REQ:
+			sprintf(statusName, "CM_SET_KEY_REQ");
+			break;
+		case CM_SET_KEY_CNF:
+			sprintf(statusName, "CM_SET_KEY_CNF");
+			break;
+		case SLACC_SDP_UDP_Connection:
+			sprintf(statusName, "SLACC_SDP_UDP_Connection");
+			break;
+		case SLACC_SDP_TCP_Connection:
+			sprintf(statusName, "SLACC_SDP_TCP_Connection");
+			break;
+		case SupportedAppProtocolRequest:
+			sprintf(statusName, "SupportedAppProtocolRequest");
+			break;
+		case SupportedAppProtocolResponse:
+			sprintf(statusName, "SupportedAppProtocolResponse");
+			break;
+		case SessionSetupRequest:
+			sprintf(statusName, "SessionSetupRequest");
+			break;
+		case SessionSetupResponse:
+			sprintf(statusName, "UnSessionSetupResponseknown");
+			break;
+		case ServiceDiscoveryRequest:
+			sprintf(statusName, "ServiceDiscoveryRequest");
+			break;
+		case ServiceDiscoveryResponse:
+			sprintf(statusName, "ServiceDiscoveryResponse");
+			break;
+		case ServiceDetailRequest:
+			sprintf(statusName, "ServiceDetailRequest");
+			break;
+		case ServiceDetailResponse:
+			sprintf(statusName, "ServiceDetailResponse");
+			break;
+		case ServiceAndPaymentSelectionRequest:
+			sprintf(statusName, "ServiceAndPaymentSelectionRequest");
+			break;
+		case ServiceAndPaymentSelectionResponse:
+			sprintf(statusName, "ServiceAndPaymentSelectionResponse");
+			break;
+		case PaymentDetailsRequest:
+			sprintf(statusName, "PaymentDetailsRequest");
+			break;
+		case PaymentDetailsResponse:
+			sprintf(statusName, "PaymentDetailsResponse");
+			break;
+		case AuthorizationRequest:
+			sprintf(statusName, "AuthorizationRequest");
+			break;
+		case AuthorizationResponse:
+			sprintf(statusName, "AuthorizationResponse");
+			break;
+		case CertificateUpdateRequest:
+			sprintf(statusName, "CertificateUpdateRequest");
+			break;
+		case CertificateUpdateResponse:
+			sprintf(statusName, "CertificateUpdateResponse");
+			break;
+		case CertificateInstallationRequest:
+			sprintf(statusName, "CertificateInstallationRequest");
+			break;
+		case CertificateInstallationResponse:
+			sprintf(statusName, "CertificateInstallationResponse");
+			break;
+		case ChargeParameterDiscoveryRequest:
+			sprintf(statusName, "ChargeParameterDiscoveryRequest");
+			break;
+		case ChargeParameterDiscoveryResponse:
+			sprintf(statusName, "ChargeParameterDiscoveryResponse");
+			break;
+		case CableCheckRequest:
+			sprintf(statusName, "CableCheckRequest");
+			break;
+		case CableCheckResponse:
+			sprintf(statusName, "CableCheckResponse");
+			break;
+		case PreChargeRequest:
+			sprintf(statusName, "PreChargeRequest");
+			break;
+		case PreChargeResponse:
+			sprintf(statusName, "PreChargeResponse");
+			break;
+		case PowerDeliveryRequestStart:
+			sprintf(statusName, "PowerDeliveryRequestStart");
+			break;
+		case PowerDeliveryResponsetStart:
+			sprintf(statusName, "PowerDeliveryResponsetStart");
+			break;
+		case ChargingStatusRequest:
+			sprintf(statusName, "ChargingStatusRequest");
+			break;
+		case ChargingStatusResponse:
+			sprintf(statusName, "ChargingStatusResponse");
+			break;
+		case CurrentDemandRequest:
+			sprintf(statusName, "CurrentDemandRequest");
+			break;
+		case CurrentDemandResponse:
+			sprintf(statusName, "CurrentDemandResponse");
+			break;
+		case MeteringReceiptRequest:
+			sprintf(statusName, "MeteringReceiptRequest");
+			break;
+		case MeteringReceiptResponse:
+			sprintf(statusName, "MeteringReceiptResponse");
+			break;
+		case PowerDeliveryRequestStop:
+			sprintf(statusName, "PowerDeliveryRequestStop");
+			break;
+		case PowerDeliveryResponseStop:
+			sprintf(statusName, "PowerDeliveryResponseStop");
+			break;
+		case WeldingDetectionRequest:
+			sprintf(statusName, "WeldingDetectionRequest");
+			break;
+		case WeldingDetectionResponse:
+			sprintf(statusName, "WeldingDetectionResponse");
+			break;
+		case SessionStopRequest:
+			sprintf(statusName, "SessionStopRequest");
+			break;
+		case SessionStopResponse:
+			sprintf(statusName, "SessionStopResponse");
+			break;
+		case Performance_Timeout:
+			sprintf(statusName, "Performance_Timeout");
+			break;
+		case Sequence_Timeout:
+			sprintf(statusName, "Sequence_Timeout");
+			break;
+		case Other_Fault:
+			sprintf(statusName, "Other_Fault");
+			break;
+		default:
+			sprintf(statusName, "Unknown");
+			result = FAIL;
+			break;
+	}
+
+	return result;
+}
+
 /*===========================================================================
 FUNCTION: Check_V2G_Flow_Status
 DESCRIPTION:
@@ -336,7 +525,11 @@ GLOBAL VARIABLES:
 int Update_V2G_Flow_Status(unsigned int state_new)
 {
     unsigned char state_now;
+    char nameNow[64], nameNew[64];
+
     state_now = Check_V2G_Flow_Status();
+    get_V2G_Status_Name(state_now, nameNow);
+    get_V2G_Status_Name(state_new, nameNew);
 
     if (EVCOMM_SYS_INFO.End_Process_inused == TRUE ||
         CSUCOMMDC_TASK_FLAG.FW_Update_Task_inused == TRUE)
@@ -346,8 +539,8 @@ int Update_V2G_Flow_Status(unsigned int state_new)
             state_now != Other_Fault)               //255
         {
             sprintf((char*)buf_log_evcomm,
-                    "[Warning]state(%d) change: ignored (End_Process_inused:%d, FW_Update_Task_inused:%d)",
-                    state_new,
+                    "[Warning]state-%s(%d) change: ignored (End_Process_inused:%d, FW_Update_Task_inused:%d)",
+					nameNew, state_new,
                     EVCOMM_SYS_INFO.End_Process_inused,
                     CSUCOMMDC_TASK_FLAG.FW_Update_Task_inused
                     );
@@ -368,9 +561,9 @@ int Update_V2G_Flow_Status(unsigned int state_new)
                 {
                     EVCOMM_SYS_INFO.State_Change_Ignored_Notice = TRUE;
                     sprintf((char*)buf_log_evcomm,
-                            "[Warning]state(%d) change: ignored(now in error state(%d))",
-                            state_new,
-                            state_now);
+                            "[Warning]state-%s(%d) change: ignored(now in error state-%s(%d))",
+							nameNow, state_new,
+							nameNew, state_now);
                     SAVE_SYS_LOG_MSG_EVCOMM("%s\n", buf_log_evcomm);
                 }
                 return -1;
@@ -378,10 +571,11 @@ int Update_V2G_Flow_Status(unsigned int state_new)
         }
 
         //Updating the state formally.
+
         sprintf((char*)buf_log_evcomm,
-                "%02d >> %02d",
-                state_now,
-                state_new
+                "%s(%02d) >> %s(%02d)",
+				nameNow, state_now,
+				nameNew, state_new
                 );
         SAVE_SYS_LOG_MSG_EVCOMM("%s\n", buf_log_evcomm);
 

+ 309 - 227
EVSE/Projects/define.h

@@ -37,13 +37,13 @@ Storage							0x0A200000-0x7FFFFFFF		1886 MB
 
 /*relevant to Quantity */
 #ifdef AWRegular
-	#define MAX_PSU_QUANTITY	62
-	#define CHAdeMO_QUANTITY	1
-	#define CCS_QUANTITY		1
-	#define GB_QUANTITY		0
-	#define AC_QUANTITY		1	
-	#define PSU_QUANTITY		2
-	#define ONE_CONNECTOR_USE	0
+	#define MAX_PSU_QUANTITY		62
+	#define CHAdeMO_QUANTITY		1
+	#define CCS_QUANTITY			1
+	#define GB_QUANTITY				0
+	#define AC_QUANTITY				1
+	#define PSU_QUANTITY			2
+	#define ONE_CONNECTOR_USE		0
 #elif BYTONGB
 	#define MAX_PSU_QUANTITY        62
 	#define CHAdeMO_QUANTITY        1
@@ -144,6 +144,7 @@ Storage							0x0A200000-0x7FFFFFFF		1886 MB
 #define ShmOcppModuleKey		1009
 #define ShmGBTCommKey			1010
 #define ShmLedBdKey				1011
+#define ShmOcpp20ModuleKey		1012
 
 /**************************************************************************************/
 /****************** Share memory configuration value constant define ******************/
@@ -3987,6 +3988,227 @@ struct OCPP16Data
 /**************************************************************************************/
 /************************* OCPP 2.0 Share memory **************************************/
 /**************************************************************************************/
+/*
+ * =============== Enum variable content ===============
+ */
+enum AlignedDataCtrlrVariable
+{
+	AlignedDataCtrlr_Enabled=0,
+	AlignedDataCtrlr_Available,
+	AlignedDataCtrlr_Measurands,
+	AlignedDataCtrlr_Interval,
+	AlignedDataCtrlr_SendDuringIdle,
+	AlignedDataCtrlr_SignReadings,
+	AlignedDataCtrlr_TxEndedMeasurands,
+	AlignedDataCtrlr_TxEndedInterval,
+	AlignedDataCtrlr_CNT
+};
+
+enum AuthCtrlrVariable
+{
+	AuthCtrlr_Enabled=0,
+	AuthCtrlr_AdditionalInfoItemsPerMessage,
+	AuthCtrlr_OfflineTxForUnknownIdEnabled,
+	AuthCtrlr_AuthorizeRemoteStart,
+	AuthCtrlr_LocalAuthorizeOffline,
+	AuthCtrlr_LocalPreAuthorize,
+	AuthCtrlr_MasterPassGroupId,
+	AuthCtrlr_CNT
+};
+
+enum AuthCacheCtrlrVariable
+{
+	AuthCacheCtrlr_Enabled=0,
+	AuthCacheCtrlr_Available,
+	AuthCacheCtrlr_LifeTime,
+	AuthCacheCtrlr_Storage,
+	AuthCacheCtrlr_Policy,
+	AuthCacheCtrlr_CNT
+};
+
+enum ClockCtrlrVariable
+{
+	ClockCtrlr_DateTime=0,
+	ClockCtrlr_NtpSource,
+	ClockCtrlr_NtpServerUri,
+	ClockCtrlr_TimeOffset,
+	ClockCtrlr_NextTimeOffsetTransitionDateTime,
+	ClockCtrlr_NextTransition_TimeOffset,
+	ClockCtrlr_TimeSource,
+	ClockCtrlr_TimeZone,
+	ClockCtrlr_CNT
+};
+
+enum ChargingStationVariable
+{
+	ChargingStation_Available=0,
+	ChargingStation_AvailabilityState,
+	ChargingStation_SupplyPhases,
+	ChargingStation_CNT
+};
+
+enum ConnectorVariable
+{
+	Connector_Available=0,
+	Connector_ConnectorType,
+	Connector_SupplyPhases,
+	Connector_CNT
+};
+
+enum CustomizationCtrlrVariable
+{
+	CustomizationCtrlr_CustomImplementationEnabled=0,
+	CustomizationCtrlr_CNT
+};
+
+enum DeviceDataCtrlrVariable
+{
+	DeviceDataCtrlr_GetReport_ItemsPerMessage=0,
+	DeviceDataCtrlr_GetVariables_ItemsPerMessage,
+	DeviceDataCtrlr_GetReport_BytesPerMessage,
+	DeviceDataCtrlr_GetVariables_BytesPerMessage,
+	DeviceDataCtrlr_ConfigurationValueSize,
+	DeviceDataCtrlr_ReportingValueSize,
+	DeviceDataCtrlr_SetVariables_ItemsPerMessage,
+	DeviceDataCtrlr_SetVariables_BytesPerMessage,
+	DeviceDataCtrlr_CNT
+};
+
+enum DisplayMessageCtrlrVariable
+{
+	DisplayMessageCtrlr_Enabled=0,
+	DisplayMessageCtrlr_Available,
+	DisplayMessageCtrlr_DisplayMessages,
+	DisplayMessageCtrlr_SupportedFormats,
+	DisplayMessageCtrlr_SupportedPriorities,
+	DisplayMessageCtrlr_CNT
+};
+
+enum EVSEVariable
+{
+	EVSE_Available=0,
+	EVSE_AvailabilityState,
+	EVSE_SupplyPhases,
+	EVSE_Power,
+	EVSE_CNT
+};
+
+enum LocalAuthListCtrlrVariable
+{
+	LocalAuthListCtrlr_Enabled=0,
+	LocalAuthListCtrlr_Entries,
+	LocalAuthListCtrlr_Available,
+	LocalAuthListCtrlr_ItemsPerMessage,
+	LocalAuthListCtrlr_BytesPerMessage,
+	LocalAuthListCtrlr_Storage,
+	LocalAuthListCtrlr_CNT
+};
+
+enum MonitoringCtrlrVariable
+{
+	MonitoringCtrlr_Enabled=0,
+	MonitoringCtrlr_Available,
+	MonitoringCtrlr_ClearVariableMonitoring_ItemsPerMessage,
+	MonitoringCtrlr_SetVariableMonitoring_ItemsPerMessage,
+	MonitoringCtrlr_ClearVariableMonitoring_BytesPerMessage,
+	MonitoringCtrlr_SetVariableMonitoring_BytesPerMessage,
+	MonitoringCtrlr_OfflineQueuingSeverity,
+	MonitoringCtrlr_CNT
+};
+
+enum OCPPCommCtrlrVariable
+{
+	OCPPCommCtrlr_ActiveNetworkProfile=0,
+	OCPPCommCtrlr_MessageTimeout,
+	OCPPCommCtrlr_FileTransferProtocols,
+	OCPPCommCtrlr_HeartbeatInterval,
+	OCPPCommCtrlr_NetworkConfigurationPriority,
+	OCPPCommCtrlr_NetworkProfileConnectionAttempts,
+	OCPPCommCtrlr_OfflineThreshold,
+	OCPPCommCtrlr_QueueAllMessages,
+	OCPPCommCtrlr_MessageAttempts,
+	OCPPCommCtrlr_MessageAttemptInterval,
+	OCPPCommCtrlr_UnlockOnEVSideDisconnect,
+	OCPPCommCtrlr_WebSocketPingInterval,
+	OCPPCommCtrlr_ResetRetries,
+	OCPPCommCtrlr_PublicKeyWithSignedMeterValue,
+	OCPPCommCtrlr_CNT
+};
+
+enum ReservationCtrlrVariable
+{
+	ReservationCtrlr_Enabled=0,
+	ReservationCtrlr_Available,
+	ReservationCtrlr_NonEvseSpecific,
+	ReservationCtrlr_CNT
+};
+
+enum SampledDataCtrlrVariable
+{
+	SampledDataCtrlr_Enabled=0,
+	SampledDataCtrlr_Available,
+	SampledDataCtrlr_SignReadings,
+	SampledDataCtrlr_TxEndedMeasurands,
+	SampledDataCtrlr_TxEndedInterval,
+	SampledDataCtrlr_TxStartedMeasurands,
+	SampledDataCtrlr_TxUpdatedMeasurands,
+	SampledDataCtrlr_TxUpdatedInterval,
+	SampledDataCtrlr_CNT
+};
+
+enum SecurityCtrlrVariable
+{
+	SecurityCtrlr_BasicAuthPassword=0,
+	SecurityCtrlr_Identity,
+	SecurityCtrlr_OrganizationName,
+	SecurityCtrlr_CertificateEntries,
+	SecurityCtrlr_SecurityProfile,
+	SecurityCtrlr_AdditionalRootCertificateCheck,
+	SecurityCtrlr_CNT
+};
+
+enum SmartChargingCtrlrVariable
+{
+	SmartChargingCtrlr_Enabled=0,
+	SmartChargingCtrlr_Available,
+	SmartChargingCtrlr_ACPhaseSwitchingSupported,
+	SmartChargingCtrlr_ProfileStackLevel,
+	SmartChargingCtrlr_RateUnit,
+	SmartChargingCtrlr_PeriodsPerSchedule,
+	SmartChargingCtrlr_ExternalControlSignalsEnabled,
+	SmartChargingCtrlr_NotifyChargingLimitWithSchedules,
+	SmartChargingCtrlr_Phases3to1,
+	SmartChargingCtrlr_Entries,
+	SmartChargingCtrlr_LimitChangeSignificance,
+	SmartChargingCtrlr_CNT
+};
+
+enum TariffCostCtrlrVariable
+{
+	Tariff_Enabled=0,
+	Tariff_Available,
+	Tariff_TariffFallbackMessage,
+	Cost_Enabled,
+	Cost_Available,
+	Cost_TotalCostFallbackMessage,
+	Cost_Currency,
+	TariffCostCtrlr_CNT
+};
+
+
+enum TxCtrlrVariable
+{
+	TxCtrlr_ChargingBeforeAcceptedEnabled=0,
+	TxCtrlr_EVConnectionTimeOut,
+	TxCtrlr_StopTxOnEVSideDisconnect,
+	TxCtrlr_TxBeforeAcceptedEnabled,
+	TxCtrlr_TxStartPoint,
+	TxCtrlr_TxStopPoint,
+	TxCtrlr_MaxEnergyOnInvalidId,
+	TxCtrlr_StopTxOnInvalidId,
+	TxCtrlr_CNT
+};
+
 /*
  * =============== Common class ===============
  */
@@ -4345,7 +4567,7 @@ struct SampledValueType
 struct MeterValueType
 {
 	unsigned char timestamp[28];									// Required. Timestamp for measured value(s).
-	struct SampledValueType meterValue[10];							// Required. One or more measured values
+	struct SampledValueType sampledValue[10];							// Required. One or more measured values
 };
 
 struct VariableMonitoringType
@@ -4462,6 +4684,7 @@ struct CancelReservation_20
 {
 	int reservationId;												// Required. Id of the reservation to cancel.
 	unsigned char Response_status[16];								// Required. This indicates the success or failure of the canceling of a reservation by CSMS.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct CertificateSigned_20
@@ -4469,6 +4692,7 @@ struct CertificateSigned_20
 	unsigned char certificate[10][5500];							// Required. The signed X.509 certificate, first DER encoded into binary, and then Base64 encoded. This can also contain the necessary sub CA certificates. In that case, the order should follow the certificate chain, starting from the leaf certificate.
 	unsigned char certificateType[32];								// Optional. Indicates the type of the signed certificate that is returned.
 	unsigned char Response_status[16];								// Required. Returns whether certificate signing has been accepted, otherwise rejected.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct ChangeAvailability_20
@@ -4476,11 +4700,13 @@ struct ChangeAvailability_20
 	unsigned char operationalStatus[16];							// Required. This contains the type of availability change that the Charging Station should perform.
 	struct EVSEType evse;											// Optional. Contains Id’s to designate a specific EVSE/connector by index numbers. When omitted, the message refers to the Charging Station as a whole.
 	unsigned char Response_status[16];								// Required. This indicates whether the Charging Station is able to perform the availability change.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct ClearCache_20
 {
 	unsigned char Response_status[16];								// Required. Accepted if the Charging Station has executed the request, otherwise rejected.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct ClearChargingProfile_20
@@ -4488,12 +4714,14 @@ struct ClearChargingProfile_20
 	unsigned int chargingProfileId;									// Optional. The Id of the charging profile to clear.
 	struct  ClearChargingProfileType chargingProfileCriteria;		// Optional. Specifies the charging profile.
 	unsigned char Response_status[16];								// Required. Indicates if the Charging Station was able to execute the request.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct ClearDisplayMessage_20
 {
 	unsigned int id;												// Required. Id of the message that SHALL be removed from the Charging Station.
 	unsigned char Response_status[16];								// Required. Returns whether the Charging Station has been able to remove the message.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct ClearedChargingLimit_20
@@ -4506,12 +4734,14 @@ struct ClearVariableMonitoring_20
 {
 	unsigned int id[10];										 	// Required. List of the monitors to be cleared, identified by there Id.
 	struct ClearMonitoringResultType Response_clearMonitoringResult[10];// Required. List of result statuses per monitor.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct CostUpdated_20
 {
 	float totalCost;												// Required. Current total cost, based on the information known by the CSMS, of the transaction including taxes. In the currency configured with the configuration Variable: [Currency]
 	unsigned char transactionId[36];								// Required. Transaction Id of the transaction the current cost are asked for.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct CustomerInformation_20
@@ -4523,6 +4753,7 @@ struct CustomerInformation_20
 	struct IdTokenType idToken;										// Optional. The IdToken of the customer this request refers to. One of the possible identifiers (customerIdentifier, customerIdToken or customerCertificate) should be in the request message.
 	struct CertificateHashDataType customerCertificate;				// Optional. The Certificate of the customer this request refers to. One of the possible identifiers (customerIdentifier, customerIdToken or customerCertificate) should be in the request message.
 	unsigned char Response_status[16];								// Required. Indicates whether the request was accepted.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct DataTransfer_20
@@ -4532,12 +4763,14 @@ struct DataTransfer_20
 	unsigned char vendorId[255];									// Required. This identifies the Vendor specific implementation
 	unsigned char Response_status[20];								// Required. This indicates the success or failure of the data transfer.
 	unsigned char Response_data[512];								// Optional. Data without specified length or format, in response to request.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct DeleteCertificate_20
 {
 	struct CertificateHashDataType certificateHashData;				// Required. Indicates the certificate of which deletion is requested.
 	unsigned char Response_status[16];								// Required. Charging Station indicates if it can process the request.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct FirmwareStatusNotification_20
@@ -4560,6 +4793,7 @@ struct GetBaseReport_20
 	unsigned int requestId;											// Required. The Id of the request.
 	unsigned char reportBase[32];									// Required. This field specifies the report base.
 	unsigned char Response_status[16];								// Required. This indicates whether the Charging Station is able to accept this request.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct GetCertificateStatus_20
@@ -4575,6 +4809,7 @@ struct GetChargingProfiles_20
 	unsigned int evseId;											// Optional. For which EVSE installed charging profiles SHALL be reported. If 0, only charging profiles installed on the Charging Station itself (the grid connection) SHALL be reported. If omitted, all installed charging profiles SHALL be reported.
 	struct ChargingProfileCriterionType chargingProfile;			// Required. Specifies the charging profile.
 	unsigned char Response_status[16];								// Required. This indicates whether the Charging Station is able to process this request and will send ReportChargingProfilesRequest messages.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct GetCompositeSchedule_20
@@ -4584,6 +4819,7 @@ struct GetCompositeSchedule_20
 	unsigned int evseId;											// Required. The ID of the EVSE for which the schedule is requested. When evseid=0, the Charging Station will calculate the expected consumption for the grid connection.
 	unsigned char Response_status[16];								// Required. The Charging Station will indicate if it was able to process the request
 	struct CompositeScheduleType Response_schedule;					// Optional. This field contains the calculated composite schedule. It may only be omitted when this message contains status Rejected.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct GetDisplayMessages_20
@@ -4593,6 +4829,7 @@ struct GetDisplayMessages_20
 	unsigned char	priority[16];									// Optional. If provided the Charging Station shall return Display Messages with the given priority only.
 	unsigned char state[16];										// Optional. If provided the Charging Station shall return Display Messages with the given state only.
 	unsigned char Response_status[16];								// Required. Indicates if the Charging Station has Display Messages that match the request criteria in the GetDisplayMessagesRequest
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct GetInstalledCertificateIds_20
@@ -4600,11 +4837,13 @@ struct GetInstalledCertificateIds_20
 	unsigned char certificateType[10][32];										// Optional. Indicates the type of certificates requested. When omitted, all certificate types are requested.
 	unsigned char Response_status[16];											// Required. Charging Station indicates if it can process the request.
 	struct CertificateHashDataChainType Response_certificateHashDataChain[10];	// Optional. The Charging Station includes the Certificate information for each available certificate.
+	unsigned char guid[37];														// Save guid from server request
 };
 
 struct GetLocalListVersion_20
 {
 	int Response_versionNumber;										// Required. This contains the current version number of the local authorization list in the Charging Station.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct GetLog_20
@@ -4616,6 +4855,7 @@ struct GetLog_20
 	struct LogParametersType log;									// Required. This field specifies the requested log and the location to which the log should be sent.
 	unsigned char Response_status[20];								// Required. This field indicates whether the Charging Station was able to accept the request.
 	unsigned char Response_filename[255];							// Optional. This contains the name of the log file that will be uploaded. This field is not present when no logging information is available.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct GetMonitoringReport_20
@@ -4624,6 +4864,7 @@ struct GetMonitoringReport_20
 	unsigned char monitoringCriteria[3][32];						// Optional. This field contains criteria for components for which a monitoring report is requested
 	struct ComponentVariableType componentVariable[10];				// Optional. This field specifies the components and variables for which a monitoring report is requested.
 	unsigned char Response_status[20];								// Required. This field indicates whether the Charging Station was able to accept the request.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct GetReport_20
@@ -4632,6 +4873,7 @@ struct GetReport_20
 	unsigned char componentCriteria[4][16];							// Optional. This field contains criteria for components for which a report is requested
 	struct ComponentVariableType componentVariable[10];				// Optional. This field specifies the components and variables for which a report is requested.
 	unsigned char Response_status[20];								// Required. This field indicates whether the Charging Station was able to accept the request.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct GetTransactionStatus_20
@@ -4639,12 +4881,32 @@ struct GetTransactionStatus_20
 	unsigned char transactionId[36];								// Optional. The Id of the transaction for which the status is requested.
 	unsigned char Response_ongoingIndicator;						// Optional. Whether the transaction is still ongoing.
 	unsigned char Response_messagesInQueue;							// Required. Whether there are still message to be delivered.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct GetVariables_20
 {
-	struct GetVariableDataType getVariableData[10];					// Required. List of requested variables.
-	struct GetVariableResultType Response_getVariableResult[10];	// Required. List of requested variables and their values.
+	struct GetVariableDataType getVariableData[AlignedDataCtrlr_CNT +
+											   AuthCacheCtrlr_CNT +
+											   AuthCtrlr_CNT +
+											   ChargingStation_CNT +
+											   ClockCtrlr_CNT +
+											   Connector_CNT +
+											   CustomizationCtrlr_CNT +
+											   DeviceDataCtrlr_CNT +
+											   DisplayMessageCtrlr_CNT +
+											   EVSE_CNT +
+											   LocalAuthListCtrlr_CNT +
+											   MonitoringCtrlr_CNT +
+											   OCPPCommCtrlr_CNT +
+											   ReservationCtrlr_CNT +
+											   SampledDataCtrlr_CNT +
+											   SecurityCtrlr_CNT +
+											   SmartChargingCtrlr_CNT +
+											   TariffCostCtrlr_CNT +
+											   TxCtrlr_CNT];				// Required. List of requested variables.
+	struct GetVariableResultType Response_getVariableResult[121];	// Required. List of requested variables and their values.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct Heartbeat_20
@@ -4657,6 +4919,7 @@ struct InstallCertificate_20
 	unsigned char certificateType[32];								// Required. Indicates the certificate type that is sent.
 	unsigned char certificate[5500];								// Required. A X.509 certificate, first DER encoded into binary, and then Base64 encoded.
 	unsigned char Response_status[16];								// Required. Charging Station indicates if installation was successful.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct LogStatusNotification_20
@@ -4744,6 +5007,7 @@ struct PublishFirmware_20
 	unsigned int requestId;											// Required. The Id of the request.
 	unsigned int retryInterval;										// Optional. The interval in seconds after which a retry may be attempted. If this field is not present, it is left to Charging Station to decide how long to wait between attempts.
 	unsigned char status[16];										// Required. Indicates whether the request was accepted.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct PublishFirmwareStatusNotification_20
@@ -4771,12 +5035,14 @@ struct RequestStartTransaction_20
 	struct IdTokenType groupIdToken;								// Optional. The group identifier that the Charging Station must use to start a transaction.
 	unsigned char Response_status[16];								// Required. Status indicating whether the Charging Station accepts the request to start a transaction.
 	unsigned char Response_transactionId[36];						// Optional. When the transaction was already started by the Charging Station before the RequestStartTransactionRequest was received, for example: cable plugged in first. This contains the transactionId of the already started transaction.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct RequestStopTransaction_20
 {
 	unsigned char transactionId[36];								// Required. The identifier of the transaction which the Charging Station is requested to stop.
 	unsigned char Response_status[16];								// Required. Status indicating whether Charging Station accepts the request to stop a transaction.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct ReservationStatusUpdate_20
@@ -4794,6 +5060,7 @@ struct ReserveNow_20
 	struct IdTokenType idToken;										// Required. The identifier for which the reservation is made.
 	struct IdTokenType groupIdToken;								// Optional. The group identifier for which the reservation is made.
 	unsigned char Response_status[16];								// Required. This indicates the success or failure of the reservation.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct Reset_20
@@ -4801,6 +5068,7 @@ struct Reset_20
 	unsigned char type[16];											// Required. This contains the type of reset that the Charging Station or EVSE should perform.
 	unsigned int evseId;											// Optional. This contains the ID of a specific EVSE that needs to be reset, instead of the entire Charging Station.
 	unsigned char Response_status[16];								// Required. This indicates whether the Charging Station is able to perform the reset.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct SecurityEventNotification_20
@@ -4816,6 +5084,7 @@ struct SendLocalList_20
 	unsigned char updateType[32];									// Required. This contains the type of update (full or differential) of this request.
 	struct AuthorizationData localAuthorizationList[500];			// Optional. This contains the Local Authorization List entries.
 	unsigned char Response_status[16];								// Required. This indicates whether the Charging Station has successfully received and applied the update of the Local Authorization List.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct SetChargingProfile_20
@@ -4823,24 +5092,28 @@ struct SetChargingProfile_20
 	unsigned int evseId;											// Required. The EVSE to which the charging profile applies. If evseId = 0, the message contains an overall limit for the Charging Station.
 	struct ChargingProfileType chargingProfile;						// Required. The charging profile to be set at the Charging Station.
 	unsigned char Response_status[16];								// Required. Returns whether the Charging Station has been able to process the message successfully. This does not guarantee the schedule will be followed to the letter. There might be other constraints the Charging Station may need to take into account.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct SetDisplayMessage_20
 {
 	struct MessageInfoType message;									// Required. Message to be configured in the Charging Station, to be displayed.
 	unsigned char Response_status[32];								// Required. This indicates whether the Charging Station is able to display the message.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct SetMonitoringBase_20
 {
 	unsigned char monitoringBase[16];								// Required. Specify which monitoring base will be set
 	unsigned char Response_status[16];								// Required. Indicates whether the Charging Station was able to accept the request.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct SetMonitoringLevel_20
 {
 	unsigned int severity;											// Required. The Charging Station SHALL only report events with a severity number lower than or equal to this severity.
 	unsigned char Response_status[16];         						// Required. Indicates whether the Charging Station was able to accept the request.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct SetNetworkProfile_20
@@ -4848,18 +5121,21 @@ struct SetNetworkProfile_20
 	unsigned int configurationSlot;									// Required. Slot in which the configuration should be stored.
 	struct NetworkConnectionProfileType connectionData;				// Required. Connection details.
 	unsigned char Response_status[16];									// Required. Result of operation.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct SetVariableMonitoring_20
 {
 	struct SetMonitoringDataType setMonitoringData[10];				// Required. List of MonitoringData containing monitoring settings.
 	struct SetMonitoringResultType Response_setMonitoringResult[10];// Required. List of result statuses per monitor.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct SetVariables_20
 {
 	struct SetVariableDataType setVariableData[10];					// Required. List of Component-Variable pairs and attribute values to set.
 	struct SetVariableResultType Response_setVariableResult[10];	// Required. List of result statuses per Component-Variable.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct SignCertificate_20
@@ -4902,6 +5178,7 @@ struct TriggerMessage_20
 	unsigned char requestedMessage[32];								// Required. Type of message to be triggered.
 	struct EVSEType evse;											// Optional. Can be used to specifiy the EVSE and Connector if required for the message which needs to be sent.
 	unsigned char Response_status[16];								// Required. Indicates whether the Charging Station will send the requested notification or not.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct UnlockConnector_20
@@ -4909,12 +5186,14 @@ struct UnlockConnector_20
 	unsigned int evseId;											// Required. This contains the identifier of the EVSE for which a connector needs to be unlocked.
 	unsigned char connectorId;										// Required. This contains the identifier of the connector that needs to be unlocked.
 	unsigned char Response_status[32];								// Required. This indicates whether the Charging Station has unlocked the connector.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct UnpublishFirmware_20
 {
 	unsigned char checksum[32];										// Required. The MD5 checksum over the entire firmware file as a hexadecimal string of length 32.
 	unsigned char Response_status[16];								// Required. Indicates whether the Local Controller succeeded in unpublishing the firmware.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 struct UpdateFirmware_20
@@ -4924,230 +5203,33 @@ struct UpdateFirmware_20
 	unsigned int requestId;											// Required. The Id of this request
 	struct FirmwareType firmware;									// Required. Specifies the firmware to be updated on the Charging Station.
 	unsigned char Response_status[32];								// Required. This field indicates whether the Charging Station was able to accept the request.
+	unsigned char guid[37];											// Save guid from server request
 };
 
 /*
  *  =============== Controller component ===============
  */
-enum OCPPCommCtrlrVariable
-{
-	OCPPCommCtrlr_ActiveNetworkProfile=0,
-	OCPPCommCtrlr_MessageTimeout,
-	OCPPCommCtrlr_FileTransferProtocols,
-	OCPPCommCtrlr_HeartbeatInterval,
-	OCPPCommCtrlr_NetworkConfigurationPriority,
-	OCPPCommCtrlr_NetworkProfileConnectionAttempts,
-	OCPPCommCtrlr_OfflineThreshold,
-	OCPPCommCtrlr_QueueAllMessages,
-	OCPPCommCtrlr_MessageAttempts,
-	OCPPCommCtrlr_MessageAttemptInterval,
-	OCPPCommCtrlr_UnlockOnEVSideDisconnect,
-	OCPPCommCtrlr_WebSocketPingInterval,
-	OCPPCommCtrlr_ResetRetries,
-	OCPPCommCtrlr_PublicKeyWithSignedMeterValue
-};
-
-enum DeviceDataCtrlrVariable
-{
-	DeviceDataCtrlr_GetReport_ItemsPerMessage=0,
-	DeviceDataCtrlr_GetVariables_ItemsPerMessage,
-	DeviceDataCtrlr_GetReport_BytesPerMessage,
-	DeviceDataCtrlr_GetVariables_BytesPerMessage,
-	DeviceDataCtrlr_ConfigurationValueSize,
-	DeviceDataCtrlr_ReportingValueSize,
-	DeviceDataCtrlr_SetVariables_ItemsPerMessage,
-	DeviceDataCtrlr_SetVariables_BytesPerMessage
-};
-
-enum ClockCtrlrVariable
-{
-	ClockCtrlr_DateTime=0,
-	ClockCtrlr_NtpSource,
-	ClockCtrlr_NtpServerUri,
-	ClockCtrlr_TimeOffset,
-	ClockCtrlr_NextTimeOffsetTransitionDateTime,
-	ClockCtrlr_NextTransition_TimeOffset,
-	ClockCtrlr_TimeSource,
-	ClockCtrlr_TimeZone
-};
-
-enum SecurityCtrlrVariable
-{
-	SecurityCtrlr_BasicAuthPassword=0,
-	SecurityCtrlr_Identity,
-	SecurityCtrlr_OrganizationName,
-	SecurityCtrlr_CertificateEntries,
-	SecurityCtrlr_SecurityProfile,
-	SecurityCtrlr_AdditionalRootCertificateCheck
-};
-
-enum AuthCtrlrVariable
-{
-	AuthCtrlr_Enabled=0,
-	AuthCtrlr_AdditionalInfoItemsPerMessage,
-	AuthCtrlr_OfflineTxForUnknownIdEnabled,
-	AuthCtrlr_AuthorizeRemoteStart,
-	AuthCtrlr_LocalAuthorizeOffline,
-	AuthCtrlr_LocalPreAuthorize,
-	AuthCtrlr_MasterPassGroupId
-};
-
-enum AuthCacheCtrlrVariable
-{
-	AuthCacheCtrlr_Enabled=0,
-	AuthCacheCtrlr_Available,
-	AuthCacheCtrlr_LifeTime,
-	AuthCacheCtrlr_Storage,
-	AuthCacheCtrlr_Policy
-};
-
-enum LocalAuthListCtrlrVariable
-{
-	LocalAuthListCtrlr_Enabled=0,
-	LocalAuthListCtrlr_Entries,
-	LocalAuthListCtrlr_Available,
-	LocalAuthListCtrlr_ItemsPerMessage,
-	LocalAuthListCtrlr_BytesPerMessage,
-	LocalAuthListCtrlr_Storage
-};
-
-enum TxCtrlrVariable
-{
-	TxCtrlr_ChargingBeforeAcceptedEnabled=0,
-	TxCtrlr_EVConnectionTimeOut,
-	TxCtrlr_StopTxOnEVSideDisconnect,
-	TxCtrlr_TxBeforeAcceptedEnabled,
-	TxCtrlr_TxStartPoint,
-	TxCtrlr_TxStopPoint,
-	TxCtrlr_MaxEnergyOnInvalidId,
-	TxCtrlr_StopTxOnInvalidId
-};
-
-enum SampledDataCtrlrVariable
-{
-	SampledDataCtrlr_Enabled=0,
-	SampledDataCtrlr_Available,
-	SampledDataCtrlr_SignReadings,
-	SampledDataCtrlr_TxEndedMeasurands,
-	SampledDataCtrlr_TxEndedInterval,
-	SampledDataCtrlr_TxStartedMeasurands,
-	SampledDataCtrlr_TxUpdatedMeasurands,
-	SampledDataCtrlr_TxUpdatedInterval
-};
-
-enum AlignedDataCtrlrVariable
-{
-	AlignedDataCtrlr_Enabled=0,
-	AlignedDataCtrlr_Available,
-	AlignedDataCtrlr_Measurands,
-	AlignedDataCtrlr_Interval,
-	AlignedDataCtrlr_SendDuringIdle,
-	AlignedDataCtrlr_SignReadings,
-	AlignedDataCtrlr_TxEndedMeasurands,
-	AlignedDataCtrlr_TxEndedInterval
-};
-
-enum ReservationCtrlrVariable
-{
-	ReservationCtrlr_Enabled=0,
-	ReservationCtrlr_Available,
-	ReservationCtrlr_NonEvseSpecific
-};
-
-enum SmartChargingCtrlrVariable
-{
-	SmartChargingCtrlr_Enabled=0,
-	SmartChargingCtrlr_Available,
-	SmartChargingCtrlr_ACPhaseSwitchingSupported,
-	SmartChargingCtrlr_ProfileStackLevel,
-	SmartChargingCtrlr_RateUnit,
-	SmartChargingCtrlr_PeriodsPerSchedule,
-	SmartChargingCtrlr_ExternalControlSignalsEnabled,
-	SmartChargingCtrlr_NotifyChargingLimitWithSchedules,
-	SmartChargingCtrlr_Phases3to1,
-	SmartChargingCtrlr_Entries,
-	SmartChargingCtrlr_LimitChangeSignificance
-};
-
-enum TariffCostCtrlrVariable
-{
-	Tariff_Enabled=0,
-	Tariff_Available,
-	Tariff_TariffFallbackMessage,
-	Cost_Enabled,
-	Cost_Available,
-	Cost_TotalCostFallbackMessage,
-	Cost_Currency
-};
-
-enum MonitoringCtrlrVariable
-{
-	MonitoringCtrlr_Enabled=0,
-	MonitoringCtrlr_Available,
-	MonitoringCtrlr_ClearVariableMonitoring_ItemsPerMessage,
-	MonitoringCtrlr_SetVariableMonitoring_ItemsPerMessage,
-	MonitoringCtrlr_ClearVariableMonitoring_BytesPerMessage,
-	MonitoringCtrlr_SetVariableMonitoring_BytesPerMessage,
-	MonitoringCtrlr_OfflineQueuingSeverity
-};
-
-enum DisplayMessageCtrlrVariable
-{
-	DisplayMessageCtrlr_Enabled=0,
-	DisplayMessageCtrlr_Available,
-	DisplayMessageCtrlr_DisplayMessages,
-	DisplayMessageCtrlr_SupportedFormats,
-	DisplayMessageCtrlr_SupportedPriorities
-};
-
-enum CustomizationCtrlrVariable
-{
-	CustomizationCtrlr_CustomImplementationEnabled=0
-};
-
-enum ChargingStationVariable
-{
-	ChargingStation_Available=0,
-	ChargingStation_AvailabilityState,
-	ChargingStation_SupplyPhases
-};
-
-enum EVSEVariable
-{
-	EVSE_Available=0,
-	EVSE_AvailabilityState,
-	EVSE_SupplyPhases,
-	EVSE_Power
-};
-
-enum ConnectorVariable
-{
-	Connector_Available=0,
-	Connector_ConnectorType,
-	Connector_SupplyPhases
-};
-
 struct OCPP20ControllerConponent
 {
-	struct ReportDataType OCPPCommCtrlr[14];
-	struct ReportDataType DeviceDataCtrlr[6];
-	struct ReportDataType ClockCtrlr[8];
-	struct ReportDataType SecurityCtrlr[6];
-	struct ReportDataType AuthCtrlr[7];
-	struct ReportDataType AuthCacheCtrlr[5];
-	struct ReportDataType LocalAuthListCtrlr[6];
-	struct ReportDataType TxCtrlr[8];
-	struct ReportDataType SampledDataCtrlr[8];
-	struct ReportDataType AlignedDataCtrlr[8];
-	struct ReportDataType ReservationCtrlr[3];
-	struct ReportDataType SmartChargingCtrlr[11];
-	struct ReportDataType TariffCostCtrlr[7];
-	struct ReportDataType MonitoringCtrlr[7];
-	struct ReportDataType DisplayMessageCtrlr[5];
-	struct ReportDataType CustomizationCtrlr[1];
-	struct ReportDataType ChargingStation[3];
-	struct ReportDataType EVSE[4];
-	struct ReportDataType Connector[4];
+	struct ReportDataType AlignedDataCtrlr[AlignedDataCtrlr_CNT];
+	struct ReportDataType AuthCacheCtrlr[AuthCacheCtrlr_CNT];
+	struct ReportDataType AuthCtrlr[AuthCtrlr_CNT];
+	struct ReportDataType ChargingStation[ChargingStation_CNT];
+	struct ReportDataType ClockCtrlr[ClockCtrlr_CNT];
+	struct ReportDataType Connector[Connector_CNT];
+	struct ReportDataType CustomizationCtrlr[CustomizationCtrlr_CNT];
+	struct ReportDataType DeviceDataCtrlr[DeviceDataCtrlr_CNT];
+	struct ReportDataType DisplayMessageCtrlr[DisplayMessageCtrlr_CNT];
+	struct ReportDataType EVSE[EVSE_CNT];
+	struct ReportDataType LocalAuthListCtrlr[LocalAuthListCtrlr_CNT];
+	struct ReportDataType MonitoringCtrlr[MonitoringCtrlr_CNT];
+	struct ReportDataType OCPPCommCtrlr[OCPPCommCtrlr_CNT];
+	struct ReportDataType ReservationCtrlr[ReservationCtrlr_CNT];
+	struct ReportDataType SampledDataCtrlr[SampledDataCtrlr_CNT];
+	struct ReportDataType SecurityCtrlr[SecurityCtrlr_CNT];
+	struct ReportDataType SmartChargingCtrlr[SmartChargingCtrlr_CNT];
+	struct ReportDataType TariffCostCtrlr[TariffCostCtrlr_CNT];
+	struct ReportDataType TxCtrlr[TxCtrlr_CNT];
 };
 
 struct OCPP20Data