You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by hu...@apache.org on 2021/03/16 10:42:32 UTC
[plc4x] 01/02: Merge branch 'develop' into feature/string_enum_mspec
This is an automated email from the ASF dual-hosted git repository.
hutcheb pushed a commit to branch feature/string_enum_mspec
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 5857e91b2d2d09002c128b2429378ec5a7c8000e
Merge: 1431989 4b41850
Author: hutcheb <be...@gmail.com>
AuthorDate: Mon Mar 15 05:29:37 2021 -0400
Merge branch 'develop' into feature/string_enum_mspec
.editorconfig | 6 +
.../BaseFreemarkerLanguageTemplateHelper.java | 1 -
.../resources/templates/c/data-io-template-c.ftlh | 2 +-
.../resources/templates/c/pojo-template-c.ftlh | 14 +-
.../language/go/GoLanguageTemplateHelper.java | 65 +-
.../resources/templates/go/data-io-template.ftlh | 312 +-
.../main/resources/templates/go/enum-template.ftlh | 118 +-
.../resources/templates/go/model-template.ftlh | 1149 +-
.../templates/go/parser-factory-template.ftlh | 47 +-
.../templates/go/xml-parser-factory-template.ftlh | 33 +-
.../language/java/JavaLanguageTemplateHelper.java | 146 +-
.../resources/templates/java/pojo-template.ftlh | 4 +
plc4go/Makefile | 95 +
.../protocols/ads/AdsDiscoverySerializerTest.xml | 377 +
.../testing}/protocols/ads/DriverTestsuite.xml | 14 +-
.../protocols/ads/ParserSerializerTestsuite.xml | 414 +
.../testing/protocols/modbus/DriverTestsuite.xml | 8 +-
.../testing/protocols/s7/DriverTestsuite.xml | 8 +-
plc4go/cmd/main/drivers/knxnetip_test.go | 525 -
plc4go/cmd/main/drivers/modbus_test.go | 213 -
.../{modbus_driver_test.go => ads_driver_test.go} | 13 +-
...lizer_test.go => ads_parser_serializer_test.go} | 11 +-
.../cmd/main/drivers/tests/knx_discovery_test.go | 613 -
.../cmd/main/drivers/tests/modbus_driver_test.go | 10 +-
.../drivers/tests/modbus_parser_serializer_test.go | 8 +-
.../{modbus_driver_test.go => s7_driver_test.go} | 13 +-
...alizer_test.go => s7_parser_serializer_test.go} | 11 +-
.../discovery/hello_world_plc4go_knx_discovery.go | 99 -
.../discovery/hello_world_plc4go_knx_discovery.go | 165 +
.../hello_world_plc4go_knx_read_group_address.go} | 35 +-
.../hello_world_plc4go_knx_subscription.go | 114 +
plc4go/examples/read/hello_world_plc4go_read.go | 10 +-
plc4go/examples/write/hello_world_plc4go_write.go | 10 +-
plc4go/go.mod | 4 +-
plc4go/go.sum | 21 +-
.../plc4go/ads/AdsDriver.go} | 28 +-
.../plc4go/ads/AdsFieldHandler.go} | 22 +-
.../internal/plc4go/ads/readwrite/ParserHelper.go | 67 +
.../plc4go/ads/readwrite/XmlParserHelper.go | 113 +
.../model/AdsAddDeviceNotificationRequest.go | 335 +
.../model/AdsAddDeviceNotificationResponse.go | 195 +
.../internal/plc4go/ads/readwrite/model/AdsData.go | 448 +
.../plc4go/ads/readwrite/model/AdsDataType.go | 702 +
.../model/AdsDeleteDeviceNotificationRequest.go | 168 +
.../model/AdsDeleteDeviceNotificationResponse.go | 167 +
.../model/AdsDeviceNotificationRequest.go | 242 +
.../model/AdsDeviceNotificationResponse.go | 139 +
.../readwrite/model/AdsInvalidRequest.go} | 91 +-
.../ads/readwrite/model/AdsInvalidResponse.go | 139 +
.../ads/readwrite/model/AdsMultiRequestItem.go | 209 +
.../ads/readwrite/model/AdsMultiRequestItemRead.go | 220 +
.../model/AdsMultiRequestItemReadWrite.go | 248 +
.../readwrite/model/AdsMultiRequestItemWrite.go | 220 +
.../ads/readwrite/model/AdsNotificationSample.go | 213 +
.../readwrite/model/AdsReadDeviceInfoRequest.go | 139 +
.../readwrite/model/AdsReadDeviceInfoResponse.go | 298 +
.../plc4go/ads/readwrite/model/AdsReadRequest.go | 224 +
.../plc4go/ads/readwrite/model/AdsReadResponse.go | 230 +
.../ads/readwrite/model/AdsReadStateRequest.go | 139 +
.../ads/readwrite/model/AdsReadStateResponse.go | 223 +
.../ads/readwrite/model/AdsReadWriteRequest.go | 335 +
.../ads/readwrite/model/AdsReadWriteResponse.go | 230 +
.../plc4go/ads/readwrite/model/AdsStampHeader.go | 212 +
.../plc4go/ads/readwrite/model/AdsStaticHelper.go} | 14 +-
.../ads/readwrite/model/AdsWriteControlRequest.go | 259 +
.../ads/readwrite/model/AdsWriteControlResponse.go | 167 +
.../plc4go/ads/readwrite/model/AdsWriteRequest.go | 259 +
.../readwrite/model/AdsWriteResponse.go} | 97 +-
.../plc4go/ads/readwrite/model/AmsNetId.go | 272 +
.../plc4go/ads/readwrite/model/AmsPacket.go | 361 +
.../readwrite/model/AmsSerialAcknowledgeFrame.go | 272 +
.../plc4go/ads/readwrite/model/AmsSerialFrame.go | 297 +
.../ads/readwrite/model/AmsSerialResetFrame.go | 272 +
.../plc4go/ads/readwrite/model/AmsTCPPacket.go | 183 +
.../plc4go/ads/readwrite/model/CommandId.go | 153 +
.../plc4go/ads/readwrite/model/DataItem.go | 339 +
.../ads/readwrite/model/ReservedIndexGroups.go | 293 +
.../plc4go/ads/readwrite/model/ReturnCode.go | 937 +
.../internal/plc4go/ads/readwrite/model/State.go | 376 +
.../plc4go/bacnetip/readwrite/ParserHelper.go | 105 +-
.../plc4go/bacnetip/readwrite/XmlParserHelper.go | 185 +-
.../plc4go/bacnetip/readwrite/model/APDU.go | 437 +-
.../plc4go/bacnetip/readwrite/model/APDUAbort.go | 350 +-
.../bacnetip/readwrite/model/APDUComplexAck.go | 546 +-
.../readwrite/model/APDUConfirmedRequest.go | 708 +-
.../plc4go/bacnetip/readwrite/model/APDUError.go | 294 +-
.../plc4go/bacnetip/readwrite/model/APDUReject.go | 296 +-
.../bacnetip/readwrite/model/APDUSegmentAck.go | 458 +-
.../bacnetip/readwrite/model/APDUSimpleAck.go | 296 +-
.../readwrite/model/APDUUnconfirmedRequest.go | 240 +-
.../bacnetip/readwrite/model/ApplicationTag.go | 240 +-
.../bacnetip/readwrite/model/BACnetAddress.go | 243 +-
.../readwrite/model/BACnetConfirmedServiceACK.go | 605 +-
.../BACnetConfirmedServiceACKAtomicReadFile.go | 132 +-
.../BACnetConfirmedServiceACKAtomicWriteFile.go | 132 +-
...tConfirmedServiceACKConfirmedPrivateTransfer.go | 132 +-
.../model/BACnetConfirmedServiceACKCreateObject.go | 132 +-
.../BACnetConfirmedServiceACKGetAlarmSummary.go | 132 +-
...ACnetConfirmedServiceACKGetEnrollmentSummary.go | 132 +-
...BACnetConfirmedServiceACKGetEventInformation.go | 132 +-
.../model/BACnetConfirmedServiceACKReadProperty.go | 132 +-
...ACnetConfirmedServiceACKReadPropertyMultiple.go | 132 +-
.../model/BACnetConfirmedServiceACKReadRange.go | 132 +-
...BACnetConfirmedServiceACKRemovedAuthenticate.go | 132 +-
...rmedServiceACKRemovedReadPropertyConditional.go | 132 +-
.../model/BACnetConfirmedServiceACKVTData.go | 132 +-
.../model/BACnetConfirmedServiceACKVTOpen.go | 132 +-
.../model/BACnetConfirmedServiceRequest.go | 1081 +-
...ACnetConfirmedServiceRequestAcknowledgeAlarm.go | 132 +-
.../BACnetConfirmedServiceRequestAddListElement.go | 132 +-
.../BACnetConfirmedServiceRequestAtomicReadFile.go | 132 +-
...BACnetConfirmedServiceRequestAtomicWriteFile.go | 132 +-
...firmedServiceRequestConfirmedCOVNotification.go | 853 +-
...rviceRequestConfirmedCOVNotificationMultiple.go | 132 +-
...rmedServiceRequestConfirmedEventNotification.go | 132 +-
...firmedServiceRequestConfirmedPrivateTransfer.go | 132 +-
...tConfirmedServiceRequestConfirmedTextMessage.go | 132 +-
.../BACnetConfirmedServiceRequestCreateObject.go | 132 +-
.../BACnetConfirmedServiceRequestDeleteObject.go | 132 +-
...rmedServiceRequestDeviceCommunicationControl.go | 132 +-
...tConfirmedServiceRequestGetEnrollmentSummary.go | 132 +-
...etConfirmedServiceRequestGetEventInformation.go | 132 +-
...etConfirmedServiceRequestLifeSafetyOperation.go | 132 +-
.../BACnetConfirmedServiceRequestReadProperty.go | 461 +-
...tConfirmedServiceRequestReadPropertyMultiple.go | 132 +-
.../BACnetConfirmedServiceRequestReadRange.go | 132 +-
...netConfirmedServiceRequestReinitializeDevice.go | 132 +-
...CnetConfirmedServiceRequestRemoveListElement.go | 132 +-
...etConfirmedServiceRequestRemovedAuthenticate.go | 132 +-
...ServiceRequestRemovedReadPropertyConditional.go | 132 +-
...CnetConfirmedServiceRequestRemovedRequestKey.go | 132 +-
.../BACnetConfirmedServiceRequestSubscribeCOV.go | 671 +-
...tConfirmedServiceRequestSubscribeCOVProperty.go | 132 +-
...edServiceRequestSubscribeCOVPropertyMultiple.go | 132 +-
.../model/BACnetConfirmedServiceRequestVTClose.go | 132 +-
.../model/BACnetConfirmedServiceRequestVTData.go | 132 +-
.../model/BACnetConfirmedServiceRequestVTOpen.go | 132 +-
.../BACnetConfirmedServiceRequestWriteProperty.go | 661 +-
...ConfirmedServiceRequestWritePropertyMultiple.go | 132 +-
.../plc4go/bacnetip/readwrite/model/BACnetError.go | 605 +-
.../readwrite/model/BACnetErrorAtomicReadFile.go | 132 +-
.../readwrite/model/BACnetErrorAtomicWriteFile.go | 132 +-
.../model/BACnetErrorConfirmedPrivateTransfer.go | 132 +-
.../readwrite/model/BACnetErrorCreateObject.go | 132 +-
.../readwrite/model/BACnetErrorGetAlarmSummary.go | 132 +-
.../model/BACnetErrorGetEnrollmentSummary.go | 132 +-
.../model/BACnetErrorGetEventInformation.go | 132 +-
.../readwrite/model/BACnetErrorReadProperty.go | 495 +-
.../model/BACnetErrorReadPropertyMultiple.go | 132 +-
.../readwrite/model/BACnetErrorReadRange.go | 132 +-
.../model/BACnetErrorRemovedAuthenticate.go | 132 +-
.../BACnetErrorRemovedReadPropertyConditional.go | 132 +-
.../bacnetip/readwrite/model/BACnetErrorVTData.go | 132 +-
.../bacnetip/readwrite/model/BACnetErrorVTOpen.go | 132 +-
.../bacnetip/readwrite/model/BACnetNetworkType.go | 212 +-
.../bacnetip/readwrite/model/BACnetNodeType.go | 366 +-
.../bacnetip/readwrite/model/BACnetNotifyType.go | 100 +-
.../bacnetip/readwrite/model/BACnetObjectType.go | 884 +-
.../bacnetip/readwrite/model/BACnetServiceAck.go | 605 +-
.../model/BACnetServiceAckAtomicReadFile.go | 132 +-
.../model/BACnetServiceAckAtomicWriteFile.go | 132 +-
.../BACnetServiceAckConfirmedPrivateTransfer.go | 132 +-
.../model/BACnetServiceAckCreateObject.go | 132 +-
.../model/BACnetServiceAckGetAlarmSummary.go | 132 +-
.../model/BACnetServiceAckGetEnrollmentSummary.go | 132 +-
.../model/BACnetServiceAckGetEventInformation.go | 132 +-
.../model/BACnetServiceAckReadProperty.go | 581 +-
.../model/BACnetServiceAckReadPropertyMultiple.go | 132 +-
.../readwrite/model/BACnetServiceAckReadRange.go | 132 +-
.../model/BACnetServiceAckRemovedAuthenticate.go | 132 +-
...CnetServiceAckRemovedReadPropertyConditional.go | 132 +-
.../readwrite/model/BACnetServiceAckVTData.go | 132 +-
.../readwrite/model/BACnetServiceAckVTOpen.go | 132 +-
.../plc4go/bacnetip/readwrite/model/BACnetTag.go | 849 +-
.../model/BACnetTagApplicationBitString.go | 293 +-
.../readwrite/model/BACnetTagApplicationBoolean.go | 140 +-
.../model/BACnetTagApplicationCharacterString.go | 140 +-
.../readwrite/model/BACnetTagApplicationDate.go | 140 +-
.../readwrite/model/BACnetTagApplicationDouble.go | 198 +-
.../model/BACnetTagApplicationEnumerated.go | 239 +-
.../readwrite/model/BACnetTagApplicationNull.go | 140 +-
.../model/BACnetTagApplicationObjectIdentifier.go | 140 +-
.../model/BACnetTagApplicationOctetString.go | 140 +-
.../readwrite/model/BACnetTagApplicationReal.go | 198 +-
.../model/BACnetTagApplicationSignedInteger.go | 239 +-
.../readwrite/model/BACnetTagApplicationTime.go | 140 +-
.../model/BACnetTagApplicationUnsignedInteger.go | 239 +-
.../bacnetip/readwrite/model/BACnetTagContext.go | 239 +-
.../readwrite/model/BACnetTagWithContent.go | 601 +-
.../model/BACnetUnconfirmedServiceRequest.go | 549 +-
.../model/BACnetUnconfirmedServiceRequestIAm.go | 637 +-
.../model/BACnetUnconfirmedServiceRequestIHave.go | 132 +-
...UnconfirmedServiceRequestTimeSynchronization.go | 132 +-
...onfirmedServiceRequestUTCTimeSynchronization.go | 132 +-
...rmedServiceRequestUnconfirmedCOVNotification.go | 132 +-
...iceRequestUnconfirmedCOVNotificationMultiple.go | 132 +-
...edServiceRequestUnconfirmedEventNotification.go | 132 +-
...rmedServiceRequestUnconfirmedPrivateTransfer.go | 479 +-
...onfirmedServiceRequestUnconfirmedTextMessage.go | 132 +-
.../model/BACnetUnconfirmedServiceRequestWhoHas.go | 529 +-
.../model/BACnetUnconfirmedServiceRequestWhoIs.go | 495 +-
.../BACnetUnconfirmedServiceRequestWriteGroup.go | 132 +-
.../plc4go/bacnetip/readwrite/model/BVLC.go | 651 +-
.../model/BVLCDeleteForeignDeviceTableEntry.go | 132 +-
.../model/BVLCDistributeBroadcastToNetwork.go | 132 +-
.../bacnetip/readwrite/model/BVLCForwardedNPDU.go | 330 +-
.../readwrite/model/BVLCOriginalBroadcastNPDU.go | 186 +-
.../readwrite/model/BVLCOriginalUnicastNPDU.go | 186 +-
.../model/BVLCReadBroadcastDistributionTable.go | 132 +-
.../model/BVLCReadBroadcastDistributionTableAck.go | 132 +-
.../readwrite/model/BVLCReadForeignDeviceTable.go | 132 +-
.../model/BVLCReadForeignDeviceTableAck.go | 132 +-
.../readwrite/model/BVLCRegisterForeignDevice.go | 132 +-
.../plc4go/bacnetip/readwrite/model/BVLCResult.go | 132 +-
.../bacnetip/readwrite/model/BVLCSecureBVLL.go | 132 +-
.../model/BVLCWideBroadcastDistributionTable.go | 132 +-
.../plc4go/bacnetip/readwrite/model/NLM.go | 345 +-
.../readwrite/model/NLMIAmRouterToNetwork.go | 228 +-
.../readwrite/model/NLMWhoIsRouterToNetwork.go | 228 +-
.../plc4go/bacnetip/readwrite/model/NPDU.go | 1149 +-
plc4go/internal/plc4go/knxnetip/KnxNetIpBrowser.go | 365 +-
.../internal/plc4go/knxnetip/KnxNetIpConnection.go | 2131 +-
.../internal/plc4go/knxnetip/KnxNetIpDiscoverer.go | 4 +-
plc4go/internal/plc4go/knxnetip/KnxNetIpField.go | 562 +-
.../plc4go/knxnetip/KnxNetIpFieldHandler.go | 203 +-
.../plc4go/knxnetip/KnxNetIpMessageCodec.go | 48 +-
plc4go/internal/plc4go/knxnetip/KnxNetIpReader.go | 506 +-
.../internal/plc4go/knxnetip/KnxNetIpSubscriber.go | 179 +-
.../plc4go/knxnetip/KnxNetIpValueDecoder.go} | 33 +-
plc4go/internal/plc4go/knxnetip/KnxNetIpWriter.go | 4 +-
plc4go/internal/plc4go/knxnetip/Utils.go | 56 +-
.../plc4go/knxnetip/readwrite/ParserHelper.go | 186 +-
.../plc4go/knxnetip/readwrite/XmlParserHelper.go | 465 +-
.../plc4go/knxnetip/readwrite/model/AccessLevel.go | 177 +
.../plc4go/knxnetip/readwrite/model/Apdu.go | 361 +-
.../plc4go/knxnetip/readwrite/model/ApduControl.go | 329 +-
.../knxnetip/readwrite/model/ApduControlAck.go | 132 +-
.../knxnetip/readwrite/model/ApduControlConnect.go | 132 +-
.../readwrite/model/ApduControlContainer.go | 188 +-
.../readwrite/model/ApduControlDisconnect.go | 132 +-
.../knxnetip/readwrite/model/ApduControlNack.go | 132 +-
.../plc4go/knxnetip/readwrite/model/ApduData.go | 661 +-
.../knxnetip/readwrite/model/ApduDataAdcRead.go | 132 +-
.../readwrite/model/ApduDataAdcResponse.go | 132 +-
.../knxnetip/readwrite/model/ApduDataContainer.go | 188 +-
.../model/ApduDataDeviceDescriptorRead.go | 192 +-
.../model/ApduDataDeviceDescriptorResponse.go | 283 +-
.../plc4go/knxnetip/readwrite/model/ApduDataExt.go | 1361 +-
.../readwrite/model/ApduDataExtAuthorizeRequest.go | 209 +-
.../model/ApduDataExtAuthorizeResponse.go | 165 +-
.../model/ApduDataExtDomainAddressRead.go | 132 +-
.../model/ApduDataExtDomainAddressResponse.go | 132 +-
.../model/ApduDataExtDomainAddressSelectiveRead.go | 132 +-
.../ApduDataExtDomainAddressSerialNumberRead.go | 132 +-
...ApduDataExtDomainAddressSerialNumberResponse.go | 132 +-
.../ApduDataExtDomainAddressSerialNumberWrite.go | 132 +-
.../model/ApduDataExtDomainAddressWrite.go | 132 +-
.../model/ApduDataExtFileStreamInfoReport.go | 132 +-
.../ApduDataExtGroupPropertyValueInfoReport.go | 132 +-
.../model/ApduDataExtGroupPropertyValueRead.go | 132 +-
.../model/ApduDataExtGroupPropertyValueResponse.go | 132 +-
.../model/ApduDataExtGroupPropertyValueWrite.go | 132 +-
...ApduDataExtIndividualAddressSerialNumberRead.go | 132 +-
...DataExtIndividualAddressSerialNumberResponse.go | 132 +-
...pduDataExtIndividualAddressSerialNumberWrite.go | 132 +-
.../readwrite/model/ApduDataExtKeyResponse.go | 132 +-
.../readwrite/model/ApduDataExtKeyWrite.go | 132 +-
.../readwrite/model/ApduDataExtLinkRead.go | 132 +-
.../readwrite/model/ApduDataExtLinkResponse.go | 132 +-
.../readwrite/model/ApduDataExtLinkWrite.go | 132 +-
.../readwrite/model/ApduDataExtMemoryBitWrite.go | 132 +-
.../model/ApduDataExtNetworkParameterRead.go | 132 +-
.../model/ApduDataExtNetworkParameterResponse.go | 132 +-
.../model/ApduDataExtNetworkParameterWrite.go | 132 +-
.../model/ApduDataExtOpenRoutingTableRequest.go | 132 +-
.../model/ApduDataExtPropertyDescriptionRead.go | 221 +-
.../ApduDataExtPropertyDescriptionResponse.go | 407 +-
.../model/ApduDataExtPropertyValueRead.go | 354 +-
.../model/ApduDataExtPropertyValueResponse.go | 440 +-
.../model/ApduDataExtPropertyValueWrite.go | 293 +-
.../model/ApduDataExtReadRouterMemoryRequest.go | 132 +-
.../model/ApduDataExtReadRouterMemoryResponse.go | 132 +-
.../model/ApduDataExtReadRouterStatusRequest.go | 132 +-
.../model/ApduDataExtReadRouterStatusResponse.go | 132 +-
.../model/ApduDataExtReadRoutingTableRequest.go | 132 +-
.../model/ApduDataExtReadRoutingTableResponse.go | 132 +-
.../model/ApduDataExtWriteRouterMemoryRequest.go | 132 +-
.../model/ApduDataExtWriteRouterStatusRequest.go | 132 +-
.../model/ApduDataExtWriteRoutingTableRequest.go | 132 +-
.../readwrite/model/ApduDataGroupValueRead.go | 161 +-
.../readwrite/model/ApduDataGroupValueResponse.go | 216 +-
.../readwrite/model/ApduDataGroupValueWrite.go | 283 +-
.../model/ApduDataIndividualAddressRead.go | 132 +-
.../model/ApduDataIndividualAddressResponse.go | 132 +-
.../model/ApduDataIndividualAddressWrite.go | 132 +-
.../knxnetip/readwrite/model/ApduDataMemoryRead.go | 246 +-
.../readwrite/model/ApduDataMemoryResponse.go | 308 +-
.../readwrite/model/ApduDataMemoryWrite.go | 132 +-
.../knxnetip/readwrite/model/ApduDataOther.go | 186 +-
.../knxnetip/readwrite/model/ApduDataRestart.go | 132 +-
.../readwrite/model/ApduDataUserMessage.go | 132 +-
.../plc4go/knxnetip/readwrite/model/CEMI.go | 857 +-
.../readwrite/model/CEMIAdditionalInformation.go | 273 +-
.../CEMIAdditionalInformationBusmonitorInfo.go | 498 +-
.../CEMIAdditionalInformationRelativeTimestamp.go | 226 +-
.../knxnetip/readwrite/model/CEMIPriority.go | 114 +-
.../knxnetip/readwrite/model/ChannelInformation.go | 207 +-
.../knxnetip/readwrite/model/ComObjectTable.go | 209 +
.../readwrite/model/ComObjectTableAddresses.go | 18858 ++++++++++++++++
.../model/ComObjectTableRealisationType1.go | 238 +
.../model/ComObjectTableRealisationType2.go | 238 +
.../model/ComObjectTableRealisationType6.go | 163 +
.../knxnetip/readwrite/model/ComObjectValueType.go | 257 +
.../knxnetip/readwrite/model/ConnectionRequest.go | 294 +-
.../model/ConnectionRequestInformation.go | 307 +-
...ConnectionRequestInformationDeviceManagement.go | 132 +-
...ConnectionRequestInformationTunnelConnection.go | 240 +-
.../knxnetip/readwrite/model/ConnectionResponse.go | 370 +-
.../readwrite/model/ConnectionResponseDataBlock.go | 307 +-
.../ConnectionResponseDataBlockDeviceManagement.go | 132 +-
.../ConnectionResponseDataBlockTunnelConnection.go | 186 +-
.../readwrite/model/ConnectionStateRequest.go | 294 +-
.../readwrite/model/ConnectionStateResponse.go | 244 +-
.../knxnetip/readwrite/model/DIBDeviceInfo.go | 650 +-
.../knxnetip/readwrite/model/DIBSuppSvcFamilies.go | 285 +-
.../knxnetip/readwrite/model/DescriptionRequest.go | 186 +-
.../readwrite/model/DescriptionResponse.go | 242 +-
.../readwrite/model/DeviceConfigurationAck.go | 186 +-
.../model/DeviceConfigurationAckDataBlock.go | 289 +-
.../readwrite/model/DeviceConfigurationRequest.go | 242 +-
.../model/DeviceConfigurationRequestDataBlock.go | 291 +-
.../knxnetip/readwrite/model/DeviceDescriptor.go | 537 +
.../readwrite/model/DeviceDescriptorMediumType.go | 142 +-
.../readwrite/model/DeviceDescriptorType0.go | 476 -
.../readwrite/model/DeviceDescriptorType2.go | 603 +-
.../knxnetip/readwrite/model/DeviceStatus.go | 211 +-
.../knxnetip/readwrite/model/DisconnectRequest.go | 294 +-
.../knxnetip/readwrite/model/DisconnectResponse.go | 244 +-
.../knxnetip/readwrite/model/FirmwareType.go | 313 +-
.../model/GroupObjectDescriptorRealisationType1.go | 348 +
.../model/GroupObjectDescriptorRealisationType2.go | 348 +
.../model/GroupObjectDescriptorRealisationType6.go | 115 +
.../model/GroupObjectDescriptorRealisationType7.go | 348 +
.../model/GroupObjectDescriptorRealisationTypeB.go | 322 +
.../readwrite/model/HPAIControlEndpoint.go | 287 +-
.../knxnetip/readwrite/model/HPAIDataEndpoint.go | 287 +-
.../readwrite/model/HPAIDiscoveryEndpoint.go | 287 +-
.../knxnetip/readwrite/model/HostProtocolCode.go | 86 +-
.../plc4go/knxnetip/readwrite/model/IPAddress.go | 198 +-
.../plc4go/knxnetip/readwrite/model/KnxAddress.go | 261 +-
.../knxnetip/readwrite/model/KnxDatapoint.go | 22389 +++++++++----------
.../readwrite/model/KnxDatapointMainType.go | 2183 +-
.../knxnetip/readwrite/model/KnxDatapointType.go | 12278 +++++-----
.../knxnetip/readwrite/model/KnxGroupAddress.go | 273 +-
.../readwrite/model/KnxGroupAddress2Level.go | 246 +-
.../readwrite/model/KnxGroupAddress3Level.go | 300 +-
.../readwrite/model/KnxGroupAddressFreeLevel.go | 192 +-
.../readwrite/model/KnxInterfaceObjectProperty.go | 9183 ++++----
.../readwrite/model/KnxInterfaceObjectType.go | 785 +-
.../plc4go/knxnetip/readwrite/model/KnxLayer.go | 100 +-
.../knxnetip/readwrite/model/KnxManufacturer.go | 15254 +++++++------
.../plc4go/knxnetip/readwrite/model/KnxMedium.go | 142 +-
.../knxnetip/readwrite/model/KnxNetIpCore.go | 192 +-
.../readwrite/model/KnxNetIpDeviceManagement.go | 192 +-
.../knxnetip/readwrite/model/KnxNetIpMessage.go | 765 +-
.../knxnetip/readwrite/model/KnxNetIpRouting.go | 2 +
.../knxnetip/readwrite/model/KnxNetIpTunneling.go | 192 +-
.../knxnetip/readwrite/model/KnxNetObjectServer.go | 192 +-
.../model/KnxNetRemoteConfigurationAndDiagnosis.go | 192 +-
.../readwrite/model/KnxNetRemoteLogging.go | 192 +-
.../plc4go/knxnetip/readwrite/model/KnxProperty.go | 2787 +--
.../readwrite/model/KnxPropertyDataType.go | 1848 +-
.../plc4go/knxnetip/readwrite/model/LBusmonInd.go | 396 +-
.../plc4go/knxnetip/readwrite/model/LDataCon.go | 342 +-
.../knxnetip/readwrite/model/LDataExtended.go | 535 +-
.../plc4go/knxnetip/readwrite/model/LDataFrame.go | 587 +-
.../knxnetip/readwrite/model/LDataFrameACK.go | 144 +-
.../plc4go/knxnetip/readwrite/model/LDataInd.go | 342 +-
.../plc4go/knxnetip/readwrite/model/LDataReq.go | 342 +-
.../plc4go/knxnetip/readwrite/model/LPollData.go | 395 +-
.../knxnetip/readwrite/model/LPollDataCon.go | 132 +-
.../knxnetip/readwrite/model/LPollDataReq.go | 132 +-
.../plc4go/knxnetip/readwrite/model/LRawCon.go | 132 +-
.../plc4go/knxnetip/readwrite/model/LRawInd.go | 132 +-
.../plc4go/knxnetip/readwrite/model/LRawReq.go | 132 +-
.../plc4go/knxnetip/readwrite/model/MACAddress.go | 198 +-
.../readwrite/model/MFuncPropCommandReq.go | 132 +-
.../knxnetip/readwrite/model/MFuncPropCon.go | 132 +-
.../readwrite/model/MFuncPropStateReadReq.go | 132 +-
.../knxnetip/readwrite/model/MPropInfoInd.go | 132 +-
.../knxnetip/readwrite/model/MPropReadCon.go | 462 +-
.../knxnetip/readwrite/model/MPropReadReq.go | 408 +-
.../knxnetip/readwrite/model/MPropWriteCon.go | 132 +-
.../knxnetip/readwrite/model/MPropWriteReq.go | 132 +-
.../plc4go/knxnetip/readwrite/model/MResetInd.go | 132 +-
.../plc4go/knxnetip/readwrite/model/MResetReq.go | 132 +-
.../model/ProjectInstallationIdentifier.go | 207 +-
.../knxnetip/readwrite/model/RelativeTimestamp.go | 157 +-
.../knxnetip/readwrite/model/RoutingIndication.go | 132 +-
.../knxnetip/readwrite/model/SearchRequest.go | 186 +-
.../knxnetip/readwrite/model/SearchResponse.go | 294 +-
.../plc4go/knxnetip/readwrite/model/ServiceId.go | 6 +-
.../plc4go/knxnetip/readwrite/model/Status.go | 226 +-
.../readwrite/model/SupportedPhysicalMedia.go | 673 +-
.../knxnetip/readwrite/model/TDataConnectedInd.go | 132 +-
.../knxnetip/readwrite/model/TDataConnectedReq.go | 132 +-
.../knxnetip/readwrite/model/TDataIndividualInd.go | 132 +-
.../knxnetip/readwrite/model/TDataIndividualReq.go | 132 +-
.../knxnetip/readwrite/model/TunnelingRequest.go | 242 +-
.../readwrite/model/TunnelingRequestDataBlock.go | 291 +-
.../knxnetip/readwrite/model/TunnelingResponse.go | 186 +-
.../readwrite/model/TunnelingResponseDataBlock.go | 289 +-
.../knxnetip/readwrite/model/UnknownMessage.go | 229 +-
plc4go/internal/plc4go/modbus/ModbusConnection.go | 10 +
plc4go/internal/plc4go/modbus/ModbusField.go | 17 +
.../plc4go/modbus/readwrite/ParserHelper.go | 73 +-
.../plc4go/modbus/readwrite/XmlParserHelper.go | 129 +-
.../plc4go/modbus/readwrite/model/DataItem.go | 2 +
.../modbus/readwrite/model/ModbusConstants.go | 145 +-
.../modbus/readwrite/model/ModbusDataType.go | 2 +
.../modbus/readwrite/model/ModbusErrorCode.go | 198 +-
.../plc4go/modbus/readwrite/model/ModbusPDU.go | 1335 +-
.../readwrite/model/ModbusPDUDiagnosticRequest.go | 250 +-
.../readwrite/model/ModbusPDUDiagnosticResponse.go | 250 +-
.../modbus/readwrite/model/ModbusPDUError.go | 196 +-
.../model/ModbusPDUGetComEventCounterRequest.go | 136 +-
.../model/ModbusPDUGetComEventCounterResponse.go | 250 +-
.../model/ModbusPDUGetComEventLogRequest.go | 136 +-
.../model/ModbusPDUGetComEventLogResponse.go | 425 +-
.../ModbusPDUMaskWriteHoldingRegisterRequest.go | 304 +-
.../ModbusPDUMaskWriteHoldingRegisterResponse.go | 304 +-
.../readwrite/model/ModbusPDUReadCoilsRequest.go | 250 +-
.../readwrite/model/ModbusPDUReadCoilsResponse.go | 263 +-
.../ModbusPDUReadDeviceIdentificationRequest.go | 136 +-
.../ModbusPDUReadDeviceIdentificationResponse.go | 136 +-
.../model/ModbusPDUReadDiscreteInputsRequest.go | 250 +-
.../model/ModbusPDUReadDiscreteInputsResponse.go | 263 +-
.../model/ModbusPDUReadExceptionStatusRequest.go | 136 +-
.../model/ModbusPDUReadExceptionStatusResponse.go | 196 +-
.../model/ModbusPDUReadFifoQueueRequest.go | 196 +-
.../model/ModbusPDUReadFifoQueueResponse.go | 288 +-
.../model/ModbusPDUReadFileRecordRequest.go | 280 +-
.../model/ModbusPDUReadFileRecordRequestItem.go | 311 +-
.../model/ModbusPDUReadFileRecordResponse.go | 280 +-
.../model/ModbusPDUReadFileRecordResponseItem.go | 282 +-
.../model/ModbusPDUReadHoldingRegistersRequest.go | 250 +-
.../model/ModbusPDUReadHoldingRegistersResponse.go | 263 +-
.../model/ModbusPDUReadInputRegistersRequest.go | 250 +-
.../model/ModbusPDUReadInputRegistersResponse.go | 263 +-
...sPDUReadWriteMultipleHoldingRegistersRequest.go | 479 +-
...PDUReadWriteMultipleHoldingRegistersResponse.go | 263 +-
.../model/ModbusPDUReportServerIdRequest.go | 136 +-
.../model/ModbusPDUReportServerIdResponse.go | 263 +-
.../model/ModbusPDUWriteFileRecordRequest.go | 280 +-
.../model/ModbusPDUWriteFileRecordRequestItem.go | 382 +-
.../model/ModbusPDUWriteFileRecordResponse.go | 280 +-
.../model/ModbusPDUWriteFileRecordResponseItem.go | 382 +-
.../model/ModbusPDUWriteMultipleCoilsRequest.go | 371 +-
.../model/ModbusPDUWriteMultipleCoilsResponse.go | 250 +-
...odbusPDUWriteMultipleHoldingRegistersRequest.go | 371 +-
...dbusPDUWriteMultipleHoldingRegistersResponse.go | 250 +-
.../model/ModbusPDUWriteSingleCoilRequest.go | 250 +-
.../model/ModbusPDUWriteSingleCoilResponse.go | 250 +-
.../model/ModbusPDUWriteSingleRegisterRequest.go | 250 +-
.../model/ModbusPDUWriteSingleRegisterResponse.go | 250 +-
.../modbus/readwrite/model/ModbusSerialADU.go | 359 +-
.../plc4go/modbus/readwrite/model/ModbusTcpADU.go | 325 +-
.../internal/plc4go/s7/readwrite/ParserHelper.go | 123 +-
.../plc4go/s7/readwrite/XmlParserHelper.go | 213 +-
.../plc4go/s7/readwrite/model/COTPPacket.go | 593 +-
.../readwrite/model/COTPPacketConnectionRequest.go | 302 +-
.../model/COTPPacketConnectionResponse.go | 302 +-
.../plc4go/s7/readwrite/model/COTPPacketData.go | 248 +-
.../readwrite/model/COTPPacketDisconnectRequest.go | 302 +-
.../model/COTPPacketDisconnectResponse.go | 248 +-
.../s7/readwrite/model/COTPPacketTpduError.go | 248 +-
.../plc4go/s7/readwrite/model/COTPParameter.go | 379 +-
.../s7/readwrite/model/COTPParameterCalledTsap.go | 192 +-
.../s7/readwrite/model/COTPParameterCallingTsap.go | 192 +-
.../s7/readwrite/model/COTPParameterChecksum.go | 192 +-
...COTPParameterDisconnectAdditionalInformation.go | 224 +-
.../s7/readwrite/model/COTPParameterTpduSize.go | 192 +-
.../plc4go/s7/readwrite/model/COTPProtocolClass.go | 128 +-
.../plc4go/s7/readwrite/model/COTPTpduSize.go | 219 +-
.../internal/plc4go/s7/readwrite/model/DataItem.go | 943 +-
.../s7/readwrite/model/DataTransportErrorCode.go | 142 +-
.../plc4go/s7/readwrite/model/DataTransportSize.go | 219 +-
.../plc4go/s7/readwrite/model/DeviceGroup.go | 100 +-
.../plc4go/s7/readwrite/model/MemoryArea.go | 261 +-
.../plc4go/s7/readwrite/model/S7Address.go | 245 +-
.../plc4go/s7/readwrite/model/S7AddressAny.go | 512 +-
.../plc4go/s7/readwrite/model/S7Message.go | 665 +-
.../plc4go/s7/readwrite/model/S7MessageRequest.go | 138 +-
.../plc4go/s7/readwrite/model/S7MessageResponse.go | 250 +-
.../s7/readwrite/model/S7MessageResponseData.go | 250 +-
.../plc4go/s7/readwrite/model/S7MessageUserData.go | 138 +-
.../plc4go/s7/readwrite/model/S7Parameter.go | 383 +-
.../readwrite/model/S7ParameterReadVarRequest.go | 264 +-
.../readwrite/model/S7ParameterReadVarResponse.go | 194 +-
.../model/S7ParameterSetupCommunication.go | 352 +-
.../s7/readwrite/model/S7ParameterUserData.go | 264 +-
.../s7/readwrite/model/S7ParameterUserDataItem.go | 245 +-
.../model/S7ParameterUserDataItemCPUFunctions.go | 654 +-
.../readwrite/model/S7ParameterWriteVarRequest.go | 264 +-
.../readwrite/model/S7ParameterWriteVarResponse.go | 194 +-
.../plc4go/s7/readwrite/model/S7Payload.go | 303 +-
.../s7/readwrite/model/S7PayloadReadVarResponse.go | 240 +-
.../plc4go/s7/readwrite/model/S7PayloadUserData.go | 234 +-
.../s7/readwrite/model/S7PayloadUserDataItem.go | 475 +-
...PayloadUserDataItemCpuFunctionReadSzlRequest.go | 140 +-
...ayloadUserDataItemCpuFunctionReadSzlResponse.go | 300 +-
.../s7/readwrite/model/S7PayloadWriteVarRequest.go | 240 +-
.../readwrite/model/S7PayloadWriteVarResponse.go | 230 +-
.../s7/readwrite/model/S7VarPayloadDataItem.go | 368 +-
.../s7/readwrite/model/S7VarPayloadStatusItem.go | 157 +-
.../readwrite/model/S7VarRequestParameterItem.go | 245 +-
.../model/S7VarRequestParameterItemAddress.go | 220 +-
.../plc4go/s7/readwrite/model/SzlDataTreeItem.go | 378 +-
plc4go/internal/plc4go/s7/readwrite/model/SzlId.go | 261 +-
.../s7/readwrite/model/SzlModuleTypeClass.go | 114 +-
.../plc4go/s7/readwrite/model/SzlSublist.go | 324 +-
.../plc4go/s7/readwrite/model/TPKTPacket.go | 275 +-
.../plc4go/s7/readwrite/model/TransportSize.go | 2568 ++-
.../plc4go/spi/errors/TimeoutError.go} | 14 +-
.../plc4go/spi/model/DefaultPlcReadRequest.go | 13 +-
.../spi/model/DefaultPlcSubscriptionRequest.go | 29 +-
.../plc4go/spi/model/DefaultPlcWriteRequest.go | 25 +-
.../plc4go/spi/testutils/DriverTestRunner.go | 125 +-
plc4go/internal/plc4go/spi/testutils/TestUtils.go | 10 +-
plc4go/internal/plc4go/spi/utils/CastUtils.go | 25 +
plc4go/internal/plc4go/spi/utils/ReadBuffer.go | 53 +-
plc4go/internal/plc4go/spi/utils/WriteBuffer.go | 5 +
plc4go/internal/plc4go/spi/values/BINT.go | 145 +
plc4go/internal/plc4go/spi/values/BREAL.go | 173 +
plc4go/internal/plc4go/spi/values/PlcBitString.go | 9 +-
plc4go/internal/plc4go/spi/values/PlcList.go | 2 +-
plc4go/internal/plc4go/spi/values/PlcStruct.go | 2 +-
.../internal/plc4go/spi/values/PlcValueAdapter.go | 9 +-
plc4go/internal/plc4go/spi/values/RawPlcValue.go | 91 +
plc4go/pkg/plc4go/connection.go | 2 +
plc4go/pkg/plc4go/drivers/drivers.go | 9 +
plc4go/pkg/plc4go/model/plc_browse.go | 6 +-
plc4go/pkg/plc4go/model/plc_field.go | 1 +
plc4go/pkg/plc4go/model/plc_read.go | 3 +-
plc4go/pkg/plc4go/model/plc_response_code.go | 3 +-
plc4go/pkg/plc4go/model/plc_subscription.go | 9 +-
plc4go/pkg/plc4go/model/plc_write.go | 3 +-
plc4go/pkg/plc4go/values/plc_value.go | 15 +
plc4go/pom.xml | 136 +-
.../readwrite/context/FirmataDriverContext.java | 11 +-
.../readwrite/protocol/FirmataProtocolLogic.java | 5 +-
.../hello-world-plc4x-subscription/pom.xml | 5 -
.../subscription/HelloPlc4xSubscription.java | 13 +-
plc4j/tools/connection-cache/pom.xml | 6 +-
.../plc4x/test/mapper/TestSuiteMappingModule.java | 44 +-
.../ads/src/main/resources/protocols/ads/ads.mspec | 122 +-
.../resources/protocols/ads/DriverTestsuite.xml | 14 +-
.../protocols/canopen/CANOpenDriverSDOIT.xml | 16 +-
protocols/knxnetip/pom.xml | 19 +
.../plc4x/protocol/knxnetip/KnxNetIpProtocol.java | 10 +-
.../resources/protocols/knxnetip/device-info.mspec | 1745 ++
.../resources/protocols/knxnetip/knxnetip.mspec | 254 +-
protocols/knxnetip/src/main/xslt/knx-types.xsl | 22 +-
.../protocol/knxnetip/KnxDefinitionsGenerator.java | 141 +
.../knxnetip/KnxSpecificationStoreUpdater.java | 184 +
.../knxnetip/handlers/ManufacturerIdsHandler.java | 57 +
.../handlers/ProductDescriptionHandler.java | 64 +
.../resources/protocols/modbus/DriverTestsuite.xml | 8 +-
protocols/plc4x/pom.xml | 43 +
...e.plc4x.plugins.codegenerator.protocol.Protocol | 19 +
.../src/main/resources/protocols/plc4x/plc4x.mspec | 37 +-
protocols/pom.xml | 1 +
.../resources/protocols/s7/DriverTestsuite.xml | 8 +-
src/site/asciidoc/users/adopters.adoc | 2 +
.../asciidoc/users/integrations/apache-kafka.adoc | 4 +-
.../companies/logo-lebbing-automation-drives.png | Bin 0 -> 13626 bytes
576 files changed, 127081 insertions(+), 87839 deletions(-)
diff --cc build-utils/language-c/src/main/resources/templates/c/data-io-template-c.ftlh
index 04d5907,60236c8..0f30365
--- a/build-utils/language-c/src/main/resources/templates/c/data-io-template-c.ftlh
+++ b/build-utils/language-c/src/main/resources/templates/c/data-io-template-c.ftlh
@@@ -67,7 -67,7 +67,7 @@@
#include <plc4c/data.h>
#include <plc4c/utils/list.h>
#include <plc4c/spi/evaluation_helper.h>
- //#include <plc4c/driver_${helper.getProtocolName()}.h>
-#include <plc4c/driver_${helper.getProtocolName()}.h>
++
#include "${helper.camelCaseToSnakeCase(type.name)}.h"
// Parse function.
diff --cc build-utils/language-c/src/main/resources/templates/c/pojo-template-c.ftlh
index 7eab226,43ac99a..8abf2ab
--- a/build-utils/language-c/src/main/resources/templates/c/pojo-template-c.ftlh
+++ b/build-utils/language-c/src/main/resources/templates/c/pojo-template-c.ftlh
@@@ -482,27 -457,16 +482,19 @@@ plc4c_return_code ${helper.getCTypeName
<#case "const">
<#assign constField = field>
<#assign simpleTypeReference = constField.type>
--
<#if indentContent> </#if> // Const Field (${constField.name})
<#if indentContent> </#if> ${helper.getWriteBufferWriteMethodCall(constField.type, helper.getCTypeName(baseType.name)?upper_case + "_" + helper.camelCaseToSnakeCase(constField.name)?upper_case + "()")};
<#break>
<#case "discriminator">
<#assign discriminatorField = field>
- <#if helper.isSimpleField(field)>
- <#assign simpleTypeReference = discriminatorField.type>
- <#if indentContent> </#if> // Discriminator Field (${discriminatorField.name})
- <#if indentContent> </#if> ${helper.getWriteBufferWriteMethodCall(discriminatorField.type, helper.getCTypeName(baseType.name) + "_get_discriminator(_message->_type)." + discriminatorField.name)};
- <#elseif helper.isEnumField(field)>
++ <#if helper.isEnumField(field)>
+<#if indentContent> </#if> // Enumerated Discriminator Field (${discriminatorField.name})
+<#if indentContent> </#if> ${helper.getWriteBufferWriteMethodCall(helper.getEnumBaseTypeReference(discriminatorField.type), helper.getCTypeName(baseType.name) + "_get_discriminator(_message->_type)." + discriminatorField.name)};
+ <#else>
- <#if indentContent> </#if> // Enumerated Discriminator Field (${discriminatorField.name})
- // ${discriminatorField}
- // ${discriminatorField.type}
- // ${discriminatorField.name}
- // ${helper.getCTypeName(baseType.name)}
+ <#assign simpleTypeReference = discriminatorField.type>
-
+ <#if indentContent> </#if> // Discriminator Field (${discriminatorField.name})
<#if indentContent> </#if> ${helper.getWriteBufferWriteMethodCall(discriminatorField.type, helper.getCTypeName(baseType.name) + "_get_discriminator(_message->_type)." + discriminatorField.name)};
+ </#if>
<#break>
<#case "enum">
<#assign enumField = field>
diff --cc build-utils/language-go/src/main/resources/templates/go/model-template.ftlh
index d750b4a,213d1c3..2070da3
--- a/build-utils/language-go/src/main/resources/templates/go/model-template.ftlh
+++ b/build-utils/language-go/src/main/resources/templates/go/model-template.ftlh
@@@ -203,141 -206,131 +206,269 @@@ func (m *${type.name}) GetTypeName() st
}
func (m *${type.name}) LengthInBits() uint16 {
++<<<<<<< HEAD
+ lengthInBits := uint16(0)
+ <#list type.fields as field>
+ <#switch field.typeName>
+ <#case "array">
+ <#assign arrayField = field>
+
+ // Array field
+ if len(m.${arrayField.name?cap_first}) > 0 {
+ <#if helper.isSimpleTypeReference(arrayField.type)>
+ <#assign simpleTypeReference = arrayField.type>
+ lengthInBits += ${simpleTypeReference.sizeInBits} * uint16(len(m.${arrayField.name?cap_first}))
+ <#else>
+ for _, element := range m.${arrayField.name?cap_first} {
+ lengthInBits += element.LengthInBits()
+ }
+ </#if>
+ }
+ <#break>
+ <#case "checksum">
+ <#assign checksumField = field>
+ <#assign simpleTypeReference = checksumField.type>
+
+ // Checksum Field (checksum)
+ lengthInBits += ${simpleTypeReference.sizeInBits}
+ <#break>
+ <#case "const">
+ <#assign constField = field>
+ <#assign simpleTypeReference = constField.type>
+
+ // Const Field (${constField.name})
+ lengthInBits += ${simpleTypeReference.sizeInBits}
+ <#break>
+ <#case "discriminator">
+ <#assign discriminatorField = field>
+ <#assign simpleTypeReference = discriminatorField.type>
+
+ // Discriminator Field (${discriminatorField.name})
+ <#if helper.isSimpleTypeReference(simpleTypeReference)>
+ <#if helper.getLanguageTypeNameForTypeReference(discriminatorField.type) = "String">
+ lengthInBits += ${simpleTypeReference.getLength()};
+ <#else>
+ lengthInBits += ${simpleTypeReference.sizeInBits};
+ </#if>
+ <#elseif helper.isEnumField(discriminatorField)>
+ lengthInBits += ${helper.getEnumBaseTypeReference(discriminatorField.type).sizeInBits};
+ <#else>
+ lengthInBits += ${discriminatorField.name}.getLengthInBits();
+ </#if>
+ <#break>
+ <#case "enum">
+ <#assign enumField = field>
+
+ // Enum Field (${enumField.name})
+ lengthInBits += ${helper.getEnumBaseTypeReference(enumField.type).sizeInBits}
+ <#break>
+ <#case "implicit">
+ <#assign implicitField = field>
+ <#assign simpleTypeReference = implicitField.type>
+
+ // Implicit Field (${implicitField.name})
+ lengthInBits += ${simpleTypeReference.sizeInBits}
+ <#break>
+ <#case "manualArray">
+ <#assign manualArrayField = field>
+
+ // Manual Array Field (${manualArrayField.name})
+ lengthInBits += ${helper.toParseExpression(manualArrayField, manualArrayField.lengthExpression, type.parserArguments)} * 8
+ <#break>
+ <#case "manual">
+ <#assign manualField = field>
+
+ // Manual Field (${manualField.name})
+ lengthInBits += ${helper.toParseExpression(manualField, manualField.lengthExpression, type.parserArguments)} * 8
+ <#break>
+ <#case "optional">
+ <#assign optionalField = field>
+
+ // Optional Field (${optionalField.name})
+ if m.${optionalField.name?cap_first} != nil {
+ <#if helper.isSimpleTypeReference(optionalField.type)>
+ <#assign simpleTypeReference = optionalField.type>
+ lengthInBits += ${simpleTypeReference.sizeInBits}
+ <#elseif helper.isEnumField(field)>
+ lengthInBits += ${helper.getEnumBaseTypeReference(optionalField.type).sizeInBits}
+ <#else>
+ lengthInBits += (*m.${optionalField.name?cap_first}).LengthInBits()
+ </#if>
+ }
+ <#break>
+ <#case "padding">
+ <#assign paddingField = field>
+ <#assign simpleTypeReference = paddingField.type>
+
+ // Padding Field (padding)
+ <#-- We're replacing the "lastItem" with 'false' here as the item itself can't know if it is the last -->
+ _timesPadding := uint8(${helper.toSerializationExpression(paddingField, paddingField.paddingCondition, type.parserArguments)?replace("lastItem", "false")})
+ for ;_timesPadding > 0; _timesPadding-- {
+ lengthInBits += ${simpleTypeReference.sizeInBits}
+ }
+ <#break>
+ <#case "reserved">
+ <#assign reservedField = field>
+ <#assign simpleTypeReference = reservedField.type>
+
+ // Reserved Field (reserved)
+ lengthInBits += ${simpleTypeReference.sizeInBits}
+ <#break>
+ <#case "simple">
+ <#assign simpleField = field>
+
+ // Simple field (${simpleField.name})
+ <#if helper.isSimpleTypeReference(simpleField.type)>
+ <#assign simpleTypeReference = simpleField.type>
+ lengthInBits += ${simpleTypeReference.sizeInBits}
+ <#elseif helper.isEnumField(field)>
+ lengthInBits += ${helper.getEnumBaseTypeReference(simpleField.type).sizeInBits}
+ <#else>
+ lengthInBits += m.${simpleField.name?cap_first}.LengthInBits()
+ </#if>
+ <#break>
+ <#case "switch">
+ <#assign switchField = field>
+
+ // Length of sub-type elements will be added by sub-type...
+ lengthInBits += m.Child.LengthInBits()
+ <#break>
+ <#case "virtual">
+ <#assign virtualField = field>
+
+ // A virtual field doesn't have any in- or output.
+ <#break>
+ </#switch>
+ </#list>
+
+ return lengthInBits
++=======
+ lengthInBits := uint16(0)
+ <#list type.fields as field>
+ <#switch field.typeName>
+ <#case "array">
+ <#assign arrayField = field>
+
+ // Array field
+ if len(m.${arrayField.name?cap_first}) > 0 {
+ <#if helper.isSimpleTypeReference(arrayField.type)>
+ <#assign simpleTypeReference = arrayField.type>
+ lengthInBits += ${simpleTypeReference.sizeInBits} * uint16(len(m.${arrayField.name?cap_first}))
+ <#else>
+ for _, element := range m.${arrayField.name?cap_first} {
+ lengthInBits += element.LengthInBits()
+ }
+ </#if>
+ }
+ <#break>
+ <#case "checksum">
+ <#assign checksumField = field>
+ <#assign simpleTypeReference = checksumField.type>
+
+ // Checksum Field (checksum)
+ lengthInBits += ${simpleTypeReference.sizeInBits}
+ <#break>
+ <#case "const">
+ <#assign constField = field>
+ <#assign simpleTypeReference = constField.type>
+
+ // Const Field (${constField.name})
+ lengthInBits += ${simpleTypeReference.sizeInBits}
+ <#break>
+ <#case "discriminator">
+ <#assign discriminatorField = field>
+ <#assign simpleTypeReference = discriminatorField.type>
+
+ // Discriminator Field (${discriminatorField.name})
+ lengthInBits += ${simpleTypeReference.sizeInBits}
+ <#break>
+ <#case "enum">
+ <#assign enumField = field>
+
+ // Enum Field (${enumField.name})
+ lengthInBits += ${helper.getEnumBaseTypeReference(enumField.type).sizeInBits}
+ <#break>
+ <#case "implicit">
+ <#assign implicitField = field>
+ <#assign simpleTypeReference = implicitField.type>
+
+ // Implicit Field (${implicitField.name})
+ lengthInBits += ${simpleTypeReference.sizeInBits}
+ <#break>
+ <#case "manualArray">
+ <#assign manualArrayField = field>
+
+ // Manual Array Field (${manualArrayField.name})
+ lengthInBits += ${helper.toParseExpression(manualArrayField, manualArrayField.lengthExpression, type.parserArguments)} * 8
+ <#break>
+ <#case "manual">
+ <#assign manualField = field>
+
+ // Manual Field (${manualField.name})
+ lengthInBits += ${helper.toParseExpression(manualField, manualField.lengthExpression, type.parserArguments)} * 8
+ <#break>
+ <#case "optional">
+ <#assign optionalField = field>
+
+ // Optional Field (${optionalField.name})
+ if m.${optionalField.name?cap_first} != nil {
+ <#if helper.isSimpleTypeReference(optionalField.type)>
+ <#assign simpleTypeReference = optionalField.type>
+ lengthInBits += ${simpleTypeReference.sizeInBits}
+ <#elseif helper.isEnumField(field)>
+ lengthInBits += ${helper.getEnumBaseTypeReference(optionalField.type).sizeInBits}
+ <#else>
+ lengthInBits += (*m.${optionalField.name?cap_first}).LengthInBits()
+ </#if>
+ }
+ <#break>
+ <#case "padding">
+ <#assign paddingField = field>
+ <#assign simpleTypeReference = paddingField.type>
+
+ // Padding Field (padding)
+ <#-- We're replacing the "lastItem" with 'false' here as the item itself can't know if it is the last -->
+ _timesPadding := uint8(${helper.toSerializationExpression(paddingField, paddingField.paddingCondition, type.parserArguments)?replace("lastItem", "false")})
+ for ;_timesPadding > 0; _timesPadding-- {
+ lengthInBits += ${simpleTypeReference.sizeInBits}
+ }
+ <#break>
+ <#case "reserved">
+ <#assign reservedField = field>
+ <#assign simpleTypeReference = reservedField.type>
+
+ // Reserved Field (reserved)
+ lengthInBits += ${simpleTypeReference.sizeInBits}
+ <#break>
+ <#case "simple">
+ <#assign simpleField = field>
+
+ // Simple field (${simpleField.name})
+ <#if helper.isSimpleTypeReference(simpleField.type)>
+ <#assign simpleTypeReference = simpleField.type>
+ lengthInBits += ${simpleTypeReference.sizeInBits}
+ <#elseif helper.isEnumField(field)>
+ lengthInBits += ${helper.getEnumBaseTypeReference(simpleField.type).sizeInBits}
+ <#else>
+ lengthInBits += m.${simpleField.name?cap_first}.LengthInBits()
+ </#if>
+ <#break>
+ <#case "switch">
+ <#assign switchField = field>
+
+ // Length of sub-type elements will be added by sub-type...
+ lengthInBits += m.Child.LengthInBits()
+ <#break>
+ <#case "virtual">
+ <#assign virtualField = field>
+
+ // A virtual field doesn't have any in- or output.
+ <#break>
+ </#switch>
+ </#list>
+
+ return lengthInBits
++>>>>>>> develop
}
func (m *${type.name}) LengthInBytes() uint16 {
@@@ -345,331 -338,327 +476,655 @@@
}
func ${type.name}Parse(io *utils.ReadBuffer<#if type.parserArguments?has_content>, <#list type.parserArguments as parserArgument>${parserArgument.name} <#if helper.isComplexTypeReference(parserArgument.type)>*</#if>${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#if>) (*<#if type.parentType?has_content>${type.parentType.name}<#else>${type.name}</#if>, error) {
++<<<<<<< HEAD
+ <#if helper.requiresStartPosAndCurPos()>
+ var startPos = io.GetPos()
+ var curPos uint16
+ </#if>
+ <#list type.fields as field>
+ <#switch field.typeName>
+ <#case "array">
+ <#assign arrayField = field>
+
+ // Array field (${arrayField.name})
+ <#-- Only update curPos if the length expression uses it -->
+ <#if arrayField.loopExpression.contains("curPos")>
+ curPos = io.GetPos() - startPos
+ </#if>
+ <#-- If this is a count array, we can directly initialize an array with the given size -->
+ <#if helper.isCountArrayField(field)>
+ // Count array
+ ${arrayField.name} := make([]<#if helper.isComplexTypeReference(arrayField.type)>*</#if>${helper.getLanguageTypeNameForField(field)}, ${helper.toIntegerParseExpression(16, arrayField.loopExpression, type.parserArguments)})
+ for curItem := uint16(0); curItem < uint16(${helper.toIntegerParseExpression(16, arrayField.loopExpression, type.parserArguments)}); curItem++ {
+ <#if (!helper.isSimpleTypeReference(arrayField.type)) && helper.requiresVariable(arrayField, "lastItem")>
+ lastItem := curItem == uint16(${helper.toParseExpression(arrayField, arrayField.loopExpression, type.parserArguments)} - 1)
+ </#if>
+ _item, _err := <#if helper.isSimpleTypeReference(arrayField.type)>${helper.getReadBufferReadMethodCall(arrayField.type)}<#else>${arrayField.type.name}Parse(io<#if field.params?has_content>, <#list field.params as parserArgument><#if helper.isOptionalField(helper.getFieldForNameFromCurrentOrParent(parserArgument.name))>*</#if>${helper.toTypedParseExpression(helper.getArgumentType(arrayField.type, parserArgument?index), parserArgument, type.parserArguments)}<#sep>, </#sep></#list> [...]
+ if _err != nil {
+ return nil, errors.New("Error parsing '${arrayField.name}' field " + _err.Error())
+ }
+ ${arrayField.name}[curItem] = _item
+ }
+ <#-- In all other cases do we have to work with a list, that is later converted to an array -->
+ <#elseif helper.isLengthArrayField(field)>
+ <#-- For a length array, we read data till the read position of the buffer reaches a given position -->
+ // Length array
+ ${arrayField.name} := make([]<#if helper.isComplexTypeReference(arrayField.type)>*</#if>${helper.getLanguageTypeNameForField(field)}, 0)
+ _${arrayField.name}Length := ${helper.toIntegerParseExpression(16, arrayField.loopExpression, type.parserArguments)}
+ _${arrayField.name}EndPos := io.GetPos() + uint16(_${arrayField.name}Length)
+ for ;io.GetPos() < _${arrayField.name}EndPos; {
+ _item, _err := <#if helper.isSimpleTypeReference(arrayField.type)>${helper.getReadBufferReadMethodCall(arrayField.type)}<#else>${arrayField.type.name}Parse(io<#if field.params?has_content>, <#list field.params as parserArgument><#if helper.isOptionalField(helper.getFieldForNameFromCurrentOrParent(parserArgument.name))>*</#if>${helper.toTypedParseExpression(helper.getArgumentType(arrayField.type, parserArgument?index), parserArgument, type.parserArguments)}<#sep>, </#sep></#list> [...]
+ if _err != nil {
+ return nil, errors.New("Error parsing '${arrayField.name}' field " + _err.Error())
+ }
+ ${arrayField.name} = append(${arrayField.name}, _item)
+ <#-- After parsing, update the current position, but only if it's needed -->
+ <#if arrayField.loopExpression.contains("curPos")>
+ curPos = io.GetPos() - startPos
+ </#if>
+ }
+ <#-- A terminated array keeps on reading data as long as the termination expression evaluates to false -->
+ <#elseif helper.isTerminatedArrayField(field)>
+ // Terminated array
+ ${arrayField.name} := make([]<#if helper.isComplexTypeReference(arrayField.type)>*</#if>${helper.getLanguageTypeNameForField(field)}, 0)
+ for ;!bool(${helper.toParseExpression(arrayField, arrayField.loopExpression, type.parserArguments)}); {
+ _item, _err := <#if helper.isSimpleTypeReference(arrayField.type)>${helper.getReadBufferReadMethodCall(arrayField.type)}<#else>${arrayField.type.name}Parse(io<#if field.params?has_content>, <#list field.params as parserArgument><#if helper.isOptionalField(helper.getFieldForNameFromCurrentOrParent(parserArgument.name))>*</#if>${helper.toTypedParseExpression(helper.getArgumentType(arrayField.type, parserArgument?index), parserArgument, type.parserArguments)}<#sep>, </#sep></#list> [...]
+ if _err != nil {
+ return nil, errors.New("Error parsing '${arrayField.name}' field " + _err.Error())
+ }
+ ${arrayField.name} = append(${arrayField.name}, _item)
+
+ <#-- After parsing, update the current position, but only if it's needed -->
+ <#if arrayField.loopExpression.contains("curPos")>
+ curPos = io.GetPos() - startPos
+ </#if>
+ }
+ </#if>
+ <#break>
+ <#case "checksum">
+ <#assign checksumField = field>
+ <#assign simpleTypeReference = checksumField.type>
+
+ // Checksum Field (checksum)
+ {
+ checksum = ${helper.getNullValueForTypeReference(checksumField.type)}
+ // Create an array of all the bytes read in this message element so far.
+ checksumRawData := io.getBytes(startPos, io.GetPos())
+ checksumRef, _checksumRefErr := ${helper.getReadBufferReadMethodCall(simpleTypeReference)}
+ if _checksumRefErr != nil {
+ return nil, errors.New("Error parsing 'checksum' field " + _checksumRefErr.Error())
+ }
+ checksum, _checksumErr = ${helper.toParseExpression(checksumField, checksumField.checksumExpression, type.parserArguments)}
+ if _checksumErr != nil {
+ return nil, errors.New("Error parsing 'checksum' field " + _checksumErr.Error())
+ }
+ if checksum != checksumRef {
+ return nil, errors.New("Checksum verification failed. Expected " + (checksumRef & 0xFFFF) + " but got " + (checksum & 0xFFFF)")
+ }
+ }
+ <#break>
+ <#case "const">
+ <#assign constField = field>
+ <#assign simpleTypeReference = constField.type>
+
+ // Const Field (${constField.name})
+ ${constField.name}, _${constField.name}Err := ${helper.getReadBufferReadMethodCall(simpleTypeReference)}
+ if _${constField.name}Err != nil {
+ return nil, errors.New("Error parsing '${constField.name}' field " + _${constField.name}Err.Error())
+ }
+ if ${constField.name} != ${type.name}_${constField.name?upper_case} {
+ return nil, errors.New("Expected constant value " + strconv.Itoa(int(${type.name}_${constField.name?upper_case})) + " but got " + strconv.Itoa(int(${constField.name})))
+ }
+ <#break>
+ <#case "discriminator">
+ <#assign discriminatorField = field>
+ <#assign simpleTypeReference = discriminatorField.type>
+
+ // Discriminator Field (${discriminatorField.name}) (Used as input to a switch field)
+ <#if helper.isEnumField(field)>
+ ${helper.getVariableName(field)}, _${discriminatorField.name}Err := ${helper.getReadBufferReadMethodCall(helper.getEnumBaseTypeReference(discriminatorField.type))}
+ <#else>
+ ${helper.getVariableName(field)}, _${discriminatorField.name}Err := ${helper.getReadBufferReadMethodCall(simpleTypeReference)}
+ </#if>
+ if _${discriminatorField.name}Err != nil {
+ return nil, errors.New("Error parsing '${discriminatorField.name}' field " + _${discriminatorField.name}Err.Error())
+ }
+ <#break>
+ <#case "enum">
+ <#assign enumField = field>
+
+ // Enum field (${enumField.name})
+ ${enumField.name}, _${enumField.name}Err := ${helper.getLanguageTypeNameForField(field)}Parse(io)
+ if _${enumField.name}Err != nil {
+ return nil, errors.New("Error parsing '${enumField.name}' field " + _${enumField.name}Err.Error())
+ }
+ <#break>
+ <#case "implicit">
+ <#assign implicitField = field>
+ <#assign simpleTypeReference = implicitField.type>
+
+ // Implicit Field (${implicitField.name}) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
+ ${helper.getVariableName(field)}, _${implicitField.name}Err := ${helper.getReadBufferReadMethodCall(simpleTypeReference)}
+ if _${implicitField.name}Err != nil {
+ return nil, errors.New("Error parsing '${implicitField.name}' field " + _${implicitField.name}Err.Error())
+ }
+ <#break>
+ <#case "manualArray">
+ <#assign manualArrayField = field>
+
+ // Manual Array Field (${manualArrayField.name})
+ <#-- Only update curPos if the length expression uses it -->
+ <#if manualArrayField.loopExpression.contains("curPos")>
+ curPos = io.GetPos() - startPos
+ </#if>
+ <#-- If this is a count array, we can directly initialize an array with the given size -->
+ <#if helper.isCountArrayField(field)>
+ // Count array
+ _${manualArrayField.name}Count := ${helper.toParseExpression(manualArrayField, manualArrayField.loopExpression, type.parserArguments)}
+ ${helper.getLanguageTypeNameForField(field)}[] ${manualArrayField.name} = new ${helper.getLanguageTypeNameForField(field)}[_${manualArrayField.name}Count]
+ for i := 0; i < _${manualArrayField.name}Count; i++ {
+ ${manualArrayField.name}[i] = (${helper.getLanguageTypeNameForField(field)}) (${helper.toParseExpression(manualArrayField, manualArrayField.parseExpression, type.parserArguments)})
+ }
+ <#-- In all other cases do we have to work with a list, that is later converted to an array -->
+ <#else>
+ <#-- For a length array, we read data till the read position of the buffer reaches a given position -->
+ <#if helper.isLengthArrayField(field)>
+ // Length array
+ _${manualArrayField.name}Length := ${helper.toIntegerParseExpression(16, manualArrayField.loopExpression, type.parserArguments)}
+ List<${helper.getLanguageTypeNameForField(manualArrayField)}> _${manualArrayField.name}List = new LinkedList<>()
+ ${manualArrayField.name}EndPos := io.GetPos() + _${manualArrayField.name}Length
+ for ;io.GetPos() < ${manualArrayField.name}EndPos; {
+ _${manualArrayField.name}List.add((${helper.getLanguageTypeNameForField(field)}) (${helper.toParseExpression(manualArrayField, manualArrayField.parseExpression, type.parserArguments)}))
+ <#-- After parsing, update the current position, but only if it's needed -->
+ <#if manualArrayField.loopExpression.contains("curPos")>
+ curPos = io.GetPos() - startPos
+ </#if>
+ }
+ <#-- A terminated array keeps on reading data as long as the termination expression evaluates to false -->
+ <#elseif helper.isTerminatedArrayField(field)>
+ // Terminated array
+ List<${helper.getLanguageTypeNameForField(manualArrayField)}> _${manualArrayField.name}List = new LinkedList<>()
+ for ;!((boolean) (${helper.toParseExpression(manualArrayField, manualArrayField.loopExpression, type.parserArguments)})); {
+ _${manualArrayField.name}List.add((${helper.getLanguageTypeNameForField(field)}) (${helper.toParseExpression(manualArrayField, manualArrayField.parseExpression, type.parserArguments)}))
+
+ <#-- After parsing, update the current position, but only if it's needed -->
+ <#if manualArrayField.loopExpression.contains("curPos")>
+ curPos = io.GetPos() - startPos
+ </#if>
+ }
+ </#if>
+ <#--
+ Convert the list into an array. However if the array is of a primitive
+ type we have to iterate over it's elements and explicitly cast them.
+ Otherwise a simple toArray call is fine.
+ -->
+ <#if helper.isSimpleTypeReference(field.type)>
+ ${helper.getLanguageTypeNameForField(field)}[] ${manualArrayField.name} = new ${helper.getLanguageTypeNameForField(field)}[_${manualArrayField.name}List.size()]
+ for i := 0; i < _${manualArrayField.name}List.size(); i++ {
+ ${manualArrayField.name}[i] = (${helper.getLanguageTypeNameForField(field)}) _${manualArrayField.name}List.get(i)
+ }
+ <#else>
+ ${helper.getLanguageTypeNameForField(field)}[] ${manualArrayField.name} = _${manualArrayField.name}List.toArray(new ${helper.getLanguageTypeNameForField(manualArrayField)}[0])
+ </#if>
+ </#if>
+ <#break>
+ <#case "manual">
+ <#assign manualField = field>
+
+ // Manual Field (${manualField.name})
+ ${manualField.name}, _${manualField.name}Err = ${helper.toParseExpression(manualField, manualField.parseExpression, type.parserArguments)}
+ if _${implicitField.name}Err != nil {
+ return nil, errors.New("Error parsing '${manualField.name}' field " + _${manualField.name}Err.Error())
+ }
+ <#break>
+ <#case "optional">
+ <#assign optionalField = field>
+
+ // Optional Field (${optionalField.name}) (Can be skipped, if a given expression evaluates to false)
+ <#if optionalField.conditionExpression.contains("curPos")>
+ curPos = io.GetPos() - startPos
+ </#if>
+ var ${optionalField.name} *${helper.getLanguageTypeNameForField(field)} = nil
+ if ${helper.toBooleanParseExpression(optionalField.conditionExpression, type.parserArguments)} {
+ <#if helper.isSimpleTypeReference(optionalField.type)>
+ _val, _err := ${helper.getReadBufferReadMethodCall(optionalField.type)}
+ if _err != nil {
+ return nil, errors.New("Error parsing '${optionalField.name}' field " + _err.Error())
+ }
+ ${optionalField.name} = &_val
+ <#elseif helper.isEnumField(field)>
+ _val, _err := ${helper.getLanguageTypeNameForField(field)}Parse(io)
+ if _err != nil {
+ return nil, errors.New("Error parsing '${optionalField.name}' field " + _err.Error())
+ }
+ ${optionalField.name} = &_val
+ <#else>
+ _val, _err := ${helper.getLanguageTypeNameForField(field)}Parse(io<#if field.params?has_content>, <#list field.params as parserArgument>${helper.toTypedParseExpression(helper.getArgumentType(optionalField.type, parserArgument?index), parserArgument, type.parserArguments)}<#sep>, </#sep></#list></#if>)
+ if _err != nil {
+ return nil, errors.New("Error parsing '${optionalField.name}' field " + _err.Error())
+ }
+ ${optionalField.name} = _val
+ </#if>
+ }
+ <#break>
+ <#case "padding">
+ <#assign paddingField = field>
+ <#assign simpleTypeReference = paddingField.type>
+
+ // Padding Field (padding)
+ {
+ _timesPadding := (${helper.toParseExpression(paddingField, paddingField.paddingCondition, type.parserArguments)})
+ for ;(io.HasMore(${helper.getNumBits(simpleTypeReference)})) && (_timesPadding > 0);_timesPadding-- {
+ // Just read the padding data and ignore it
+ _, _err := ${helper.getReadBufferReadMethodCall(simpleTypeReference)}
+ if _err != nil {
+ return nil, errors.New("Error parsing 'padding' field " + _err.Error())
+ }
+ }
+ }
+ <#break>
+ <#case "reserved">
+ <#assign reservedField = field>
+ <#assign simpleTypeReference = reservedField.type>
+
+ // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
+ {
+ reserved, _err := ${helper.getReadBufferReadMethodCall(simpleTypeReference)}
+ if _err != nil {
+ return nil, errors.New("Error parsing 'reserved' field " + _err.Error())
+ }
+ if reserved != ${helper.getReservedValue(reservedField)} {
+ log.WithFields(log.Fields{
+ "expected value": ${helper.getReservedValue(reservedField)},
+ "got value": reserved,
+ }).Info("Got unexpected response.")
+ }
+ }
+ <#break>
+ <#case "simple">
+ <#assign simpleField = field>
+
+ // Simple Field (${simpleField.name})
+ ${simpleField.name}, _${simpleField.name}Err := <#if helper.isSimpleTypeReference(simpleField.type)>${helper.getReadBufferReadMethodCall(simpleField.type)}<#else>${simpleField.type.name}Parse(io<#if field.params?has_content>, <#list field.params as parserArgument><#if helper.isOptionalField(helper.getFieldForNameFromCurrentOrParent(parserArgument.name))>*</#if>${helper.toTypedParseExpression(helper.getArgumentType(simpleField.type, parserArgument?index), parserArgument, type.parserA [...]
+ if _${simpleField.name}Err != nil {
+ <#if helper.isEnumField(field)>
+ return nil, errors.New("Error parsing '${simpleField.name}' field " + _${simpleField.name}Err.Error())
+ <#else>
+ return nil, errors.New("Error parsing '${simpleField.name}' field " + _${simpleField.name}Err.Error())
+ </#if>
+ }
+ <#break>
+
+ <#case "switch">
+ <#assign switchField = field>
+
+ // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+ var _parent *${type.name}
+ var typeSwitchError error
+ switch {
+ <#list switchField.cases as case>
+ <#if case.discriminatorValues?has_content>case <#list case.discriminatorValues as discriminatorValue>${helper.toParseExpression(null, switchField.discriminatorExpressions[discriminatorValue?index], type.parserArguments)} == ${discriminatorValue}<#sep> && </#sep></#list></#if>:
+ _parent, typeSwitchError = ${case.name}Parse(io<#if case.parserArguments?has_content>, <#list case.parserArguments as parserArgument><#if helper.isOptionalField(helper.getFieldForNameFromCurrentOrParent(parserArgument.name))>*</#if>${parserArgument.name}<#sep>, </#sep></#list></#if>)
+ </#list>
+ }
+ if typeSwitchError != nil {
+ return nil, errors.New("Error parsing sub-type for type-switch. " + typeSwitchError.Error())
+ }
+ <#break>
+
+ <#case "virtual">
+ <#assign virtualField = field>
+
+ // Virtual field (Just declare a local variable so we can access it in the parser)
+ ${virtualField.name}, _${virtualField.name}Err := ${helper.toParseExpression(virtualField, virtualField.valueExpression, type.parserArguments)}
+ if _${virtualField.name}Err != nil {
+ return nil, errors.New("Error parsing '${virtualField.name}' field " + _${virtualField.name}Err.Error())
+ }
+ <#break>
+ </#switch>
+ </#list>
+
+ <#if helper.isDiscriminatedParentTypeDefinition()>
+ // Finish initializing
+ _parent.Child.InitializeParent(_parent<#if type.propertyFields?has_content>, <#list type.propertyFields as field>${field.name}<#sep>, </#sep></#list></#if>)
+ return _parent, nil
+ <#elseif type.parentType?has_content>
+ // Create a partially initialized instance
+ _child := &${type.name}{
+ <#list type.propertyFields as field>
+ ${field.name?cap_first}: ${field.name},
+ </#list>
+ Parent: &${type.parentType.name}{},
+ }
+ _child.Parent.Child = _child
+ return _child.Parent, nil
+ <#else>
+ // Create the instance
+ return New${type.name}(<#list type.propertyFields as field>${field.name}<#sep>, </#sep></#list>), nil
+ </#if>
++=======
+ <#if helper.requiresStartPosAndCurPos()>
+ var startPos = io.GetPos()
+ var curPos uint16
+ </#if>
+ <#list type.fields as field>
+ <#switch field.typeName>
+ <#case "array">
+ <#assign arrayField = field>
+
+ // Array field (${arrayField.name})
+ <#-- Only update curPos if the length expression uses it -->
+ <#if arrayField.loopExpression.contains("curPos")>
+ curPos = io.GetPos() - startPos
+ </#if>
+ <#-- If this is a count array, we can directly initialize an array with the given size -->
+ <#if helper.isCountArrayField(field)>
+ // Count array
+ ${arrayField.name} := make([]<#if helper.isComplexTypeReference(arrayField.type)>*</#if>${helper.getLanguageTypeNameForField(field)}, ${helper.toIntegerParseExpression(16, arrayField.loopExpression, type.parserArguments)})
+ for curItem := uint16(0); curItem < uint16(${helper.toIntegerParseExpression(16, arrayField.loopExpression, type.parserArguments)}); curItem++ {
+ <#if (!helper.isSimpleTypeReference(arrayField.type)) && helper.requiresVariable(arrayField, "lastItem")>
+ lastItem := curItem == uint16(${helper.toParseExpression(arrayField, arrayField.loopExpression, type.parserArguments)} - 1)
+ </#if>
+ _item, _err := <#if helper.isSimpleTypeReference(arrayField.type)>${helper.getReadBufferReadMethodCall(arrayField.type)}<#else>${arrayField.type.name}Parse(io<#if field.params?has_content>, <#list field.params as parserArgument><#if helper.isOptionalField(helper.getFieldForNameFromCurrentOrParent(parserArgument.name))>*</#if>${helper.toTypedParseExpression(helper.getArgumentType(arrayField.type, parserArgument?index), parserArgument, type.parserArguments)}<#sep>, </#sep></#list></#if>)</#if>
+ if _err != nil {
+ return nil, errors.New("Error parsing '${arrayField.name}' field " + _err.Error())
+ }
+ ${arrayField.name}[curItem] = _item
+ }
+ <#-- In all other cases do we have to work with a list, that is later converted to an array -->
+ <#elseif helper.isLengthArrayField(field)>
+ <#-- For a length array, we read data till the read position of the buffer reaches a given position -->
+ // Length array
+ ${arrayField.name} := make([]<#if helper.isComplexTypeReference(arrayField.type)>*</#if>${helper.getLanguageTypeNameForField(field)}, 0)
+ _${arrayField.name}Length := ${helper.toIntegerParseExpression(16, arrayField.loopExpression, type.parserArguments)}
+ _${arrayField.name}EndPos := io.GetPos() + uint16(_${arrayField.name}Length)
+ for ;io.GetPos() < _${arrayField.name}EndPos; {
+ _item, _err := <#if helper.isSimpleTypeReference(arrayField.type)>${helper.getReadBufferReadMethodCall(arrayField.type)}<#else>${arrayField.type.name}Parse(io<#if field.params?has_content>, <#list field.params as parserArgument><#if helper.isOptionalField(helper.getFieldForNameFromCurrentOrParent(parserArgument.name))>*</#if>${helper.toTypedParseExpression(helper.getArgumentType(arrayField.type, parserArgument?index), parserArgument, type.parserArguments)}<#sep>, </#sep></#list></#if>)</#if>
+ if _err != nil {
+ return nil, errors.New("Error parsing '${arrayField.name}' field " + _err.Error())
+ }
+ ${arrayField.name} = append(${arrayField.name}, _item)
+ <#-- After parsing, update the current position, but only if it's needed -->
+ <#if arrayField.loopExpression.contains("curPos")>
+ curPos = io.GetPos() - startPos
+ </#if>
+ }
+ <#-- A terminated array keeps on reading data as long as the termination expression evaluates to false -->
+ <#elseif helper.isTerminatedArrayField(field)>
+ // Terminated array
+ ${arrayField.name} := make([]<#if helper.isComplexTypeReference(arrayField.type)>*</#if>${helper.getLanguageTypeNameForField(field)}, 0)
+ for ;!bool(${helper.toParseExpression(arrayField, arrayField.loopExpression, type.parserArguments)}); {
+ _item, _err := <#if helper.isSimpleTypeReference(arrayField.type)>${helper.getReadBufferReadMethodCall(arrayField.type)}<#else>${arrayField.type.name}Parse(io<#if field.params?has_content>, <#list field.params as parserArgument><#if helper.isOptionalField(helper.getFieldForNameFromCurrentOrParent(parserArgument.name))>*</#if>${helper.toTypedParseExpression(helper.getArgumentType(arrayField.type, parserArgument?index), parserArgument, type.parserArguments)}<#sep>, </#sep></#list></#if>)</#if>
+ if _err != nil {
+ return nil, errors.New("Error parsing '${arrayField.name}' field " + _err.Error())
+ }
+ ${arrayField.name} = append(${arrayField.name}, _item)
+
+ <#-- After parsing, update the current position, but only if it's needed -->
+ <#if arrayField.loopExpression.contains("curPos")>
+ curPos = io.GetPos() - startPos
+ </#if>
+ }
+ </#if>
+ <#break>
+ <#case "checksum">
+ <#assign checksumField = field>
+ <#assign simpleTypeReference = checksumField.type>
+
+ // Checksum Field (checksum)
+ {
+ checksum = ${helper.getNullValueForTypeReference(checksumField.type)}
+ // Create an array of all the bytes read in this message element so far.
+ checksumRawData := io.getBytes(startPos, io.GetPos())
+ checksumRef, _checksumRefErr := ${helper.getReadBufferReadMethodCall(simpleTypeReference)}
+ if _checksumRefErr != nil {
+ return nil, errors.New("Error parsing 'checksum' field " + _checksumRefErr.Error())
+ }
+ checksum, _checksumErr = ${helper.toParseExpression(checksumField, checksumField.checksumExpression, type.parserArguments)}
+ if _checksumErr != nil {
+ return nil, errors.New("Error parsing 'checksum' field " + _checksumErr.Error())
+ }
+ if checksum != checksumRef {
+ return nil, errors.New("Checksum verification failed. Expected " + (checksumRef & 0xFFFF) + " but got " + (checksum & 0xFFFF)")
+ }
+ }
+ <#break>
+ <#case "const">
+ <#assign constField = field>
+ <#assign simpleTypeReference = constField.type>
+
+ // Const Field (${constField.name})
+ ${constField.name}, _${constField.name}Err := ${helper.getReadBufferReadMethodCall(simpleTypeReference)}
+ if _${constField.name}Err != nil {
+ return nil, errors.New("Error parsing '${constField.name}' field " + _${constField.name}Err.Error())
+ }
+ if ${constField.name} != ${type.name}_${constField.name?upper_case} {
+ return nil, errors.New("Expected constant value " + strconv.Itoa(int(${type.name}_${constField.name?upper_case})) + " but got " + strconv.Itoa(int(${constField.name})))
+ }
+ <#break>
+ <#case "discriminator">
+ <#assign discriminatorField = field>
+ <#assign simpleTypeReference = discriminatorField.type>
+
+ // Discriminator Field (${discriminatorField.name}) (Used as input to a switch field)
+ ${helper.getVariableName(field)}, _${discriminatorField.name}Err := ${helper.getReadBufferReadMethodCall(simpleTypeReference)}
+ if _${discriminatorField.name}Err != nil {
+ return nil, errors.New("Error parsing '${discriminatorField.name}' field " + _${discriminatorField.name}Err.Error())
+ }
+ <#break>
+ <#case "enum">
+ <#assign enumField = field>
+
+ // Enum field (${enumField.name})
+ ${enumField.name}, _${enumField.name}Err := ${helper.getLanguageTypeNameForField(field)}Parse(io)
+ if _${enumField.name}Err != nil {
+ return nil, errors.New("Error parsing '${enumField.name}' field " + _${enumField.name}Err.Error())
+ }
+ <#break>
+ <#case "implicit">
+ <#assign implicitField = field>
+ <#assign simpleTypeReference = implicitField.type>
+
+ // Implicit Field (${implicitField.name}) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
+ ${helper.getVariableName(field)}, _${implicitField.name}Err := ${helper.getReadBufferReadMethodCall(simpleTypeReference)}
+ if _${implicitField.name}Err != nil {
+ return nil, errors.New("Error parsing '${implicitField.name}' field " + _${implicitField.name}Err.Error())
+ }
+ <#break>
+ <#case "manualArray">
+ <#assign manualArrayField = field>
+
+ // Manual Array Field (${manualArrayField.name})
+ <#-- Only update curPos if the length expression uses it -->
+ <#if manualArrayField.loopExpression.contains("curPos")>
+ curPos = io.GetPos() - startPos
+ </#if>
+ <#-- If this is a count array, we can directly initialize an array with the given size -->
+ <#if helper.isCountArrayField(field)>
+ // Count array
+ _${manualArrayField.name}Count := ${helper.toParseExpression(manualArrayField, manualArrayField.loopExpression, type.parserArguments)}
+ ${helper.getLanguageTypeNameForField(field)}[] ${manualArrayField.name} = new ${helper.getLanguageTypeNameForField(field)}[_${manualArrayField.name}Count]
+ for i := 0; i < _${manualArrayField.name}Count; i++ {
+ ${manualArrayField.name}[i] = (${helper.getLanguageTypeNameForField(field)}) (${helper.toParseExpression(manualArrayField, manualArrayField.parseExpression, type.parserArguments)})
+ }
+ <#-- In all other cases do we have to work with a list, that is later converted to an array -->
+ <#else>
+ <#-- For a length array, we read data till the read position of the buffer reaches a given position -->
+ <#if helper.isLengthArrayField(field)>
+ // Length array
+ _${manualArrayField.name}Length := ${helper.toIntegerParseExpression(16, manualArrayField.loopExpression, type.parserArguments)}
+ List<${helper.getLanguageTypeNameForField(manualArrayField)}> _${manualArrayField.name}List = new LinkedList<>()
+ ${manualArrayField.name}EndPos := io.GetPos() + _${manualArrayField.name}Length
+ for ;io.GetPos() < ${manualArrayField.name}EndPos; {
+ _${manualArrayField.name}List.add((${helper.getLanguageTypeNameForField(field)}) (${helper.toParseExpression(manualArrayField, manualArrayField.parseExpression, type.parserArguments)}))
+ <#-- After parsing, update the current position, but only if it's needed -->
+ <#if manualArrayField.loopExpression.contains("curPos")>
+ curPos = io.GetPos() - startPos
+ </#if>
+ }
+ <#-- A terminated array keeps on reading data as long as the termination expression evaluates to false -->
+ <#elseif helper.isTerminatedArrayField(field)>
+ // Terminated array
+ List<${helper.getLanguageTypeNameForField(manualArrayField)}> _${manualArrayField.name}List = new LinkedList<>()
+ for ;!((boolean) (${helper.toParseExpression(manualArrayField, manualArrayField.loopExpression, type.parserArguments)})); {
+ _${manualArrayField.name}List.add((${helper.getLanguageTypeNameForField(field)}) (${helper.toParseExpression(manualArrayField, manualArrayField.parseExpression, type.parserArguments)}))
+
+ <#-- After parsing, update the current position, but only if it's needed -->
+ <#if manualArrayField.loopExpression.contains("curPos")>
+ curPos = io.GetPos() - startPos
+ </#if>
+ }
+ </#if>
+ <#--
+ Convert the list into an array. However if the array is of a primitive
+ type we have to iterate over it's elements and explicitly cast them.
+ Otherwise a simple toArray call is fine.
+ -->
+ <#if helper.isSimpleTypeReference(field.type)>
+ ${helper.getLanguageTypeNameForField(field)}[] ${manualArrayField.name} = new ${helper.getLanguageTypeNameForField(field)}[_${manualArrayField.name}List.size()]
+ for i := 0; i < _${manualArrayField.name}List.size(); i++ {
+ ${manualArrayField.name}[i] = (${helper.getLanguageTypeNameForField(field)}) _${manualArrayField.name}List.get(i)
+ }
+ <#else>
+ ${helper.getLanguageTypeNameForField(field)}[] ${manualArrayField.name} = _${manualArrayField.name}List.toArray(new ${helper.getLanguageTypeNameForField(manualArrayField)}[0])
+ </#if>
+ </#if>
+ <#break>
+ <#case "manual">
+ <#assign manualField = field>
+
+ // Manual Field (${manualField.name})
+ ${manualField.name}, _${manualField.name}Err = ${helper.toParseExpression(manualField, manualField.parseExpression, type.parserArguments)}
+ if _${implicitField.name}Err != nil {
+ return nil, errors.New("Error parsing '${manualField.name}' field " + _${manualField.name}Err.Error())
+ }
+ <#break>
+ <#case "optional">
+ <#assign optionalField = field>
+
+ // Optional Field (${optionalField.name}) (Can be skipped, if a given expression evaluates to false)
+ <#if optionalField.conditionExpression.contains("curPos")>
+ curPos = io.GetPos() - startPos
+ </#if>
+ var ${optionalField.name} *${helper.getLanguageTypeNameForField(field)} = nil
+ if ${helper.toBooleanParseExpression(optionalField.conditionExpression, type.parserArguments)} {
+ <#if helper.isSimpleTypeReference(optionalField.type)>
+ _val, _err := ${helper.getReadBufferReadMethodCall(optionalField.type)}
+ if _err != nil {
+ return nil, errors.New("Error parsing '${optionalField.name}' field " + _err.Error())
+ }
+ ${optionalField.name} = &_val
+ <#elseif helper.isEnumField(field)>
+ _val, _err := ${helper.getLanguageTypeNameForField(field)}Parse(io)
+ if _err != nil {
+ return nil, errors.New("Error parsing '${optionalField.name}' field " + _err.Error())
+ }
+ ${optionalField.name} = &_val
+ <#else>
+ _val, _err := ${helper.getLanguageTypeNameForField(field)}Parse(io<#if field.params?has_content>, <#list field.params as parserArgument>${helper.toTypedParseExpression(helper.getArgumentType(optionalField.type, parserArgument?index), parserArgument, type.parserArguments)}<#sep>, </#sep></#list></#if>)
+ if _err != nil {
+ return nil, errors.New("Error parsing '${optionalField.name}' field " + _err.Error())
+ }
+ ${optionalField.name} = _val
+ </#if>
+ }
+ <#break>
+ <#case "padding">
+ <#assign paddingField = field>
+ <#assign simpleTypeReference = paddingField.type>
+
+ // Padding Field (padding)
+ {
+ _timesPadding := (${helper.toParseExpression(paddingField, paddingField.paddingCondition, type.parserArguments)})
+ for ;(io.HasMore(${helper.getNumBits(simpleTypeReference)})) && (_timesPadding > 0);_timesPadding-- {
+ // Just read the padding data and ignore it
+ _, _err := ${helper.getReadBufferReadMethodCall(simpleTypeReference)}
+ if _err != nil {
+ return nil, errors.New("Error parsing 'padding' field " + _err.Error())
+ }
+ }
+ }
+ <#break>
+ <#case "reserved">
+ <#assign reservedField = field>
+ <#assign simpleTypeReference = reservedField.type>
+
+ // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
+ {
+ reserved, _err := ${helper.getReadBufferReadMethodCall(simpleTypeReference)}
+ if _err != nil {
+ return nil, errors.New("Error parsing 'reserved' field " + _err.Error())
+ }
+ if ${helper.toTypeSafeCompare(reservedField)} {
+ log.Info().Fields(map[string]interface{}{
+ "expected value": ${helper.getReservedValue(reservedField)},
+ "got value": reserved,
+ }).Msg("Got unexpected response.")
+ }
+ }
+ <#break>
+ <#case "simple">
+ <#assign simpleField = field>
+
+ // Simple Field (${simpleField.name})
+ ${simpleField.name}, _${simpleField.name}Err := <#if helper.isSimpleTypeReference(simpleField.type)>${helper.getReadBufferReadMethodCall(simpleField.type)}<#else>${simpleField.type.name}Parse(io<#if field.params?has_content>, <#list field.params as parserArgument><#if helper.isOptionalField(helper.getFieldForNameFromCurrentOrParent(parserArgument.name))>*<#elseif helper.needsReferenceForParserArgument(parserArgument.name, helper.getArgumentType(simpleField.type, parserArgument?index))> [...]
+ if _${simpleField.name}Err != nil {
+ <#if helper.isEnumField(field)>
+ return nil, errors.New("Error parsing '${simpleField.name}' field " + _${simpleField.name}Err.Error())
+ <#else>
+ return nil, errors.New("Error parsing '${simpleField.name}' field " + _${simpleField.name}Err.Error())
+ </#if>
+ }
+ <#break>
+
+ <#case "switch">
+ <#assign switchField = field>
+
+ // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+ var _parent *${type.name}
+ var typeSwitchError error
+ switch {
+ <#list switchField.cases as case>
+ <#if case.discriminatorValues?has_content>case <#list case.discriminatorValues as discriminatorValue><#if helper.isEnumExpression(discriminatorValue)>*</#if>${helper.toParseExpression(null, switchField.discriminatorExpressions[discriminatorValue?index], type.parserArguments)} == <#if helper.isEnumExpression(discriminatorValue)>${helper.getEnumExpression(discriminatorValue)}<#else>${discriminatorValue}</#if><#sep> && </#sep></#list></#if>:
+ _parent, typeSwitchError = ${case.name}Parse(io<#if case.parserArguments?has_content>, <#list case.parserArguments as parserArgument><#if helper.isOptionalField(helper.getFieldForNameFromCurrentOrParent(parserArgument.name))>*</#if>${parserArgument.name}<#sep>, </#sep></#list></#if>)
+ </#list>
+ }
+ if typeSwitchError != nil {
+ return nil, errors.New("Error parsing sub-type for type-switch. " + typeSwitchError.Error())
+ }
+ <#break>
+
+ <#case "virtual">
+ <#assign virtualField = field>
+
+ // Virtual field (Just declare a local variable so we can access it in the parser)
+ ${virtualField.name}, _${virtualField.name}Err := ${helper.toParseExpression(virtualField, virtualField.valueExpression, type.parserArguments)}
+ if _${virtualField.name}Err != nil {
+ return nil, errors.New("Error parsing '${virtualField.name}' field " + _${virtualField.name}Err.Error())
+ }
+ <#break>
+ </#switch>
+ </#list>
+
+ <#if helper.isDiscriminatedParentTypeDefinition()>
+ // Finish initializing
+ _parent.Child.InitializeParent(_parent<#if type.propertyFields?has_content>, <#list type.propertyFields as field>${field.name}<#sep>, </#sep></#list></#if>)
+ return _parent, nil
+ <#elseif type.parentType?has_content>
+ // Create a partially initialized instance
+ _child := &${type.name}{
+ <#list type.propertyFields as field>
+ ${field.name?cap_first}: ${field.name},
+ </#list>
+ Parent: &${type.parentType.name}{},
+ }
+ _child.Parent.Child = _child
+ return _child.Parent, nil
+ <#else>
+ // Create the instance
+ return New${type.name}(<#list type.propertyFields as field>${field.name}<#sep>, </#sep></#list>), nil
+ </#if>
++>>>>>>> develop
}
<#if helper.isDiscriminatedParentTypeDefinition()>
@@@ -681,217 -670,213 +1136,427 @@@ func (m *${type.name}) SerializeParent(
<#else>
func (m *${type.name}) Serialize(io utils.WriteBuffer<#if helper.getSerializerArguments(type.parserArguments)?has_content>, <#list helper.getSerializerArguments(type.parserArguments) as parserArgument>${parserArgument.name} ${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#if>) error {
</#if>
++<<<<<<< HEAD
+ <#assign arraySizeInBytesHelpers=helper.requiresHelperFunctions("ARRAY_SIZE_IN_BYTES")>
+ <#if arraySizeInBytesHelpers?has_content>
+ <#list arraySizeInBytesHelpers?keys as key>
+ <#assign typeName=arraySizeInBytesHelpers[key]>
+ ${key}ArraySizeInBytes := func(items []*${typeName}) uint32 {
+ var sizeInBytes uint32 = 0
+ for _, v := range items {
+ sizeInBytes += uint32(v.LengthInBytes())
+ }
+ return sizeInBytes
+ }
+ </#list>
+ </#if>
+ <#if helper.isDiscriminatedChildTypeDefinition()>
+ ser := func() error {
+ </#if>
+ <#list type.fields as field>
+ <#switch field.typeName>
+ <#case "array">
+ <#assign arrayField = field>
+ <#assign simpleTypeReference = arrayField.type>
+
+ // Array Field (${arrayField.name})
+ if m.${arrayField.name?cap_first} != nil {
+ <#if helper.isComplexTypeReference(arrayField.type) && (helper.needsVariable(arrayField, "curItem", true) || helper.needsVariable(arrayField, "lastItem", true))>
+ itemCount := uint16(len(m.${arrayField.name?cap_first}))
+ var curItem uint16 = 0
+ </#if>
+ for _, _element := range m.${arrayField.name?cap_first} {
+ <#if helper.isSimpleTypeReference(arrayField.type)>
+ <#assign simpleTypeReference = arrayField.type>
+ _elementErr := ${helper.getWriteBufferWriteMethodCall(simpleTypeReference, "_element")}
+ <#else>
+ <#assign complexTypeReference = arrayField.type>
+ <#if helper.needsVariable(arrayField, "lastItem", true)>
+ var lastItem bool = curItem == (itemCount - 1)
+ </#if>
+ _elementErr := _element.Serialize(io<#if helper.getSerializerTerms(field.params)?has_content>, <#list helper.getSerializerTerms(field.params) as parserArgument>${parserArgument.name}<#sep>, </#sep></#list></#if>)
+ </#if>
+ if _elementErr != nil {
+ return errors.New("Error serializing '${arrayField.name}' field " + _elementErr.Error())
+ }
+ <#if helper.needsVariable(arrayField, "curItem", true) || helper.needsVariable(arrayField, "lastItem", true)>
+ curItem++
+ </#if>
+ }
+ }
+ <#break>
+ <#case "checksum">
+ <#assign checksumField = field>
+ <#assign simpleTypeReference = checksumField.type>
+
+ // Checksum Field (checksum) (Calculated)
+ {
+ _checksum := ${helper.getLanguageTypeNameForField(field)}(${helper.getNullValueForTypeReference(checksumField.type)})
+ // Create an array of all the bytes written in this message element so far.
+ checksumRawData []uint8 = io.getBytes(startPos, io.GetPos())
+ _checksum = ${helper.getLanguageTypeNameForField(field)}(${helper.toSerializationExpression(checksumField, checksumField.checksumExpression, type.parserArguments)})
+ _checksumErr := ${helper.getWriteBufferWriteMethodCall(simpleTypeReference, "(_checksum)")}
+ if _elementErr != nil {
+ return errors.New("Error serializing 'checksum' field " + _elementErr.Error())
+ }
+ }
+ <#break>
+ <#case "const">
+ <#assign constField = field>
+ <#assign simpleTypeReference = constField.type>
+
+ // Const Field (${constField.name})
+ _${constField.name}Err := ${helper.getWriteBufferWriteMethodCall(simpleTypeReference, constField.referenceValue)}
+ if _${constField.name}Err != nil {
+ return errors.New("Error serializing '${constField.name}' field " + _${constField.name}Err.Error())
+ }
+ <#break>
+ <#case "discriminator">
+ <#assign discriminatorField = field>
+ <#assign simpleTypeReference = discriminatorField.type>
+
+ // Discriminator Field (${discriminatorField.name}) (Used as input to a switch field)
+ ${discriminatorField.name} := ${helper.getLanguageTypeNameForField(field)}(child.${discriminatorField.name?cap_first}())
+ <#if helper.isEnumField(field)>
+ _${discriminatorField.name}Err := ${helper.getWriteBufferWriteMethodCall(helper.getEnumBaseTypeReference(discriminatorField.type), "(" + discriminatorField.name + ")")}
+ <#else>
+ _${discriminatorField.name}Err := ${helper.getWriteBufferWriteMethodCall(simpleTypeReference, "(" + discriminatorField.name + ")")}
+ </#if>
+ if _${discriminatorField.name}Err != nil {
+ return errors.New("Error serializing '${discriminatorField.name}' field " + _${discriminatorField.name}Err.Error())
+ }
+ <#break>
+ <#case "enum">
+ <#assign enumField = field>
+
+ // Enum field (${enumField.name})
+ ${enumField.name} := Cast${helper.getLanguageTypeNameForField(field)}(m.${enumField.name?cap_first})
+ _${enumField.name}Err := ${enumField.name}.Serialize(io)
+ if _${enumField.name}Err != nil {
+ return errors.New("Error serializing '${enumField.name}' field " + _${enumField.name}Err.Error())
+ }
+ <#break>
+ <#case "implicit">
+ <#assign implicitField = field>
+ <#assign simpleTypeReference = implicitField.type>
+
+ // Implicit Field (${implicitField.name}) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
+ ${implicitField.name} := ${helper.getLanguageTypeNameForField(field)}(${helper.toSerializationExpression(implicitField, implicitField.serializeExpression, type.parserArguments)})
+ _${implicitField.name}Err := ${helper.getWriteBufferWriteMethodCall(simpleTypeReference, "(" + implicitField.name + ")")}
+ if _${implicitField.name}Err != nil {
+ return errors.New("Error serializing '${implicitField.name}' field " + _${implicitField.name}Err.Error())
+ }
+ <#break>
+ <#case "manualArray">
+ <#assign manualArrayField = field>
+
+ // Manual Array Field (${manualArrayField.name})
+ if m.${manualArrayField.name?cap_first} != nil {
+ for(${helper.getLanguageTypeNameForField(field)} element : m.${manualArrayField.name?cap_first}) {
+ ${helper.toSerializationExpression(manualArrayField, manualArrayField.serializeExpression, type.parserArguments)}
+ }
+ }
+ <#break>
+ <#case "manual">
+ <#assign manualField = field>
+
+ // Manual Field (${manualField.name})
+ ${helper.toSerializationExpression(manualField, manualField.serializeExpression, type.parserArguments)}
+ <#break>
+ <#case "optional">
+ <#assign optionalField = field>
+
+ // Optional Field (${optionalField.name}) (Can be skipped, if the value is null)
+ var ${optionalField.name} *${helper.getLanguageTypeNameForField(field)} = nil
+ if m.${optionalField.name?cap_first} != nil {
+ <#if helper.isSimpleTypeReference(optionalField.type)>
+ <#assign simpleTypeReference = optionalField.type>
+ ${optionalField.name} = m.${optionalField.name?cap_first}
+ _${optionalField.name}Err := ${helper.getWriteBufferWriteMethodCall(simpleTypeReference, "*(" + optionalField.name + ")")}
+ <#else>
+ <#assign complexTypeReference = optionalField.type>
+ ${optionalField.name} = m.${optionalField.name?cap_first}
+ _${optionalField.name}Err := ${optionalField.name}.Serialize(io)
+ </#if>
+ if _${optionalField.name}Err != nil {
+ return errors.New("Error serializing '${optionalField.name}' field " + _${optionalField.name}Err.Error())
+ }
+ }
+ <#break>
+ <#case "padding">
+ <#assign paddingField = field>
+ <#assign simpleTypeReference = paddingField.type>
+
+ // Padding Field (padding)
+ {
+ _timesPadding := uint8(${helper.toSerializationExpression(paddingField, paddingField.paddingCondition, type.parserArguments)})
+ for ;_timesPadding > 0; _timesPadding-- {
+ _paddingValue := ${helper.getLanguageTypeNameForField(field)}(${helper.toSerializationExpression(paddingField, paddingField.paddingValue, type.parserArguments)})
+ _paddingErr := ${helper.getWriteBufferWriteMethodCall(simpleTypeReference, "(_paddingValue)")}
+ if _paddingErr != nil {
+ return errors.New("Error serializing 'padding' field " + _paddingErr.Error())
+ }
+ }
+ }
+ <#break>
+ <#case "reserved">
+ <#assign reservedField = field>
+ <#assign simpleTypeReference = reservedField.type>
+
+ // Reserved Field (reserved)
+ {
+ _err := ${helper.getWriteBufferWriteMethodCall(simpleTypeReference, helper.getReservedValue(field))}
+ if _err != nil {
+ return errors.New("Error serializing 'reserved' field " + _err.Error())
+ }
+ }
+ <#break>
+ <#case "simple">
+ <#assign simpleField = field>
+
+ // Simple Field (${simpleField.name})
+ <#if helper.isSimpleTypeReference(simpleField.type)>
+ <#assign simpleTypeReference = simpleField.type>
+ ${simpleField.name} := ${helper.getLanguageTypeNameForField(field)}(m.${simpleField.name?cap_first})
+ _${simpleField.name}Err := ${helper.getWriteBufferWriteMethodCall(simpleTypeReference, "(" + simpleField.name + ")")}
+ <#else>
+ <#assign complexTypeReference = simpleField.type>
+ _${simpleField.name}Err := m.${simpleField.name?cap_first}.Serialize(io)
+ </#if>
+ if _${simpleField.name}Err != nil {
+ return errors.New("Error serializing '${simpleField.name}' field " + _${simpleField.name}Err.Error())
+ }
+ <#break>
+ <#case "switch">
+ <#assign switchField = field>
+
+ // Switch field (Depending on the discriminator values, passes the serialization to a sub-type)
+ _typeSwitchErr := serializeChildFunction()
+ if _typeSwitchErr != nil {
+ return errors.New("Error serializing sub-type field " + _typeSwitchErr.Error())
+ }
+ <#break>
+ <#case "virtual">
+ <#break>
+ </#switch>
+ </#list>
+
+ <#if helper.isDiscriminatedChildTypeDefinition()>
+ return nil
+ }
+ return m.Parent.SerializeParent(io, m, ser)
+ <#else>
+ return nil
+ </#if>
++=======
+ <#assign arraySizeInBytesHelpers=helper.requiresHelperFunctions("ARRAY_SIZE_IN_BYTES")>
+ <#if arraySizeInBytesHelpers?has_content>
+ <#list arraySizeInBytesHelpers?keys as key>
+ <#assign typeName=arraySizeInBytesHelpers[key]>
+ ${key}ArraySizeInBytes := func(items []*${typeName}) uint32 {
+ var sizeInBytes uint32 = 0
+ for _, v := range items {
+ sizeInBytes += uint32(v.LengthInBytes())
+ }
+ return sizeInBytes
+ }
+ </#list>
+ </#if>
+ <#if helper.isDiscriminatedChildTypeDefinition()>
+ ser := func() error {
+ </#if>
+ <#list type.fields as field>
+ <#switch field.typeName>
+ <#case "array">
+ <#assign arrayField = field>
+ <#assign simpleTypeReference = arrayField.type>
+
+ // Array Field (${arrayField.name})
+ if m.${arrayField.name?cap_first} != nil {
+ <#if helper.isComplexTypeReference(arrayField.type) && (helper.needsVariable(arrayField, "curItem", true) || helper.needsVariable(arrayField, "lastItem", true))>
+ itemCount := uint16(len(m.${arrayField.name?cap_first}))
+ var curItem uint16 = 0
+ </#if>
+ for _, _element := range m.${arrayField.name?cap_first} {
+ <#if helper.isSimpleTypeReference(arrayField.type)>
+ <#assign simpleTypeReference = arrayField.type>
+ _elementErr := ${helper.getWriteBufferWriteMethodCall(simpleTypeReference, "_element")}
+ <#else>
+ <#assign complexTypeReference = arrayField.type>
+ <#if helper.needsVariable(arrayField, "lastItem", true)>
+ var lastItem bool = curItem == (itemCount - 1)
+ </#if>
+ _elementErr := _element.Serialize(io<#if helper.getSerializerTerms(field.params)?has_content>, <#list helper.getSerializerTerms(field.params) as parserArgument>${parserArgument.name}<#sep>, </#sep></#list></#if>)
+ </#if>
+ if _elementErr != nil {
+ return errors.New("Error serializing '${arrayField.name}' field " + _elementErr.Error())
+ }
+ <#if helper.needsVariable(arrayField, "curItem", true) || helper.needsVariable(arrayField, "lastItem", true)>
+ curItem++
+ </#if>
+ }
+ }
+ <#break>
+ <#case "checksum">
+ <#assign checksumField = field>
+ <#assign simpleTypeReference = checksumField.type>
+
+ // Checksum Field (checksum) (Calculated)
+ {
+ _checksum := ${helper.getLanguageTypeNameForField(field)}(${helper.getNullValueForTypeReference(checksumField.type)})
+ // Create an array of all the bytes written in this message element so far.
+ checksumRawData []uint8 = io.getBytes(startPos, io.GetPos())
+ _checksum = ${helper.getLanguageTypeNameForField(field)}(${helper.toSerializationExpression(checksumField, checksumField.checksumExpression, type.parserArguments)})
+ _checksumErr := ${helper.getWriteBufferWriteMethodCall(simpleTypeReference, "(_checksum)")}
+ if _elementErr != nil {
+ return errors.New("Error serializing 'checksum' field " + _elementErr.Error())
+ }
+ }
+ <#break>
+ <#case "const">
+ <#assign constField = field>
+ <#assign simpleTypeReference = constField.type>
+
+ // Const Field (${constField.name})
+ _${constField.name}Err := ${helper.getWriteBufferWriteMethodCall(simpleTypeReference, constField.referenceValue)}
+ if _${constField.name}Err != nil {
+ return errors.New("Error serializing '${constField.name}' field " + _${constField.name}Err.Error())
+ }
+ <#break>
+ <#case "discriminator">
+ <#assign discriminatorField = field>
+ <#assign simpleTypeReference = discriminatorField.type>
+
+ // Discriminator Field (${discriminatorField.name}) (Used as input to a switch field)
+ ${discriminatorField.name} := ${helper.getLanguageTypeNameForField(field)}(child.${discriminatorField.name?cap_first}())
+ _${discriminatorField.name}Err := ${helper.getWriteBufferWriteMethodCall(simpleTypeReference, "(" + discriminatorField.name + ")")}
+ if _${discriminatorField.name}Err != nil {
+ return errors.New("Error serializing '${discriminatorField.name}' field " + _${discriminatorField.name}Err.Error())
+ }
+ <#break>
+ <#case "enum">
+ <#assign enumField = field>
+
+ // Enum field (${enumField.name})
+ ${enumField.name} := Cast${helper.getLanguageTypeNameForField(field)}(m.${enumField.name?cap_first})
+ _${enumField.name}Err := ${enumField.name}.Serialize(io)
+ if _${enumField.name}Err != nil {
+ return errors.New("Error serializing '${enumField.name}' field " + _${enumField.name}Err.Error())
+ }
+ <#break>
+ <#case "implicit">
+ <#assign implicitField = field>
+ <#assign simpleTypeReference = implicitField.type>
+
+ // Implicit Field (${implicitField.name}) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
+ ${implicitField.name} := ${helper.getLanguageTypeNameForField(field)}(${helper.toSerializationExpression(implicitField, implicitField.serializeExpression, type.parserArguments)})
+ _${implicitField.name}Err := ${helper.getWriteBufferWriteMethodCall(simpleTypeReference, "(" + implicitField.name + ")")}
+ if _${implicitField.name}Err != nil {
+ return errors.New("Error serializing '${implicitField.name}' field " + _${implicitField.name}Err.Error())
+ }
+ <#break>
+ <#case "manualArray">
+ <#assign manualArrayField = field>
+
+ // Manual Array Field (${manualArrayField.name})
+ if m.${manualArrayField.name?cap_first} != nil {
+ for(${helper.getLanguageTypeNameForField(field)} element : m.${manualArrayField.name?cap_first}) {
+ ${helper.toSerializationExpression(manualArrayField, manualArrayField.serializeExpression, type.parserArguments)}
+ }
+ }
+ <#break>
+ <#case "manual">
+ <#assign manualField = field>
+
+ // Manual Field (${manualField.name})
+ ${helper.toSerializationExpression(manualField, manualField.serializeExpression, type.parserArguments)}
+ <#break>
+ <#case "optional">
+ <#assign optionalField = field>
+
+ // Optional Field (${optionalField.name}) (Can be skipped, if the value is null)
+ var ${optionalField.name} *${helper.getLanguageTypeNameForField(field)} = nil
+ if m.${optionalField.name?cap_first} != nil {
+ <#if helper.isSimpleTypeReference(optionalField.type)>
+ <#assign simpleTypeReference = optionalField.type>
+ ${optionalField.name} = m.${optionalField.name?cap_first}
+ _${optionalField.name}Err := ${helper.getWriteBufferWriteMethodCall(simpleTypeReference, "*(" + optionalField.name + ")")}
+ <#else>
+ <#assign complexTypeReference = optionalField.type>
+ ${optionalField.name} = m.${optionalField.name?cap_first}
+ _${optionalField.name}Err := ${optionalField.name}.Serialize(io)
+ </#if>
+ if _${optionalField.name}Err != nil {
+ return errors.New("Error serializing '${optionalField.name}' field " + _${optionalField.name}Err.Error())
+ }
+ }
+ <#break>
+ <#case "padding">
+ <#assign paddingField = field>
+ <#assign simpleTypeReference = paddingField.type>
+
+ // Padding Field (padding)
+ {
+ _timesPadding := uint8(${helper.toSerializationExpression(paddingField, paddingField.paddingCondition, type.parserArguments)})
+ for ;_timesPadding > 0; _timesPadding-- {
+ _paddingValue := ${helper.getLanguageTypeNameForField(field)}(${helper.toSerializationExpression(paddingField, paddingField.paddingValue, type.parserArguments)})
+ _paddingErr := ${helper.getWriteBufferWriteMethodCall(simpleTypeReference, "(_paddingValue)")}
+ if _paddingErr != nil {
+ return errors.New("Error serializing 'padding' field " + _paddingErr.Error())
+ }
+ }
+ }
+ <#break>
+ <#case "reserved">
+ <#assign reservedField = field>
+ <#assign simpleTypeReference = reservedField.type>
+
+ // Reserved Field (reserved)
+ {
+ _err := ${helper.getWriteBufferWriteMethodCall(simpleTypeReference, helper.getReservedValue(field))}
+ if _err != nil {
+ return errors.New("Error serializing 'reserved' field " + _err.Error())
+ }
+ }
+ <#break>
+ <#case "simple">
+ <#assign simpleField = field>
+
+ // Simple Field (${simpleField.name})
+ <#if helper.isSimpleTypeReference(simpleField.type)>
+ <#assign simpleTypeReference = simpleField.type>
+ ${simpleField.name} := ${helper.getLanguageTypeNameForField(field)}(m.${simpleField.name?cap_first})
+ _${simpleField.name}Err := ${helper.getWriteBufferWriteMethodCall(simpleTypeReference, "(" + simpleField.name + ")")}
+ <#else>
+ <#assign complexTypeReference = simpleField.type>
+ _${simpleField.name}Err := m.${simpleField.name?cap_first}.Serialize(io)
+ </#if>
+ if _${simpleField.name}Err != nil {
+ return errors.New("Error serializing '${simpleField.name}' field " + _${simpleField.name}Err.Error())
+ }
+ <#break>
+ <#case "switch">
+ <#assign switchField = field>
+
+ // Switch field (Depending on the discriminator values, passes the serialization to a sub-type)
+ _typeSwitchErr := serializeChildFunction()
+ if _typeSwitchErr != nil {
+ return errors.New("Error serializing sub-type field " + _typeSwitchErr.Error())
+ }
+ <#break>
+ <#case "virtual">
+ <#break>
+ </#switch>
+ </#list>
+
+ <#if helper.isDiscriminatedChildTypeDefinition()>
+ return nil
+ }
+ return m.Parent.SerializeParent(io, m, ser)
+ <#else>
+ return nil
+ </#if>
++>>>>>>> develop
}
func (m *${type.name}) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
diff --cc build-utils/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java
index 188e568,4a538c4..a3b3df7
--- a/build-utils/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java
+++ b/build-utils/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java
@@@ -26,10 -26,8 +26,10 @@@ import org.apache.plc4x.plugins.codegen
import org.apache.plc4x.plugins.codegenerator.types.fields.*;
import org.apache.plc4x.plugins.codegenerator.types.references.*;
import org.apache.plc4x.plugins.codegenerator.types.terms.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
- import java.util.*;
+ import java.util.Map;
import java.util.function.Function;
@SuppressWarnings({"unused", "WeakerAccess"})
@@@ -77,10 -73,18 +77,24 @@@ public class JavaLanguageTemplateHelpe
return getLanguageTypeNameForTypeReference(typeReference, false);
}
+ public String adjustLiterals(String javaType, String value) {
+ switch (javaType) {
+ case "long":
+ case "Long":
+ return value + "L";
+ default:
+ return value;
+ }
+ }
+
public String getLanguageTypeNameForTypeReference(TypeReference typeReference, boolean allowPrimitive) {
++<<<<<<< HEAD
+ logger.debug("Getting name of Java class for given type reference");
+ logger.debug("{}", typeReference.toString());
+ if(typeReference instanceof SimpleTypeReference) {
++=======
+ if (typeReference instanceof SimpleTypeReference) {
++>>>>>>> develop
SimpleTypeReference simpleTypeReference = (SimpleTypeReference) typeReference;
switch (simpleTypeReference.getBaseType()) {
case BIT: {
diff --cc build-utils/language-java/src/main/resources/templates/java/pojo-template.ftlh
index 184d99d,5df52aa..8bc6001
--- a/build-utils/language-java/src/main/resources/templates/java/pojo-template.ftlh
+++ b/build-utils/language-java/src/main/resources/templates/java/pojo-template.ftlh
@@@ -95,12 -95,7 +95,16 @@@ public<#if helper.isDiscriminatedParent
<#if !helper.isNonDiscriminatorField(discriminatorName)>
@JsonIgnore
public ${helper.getLanguageTypeNameForTypeReference(helper.getDiscriminatorTypes()[discriminatorName])} get${discriminatorName?cap_first}() {
++<<<<<<< HEAD
+ <#if !helper.isComplexTypeReference(helper.getDiscriminatorTypes()[discriminatorName])>
+ return <#if helper.getLanguageTypeNameForTypeReference(helper.getDiscriminatorTypes()[discriminatorName]) = "String"><#if discriminatorValue??>"${discriminatorValue}"<#else>${helper.getNullValueForTypeReference(helper.getDiscriminatorTypes()[discriminatorName])}</#if><#else><#if discriminatorValue??>${discriminatorValue}<#else>${helper.getNullValueForTypeReference(helper.getDiscriminatorTypes()[discriminatorName])}</#if></#if>;
+ <#else>
+ return <#if helper.getLanguageTypeNameForTypeReference(helper.getDiscriminatorTypes()[discriminatorName]) = "String"><#if discriminatorValue??>"${discriminatorValue}"<#else>${helper.getNullValueForTypeReference(helper.getDiscriminatorTypes()[discriminatorName])}</#if><#else><#if discriminatorValue??>${helper.getLanguageTypeNameForTypeReference(helper.getDiscriminatorTypes()[discriminatorName])}.${discriminatorValue}<#else>${helper.getLanguageTypeNameForTypeReference(help [...]
+ </#if>
+
++=======
+ return <#if discriminatorValue??>${helper.adjustLiterals(helper.getLanguageTypeNameForTypeReference(helper.getDiscriminatorTypes()[discriminatorName]),discriminatorValue)}<#else>${helper.getNullValueForTypeReference(helper.getDiscriminatorTypes()[discriminatorName])}</#if>;
++>>>>>>> develop
}
</#if>
</#list>
diff --cc protocols/ads/src/main/resources/protocols/ads/ads.mspec
index a89a279,99b4e24..fdffedc
--- a/protocols/ads/src/main/resources/protocols/ads/ads.mspec
+++ b/protocols/ads/src/main/resources/protocols/ads/ads.mspec
@@@ -192,13 -192,13 +192,13 @@@
[discriminatedType 'AdsData' [CommandId 'commandId', bit 'response']
[typeSwitch 'commandId', 'response'
- ['CommandId.INVALID', 'false' AdsInvalidRequest]
- ['CommandId.INVALID', 'true' AdsInvalidResponse]
+ ['INVALID', 'false' AdsInvalidRequest]
+ ['INVALID', 'true' AdsInvalidResponse]
- ['CommandId.ADS_READ_DEVICE_INFO', 'false' AdsReadDeviceInfoRequest]
- ['CommandId.ADS_READ_DEVICE_INFO', 'true' AdsReadDeviceInfoResponse
+ ['ADS_READ_DEVICE_INFO', 'false' AdsReadDeviceInfoRequest]
+ ['ADS_READ_DEVICE_INFO', 'true' AdsReadDeviceInfoResponse
// 4 bytes ADS error number.
- [enum ReturnCode 'result']
+ [simple ReturnCode 'result']
// Version 1 byte Major version number
[simple uint 8 'majorVersion']
// Version 1 byte Minor version number
@@@ -217,9 -217,9 +217,9 @@@
// 4 bytes Length of the data (in bytes) which should be read.
[simple uint 32 'length']
]
- ['CommandId.ADS_READ', 'true' AdsReadResponse
+ ['ADS_READ', 'true' AdsReadResponse
// 4 bytes ADS error number
- [enum ReturnCode 'result']
+ [simple ReturnCode 'result']
// 4 bytes Length of data which are supplied back.
[implicit uint 32 'length' 'COUNT(data)']
// n bytes Data which are supplied back.
@@@ -236,15 -236,15 +236,15 @@@
// n bytes Data which are written in the ADS device.
[array int 8 'data' count 'length']
]
- ['CommandId.ADS_WRITE', 'true' AdsWriteResponse
+ ['ADS_WRITE', 'true' AdsWriteResponse
// 4 bytes ADS error number
- [enum ReturnCode 'result']
+ [simple ReturnCode 'result']
]
- ['CommandId.ADS_READ_STATE', 'false' AdsReadStateRequest]
- ['CommandId.ADS_READ_STATE', 'true' AdsReadStateResponse
+ ['ADS_READ_STATE', 'false' AdsReadStateRequest]
+ ['ADS_READ_STATE', 'true' AdsReadStateResponse
// 4 bytes ADS error number
- [enum ReturnCode 'result']
+ [simple ReturnCode 'result']
// 2 bytes New ADS status (see data type ADSSTATE of the ADS-DLL).
[simple uint 16 'adsState']
// 2 bytes New device status.
@@@ -261,12 -261,12 +261,12 @@@
// n bytes Additional data which are sent to the ADS device
[array int 8 'data' count 'length']
]
- ['CommandId.ADS_WRITE_CONTROL', 'true' AdsWriteControlResponse
+ ['ADS_WRITE_CONTROL', 'true' AdsWriteControlResponse
// 4 bytes ADS error number
- [enum ReturnCode 'result']
+ [simple ReturnCode 'result']
]
- ['CommandId.ADS_ADD_DEVICE_NOTIFICATION', 'false' AdsAddDeviceNotificationRequest
+ ['ADS_ADD_DEVICE_NOTIFICATION', 'false' AdsAddDeviceNotificationRequest
// 4 bytes Index Group of the data, which should be sent per notification.
[simple uint 32 'indexGroup']
// 4 bytes Index Offset of the data, which should be sent per notification.
@@@ -283,9 -283,9 +283,9 @@@
// 16bytes Must be set to 0
[reserved uint 128 '0x0000' ]
]
- ['CommandId.ADS_ADD_DEVICE_NOTIFICATION', 'true' AdsAddDeviceNotificationResponse
+ ['ADS_ADD_DEVICE_NOTIFICATION', 'true' AdsAddDeviceNotificationResponse
// 4 bytes ADS error number
- [enum ReturnCode 'result']
+ [simple ReturnCode 'result']
// 4 bytes Handle of notification
[simple uint 32 'notificationHandle']
]
@@@ -294,12 -294,12 +294,12 @@@
// 4 bytes Handle of notification
[simple uint 32 'notificationHandle']
]
- ['CommandId.ADS_DELETE_DEVICE_NOTIFICATION', 'true' AdsDeleteDeviceNotificationResponse
+ ['ADS_DELETE_DEVICE_NOTIFICATION', 'true' AdsDeleteDeviceNotificationResponse
// 4 bytes ADS error number
- [enum ReturnCode 'result']
+ [simple ReturnCode 'result']
]
- ['CommandId.ADS_DEVICE_NOTIFICATION', 'false' AdsDeviceNotificationRequest
+ ['ADS_DEVICE_NOTIFICATION', 'false' AdsDeviceNotificationRequest
// 4 bytes Size of data in byte.
[simple uint 32 'length']
// 4 bytes Number of elements of type AdsStampHeader.
@@@ -323,9 -323,9 +323,9 @@@
// n bytes Data which are written in the ADS device.
[array int 8 'data' count 'writeLength - (COUNT(items) * 12)']
]
- ['CommandId.ADS_READ_WRITE', 'true' AdsReadWriteResponse
+ ['ADS_READ_WRITE', 'true' AdsReadWriteResponse
// 4 bytes ADS error number
- [enum ReturnCode 'result']
+ [simple ReturnCode 'result']
// 4 bytes Length of data in byte.
[implicit uint 32 'length' 'COUNT(data)']
// n bytes Additional data which are sent to the ADS device
@@@ -496,10 -497,10 +497,17 @@@
]
]
++<<<<<<< HEAD
+[enum 'AdsDataType' [uint 8 'numBytes', string '-1' 'dataFormatName']
+ [BOOL ['1', 'IEC61131_BOOL']]
+ [BIT ['1', 'IEC61131_BOOL']]
+ [BIT8 ['1', 'IEC61131_BOOL']]
++=======
+ [enum int 8 'AdsDataType' [uint 16 'numBytes', string 'dataFormatName']
+ ['0x01' BOOL ['1', 'IEC61131_BOOL']]
+ ['0x02' BIT ['1', 'IEC61131_BOOL']]
+ ['0x03' BIT8 ['1', 'IEC61131_BOOL']]
++>>>>>>> develop
// -----------------------------------------
// Bit-strings
// -----------------------------------------
diff --cc protocols/knxnetip/src/main/xslt/knx-types.xsl
index b9c2ff5,088f016..32a1047
--- a/protocols/knxnetip/src/main/xslt/knx-types.xsl
+++ b/protocols/knxnetip/src/main/xslt/knx-types.xsl
@@@ -103,7 -103,7 +103,11 @@@
<xsl:apply-templates select="knx:KNX/knx:MasterData/knx:InterfaceObjectProperties/knx:InterfaceObjectProperty"/>
]
++<<<<<<< HEAD
+[enum uint 8 'KnxPropertyDataType' [uint 8 'number', uint 8 'sizeInBytes', string '-1' 'name']
++=======
+ [enum uint 6 'KnxPropertyDataType' [uint 8 'number', uint 8 'sizeInBytes', string 'name']
++>>>>>>> develop
['0' PDT_UNKNOWN ['0', '0', '"Unknown Property Data Type"']]
<xsl:apply-templates select="knx:KNX/knx:MasterData/knx:PropertyDataTypes/knx:PropertyDataType"/>
]
@@@ -445,8 -445,7 +449,12 @@@
<xsl:when test="$datapointSubtype/knx:Format/knx:String/@Encoding = 'iso-8859-1'">ISO-8859-1</xsl:when>
</xsl:choose>
</xsl:variable>
++<<<<<<< HEAD
+ [reserved uint 8 '0x0']
+ [simple string '<xsl:value-of select="$datapointSubtype/knx:Format/knx:String/@Width"/>' '<xsl:value-of select="$encoding"/>' 'value']
++=======
+ [simple string <xsl:value-of select="$datapointSubtype/knx:Format/knx:String/@Width"/> '<xsl:value-of select="$encoding"/>' 'value']
++>>>>>>> develop
</xsl:when>
<xsl:when test="$datapointSubtype/knx:Format/knx:UnsignedInteger">
<xsl:choose>