This is an automated email from the ASF dual-hosted git repository. cdutz pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 760e5cc225b9fe6487ad769a998341ecfe070132 Author: Christofer Dutz <[email protected]> AuthorDate: Sat Oct 11 12:27:41 2025 +0200 refactor: Simplified the datatypes in ADS and updated the Browse API intercept mode to not only pass in the item, but also the tag. --- plc4go/internal/ads/Browser.go | 8 +- plc4go/internal/ads/Connection.go | 12 +- plc4go/internal/ads/DriverContext.go | 12 +- plc4go/internal/ads/Reader.go | 12 +- plc4go/internal/ads/ValueHandler.go | 12 +- plc4go/internal/ads/Writer.go | 12 +- plc4go/protocols/ads/readwrite/ParserHelper.go | 2 - plc4go/protocols/ads/readwrite/XmlParserHelper.go | 2 - .../readwrite/model/AdsDataTypeTableChildEntry.go | 825 --------------------- .../ads/readwrite/model/AdsDataTypeTableEntry.go | 156 ++-- .../api/messages/PlcBrowseRequestInterceptor.java | 4 +- .../ads/readwrite/AdsDataTypeTableChildEntry.java | 679 ----------------- .../java/ads/readwrite/AdsDataTypeTableEntry.java | 148 ++-- .../plc4x/java/ads/protocol/AdsProtocolLogic.java | 79 +- .../apache/plc4x/protocol/ads/ManualAdsBrowse.java | 2 +- .../readwrite/connection/CtrlXConnection.java | 2 +- .../ads/src/main/resources/protocols/ads/ads.mspec | 49 +- 17 files changed, 239 insertions(+), 1777 deletions(-) diff --git a/plc4go/internal/ads/Browser.go b/plc4go/internal/ads/Browser.go index 31cd7e4b63..9044702b1c 100644 --- a/plc4go/internal/ads/Browser.go +++ b/plc4go/internal/ads/Browser.go @@ -127,7 +127,7 @@ func (m *Connection) filterDataTypes(parentName string, currentType driverModel. SymbolicAddress: parentName, }, parentName, - currentType.GetDataTypeName(), + currentType.GetSecondaryName(), false, false, false, @@ -140,13 +140,13 @@ func (m *Connection) filterDataTypes(parentName string, currentType driverModel. currentAddressSegment := remainingAddressSegments[0] remainingAddressSegments = remainingAddressSegments[1:] for _, child := range currentType.GetChildren() { - if child.GetPropertyName() == currentAddressSegment { - childTypeName := child.GetDataTypeName() + if child.GetMainName() == currentAddressSegment { + childTypeName := child.GetSecondaryName() if symbolDataType, ok := m.driverContext.dataTypeTable[childTypeName]; !ok { // TODO: Couldn't find data type with the name defined in the protperty. return nil } else { - return m.filterDataTypes(parentName+"."+child.GetPropertyName(), symbolDataType, + return m.filterDataTypes(parentName+"."+child.GetMainName(), symbolDataType, currentPath+"."+currentAddressSegment, remainingAddressSegments) } } diff --git a/plc4go/internal/ads/Connection.go b/plc4go/internal/ads/Connection.go index 80986bdd87..eaf4ed3ff1 100644 --- a/plc4go/internal/ads/Connection.go +++ b/plc4go/internal/ads/Connection.go @@ -302,7 +302,7 @@ func (m *Connection) readDataTypeTable(ctx context.Context, dataTableSize uint32 if err != nil { return nil, fmt.Errorf("error parsing table: %v", err) } - dataTypes[dataType.GetDataTypeName()] = dataType + dataTypes[dataType.GetSecondaryName()] = dataType } return dataTypes, nil } @@ -380,23 +380,23 @@ func (m *Connection) resolveSymbolicAddress(ctx context.Context, addressParts [] curAddressPart := addressParts[0] restAddressParts := addressParts[1:] for _, child := range curDataType.GetChildren() { - if child.GetPropertyName() == curAddressPart { - childDataTypeName := child.GetDataTypeName() + if child.GetMainName() == curAddressPart { + childDataTypeName := child.GetSecondaryName() childDataType, ok := m.driverContext.dataTypeTable[childDataTypeName] if !ok { return nil, fmt.Errorf("couldn't find data type %s for property %s of data type %s", - childDataTypeName, curAddressPart, curDataType.GetDataTypeName()) + childDataTypeName, curAddressPart, curDataType.GetSecondaryName()) } return m.resolveSymbolicAddress(ctx, restAddressParts, childDataType, indexGroup, indexOffset+child.GetOffset()) } } return nil, fmt.Errorf("couldn't find property named %s for data type %s", - curAddressPart, curDataType.GetDataTypeName()) + curAddressPart, curDataType.GetSecondaryName()) } func (m *Connection) getPlcValueForAdsDataTypeTableEntry(entry readWriteModel.AdsDataTypeTableEntry) (apiValues.PlcValueType, int32) { stringLength := -1 - dataTypeName := entry.GetDataTypeName() + dataTypeName := entry.GetSecondaryName() if strings.HasPrefix(dataTypeName, "STRING(") { var err error stringLength, err = strconv.Atoi(dataTypeName[7 : len(dataTypeName)-1]) diff --git a/plc4go/internal/ads/DriverContext.go b/plc4go/internal/ads/DriverContext.go index fb8ce10f12..538d5e7b9e 100644 --- a/plc4go/internal/ads/DriverContext.go +++ b/plc4go/internal/ads/DriverContext.go @@ -108,15 +108,15 @@ func (m *DriverContext) resolveDirectTag(remainingSegments []string, currentData currentSegment := remainingSegments[0] remainingSegments = remainingSegments[1:] for _, child := range currentDatatype.GetChildren() { - if child.GetPropertyName() == currentSegment { - childDataType, ok := m.dataTypeTable[child.GetDataTypeName()] + if child.GetMainName() == currentSegment { + childDataType, ok := m.dataTypeTable[child.GetSecondaryName()] if !ok { - return nil, fmt.Errorf("couldn't find data type with name %s", child.GetDataTypeName()) + return nil, fmt.Errorf("couldn't find data type with name %s", child.GetSecondaryName()) } return m.resolveDirectTag(remainingSegments, childDataType, indexGroup, indexOffset+child.GetOffset()) } } - return nil, fmt.Errorf("couldn't find child with name %s in type %s", currentSegment, currentDatatype.GetDataTypeName()) + return nil, fmt.Errorf("couldn't find child with name %s in type %s", currentSegment, currentDatatype.GetSecondaryName()) } func (m *DriverContext) getDataTypeForDataTypeTableEntry(entry driverModel.AdsDataTypeTableEntry) apiValues.PlcValueType { @@ -126,7 +126,7 @@ func (m *DriverContext) getDataTypeForDataTypeTableEntry(entry driverModel.AdsDa if entry.GetNumChildren() > 0 { return apiValues.Struct } - dataTypeName := entry.GetDataTypeName() + dataTypeName := entry.GetSecondaryName() if strings.HasPrefix(dataTypeName, "STRING(") { dataTypeName = "STRING" } else if strings.HasPrefix(dataTypeName, "WSTRING(") { @@ -137,7 +137,7 @@ func (m *DriverContext) getDataTypeForDataTypeTableEntry(entry driverModel.AdsDa } func (m *DriverContext) getStringLengthForDataTypeTableEntry(entry driverModel.AdsDataTypeTableEntry) int32 { - dataTypeName := entry.GetDataTypeName() + dataTypeName := entry.GetSecondaryName() if strings.HasPrefix(dataTypeName, "STRING(") { lenStr := dataTypeName[7 : len(dataTypeName)-1] lenVal, err := strconv.Atoi(lenStr) diff --git a/plc4go/internal/ads/Reader.go b/plc4go/internal/ads/Reader.go index 0f6a548dd6..97e0971714 100644 --- a/plc4go/internal/ads/Reader.go +++ b/plc4go/internal/ads/Reader.go @@ -265,7 +265,7 @@ func (m *Connection) parsePlcValue(dataType driverModel.AdsDataTypeTableEntry, a if len(arrayInfo) > 0 { // This is an Array/List type. curArrayInfo := arrayInfo[0] - arrayItemTypeName := dataType.GetDataTypeName()[strings.Index(dataType.GetDataTypeName(), " OF ")+4:] + arrayItemTypeName := dataType.GetSecondaryName()[strings.Index(dataType.GetSecondaryName(), " OF ")+4:] arrayItemType, ok := m.driverContext.dataTypeTable[arrayItemTypeName] if !ok { return nil, fmt.Errorf("couldn't resolve array item type %s", arrayItemTypeName) @@ -286,10 +286,10 @@ func (m *Connection) parsePlcValue(dataType driverModel.AdsDataTypeTableEntry, a startPos := uint32(rb.GetPos()) curPos := uint32(0) for _, child := range dataType.GetChildren() { - childName := child.GetPropertyName() - childDataType, ok := m.driverContext.dataTypeTable[child.GetDataTypeName()] + childName := child.GetMainName() + childDataType, ok := m.driverContext.dataTypeTable[child.GetSecondaryName()] if !ok { - return nil, fmt.Errorf("couldn't find data type named %s for property %s of type %s", child.GetDataTypeName(), childName, dataType.GetDataTypeName()) + return nil, fmt.Errorf("couldn't find data type named %s for property %s of type %s", child.GetSecondaryName(), childName, dataType.GetSecondaryName()) } if child.GetOffset() > curPos { skipBytes := child.GetOffset() - curPos @@ -299,7 +299,7 @@ func (m *Connection) parsePlcValue(dataType driverModel.AdsDataTypeTableEntry, a } childValue, err := m.parsePlcValue(childDataType, childDataType.GetArrayInfo(), rb) if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("error parsing propery %s of type %s", childName, dataType.GetDataTypeName())) + return nil, errors.Wrap(err, fmt.Sprintf("error parsing propery %s of type %s", childName, dataType.GetSecondaryName())) } plcValues[childName] = childValue curPos = uint32(rb.GetPos()) - startPos @@ -309,7 +309,7 @@ func (m *Connection) parsePlcValue(dataType driverModel.AdsDataTypeTableEntry, a // This is a primitive type. valueType, stringLength := m.getPlcValueForAdsDataTypeTableEntry(dataType) if valueType == apiValues.NULL { - return nil, errors.New(fmt.Sprintf("error converting %s into plc4x plc-value type", dataType.GetDataTypeName())) + return nil, errors.New(fmt.Sprintf("error converting %s into plc4x plc-value type", dataType.GetSecondaryName())) } adsValueType, ok := apiValues.PlcValueTypeByName(valueType.String()) diff --git a/plc4go/internal/ads/ValueHandler.go b/plc4go/internal/ads/ValueHandler.go index 362abc92d7..b7a1acc719 100644 --- a/plc4go/internal/ads/ValueHandler.go +++ b/plc4go/internal/ads/ValueHandler.go @@ -132,10 +132,10 @@ func (t ValueHandler) AdsParseStructType(dataType readWriteModel.AdsDataTypeTabl childValues := plcStruct.GetStruct() for _, childTypeEntry := range dataType.GetChildren() { - childName := childTypeEntry.GetPropertyName() - childType := t.driverContext.dataTypeTable[childTypeEntry.GetDataTypeName()] + childName := childTypeEntry.GetMainName() + childType := t.driverContext.dataTypeTable[childTypeEntry.GetSecondaryName()] childArrayInfo := childType.GetArrayInfo() - childValue, ok := childValues[childTypeEntry.GetPropertyName()] + childValue, ok := childValues[childTypeEntry.GetMainName()] if !ok { return nil, fmt.Errorf("missing child value named %s", childName) } @@ -151,10 +151,10 @@ func (t ValueHandler) AdsParseStructType(dataType readWriteModel.AdsDataTypeTabl parsedValues := map[string]apiValues.PlcValue{} for _, childTypeEntry := range dataType.GetChildren() { - childName := childTypeEntry.GetPropertyName() - childType := t.driverContext.dataTypeTable[childTypeEntry.GetDataTypeName()] + childName := childTypeEntry.GetMainName() + childType := t.driverContext.dataTypeTable[childTypeEntry.GetSecondaryName()] childArrayInfo := childType.GetArrayInfo() - childValue, ok := simpleMap[childTypeEntry.GetPropertyName()] + childValue, ok := simpleMap[childTypeEntry.GetMainName()] if !ok { return nil, fmt.Errorf("missing child value named %s", childName) } diff --git a/plc4go/internal/ads/Writer.go b/plc4go/internal/ads/Writer.go index 31737c70e6..35e6cfc778 100644 --- a/plc4go/internal/ads/Writer.go +++ b/plc4go/internal/ads/Writer.go @@ -242,7 +242,7 @@ func (m *Connection) serializePlcValue(dataType driverModel.AdsDataTypeTableEntr return fmt.Errorf("expecting exactly %d items in the list", len(plcValues)) } - arrayItemTypeName := dataType.GetDataTypeName()[strings.Index(dataType.GetDataTypeName(), " OF ")+4:] + arrayItemTypeName := dataType.GetSecondaryName()[strings.Index(dataType.GetSecondaryName(), " OF ")+4:] arrayItemType, ok := m.driverContext.dataTypeTable[arrayItemTypeName] if !ok { return fmt.Errorf("couldn't resolve array item type %s", arrayItemTypeName) @@ -271,10 +271,10 @@ func (m *Connection) serializePlcValue(dataType driverModel.AdsDataTypeTableEntr startPos := uint32(wb.GetPos()) curPos := uint32(0) for _, child := range dataType.GetChildren() { - childName := child.GetPropertyName() - childDataType, ok := m.driverContext.dataTypeTable[child.GetDataTypeName()] + childName := child.GetMainName() + childDataType, ok := m.driverContext.dataTypeTable[child.GetSecondaryName()] if !ok { - return fmt.Errorf("couldn't find data type named %s for property %s of type %s", child.GetDataTypeName(), childName, dataType.GetDataTypeName()) + return fmt.Errorf("couldn't find data type named %s for property %s of type %s", child.GetSecondaryName(), childName, dataType.GetSecondaryName()) } if child.GetOffset() > curPos { skipBytes := child.GetOffset() - curPos @@ -291,7 +291,7 @@ func (m *Connection) serializePlcValue(dataType driverModel.AdsDataTypeTableEntr } err := m.serializePlcValue(childDataType, childArrayInfo, plcValues[childName], wb) if err != nil { - return errors.Wrap(err, fmt.Sprintf("error parsing propery %s of type %s", childName, dataType.GetDataTypeName())) + return errors.Wrap(err, fmt.Sprintf("error parsing propery %s of type %s", childName, dataType.GetSecondaryName())) } curPos = uint32(wb.GetPos()) - startPos } @@ -300,7 +300,7 @@ func (m *Connection) serializePlcValue(dataType driverModel.AdsDataTypeTableEntr // This is a primitive type. valueType, stringLength := m.getPlcValueForAdsDataTypeTableEntry(dataType) if valueType == apiValues.NULL { - return errors.New(fmt.Sprintf("error converting %s into plc4x plc-value type", dataType.GetDataTypeName())) + return errors.New(fmt.Sprintf("error converting %s into plc4x plc-value type", dataType.GetSecondaryName())) } adsValueType, ok := apiValues.PlcValueTypeByName(valueType.String()) if !ok { diff --git a/plc4go/protocols/ads/readwrite/ParserHelper.go b/plc4go/protocols/ads/readwrite/ParserHelper.go index db0f52655a..c63144f05c 100644 --- a/plc4go/protocols/ads/readwrite/ParserHelper.go +++ b/plc4go/protocols/ads/readwrite/ParserHelper.go @@ -65,8 +65,6 @@ func (m AdsParserHelper) Parse(typeName string, arguments []string, io utils.Rea return AdsStampHeaderParseWithBuffer(context.Background(), io) case "AmsSerialResetFrame": return AmsSerialResetFrameParseWithBuffer(context.Background(), io) - case "AdsDataTypeTableChildEntry": - return AdsDataTypeTableChildEntryParseWithBuffer(context.Background(), io) case "AdsNotificationSample": return AdsNotificationSampleParseWithBuffer(context.Background(), io) case "AdsSymbolTableEntry": diff --git a/plc4go/protocols/ads/readwrite/XmlParserHelper.go b/plc4go/protocols/ads/readwrite/XmlParserHelper.go index c0ca6d218f..3e9ff485ea 100644 --- a/plc4go/protocols/ads/readwrite/XmlParserHelper.go +++ b/plc4go/protocols/ads/readwrite/XmlParserHelper.go @@ -77,8 +77,6 @@ func (m AdsXmlParserHelper) Parse(typeName string, xmlString string, parserArgum return AdsStampHeaderParseWithBuffer(context.Background(), utils.NewXmlReadBuffer(strings.NewReader(xmlString))) case "AmsSerialResetFrame": return AmsSerialResetFrameParseWithBuffer(context.Background(), utils.NewXmlReadBuffer(strings.NewReader(xmlString))) - case "AdsDataTypeTableChildEntry": - return AdsDataTypeTableChildEntryParseWithBuffer(context.Background(), utils.NewXmlReadBuffer(strings.NewReader(xmlString))) case "AdsNotificationSample": return AdsNotificationSampleParseWithBuffer(context.Background(), utils.NewXmlReadBuffer(strings.NewReader(xmlString))) case "AdsSymbolTableEntry": diff --git a/plc4go/protocols/ads/readwrite/model/AdsDataTypeTableChildEntry.go b/plc4go/protocols/ads/readwrite/model/AdsDataTypeTableChildEntry.go deleted file mode 100644 index 5270c68c6c..0000000000 --- a/plc4go/protocols/ads/readwrite/model/AdsDataTypeTableChildEntry.go +++ /dev/null @@ -1,825 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package model - -import ( - "context" - "encoding/binary" - stdErrors "errors" - "fmt" - - "github.com/pkg/errors" - "github.com/rs/zerolog" - - "github.com/apache/plc4x/plc4go/spi/codegen" - . "github.com/apache/plc4x/plc4go/spi/codegen/fields" - . "github.com/apache/plc4x/plc4go/spi/codegen/io" - "github.com/apache/plc4x/plc4go/spi/utils" -) - -// Code generated by code-generation. DO NOT EDIT. - -// Constant values. -const AdsDataTypeTableChildEntry_PROPERTYNAMETERMINATOR uint8 = 0x00 -const AdsDataTypeTableChildEntry_DATATYPENAMETERMINATOR uint8 = 0x00 -const AdsDataTypeTableChildEntry_COMMENTTERMINATOR uint8 = 0x00 - -// AdsDataTypeTableChildEntry is the corresponding interface of AdsDataTypeTableChildEntry -// In data-type child entries, the name seems to be used by the property name and the data-type name seems to contain -// what in the parent case the "name" attribute seems to use. -// TODO: In general only the propertyName, dataTypeName and offset are interesting here. The rest is mostly not fully initialized -type AdsDataTypeTableChildEntry interface { - fmt.Stringer - utils.LengthAware - utils.Serializable - utils.Copyable - // GetEntryLength returns EntryLength (property field) - GetEntryLength() uint32 - // GetVersion returns Version (property field) - GetVersion() uint32 - // GetHashValue returns HashValue (property field) - GetHashValue() uint32 - // GetTypeHashValue returns TypeHashValue (property field) - GetTypeHashValue() uint32 - // GetSize returns Size (property field) - GetSize() uint32 - // GetOffset returns Offset (property field) - GetOffset() uint32 - // GetDataType returns DataType (property field) - GetDataType() uint32 - // GetFlags returns Flags (property field) - GetFlags() uint32 - // GetArrayDimensions returns ArrayDimensions (property field) - GetArrayDimensions() uint16 - // GetNumChildren returns NumChildren (property field) - GetNumChildren() uint16 - // GetPropertyName returns PropertyName (property field) - GetPropertyName() string - // GetDataTypeName returns DataTypeName (property field) - GetDataTypeName() string - // GetComment returns Comment (property field) - GetComment() string - // GetArrayInfo returns ArrayInfo (property field) - GetArrayInfo() []AdsDataTypeArrayInfo - // GetChildren returns Children (property field) - GetChildren() []AdsDataTypeTableEntry - // GetRest returns Rest (property field) - // Gobbling up the rest, but it seems there is content in here, when looking - // at the data in wireshark, it seems to be related to the flags field. - // Will have to continue searching for more details on how to decode this. - // I would assume that we'll have some "optional" fields here which depend - // on values in the flags section. - GetRest() []byte - // IsAdsDataTypeTableChildEntry is a marker method to prevent unintentional type checks (interfaces of same signature) - IsAdsDataTypeTableChildEntry() - // CreateBuilder creates a AdsDataTypeTableChildEntryBuilder - CreateAdsDataTypeTableChildEntryBuilder() AdsDataTypeTableChildEntryBuilder -} - -// _AdsDataTypeTableChildEntry is the data-structure of this message -type _AdsDataTypeTableChildEntry struct { - EntryLength uint32 - Version uint32 - HashValue uint32 - TypeHashValue uint32 - Size uint32 - Offset uint32 - DataType uint32 - Flags uint32 - ArrayDimensions uint16 - NumChildren uint16 - PropertyName string - DataTypeName string - Comment string - ArrayInfo []AdsDataTypeArrayInfo - Children []AdsDataTypeTableEntry - Rest []byte -} - -var _ AdsDataTypeTableChildEntry = (*_AdsDataTypeTableChildEntry)(nil) - -// NewAdsDataTypeTableChildEntry factory function for _AdsDataTypeTableChildEntry -func NewAdsDataTypeTableChildEntry(entryLength uint32, version uint32, hashValue uint32, typeHashValue uint32, size uint32, offset uint32, dataType uint32, flags uint32, arrayDimensions uint16, numChildren uint16, propertyName string, dataTypeName string, comment string, arrayInfo []AdsDataTypeArrayInfo, children []AdsDataTypeTableEntry, rest []byte) *_AdsDataTypeTableChildEntry { - return &_AdsDataTypeTableChildEntry{EntryLength: entryLength, Version: version, HashValue: hashValue, TypeHashValue: typeHashValue, Size: size, Offset: offset, DataType: dataType, Flags: flags, ArrayDimensions: arrayDimensions, NumChildren: numChildren, PropertyName: propertyName, DataTypeName: dataTypeName, Comment: comment, ArrayInfo: arrayInfo, Children: children, Rest: rest} -} - -/////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////// -/////////////////////// Builder -/////////////////////// - -// AdsDataTypeTableChildEntryBuilder is a builder for AdsDataTypeTableChildEntry -type AdsDataTypeTableChildEntryBuilder interface { - utils.Copyable - // WithMandatoryFields adds all mandatory fields (convenience for using multiple builder calls) - WithMandatoryFields(entryLength uint32, version uint32, hashValue uint32, typeHashValue uint32, size uint32, offset uint32, dataType uint32, flags uint32, arrayDimensions uint16, numChildren uint16, propertyName string, dataTypeName string, comment string, arrayInfo []AdsDataTypeArrayInfo, children []AdsDataTypeTableEntry, rest []byte) AdsDataTypeTableChildEntryBuilder - // WithEntryLength adds EntryLength (property field) - WithEntryLength(uint32) AdsDataTypeTableChildEntryBuilder - // WithVersion adds Version (property field) - WithVersion(uint32) AdsDataTypeTableChildEntryBuilder - // WithHashValue adds HashValue (property field) - WithHashValue(uint32) AdsDataTypeTableChildEntryBuilder - // WithTypeHashValue adds TypeHashValue (property field) - WithTypeHashValue(uint32) AdsDataTypeTableChildEntryBuilder - // WithSize adds Size (property field) - WithSize(uint32) AdsDataTypeTableChildEntryBuilder - // WithOffset adds Offset (property field) - WithOffset(uint32) AdsDataTypeTableChildEntryBuilder - // WithDataType adds DataType (property field) - WithDataType(uint32) AdsDataTypeTableChildEntryBuilder - // WithFlags adds Flags (property field) - WithFlags(uint32) AdsDataTypeTableChildEntryBuilder - // WithArrayDimensions adds ArrayDimensions (property field) - WithArrayDimensions(uint16) AdsDataTypeTableChildEntryBuilder - // WithNumChildren adds NumChildren (property field) - WithNumChildren(uint16) AdsDataTypeTableChildEntryBuilder - // WithPropertyName adds PropertyName (property field) - WithPropertyName(string) AdsDataTypeTableChildEntryBuilder - // WithDataTypeName adds DataTypeName (property field) - WithDataTypeName(string) AdsDataTypeTableChildEntryBuilder - // WithComment adds Comment (property field) - WithComment(string) AdsDataTypeTableChildEntryBuilder - // WithArrayInfo adds ArrayInfo (property field) - WithArrayInfo(...AdsDataTypeArrayInfo) AdsDataTypeTableChildEntryBuilder - // WithChildren adds Children (property field) - WithChildren(...AdsDataTypeTableEntry) AdsDataTypeTableChildEntryBuilder - // WithRest adds Rest (property field) - WithRest(...byte) AdsDataTypeTableChildEntryBuilder - // Build builds the AdsDataTypeTableChildEntry or returns an error if something is wrong - Build() (AdsDataTypeTableChildEntry, error) - // MustBuild does the same as Build but panics on error - MustBuild() AdsDataTypeTableChildEntry -} - -// NewAdsDataTypeTableChildEntryBuilder() creates a AdsDataTypeTableChildEntryBuilder -func NewAdsDataTypeTableChildEntryBuilder() AdsDataTypeTableChildEntryBuilder { - return &_AdsDataTypeTableChildEntryBuilder{_AdsDataTypeTableChildEntry: new(_AdsDataTypeTableChildEntry)} -} - -type _AdsDataTypeTableChildEntryBuilder struct { - *_AdsDataTypeTableChildEntry - - collectedErr []error -} - -var _ (AdsDataTypeTableChildEntryBuilder) = (*_AdsDataTypeTableChildEntryBuilder)(nil) - -func (b *_AdsDataTypeTableChildEntryBuilder) WithMandatoryFields(entryLength uint32, version uint32, hashValue uint32, typeHashValue uint32, size uint32, offset uint32, dataType uint32, flags uint32, arrayDimensions uint16, numChildren uint16, propertyName string, dataTypeName string, comment string, arrayInfo []AdsDataTypeArrayInfo, children []AdsDataTypeTableEntry, rest []byte) AdsDataTypeTableChildEntryBuilder { - return b.WithEntryLength(entryLength).WithVersion(version).WithHashValue(hashValue).WithTypeHashValue(typeHashValue).WithSize(size).WithOffset(offset).WithDataType(dataType).WithFlags(flags).WithArrayDimensions(arrayDimensions).WithNumChildren(numChildren).WithPropertyName(propertyName).WithDataTypeName(dataTypeName).WithComment(comment).WithArrayInfo(arrayInfo...).WithChildren(children...).WithRest(rest...) -} - -func (b *_AdsDataTypeTableChildEntryBuilder) WithEntryLength(entryLength uint32) AdsDataTypeTableChildEntryBuilder { - b.EntryLength = entryLength - return b -} - -func (b *_AdsDataTypeTableChildEntryBuilder) WithVersion(version uint32) AdsDataTypeTableChildEntryBuilder { - b.Version = version - return b -} - -func (b *_AdsDataTypeTableChildEntryBuilder) WithHashValue(hashValue uint32) AdsDataTypeTableChildEntryBuilder { - b.HashValue = hashValue - return b -} - -func (b *_AdsDataTypeTableChildEntryBuilder) WithTypeHashValue(typeHashValue uint32) AdsDataTypeTableChildEntryBuilder { - b.TypeHashValue = typeHashValue - return b -} - -func (b *_AdsDataTypeTableChildEntryBuilder) WithSize(size uint32) AdsDataTypeTableChildEntryBuilder { - b.Size = size - return b -} - -func (b *_AdsDataTypeTableChildEntryBuilder) WithOffset(offset uint32) AdsDataTypeTableChildEntryBuilder { - b.Offset = offset - return b -} - -func (b *_AdsDataTypeTableChildEntryBuilder) WithDataType(dataType uint32) AdsDataTypeTableChildEntryBuilder { - b.DataType = dataType - return b -} - -func (b *_AdsDataTypeTableChildEntryBuilder) WithFlags(flags uint32) AdsDataTypeTableChildEntryBuilder { - b.Flags = flags - return b -} - -func (b *_AdsDataTypeTableChildEntryBuilder) WithArrayDimensions(arrayDimensions uint16) AdsDataTypeTableChildEntryBuilder { - b.ArrayDimensions = arrayDimensions - return b -} - -func (b *_AdsDataTypeTableChildEntryBuilder) WithNumChildren(numChildren uint16) AdsDataTypeTableChildEntryBuilder { - b.NumChildren = numChildren - return b -} - -func (b *_AdsDataTypeTableChildEntryBuilder) WithPropertyName(propertyName string) AdsDataTypeTableChildEntryBuilder { - b.PropertyName = propertyName - return b -} - -func (b *_AdsDataTypeTableChildEntryBuilder) WithDataTypeName(dataTypeName string) AdsDataTypeTableChildEntryBuilder { - b.DataTypeName = dataTypeName - return b -} - -func (b *_AdsDataTypeTableChildEntryBuilder) WithComment(comment string) AdsDataTypeTableChildEntryBuilder { - b.Comment = comment - return b -} - -func (b *_AdsDataTypeTableChildEntryBuilder) WithArrayInfo(arrayInfo ...AdsDataTypeArrayInfo) AdsDataTypeTableChildEntryBuilder { - b.ArrayInfo = arrayInfo - return b -} - -func (b *_AdsDataTypeTableChildEntryBuilder) WithChildren(children ...AdsDataTypeTableEntry) AdsDataTypeTableChildEntryBuilder { - b.Children = children - return b -} - -func (b *_AdsDataTypeTableChildEntryBuilder) WithRest(rest ...byte) AdsDataTypeTableChildEntryBuilder { - b.Rest = rest - return b -} - -func (b *_AdsDataTypeTableChildEntryBuilder) Build() (AdsDataTypeTableChildEntry, error) { - if err := stdErrors.Join(b.collectedErr...); err != nil { - return nil, errors.Wrap(err, "error occurred during build") - } - return b._AdsDataTypeTableChildEntry.deepCopy(), nil -} - -func (b *_AdsDataTypeTableChildEntryBuilder) MustBuild() AdsDataTypeTableChildEntry { - build, err := b.Build() - if err != nil { - panic(err) - } - return build -} - -func (b *_AdsDataTypeTableChildEntryBuilder) DeepCopy() any { - _copy := b.CreateAdsDataTypeTableChildEntryBuilder().(*_AdsDataTypeTableChildEntryBuilder) - if b.collectedErr != nil { - copy(_copy.collectedErr, b.collectedErr) - } - return _copy -} - -// CreateAdsDataTypeTableChildEntryBuilder creates a AdsDataTypeTableChildEntryBuilder -func (b *_AdsDataTypeTableChildEntry) CreateAdsDataTypeTableChildEntryBuilder() AdsDataTypeTableChildEntryBuilder { - if b == nil { - return NewAdsDataTypeTableChildEntryBuilder() - } - return &_AdsDataTypeTableChildEntryBuilder{_AdsDataTypeTableChildEntry: b.deepCopy()} -} - -/////////////////////// -/////////////////////// -/////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////// - -/////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////// -/////////////////////// Accessors for property fields. -/////////////////////// - -func (m *_AdsDataTypeTableChildEntry) GetEntryLength() uint32 { - return m.EntryLength -} - -func (m *_AdsDataTypeTableChildEntry) GetVersion() uint32 { - return m.Version -} - -func (m *_AdsDataTypeTableChildEntry) GetHashValue() uint32 { - return m.HashValue -} - -func (m *_AdsDataTypeTableChildEntry) GetTypeHashValue() uint32 { - return m.TypeHashValue -} - -func (m *_AdsDataTypeTableChildEntry) GetSize() uint32 { - return m.Size -} - -func (m *_AdsDataTypeTableChildEntry) GetOffset() uint32 { - return m.Offset -} - -func (m *_AdsDataTypeTableChildEntry) GetDataType() uint32 { - return m.DataType -} - -func (m *_AdsDataTypeTableChildEntry) GetFlags() uint32 { - return m.Flags -} - -func (m *_AdsDataTypeTableChildEntry) GetArrayDimensions() uint16 { - return m.ArrayDimensions -} - -func (m *_AdsDataTypeTableChildEntry) GetNumChildren() uint16 { - return m.NumChildren -} - -func (m *_AdsDataTypeTableChildEntry) GetPropertyName() string { - return m.PropertyName -} - -func (m *_AdsDataTypeTableChildEntry) GetDataTypeName() string { - return m.DataTypeName -} - -func (m *_AdsDataTypeTableChildEntry) GetComment() string { - return m.Comment -} - -func (m *_AdsDataTypeTableChildEntry) GetArrayInfo() []AdsDataTypeArrayInfo { - return m.ArrayInfo -} - -func (m *_AdsDataTypeTableChildEntry) GetChildren() []AdsDataTypeTableEntry { - return m.Children -} - -func (m *_AdsDataTypeTableChildEntry) GetRest() []byte { - return m.Rest -} - -/////////////////////// -/////////////////////// -/////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////// -/////////////////////// Accessors for const fields. -/////////////////////// - -func (m *_AdsDataTypeTableChildEntry) GetPropertyNameTerminator() uint8 { - return AdsDataTypeTableChildEntry_PROPERTYNAMETERMINATOR -} - -func (m *_AdsDataTypeTableChildEntry) GetDataTypeNameTerminator() uint8 { - return AdsDataTypeTableChildEntry_DATATYPENAMETERMINATOR -} - -func (m *_AdsDataTypeTableChildEntry) GetCommentTerminator() uint8 { - return AdsDataTypeTableChildEntry_COMMENTTERMINATOR -} - -/////////////////////// -/////////////////////// -/////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////// - -// Deprecated: use the interface for direct cast -func CastAdsDataTypeTableChildEntry(structType any) AdsDataTypeTableChildEntry { - if casted, ok := structType.(AdsDataTypeTableChildEntry); ok { - return casted - } - if casted, ok := structType.(*AdsDataTypeTableChildEntry); ok { - return *casted - } - return nil -} - -func (m *_AdsDataTypeTableChildEntry) GetTypeName() string { - return "AdsDataTypeTableChildEntry" -} - -func (m *_AdsDataTypeTableChildEntry) GetLengthInBits(ctx context.Context) uint16 { - lengthInBits := uint16(0) - - // Simple field (entryLength) - lengthInBits += 32 - - // Simple field (version) - lengthInBits += 32 - - // Simple field (hashValue) - lengthInBits += 32 - - // Simple field (typeHashValue) - lengthInBits += 32 - - // Simple field (size) - lengthInBits += 32 - - // Simple field (offset) - lengthInBits += 32 - - // Simple field (dataType) - lengthInBits += 32 - - // Simple field (flags) - lengthInBits += 32 - - // Implicit Field (propertyNameLength) - lengthInBits += 16 - - // Implicit Field (dataTypeNameLength) - lengthInBits += 16 - - // Implicit Field (commentLength) - lengthInBits += 16 - - // Simple field (arrayDimensions) - lengthInBits += 16 - - // Simple field (numChildren) - lengthInBits += 16 - - // Simple field (propertyName) - lengthInBits += uint16(int32(uint16(len(m.GetPropertyName()))) * int32(int32(8))) - - // Const Field (propertyNameTerminator) - lengthInBits += 8 - - // Simple field (dataTypeName) - lengthInBits += uint16(int32(uint16(len(m.GetDataTypeName()))) * int32(int32(8))) - - // Const Field (dataTypeNameTerminator) - lengthInBits += 8 - - // Simple field (comment) - lengthInBits += uint16(int32(uint16(len(m.GetComment()))) * int32(int32(8))) - - // Const Field (commentTerminator) - lengthInBits += 8 - - // Array field - if len(m.ArrayInfo) > 0 { - for _curItem, element := range m.ArrayInfo { - arrayCtx := utils.CreateArrayContext(ctx, len(m.ArrayInfo), _curItem) - lengthInBits += element.GetLengthInBits(arrayCtx) - } - } - - // Array field - if len(m.Children) > 0 { - for _curItem, element := range m.Children { - arrayCtx := utils.CreateArrayContext(ctx, len(m.Children), _curItem) - lengthInBits += element.GetLengthInBits(arrayCtx) - } - } - - // Array field - if len(m.Rest) > 0 { - lengthInBits += 8 * uint16(len(m.Rest)) - } - - return lengthInBits -} - -func (m *_AdsDataTypeTableChildEntry) GetLengthInBytes(ctx context.Context) uint16 { - return m.GetLengthInBits(ctx) / 8 -} - -func AdsDataTypeTableChildEntryParse(ctx context.Context, theBytes []byte) (AdsDataTypeTableChildEntry, error) { - return AdsDataTypeTableChildEntryParseWithBuffer(ctx, utils.NewReadBufferByteBased(theBytes, utils.WithByteOrderForReadBufferByteBased(binary.LittleEndian))) -} - -func AdsDataTypeTableChildEntryParseWithBufferProducer() func(ctx context.Context, readBuffer utils.ReadBuffer) (AdsDataTypeTableChildEntry, error) { - return func(ctx context.Context, readBuffer utils.ReadBuffer) (AdsDataTypeTableChildEntry, error) { - return AdsDataTypeTableChildEntryParseWithBuffer(ctx, readBuffer) - } -} - -func AdsDataTypeTableChildEntryParseWithBuffer(ctx context.Context, readBuffer utils.ReadBuffer) (AdsDataTypeTableChildEntry, error) { - v, err := (new(_AdsDataTypeTableChildEntry)).parse(ctx, readBuffer) - if err != nil { - return nil, err - } - return v, nil -} - -func (m *_AdsDataTypeTableChildEntry) parse(ctx context.Context, readBuffer utils.ReadBuffer) (__adsDataTypeTableChildEntry AdsDataTypeTableChildEntry, err error) { - positionAware := readBuffer - _ = positionAware - if pullErr := readBuffer.PullContext("AdsDataTypeTableChildEntry"); pullErr != nil { - return nil, errors.Wrap(pullErr, "Error pulling for AdsDataTypeTableChildEntry") - } - currentPos := positionAware.GetPos() - _ = currentPos - var startPos = positionAware.GetPos() - _ = startPos - - entryLength, err := ReadSimpleField(ctx, "entryLength", ReadUnsignedInt(readBuffer, uint8(32)), codegen.WithByteOrder(binary.LittleEndian)) - if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'entryLength' field")) - } - m.EntryLength = entryLength - - version, err := ReadSimpleField(ctx, "version", ReadUnsignedInt(readBuffer, uint8(32)), codegen.WithByteOrder(binary.LittleEndian)) - if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'version' field")) - } - m.Version = version - - hashValue, err := ReadSimpleField(ctx, "hashValue", ReadUnsignedInt(readBuffer, uint8(32)), codegen.WithByteOrder(binary.LittleEndian)) - if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'hashValue' field")) - } - m.HashValue = hashValue - - typeHashValue, err := ReadSimpleField(ctx, "typeHashValue", ReadUnsignedInt(readBuffer, uint8(32)), codegen.WithByteOrder(binary.LittleEndian)) - if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'typeHashValue' field")) - } - m.TypeHashValue = typeHashValue - - size, err := ReadSimpleField(ctx, "size", ReadUnsignedInt(readBuffer, uint8(32)), codegen.WithByteOrder(binary.LittleEndian)) - if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'size' field")) - } - m.Size = size - - offset, err := ReadSimpleField(ctx, "offset", ReadUnsignedInt(readBuffer, uint8(32)), codegen.WithByteOrder(binary.LittleEndian)) - if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'offset' field")) - } - m.Offset = offset - - dataType, err := ReadSimpleField(ctx, "dataType", ReadUnsignedInt(readBuffer, uint8(32)), codegen.WithByteOrder(binary.LittleEndian)) - if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'dataType' field")) - } - m.DataType = dataType - - flags, err := ReadSimpleField(ctx, "flags", ReadUnsignedInt(readBuffer, uint8(32)), codegen.WithByteOrder(binary.LittleEndian)) - if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'flags' field")) - } - m.Flags = flags - - propertyNameLength, err := ReadImplicitField[uint16](ctx, "propertyNameLength", ReadUnsignedShort(readBuffer, uint8(16)), codegen.WithByteOrder(binary.LittleEndian)) - if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'propertyNameLength' field")) - } - _ = propertyNameLength - - dataTypeNameLength, err := ReadImplicitField[uint16](ctx, "dataTypeNameLength", ReadUnsignedShort(readBuffer, uint8(16)), codegen.WithByteOrder(binary.LittleEndian)) - if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'dataTypeNameLength' field")) - } - _ = dataTypeNameLength - - commentLength, err := ReadImplicitField[uint16](ctx, "commentLength", ReadUnsignedShort(readBuffer, uint8(16)), codegen.WithByteOrder(binary.LittleEndian)) - if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'commentLength' field")) - } - _ = commentLength - - arrayDimensions, err := ReadSimpleField(ctx, "arrayDimensions", ReadUnsignedShort(readBuffer, uint8(16)), codegen.WithByteOrder(binary.LittleEndian)) - if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'arrayDimensions' field")) - } - m.ArrayDimensions = arrayDimensions - - numChildren, err := ReadSimpleField(ctx, "numChildren", ReadUnsignedShort(readBuffer, uint8(16)), codegen.WithByteOrder(binary.LittleEndian)) - if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'numChildren' field")) - } - m.NumChildren = numChildren - - propertyName, err := ReadSimpleField(ctx, "propertyName", ReadString(readBuffer, uint32(int32(propertyNameLength)*int32(int32(8)))), codegen.WithByteOrder(binary.LittleEndian)) - if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'propertyName' field")) - } - m.PropertyName = propertyName - - propertyNameTerminator, err := ReadConstField[uint8](ctx, "propertyNameTerminator", ReadUnsignedByte(readBuffer, uint8(8)), AdsDataTypeTableChildEntry_PROPERTYNAMETERMINATOR, codegen.WithByteOrder(binary.LittleEndian)) - if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'propertyNameTerminator' field")) - } - _ = propertyNameTerminator - - dataTypeName, err := ReadSimpleField(ctx, "dataTypeName", ReadString(readBuffer, uint32(int32(dataTypeNameLength)*int32(int32(8)))), codegen.WithByteOrder(binary.LittleEndian)) - if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'dataTypeName' field")) - } - m.DataTypeName = dataTypeName - - dataTypeNameTerminator, err := ReadConstField[uint8](ctx, "dataTypeNameTerminator", ReadUnsignedByte(readBuffer, uint8(8)), AdsDataTypeTableChildEntry_DATATYPENAMETERMINATOR, codegen.WithByteOrder(binary.LittleEndian)) - if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'dataTypeNameTerminator' field")) - } - _ = dataTypeNameTerminator - - comment, err := ReadSimpleField(ctx, "comment", ReadString(readBuffer, uint32(int32(commentLength)*int32(int32(8)))), codegen.WithByteOrder(binary.LittleEndian)) - if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'comment' field")) - } - m.Comment = comment - - commentTerminator, err := ReadConstField[uint8](ctx, "commentTerminator", ReadUnsignedByte(readBuffer, uint8(8)), AdsDataTypeTableChildEntry_COMMENTTERMINATOR, codegen.WithByteOrder(binary.LittleEndian)) - if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'commentTerminator' field")) - } - _ = commentTerminator - - arrayInfo, err := ReadCountArrayField[AdsDataTypeArrayInfo](ctx, "arrayInfo", ReadComplex[AdsDataTypeArrayInfo](AdsDataTypeArrayInfoParseWithBuffer, readBuffer), uint64(arrayDimensions), codegen.WithByteOrder(binary.LittleEndian)) - if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'arrayInfo' field")) - } - m.ArrayInfo = arrayInfo - - children, err := ReadCountArrayField[AdsDataTypeTableEntry](ctx, "children", ReadComplex[AdsDataTypeTableEntry](AdsDataTypeTableEntryParseWithBuffer, readBuffer), uint64(numChildren), codegen.WithByteOrder(binary.LittleEndian)) - if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'children' field")) - } - m.Children = children - - rest, err := readBuffer.ReadByteArray("rest", int(int32(entryLength)-int32((positionAware.GetPos()-startPos))), codegen.WithByteOrder(binary.LittleEndian)) - if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'rest' field")) - } - m.Rest = rest - - if closeErr := readBuffer.CloseContext("AdsDataTypeTableChildEntry"); closeErr != nil { - return nil, errors.Wrap(closeErr, "Error closing for AdsDataTypeTableChildEntry") - } - - return m, nil -} - -func (m *_AdsDataTypeTableChildEntry) Serialize() ([]byte, error) { - wb := utils.NewWriteBufferByteBased(utils.WithInitialSizeForByteBasedBuffer(int(m.GetLengthInBytes(context.Background()))), utils.WithByteOrderForByteBasedBuffer(binary.LittleEndian)) - if err := m.SerializeWithWriteBuffer(context.Background(), wb); err != nil { - return nil, err - } - return wb.GetBytes(), nil -} - -func (m *_AdsDataTypeTableChildEntry) SerializeWithWriteBuffer(ctx context.Context, writeBuffer utils.WriteBuffer) error { - positionAware := writeBuffer - _ = positionAware - log := zerolog.Ctx(ctx) - _ = log - if pushErr := writeBuffer.PushContext("AdsDataTypeTableChildEntry"); pushErr != nil { - return errors.Wrap(pushErr, "Error pushing for AdsDataTypeTableChildEntry") - } - - if err := WriteSimpleField[uint32](ctx, "entryLength", m.GetEntryLength(), WriteUnsignedInt(writeBuffer, 32), codegen.WithByteOrder(binary.LittleEndian)); err != nil { - return errors.Wrap(err, "Error serializing 'entryLength' field") - } - - if err := WriteSimpleField[uint32](ctx, "version", m.GetVersion(), WriteUnsignedInt(writeBuffer, 32), codegen.WithByteOrder(binary.LittleEndian)); err != nil { - return errors.Wrap(err, "Error serializing 'version' field") - } - - if err := WriteSimpleField[uint32](ctx, "hashValue", m.GetHashValue(), WriteUnsignedInt(writeBuffer, 32), codegen.WithByteOrder(binary.LittleEndian)); err != nil { - return errors.Wrap(err, "Error serializing 'hashValue' field") - } - - if err := WriteSimpleField[uint32](ctx, "typeHashValue", m.GetTypeHashValue(), WriteUnsignedInt(writeBuffer, 32), codegen.WithByteOrder(binary.LittleEndian)); err != nil { - return errors.Wrap(err, "Error serializing 'typeHashValue' field") - } - - if err := WriteSimpleField[uint32](ctx, "size", m.GetSize(), WriteUnsignedInt(writeBuffer, 32), codegen.WithByteOrder(binary.LittleEndian)); err != nil { - return errors.Wrap(err, "Error serializing 'size' field") - } - - if err := WriteSimpleField[uint32](ctx, "offset", m.GetOffset(), WriteUnsignedInt(writeBuffer, 32), codegen.WithByteOrder(binary.LittleEndian)); err != nil { - return errors.Wrap(err, "Error serializing 'offset' field") - } - - if err := WriteSimpleField[uint32](ctx, "dataType", m.GetDataType(), WriteUnsignedInt(writeBuffer, 32), codegen.WithByteOrder(binary.LittleEndian)); err != nil { - return errors.Wrap(err, "Error serializing 'dataType' field") - } - - if err := WriteSimpleField[uint32](ctx, "flags", m.GetFlags(), WriteUnsignedInt(writeBuffer, 32), codegen.WithByteOrder(binary.LittleEndian)); err != nil { - return errors.Wrap(err, "Error serializing 'flags' field") - } - propertyNameLength := uint16(uint16(len(m.GetPropertyName()))) - if err := WriteImplicitField(ctx, "propertyNameLength", propertyNameLength, WriteUnsignedShort(writeBuffer, 16), codegen.WithByteOrder(binary.LittleEndian)); err != nil { - return errors.Wrap(err, "Error serializing 'propertyNameLength' field") - } - dataTypeNameLength := uint16(uint16(len(m.GetDataTypeName()))) - if err := WriteImplicitField(ctx, "dataTypeNameLength", dataTypeNameLength, WriteUnsignedShort(writeBuffer, 16), codegen.WithByteOrder(binary.LittleEndian)); err != nil { - return errors.Wrap(err, "Error serializing 'dataTypeNameLength' field") - } - commentLength := uint16(uint16(len(m.GetComment()))) - if err := WriteImplicitField(ctx, "commentLength", commentLength, WriteUnsignedShort(writeBuffer, 16), codegen.WithByteOrder(binary.LittleEndian)); err != nil { - return errors.Wrap(err, "Error serializing 'commentLength' field") - } - - if err := WriteSimpleField[uint16](ctx, "arrayDimensions", m.GetArrayDimensions(), WriteUnsignedShort(writeBuffer, 16), codegen.WithByteOrder(binary.LittleEndian)); err != nil { - return errors.Wrap(err, "Error serializing 'arrayDimensions' field") - } - - if err := WriteSimpleField[uint16](ctx, "numChildren", m.GetNumChildren(), WriteUnsignedShort(writeBuffer, 16), codegen.WithByteOrder(binary.LittleEndian)); err != nil { - return errors.Wrap(err, "Error serializing 'numChildren' field") - } - - if err := WriteSimpleField[string](ctx, "propertyName", m.GetPropertyName(), WriteString(writeBuffer, int32(int32(uint16(len(m.GetPropertyName())))*int32(int32(8)))), codegen.WithByteOrder(binary.LittleEndian)); err != nil { - return errors.Wrap(err, "Error serializing 'propertyName' field") - } - - if err := WriteConstField(ctx, "propertyNameTerminator", AdsDataTypeTableChildEntry_PROPERTYNAMETERMINATOR, WriteUnsignedByte(writeBuffer, 8), codegen.WithByteOrder(binary.LittleEndian)); err != nil { - return errors.Wrap(err, "Error serializing 'propertyNameTerminator' field") - } - - if err := WriteSimpleField[string](ctx, "dataTypeName", m.GetDataTypeName(), WriteString(writeBuffer, int32(int32(uint16(len(m.GetDataTypeName())))*int32(int32(8)))), codegen.WithByteOrder(binary.LittleEndian)); err != nil { - return errors.Wrap(err, "Error serializing 'dataTypeName' field") - } - - if err := WriteConstField(ctx, "dataTypeNameTerminator", AdsDataTypeTableChildEntry_DATATYPENAMETERMINATOR, WriteUnsignedByte(writeBuffer, 8), codegen.WithByteOrder(binary.LittleEndian)); err != nil { - return errors.Wrap(err, "Error serializing 'dataTypeNameTerminator' field") - } - - if err := WriteSimpleField[string](ctx, "comment", m.GetComment(), WriteString(writeBuffer, int32(int32(uint16(len(m.GetComment())))*int32(int32(8)))), codegen.WithByteOrder(binary.LittleEndian)); err != nil { - return errors.Wrap(err, "Error serializing 'comment' field") - } - - if err := WriteConstField(ctx, "commentTerminator", AdsDataTypeTableChildEntry_COMMENTTERMINATOR, WriteUnsignedByte(writeBuffer, 8), codegen.WithByteOrder(binary.LittleEndian)); err != nil { - return errors.Wrap(err, "Error serializing 'commentTerminator' field") - } - - if err := WriteComplexTypeArrayField(ctx, "arrayInfo", m.GetArrayInfo(), writeBuffer, codegen.WithByteOrder(binary.LittleEndian)); err != nil { - return errors.Wrap(err, "Error serializing 'arrayInfo' field") - } - - if err := WriteComplexTypeArrayField(ctx, "children", m.GetChildren(), writeBuffer, codegen.WithByteOrder(binary.LittleEndian)); err != nil { - return errors.Wrap(err, "Error serializing 'children' field") - } - - if err := WriteByteArrayField(ctx, "rest", m.GetRest(), WriteByteArray(writeBuffer, 8), codegen.WithByteOrder(binary.LittleEndian)); err != nil { - return errors.Wrap(err, "Error serializing 'rest' field") - } - - if popErr := writeBuffer.PopContext("AdsDataTypeTableChildEntry"); popErr != nil { - return errors.Wrap(popErr, "Error popping for AdsDataTypeTableChildEntry") - } - return nil -} - -func (m *_AdsDataTypeTableChildEntry) IsAdsDataTypeTableChildEntry() {} - -func (m *_AdsDataTypeTableChildEntry) DeepCopy() any { - return m.deepCopy() -} - -func (m *_AdsDataTypeTableChildEntry) deepCopy() *_AdsDataTypeTableChildEntry { - if m == nil { - return nil - } - _AdsDataTypeTableChildEntryCopy := &_AdsDataTypeTableChildEntry{ - m.EntryLength, - m.Version, - m.HashValue, - m.TypeHashValue, - m.Size, - m.Offset, - m.DataType, - m.Flags, - m.ArrayDimensions, - m.NumChildren, - m.PropertyName, - m.DataTypeName, - m.Comment, - utils.DeepCopySlice[AdsDataTypeArrayInfo, AdsDataTypeArrayInfo](m.ArrayInfo), - utils.DeepCopySlice[AdsDataTypeTableEntry, AdsDataTypeTableEntry](m.Children), - utils.DeepCopySlice[byte, byte](m.Rest), - } - return _AdsDataTypeTableChildEntryCopy -} - -func (m *_AdsDataTypeTableChildEntry) String() string { - if m == nil { - return "<nil>" - } - wb := utils.NewWriteBufferBoxBased( - utils.WithWriteBufferBoxBasedMergeSingleBoxes(), - utils.WithWriteBufferBoxBasedOmitEmptyBoxes(), - utils.WithWriteBufferBoxBasedPrintPosLengthFooter(), - ) - if err := wb.WriteSerializable(context.Background(), m); err != nil { - return err.Error() - } - return wb.GetBox().String() -} diff --git a/plc4go/protocols/ads/readwrite/model/AdsDataTypeTableEntry.go b/plc4go/protocols/ads/readwrite/model/AdsDataTypeTableEntry.go index 20f93f69d7..372097115c 100644 --- a/plc4go/protocols/ads/readwrite/model/AdsDataTypeTableEntry.go +++ b/plc4go/protocols/ads/readwrite/model/AdsDataTypeTableEntry.go @@ -37,8 +37,8 @@ import ( // Code generated by code-generation. DO NOT EDIT. // Constant values. -const AdsDataTypeTableEntry_DATATYPENAMETERMINATOR uint8 = 0x00 -const AdsDataTypeTableEntry_SIMPLETYPENAMETERMINATOR uint8 = 0x00 +const AdsDataTypeTableEntry_MAINNAMETERMINATOR uint8 = 0x00 +const AdsDataTypeTableEntry_SECONDARYNAMETERMINATOR uint8 = 0x00 const AdsDataTypeTableEntry_COMMENTTERMINATOR uint8 = 0x00 // AdsDataTypeTableEntry is the corresponding interface of AdsDataTypeTableEntry @@ -68,16 +68,16 @@ type AdsDataTypeTableEntry interface { GetArrayDimensions() uint16 // GetNumChildren returns NumChildren (property field) GetNumChildren() uint16 - // GetDataTypeName returns DataTypeName (property field) - GetDataTypeName() string - // GetSimpleTypeName returns SimpleTypeName (property field) - GetSimpleTypeName() string + // GetMainName returns MainName (property field) + GetMainName() string + // GetSecondaryName returns SecondaryName (property field) + GetSecondaryName() string // GetComment returns Comment (property field) GetComment() string // GetArrayInfo returns ArrayInfo (property field) GetArrayInfo() []AdsDataTypeArrayInfo // GetChildren returns Children (property field) - GetChildren() []AdsDataTypeTableChildEntry + GetChildren() []AdsDataTypeTableEntry // GetRest returns Rest (property field) // Gobbling up the rest, but it seems there is content in here, when looking // at the data in wireshark, it seems to be related to the flags field. @@ -103,19 +103,19 @@ type _AdsDataTypeTableEntry struct { Flags uint32 ArrayDimensions uint16 NumChildren uint16 - DataTypeName string - SimpleTypeName string + MainName string + SecondaryName string Comment string ArrayInfo []AdsDataTypeArrayInfo - Children []AdsDataTypeTableChildEntry + Children []AdsDataTypeTableEntry Rest []byte } var _ AdsDataTypeTableEntry = (*_AdsDataTypeTableEntry)(nil) // NewAdsDataTypeTableEntry factory function for _AdsDataTypeTableEntry -func NewAdsDataTypeTableEntry(entryLength uint32, version uint32, hashValue uint32, typeHashValue uint32, size uint32, offset uint32, dataType uint32, flags uint32, arrayDimensions uint16, numChildren uint16, dataTypeName string, simpleTypeName string, comment string, arrayInfo []AdsDataTypeArrayInfo, children []AdsDataTypeTableChildEntry, rest []byte) *_AdsDataTypeTableEntry { - return &_AdsDataTypeTableEntry{EntryLength: entryLength, Version: version, HashValue: hashValue, TypeHashValue: typeHashValue, Size: size, Offset: offset, DataType: dataType, Flags: flags, ArrayDimensions: arrayDimensions, NumChildren: numChildren, DataTypeName: dataTypeName, SimpleTypeName: simpleTypeName, Comment: comment, ArrayInfo: arrayInfo, Children: children, Rest: rest} +func NewAdsDataTypeTableEntry(entryLength uint32, version uint32, hashValue uint32, typeHashValue uint32, size uint32, offset uint32, dataType uint32, flags uint32, arrayDimensions uint16, numChildren uint16, mainName string, secondaryName string, comment string, arrayInfo []AdsDataTypeArrayInfo, children []AdsDataTypeTableEntry, rest []byte) *_AdsDataTypeTableEntry { + return &_AdsDataTypeTableEntry{EntryLength: entryLength, Version: version, HashValue: hashValue, TypeHashValue: typeHashValue, Size: size, Offset: offset, DataType: dataType, Flags: flags, ArrayDimensions: arrayDimensions, NumChildren: numChildren, MainName: mainName, SecondaryName: secondaryName, Comment: comment, ArrayInfo: arrayInfo, Children: children, Rest: rest} } /////////////////////////////////////////////////////////// @@ -127,7 +127,7 @@ func NewAdsDataTypeTableEntry(entryLength uint32, version uint32, hashValue uint type AdsDataTypeTableEntryBuilder interface { utils.Copyable // WithMandatoryFields adds all mandatory fields (convenience for using multiple builder calls) - WithMandatoryFields(entryLength uint32, version uint32, hashValue uint32, typeHashValue uint32, size uint32, offset uint32, dataType uint32, flags uint32, arrayDimensions uint16, numChildren uint16, dataTypeName string, simpleTypeName string, comment string, arrayInfo []AdsDataTypeArrayInfo, children []AdsDataTypeTableChildEntry, rest []byte) AdsDataTypeTableEntryBuilder + WithMandatoryFields(entryLength uint32, version uint32, hashValue uint32, typeHashValue uint32, size uint32, offset uint32, dataType uint32, flags uint32, arrayDimensions uint16, numChildren uint16, mainName string, secondaryName string, comment string, arrayInfo []AdsDataTypeArrayInfo, children []AdsDataTypeTableEntry, rest []byte) AdsDataTypeTableEntryBuilder // WithEntryLength adds EntryLength (property field) WithEntryLength(uint32) AdsDataTypeTableEntryBuilder // WithVersion adds Version (property field) @@ -148,16 +148,16 @@ type AdsDataTypeTableEntryBuilder interface { WithArrayDimensions(uint16) AdsDataTypeTableEntryBuilder // WithNumChildren adds NumChildren (property field) WithNumChildren(uint16) AdsDataTypeTableEntryBuilder - // WithDataTypeName adds DataTypeName (property field) - WithDataTypeName(string) AdsDataTypeTableEntryBuilder - // WithSimpleTypeName adds SimpleTypeName (property field) - WithSimpleTypeName(string) AdsDataTypeTableEntryBuilder + // WithMainName adds MainName (property field) + WithMainName(string) AdsDataTypeTableEntryBuilder + // WithSecondaryName adds SecondaryName (property field) + WithSecondaryName(string) AdsDataTypeTableEntryBuilder // WithComment adds Comment (property field) WithComment(string) AdsDataTypeTableEntryBuilder // WithArrayInfo adds ArrayInfo (property field) WithArrayInfo(...AdsDataTypeArrayInfo) AdsDataTypeTableEntryBuilder // WithChildren adds Children (property field) - WithChildren(...AdsDataTypeTableChildEntry) AdsDataTypeTableEntryBuilder + WithChildren(...AdsDataTypeTableEntry) AdsDataTypeTableEntryBuilder // WithRest adds Rest (property field) WithRest(...byte) AdsDataTypeTableEntryBuilder // Build builds the AdsDataTypeTableEntry or returns an error if something is wrong @@ -179,8 +179,8 @@ type _AdsDataTypeTableEntryBuilder struct { var _ (AdsDataTypeTableEntryBuilder) = (*_AdsDataTypeTableEntryBuilder)(nil) -func (b *_AdsDataTypeTableEntryBuilder) WithMandatoryFields(entryLength uint32, version uint32, hashValue uint32, typeHashValue uint32, size uint32, offset uint32, dataType uint32, flags uint32, arrayDimensions uint16, numChildren uint16, dataTypeName string, simpleTypeName string, comment string, arrayInfo []AdsDataTypeArrayInfo, children []AdsDataTypeTableChildEntry, rest []byte) AdsDataTypeTableEntryBuilder { - return b.WithEntryLength(entryLength).WithVersion(version).WithHashValue(hashValue).WithTypeHashValue(typeHashValue).WithSize(size).WithOffset(offset).WithDataType(dataType).WithFlags(flags).WithArrayDimensions(arrayDimensions).WithNumChildren(numChildren).WithDataTypeName(dataTypeName).WithSimpleTypeName(simpleTypeName).WithComment(comment).WithArrayInfo(arrayInfo...).WithChildren(children...).WithRest(rest...) +func (b *_AdsDataTypeTableEntryBuilder) WithMandatoryFields(entryLength uint32, version uint32, hashValue uint32, typeHashValue uint32, size uint32, offset uint32, dataType uint32, flags uint32, arrayDimensions uint16, numChildren uint16, mainName string, secondaryName string, comment string, arrayInfo []AdsDataTypeArrayInfo, children []AdsDataTypeTableEntry, rest []byte) AdsDataTypeTableEntryBuilder { + return b.WithEntryLength(entryLength).WithVersion(version).WithHashValue(hashValue).WithTypeHashValue(typeHashValue).WithSize(size).WithOffset(offset).WithDataType(dataType).WithFlags(flags).WithArrayDimensions(arrayDimensions).WithNumChildren(numChildren).WithMainName(mainName).WithSecondaryName(secondaryName).WithComment(comment).WithArrayInfo(arrayInfo...).WithChildren(children...).WithRest(rest...) } func (b *_AdsDataTypeTableEntryBuilder) WithEntryLength(entryLength uint32) AdsDataTypeTableEntryBuilder { @@ -233,13 +233,13 @@ func (b *_AdsDataTypeTableEntryBuilder) WithNumChildren(numChildren uint16) AdsD return b } -func (b *_AdsDataTypeTableEntryBuilder) WithDataTypeName(dataTypeName string) AdsDataTypeTableEntryBuilder { - b.DataTypeName = dataTypeName +func (b *_AdsDataTypeTableEntryBuilder) WithMainName(mainName string) AdsDataTypeTableEntryBuilder { + b.MainName = mainName return b } -func (b *_AdsDataTypeTableEntryBuilder) WithSimpleTypeName(simpleTypeName string) AdsDataTypeTableEntryBuilder { - b.SimpleTypeName = simpleTypeName +func (b *_AdsDataTypeTableEntryBuilder) WithSecondaryName(secondaryName string) AdsDataTypeTableEntryBuilder { + b.SecondaryName = secondaryName return b } @@ -253,7 +253,7 @@ func (b *_AdsDataTypeTableEntryBuilder) WithArrayInfo(arrayInfo ...AdsDataTypeAr return b } -func (b *_AdsDataTypeTableEntryBuilder) WithChildren(children ...AdsDataTypeTableChildEntry) AdsDataTypeTableEntryBuilder { +func (b *_AdsDataTypeTableEntryBuilder) WithChildren(children ...AdsDataTypeTableEntry) AdsDataTypeTableEntryBuilder { b.Children = children return b } @@ -344,12 +344,12 @@ func (m *_AdsDataTypeTableEntry) GetNumChildren() uint16 { return m.NumChildren } -func (m *_AdsDataTypeTableEntry) GetDataTypeName() string { - return m.DataTypeName +func (m *_AdsDataTypeTableEntry) GetMainName() string { + return m.MainName } -func (m *_AdsDataTypeTableEntry) GetSimpleTypeName() string { - return m.SimpleTypeName +func (m *_AdsDataTypeTableEntry) GetSecondaryName() string { + return m.SecondaryName } func (m *_AdsDataTypeTableEntry) GetComment() string { @@ -360,7 +360,7 @@ func (m *_AdsDataTypeTableEntry) GetArrayInfo() []AdsDataTypeArrayInfo { return m.ArrayInfo } -func (m *_AdsDataTypeTableEntry) GetChildren() []AdsDataTypeTableChildEntry { +func (m *_AdsDataTypeTableEntry) GetChildren() []AdsDataTypeTableEntry { return m.Children } @@ -377,12 +377,12 @@ func (m *_AdsDataTypeTableEntry) GetRest() []byte { /////////////////////// Accessors for const fields. /////////////////////// -func (m *_AdsDataTypeTableEntry) GetDataTypeNameTerminator() uint8 { - return AdsDataTypeTableEntry_DATATYPENAMETERMINATOR +func (m *_AdsDataTypeTableEntry) GetMainNameTerminator() uint8 { + return AdsDataTypeTableEntry_MAINNAMETERMINATOR } -func (m *_AdsDataTypeTableEntry) GetSimpleTypeNameTerminator() uint8 { - return AdsDataTypeTableEntry_SIMPLETYPENAMETERMINATOR +func (m *_AdsDataTypeTableEntry) GetSecondaryNameTerminator() uint8 { + return AdsDataTypeTableEntry_SECONDARYNAMETERMINATOR } func (m *_AdsDataTypeTableEntry) GetCommentTerminator() uint8 { @@ -436,10 +436,10 @@ func (m *_AdsDataTypeTableEntry) GetLengthInBits(ctx context.Context) uint16 { // Simple field (flags) lengthInBits += 32 - // Implicit Field (dataTypeNameLength) + // Implicit Field (mainNameLength) lengthInBits += 16 - // Implicit Field (simpleTypeNameLength) + // Implicit Field (secondaryNameLength) lengthInBits += 16 // Implicit Field (commentLength) @@ -451,16 +451,16 @@ func (m *_AdsDataTypeTableEntry) GetLengthInBits(ctx context.Context) uint16 { // Simple field (numChildren) lengthInBits += 16 - // Simple field (dataTypeName) - lengthInBits += uint16(int32(uint16(len(m.GetDataTypeName()))) * int32(int32(8))) + // Simple field (mainName) + lengthInBits += uint16(int32(uint16(len(m.GetMainName()))) * int32(int32(8))) - // Const Field (dataTypeNameTerminator) + // Const Field (mainNameTerminator) lengthInBits += 8 - // Simple field (simpleTypeName) - lengthInBits += uint16(int32(uint16(len(m.GetSimpleTypeName()))) * int32(int32(8))) + // Simple field (secondaryName) + lengthInBits += uint16(int32(uint16(len(m.GetSecondaryName()))) * int32(int32(8))) - // Const Field (simpleTypeNameTerminator) + // Const Field (secondaryNameTerminator) lengthInBits += 8 // Simple field (comment) @@ -574,17 +574,17 @@ func (m *_AdsDataTypeTableEntry) parse(ctx context.Context, readBuffer utils.Rea } m.Flags = flags - dataTypeNameLength, err := ReadImplicitField[uint16](ctx, "dataTypeNameLength", ReadUnsignedShort(readBuffer, uint8(16)), codegen.WithByteOrder(binary.LittleEndian)) + mainNameLength, err := ReadImplicitField[uint16](ctx, "mainNameLength", ReadUnsignedShort(readBuffer, uint8(16)), codegen.WithByteOrder(binary.LittleEndian)) if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'dataTypeNameLength' field")) + return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'mainNameLength' field")) } - _ = dataTypeNameLength + _ = mainNameLength - simpleTypeNameLength, err := ReadImplicitField[uint16](ctx, "simpleTypeNameLength", ReadUnsignedShort(readBuffer, uint8(16)), codegen.WithByteOrder(binary.LittleEndian)) + secondaryNameLength, err := ReadImplicitField[uint16](ctx, "secondaryNameLength", ReadUnsignedShort(readBuffer, uint8(16)), codegen.WithByteOrder(binary.LittleEndian)) if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'simpleTypeNameLength' field")) + return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'secondaryNameLength' field")) } - _ = simpleTypeNameLength + _ = secondaryNameLength commentLength, err := ReadImplicitField[uint16](ctx, "commentLength", ReadUnsignedShort(readBuffer, uint8(16)), codegen.WithByteOrder(binary.LittleEndian)) if err != nil { @@ -604,29 +604,29 @@ func (m *_AdsDataTypeTableEntry) parse(ctx context.Context, readBuffer utils.Rea } m.NumChildren = numChildren - dataTypeName, err := ReadSimpleField(ctx, "dataTypeName", ReadString(readBuffer, uint32(int32(dataTypeNameLength)*int32(int32(8)))), codegen.WithByteOrder(binary.LittleEndian)) + mainName, err := ReadSimpleField(ctx, "mainName", ReadString(readBuffer, uint32(int32(mainNameLength)*int32(int32(8)))), codegen.WithByteOrder(binary.LittleEndian)) if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'dataTypeName' field")) + return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'mainName' field")) } - m.DataTypeName = dataTypeName + m.MainName = mainName - dataTypeNameTerminator, err := ReadConstField[uint8](ctx, "dataTypeNameTerminator", ReadUnsignedByte(readBuffer, uint8(8)), AdsDataTypeTableEntry_DATATYPENAMETERMINATOR, codegen.WithByteOrder(binary.LittleEndian)) + mainNameTerminator, err := ReadConstField[uint8](ctx, "mainNameTerminator", ReadUnsignedByte(readBuffer, uint8(8)), AdsDataTypeTableEntry_MAINNAMETERMINATOR, codegen.WithByteOrder(binary.LittleEndian)) if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'dataTypeNameTerminator' field")) + return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'mainNameTerminator' field")) } - _ = dataTypeNameTerminator + _ = mainNameTerminator - simpleTypeName, err := ReadSimpleField(ctx, "simpleTypeName", ReadString(readBuffer, uint32(int32(simpleTypeNameLength)*int32(int32(8)))), codegen.WithByteOrder(binary.LittleEndian)) + secondaryName, err := ReadSimpleField(ctx, "secondaryName", ReadString(readBuffer, uint32(int32(secondaryNameLength)*int32(int32(8)))), codegen.WithByteOrder(binary.LittleEndian)) if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'simpleTypeName' field")) + return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'secondaryName' field")) } - m.SimpleTypeName = simpleTypeName + m.SecondaryName = secondaryName - simpleTypeNameTerminator, err := ReadConstField[uint8](ctx, "simpleTypeNameTerminator", ReadUnsignedByte(readBuffer, uint8(8)), AdsDataTypeTableEntry_SIMPLETYPENAMETERMINATOR, codegen.WithByteOrder(binary.LittleEndian)) + secondaryNameTerminator, err := ReadConstField[uint8](ctx, "secondaryNameTerminator", ReadUnsignedByte(readBuffer, uint8(8)), AdsDataTypeTableEntry_SECONDARYNAMETERMINATOR, codegen.WithByteOrder(binary.LittleEndian)) if err != nil { - return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'simpleTypeNameTerminator' field")) + return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'secondaryNameTerminator' field")) } - _ = simpleTypeNameTerminator + _ = secondaryNameTerminator comment, err := ReadSimpleField(ctx, "comment", ReadString(readBuffer, uint32(int32(commentLength)*int32(int32(8)))), codegen.WithByteOrder(binary.LittleEndian)) if err != nil { @@ -646,7 +646,7 @@ func (m *_AdsDataTypeTableEntry) parse(ctx context.Context, readBuffer utils.Rea } m.ArrayInfo = arrayInfo - children, err := ReadCountArrayField[AdsDataTypeTableChildEntry](ctx, "children", ReadComplex[AdsDataTypeTableChildEntry](AdsDataTypeTableChildEntryParseWithBuffer, readBuffer), uint64(numChildren), codegen.WithByteOrder(binary.LittleEndian)) + children, err := ReadCountArrayField[AdsDataTypeTableEntry](ctx, "children", ReadComplex[AdsDataTypeTableEntry](AdsDataTypeTableEntryParseWithBuffer, readBuffer), uint64(numChildren), codegen.WithByteOrder(binary.LittleEndian)) if err != nil { return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'children' field")) } @@ -713,13 +713,13 @@ func (m *_AdsDataTypeTableEntry) SerializeWithWriteBuffer(ctx context.Context, w if err := WriteSimpleField[uint32](ctx, "flags", m.GetFlags(), WriteUnsignedInt(writeBuffer, 32), codegen.WithByteOrder(binary.LittleEndian)); err != nil { return errors.Wrap(err, "Error serializing 'flags' field") } - dataTypeNameLength := uint16(uint16(len(m.GetDataTypeName()))) - if err := WriteImplicitField(ctx, "dataTypeNameLength", dataTypeNameLength, WriteUnsignedShort(writeBuffer, 16), codegen.WithByteOrder(binary.LittleEndian)); err != nil { - return errors.Wrap(err, "Error serializing 'dataTypeNameLength' field") + mainNameLength := uint16(uint16(len(m.GetMainName()))) + if err := WriteImplicitField(ctx, "mainNameLength", mainNameLength, WriteUnsignedShort(writeBuffer, 16), codegen.WithByteOrder(binary.LittleEndian)); err != nil { + return errors.Wrap(err, "Error serializing 'mainNameLength' field") } - simpleTypeNameLength := uint16(uint16(len(m.GetSimpleTypeName()))) - if err := WriteImplicitField(ctx, "simpleTypeNameLength", simpleTypeNameLength, WriteUnsignedShort(writeBuffer, 16), codegen.WithByteOrder(binary.LittleEndian)); err != nil { - return errors.Wrap(err, "Error serializing 'simpleTypeNameLength' field") + secondaryNameLength := uint16(uint16(len(m.GetSecondaryName()))) + if err := WriteImplicitField(ctx, "secondaryNameLength", secondaryNameLength, WriteUnsignedShort(writeBuffer, 16), codegen.WithByteOrder(binary.LittleEndian)); err != nil { + return errors.Wrap(err, "Error serializing 'secondaryNameLength' field") } commentLength := uint16(uint16(len(m.GetComment()))) if err := WriteImplicitField(ctx, "commentLength", commentLength, WriteUnsignedShort(writeBuffer, 16), codegen.WithByteOrder(binary.LittleEndian)); err != nil { @@ -734,20 +734,20 @@ func (m *_AdsDataTypeTableEntry) SerializeWithWriteBuffer(ctx context.Context, w return errors.Wrap(err, "Error serializing 'numChildren' field") } - if err := WriteSimpleField[string](ctx, "dataTypeName", m.GetDataTypeName(), WriteString(writeBuffer, int32(int32(uint16(len(m.GetDataTypeName())))*int32(int32(8)))), codegen.WithByteOrder(binary.LittleEndian)); err != nil { - return errors.Wrap(err, "Error serializing 'dataTypeName' field") + if err := WriteSimpleField[string](ctx, "mainName", m.GetMainName(), WriteString(writeBuffer, int32(int32(uint16(len(m.GetMainName())))*int32(int32(8)))), codegen.WithByteOrder(binary.LittleEndian)); err != nil { + return errors.Wrap(err, "Error serializing 'mainName' field") } - if err := WriteConstField(ctx, "dataTypeNameTerminator", AdsDataTypeTableEntry_DATATYPENAMETERMINATOR, WriteUnsignedByte(writeBuffer, 8), codegen.WithByteOrder(binary.LittleEndian)); err != nil { - return errors.Wrap(err, "Error serializing 'dataTypeNameTerminator' field") + if err := WriteConstField(ctx, "mainNameTerminator", AdsDataTypeTableEntry_MAINNAMETERMINATOR, WriteUnsignedByte(writeBuffer, 8), codegen.WithByteOrder(binary.LittleEndian)); err != nil { + return errors.Wrap(err, "Error serializing 'mainNameTerminator' field") } - if err := WriteSimpleField[string](ctx, "simpleTypeName", m.GetSimpleTypeName(), WriteString(writeBuffer, int32(int32(uint16(len(m.GetSimpleTypeName())))*int32(int32(8)))), codegen.WithByteOrder(binary.LittleEndian)); err != nil { - return errors.Wrap(err, "Error serializing 'simpleTypeName' field") + if err := WriteSimpleField[string](ctx, "secondaryName", m.GetSecondaryName(), WriteString(writeBuffer, int32(int32(uint16(len(m.GetSecondaryName())))*int32(int32(8)))), codegen.WithByteOrder(binary.LittleEndian)); err != nil { + return errors.Wrap(err, "Error serializing 'secondaryName' field") } - if err := WriteConstField(ctx, "simpleTypeNameTerminator", AdsDataTypeTableEntry_SIMPLETYPENAMETERMINATOR, WriteUnsignedByte(writeBuffer, 8), codegen.WithByteOrder(binary.LittleEndian)); err != nil { - return errors.Wrap(err, "Error serializing 'simpleTypeNameTerminator' field") + if err := WriteConstField(ctx, "secondaryNameTerminator", AdsDataTypeTableEntry_SECONDARYNAMETERMINATOR, WriteUnsignedByte(writeBuffer, 8), codegen.WithByteOrder(binary.LittleEndian)); err != nil { + return errors.Wrap(err, "Error serializing 'secondaryNameTerminator' field") } if err := WriteSimpleField[string](ctx, "comment", m.GetComment(), WriteString(writeBuffer, int32(int32(uint16(len(m.GetComment())))*int32(int32(8)))), codegen.WithByteOrder(binary.LittleEndian)); err != nil { @@ -797,11 +797,11 @@ func (m *_AdsDataTypeTableEntry) deepCopy() *_AdsDataTypeTableEntry { m.Flags, m.ArrayDimensions, m.NumChildren, - m.DataTypeName, - m.SimpleTypeName, + m.MainName, + m.SecondaryName, m.Comment, utils.DeepCopySlice[AdsDataTypeArrayInfo, AdsDataTypeArrayInfo](m.ArrayInfo), - utils.DeepCopySlice[AdsDataTypeTableChildEntry, AdsDataTypeTableChildEntry](m.Children), + utils.DeepCopySlice[AdsDataTypeTableEntry, AdsDataTypeTableEntry](m.Children), utils.DeepCopySlice[byte, byte](m.Rest), } return _AdsDataTypeTableEntryCopy diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcBrowseRequestInterceptor.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcBrowseRequestInterceptor.java index 495a27c5cf..893987de86 100644 --- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcBrowseRequestInterceptor.java +++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcBrowseRequestInterceptor.java @@ -18,8 +18,10 @@ */ package org.apache.plc4x.java.api.messages; +import org.apache.plc4x.java.api.model.PlcQuery; + public interface PlcBrowseRequestInterceptor { - boolean intercept(PlcBrowseItem item); + boolean intercept(PlcQuery query, PlcBrowseItem item); } diff --git a/plc4j/drivers/ads/src/main/generated/org/apache/plc4x/java/ads/readwrite/AdsDataTypeTableChildEntry.java b/plc4j/drivers/ads/src/main/generated/org/apache/plc4x/java/ads/readwrite/AdsDataTypeTableChildEntry.java deleted file mode 100644 index 2cd336d1a9..0000000000 --- a/plc4j/drivers/ads/src/main/generated/org/apache/plc4x/java/ads/readwrite/AdsDataTypeTableChildEntry.java +++ /dev/null @@ -1,679 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.plc4x.java.ads.readwrite; - -import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*; -import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*; -import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*; -import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*; -import static org.apache.plc4x.java.spi.generation.StaticHelper.*; - -import java.time.*; -import java.util.*; -import org.apache.plc4x.java.api.exceptions.*; -import org.apache.plc4x.java.api.value.*; -import org.apache.plc4x.java.spi.codegen.*; -import org.apache.plc4x.java.spi.codegen.fields.*; -import org.apache.plc4x.java.spi.codegen.io.*; -import org.apache.plc4x.java.spi.generation.*; - -// Code generated by code-generation. DO NOT EDIT. - -/** - * In data-type child entries, the name seems to be used by the property name and the data-type name - * seems to contain what in the parent case the "name" attribute seems to use. TODO: In general only - * the propertyName, dataTypeName and offset are interesting here. The rest is mostly not fully - * initialized - */ -public class AdsDataTypeTableChildEntry implements Message { - - // Constant values. - public static final Short PROPERTYNAMETERMINATOR = 0x00; - public static final Short DATATYPENAMETERMINATOR = 0x00; - public static final Short COMMENTTERMINATOR = 0x00; - - // Properties. - protected final long entryLength; - protected final long version; - protected final long hashValue; - protected final long typeHashValue; - protected final long size; - protected final long offset; - protected final long dataType; - protected final long flags; - protected final int arrayDimensions; - protected final int numChildren; - protected final String propertyName; - protected final String dataTypeName; - protected final String comment; - protected final List<AdsDataTypeArrayInfo> arrayInfo; - protected final List<AdsDataTypeTableEntry> children; - - /** - * Gobbling up the rest, but it seems there is content in here, when looking at the data in - * wireshark, it seems to be related to the flags field. Will have to continue searching for more - * details on how to decode this. I would assume that we'll have some "optional" fields here which - * depend on values in the flags section. - */ - protected final byte[] rest; - - public AdsDataTypeTableChildEntry( - long entryLength, - long version, - long hashValue, - long typeHashValue, - long size, - long offset, - long dataType, - long flags, - int arrayDimensions, - int numChildren, - String propertyName, - String dataTypeName, - String comment, - List<AdsDataTypeArrayInfo> arrayInfo, - List<AdsDataTypeTableEntry> children, - byte[] rest) { - super(); - this.entryLength = entryLength; - this.version = version; - this.hashValue = hashValue; - this.typeHashValue = typeHashValue; - this.size = size; - this.offset = offset; - this.dataType = dataType; - this.flags = flags; - this.arrayDimensions = arrayDimensions; - this.numChildren = numChildren; - this.propertyName = propertyName; - this.dataTypeName = dataTypeName; - this.comment = comment; - this.arrayInfo = arrayInfo; - this.children = children; - this.rest = rest; - } - - public long getEntryLength() { - return entryLength; - } - - public long getVersion() { - return version; - } - - public long getHashValue() { - return hashValue; - } - - public long getTypeHashValue() { - return typeHashValue; - } - - public long getSize() { - return size; - } - - public long getOffset() { - return offset; - } - - public long getDataType() { - return dataType; - } - - public long getFlags() { - return flags; - } - - public int getArrayDimensions() { - return arrayDimensions; - } - - public int getNumChildren() { - return numChildren; - } - - public String getPropertyName() { - return propertyName; - } - - public String getDataTypeName() { - return dataTypeName; - } - - public String getComment() { - return comment; - } - - public List<AdsDataTypeArrayInfo> getArrayInfo() { - return arrayInfo; - } - - public List<AdsDataTypeTableEntry> getChildren() { - return children; - } - - /** - * Gobbling up the rest, but it seems there is content in here, when looking at the data in - * wireshark, it seems to be related to the flags field. Will have to continue searching for more - * details on how to decode this. I would assume that we'll have some "optional" fields here which - * depend on values in the flags section. - */ - public byte[] getRest() { - return rest; - } - - public short getPropertyNameTerminator() { - return PROPERTYNAMETERMINATOR; - } - - public short getDataTypeNameTerminator() { - return DATATYPENAMETERMINATOR; - } - - public short getCommentTerminator() { - return COMMENTTERMINATOR; - } - - public void serialize(WriteBuffer writeBuffer) throws SerializationException { - PositionAware positionAware = writeBuffer; - boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get(); - int startPos = positionAware.getPos(); - writeBuffer.pushContext("AdsDataTypeTableChildEntry"); - - // Simple Field (entryLength) - writeSimpleField( - "entryLength", - entryLength, - writeUnsignedLong(writeBuffer, 32), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - // Simple Field (version) - writeSimpleField( - "version", - version, - writeUnsignedLong(writeBuffer, 32), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - // Simple Field (hashValue) - writeSimpleField( - "hashValue", - hashValue, - writeUnsignedLong(writeBuffer, 32), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - // Simple Field (typeHashValue) - writeSimpleField( - "typeHashValue", - typeHashValue, - writeUnsignedLong(writeBuffer, 32), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - // Simple Field (size) - writeSimpleField( - "size", - size, - writeUnsignedLong(writeBuffer, 32), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - // Simple Field (offset) - writeSimpleField( - "offset", - offset, - writeUnsignedLong(writeBuffer, 32), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - // Simple Field (dataType) - writeSimpleField( - "dataType", - dataType, - writeUnsignedLong(writeBuffer, 32), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - // Simple Field (flags) - writeSimpleField( - "flags", - flags, - writeUnsignedLong(writeBuffer, 32), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - // Implicit Field (propertyNameLength) (Used for parsing, but its value is not stored as it's - // implicitly given by the objects content) - int propertyNameLength = (int) (STR_LEN(getPropertyName())); - writeImplicitField( - "propertyNameLength", - propertyNameLength, - writeUnsignedInt(writeBuffer, 16), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - // Implicit Field (dataTypeNameLength) (Used for parsing, but its value is not stored as it's - // implicitly given by the objects content) - int dataTypeNameLength = (int) (STR_LEN(getDataTypeName())); - writeImplicitField( - "dataTypeNameLength", - dataTypeNameLength, - writeUnsignedInt(writeBuffer, 16), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - // Implicit Field (commentLength) (Used for parsing, but its value is not stored as it's - // implicitly given by the objects content) - int commentLength = (int) (STR_LEN(getComment())); - writeImplicitField( - "commentLength", - commentLength, - writeUnsignedInt(writeBuffer, 16), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - // Simple Field (arrayDimensions) - writeSimpleField( - "arrayDimensions", - arrayDimensions, - writeUnsignedInt(writeBuffer, 16), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - // Simple Field (numChildren) - writeSimpleField( - "numChildren", - numChildren, - writeUnsignedInt(writeBuffer, 16), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - // Simple Field (propertyName) - writeSimpleField( - "propertyName", - propertyName, - writeString(writeBuffer, (propertyNameLength) * (8)), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - // Const Field (propertyNameTerminator) - writeConstField( - "propertyNameTerminator", - PROPERTYNAMETERMINATOR, - writeUnsignedShort(writeBuffer, 8), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - // Simple Field (dataTypeName) - writeSimpleField( - "dataTypeName", - dataTypeName, - writeString(writeBuffer, (dataTypeNameLength) * (8)), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - // Const Field (dataTypeNameTerminator) - writeConstField( - "dataTypeNameTerminator", - DATATYPENAMETERMINATOR, - writeUnsignedShort(writeBuffer, 8), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - // Simple Field (comment) - writeSimpleField( - "comment", - comment, - writeString(writeBuffer, (commentLength) * (8)), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - // Const Field (commentTerminator) - writeConstField( - "commentTerminator", - COMMENTTERMINATOR, - writeUnsignedShort(writeBuffer, 8), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - // Array Field (arrayInfo) - writeComplexTypeArrayField( - "arrayInfo", arrayInfo, writeBuffer, WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - // Array Field (children) - writeComplexTypeArrayField( - "children", children, writeBuffer, WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - // Array Field (rest) - writeByteArrayField( - "rest", - rest, - writeByteArray(writeBuffer, 8), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - writeBuffer.popContext("AdsDataTypeTableChildEntry"); - } - - @Override - public int getLengthInBytes() { - return (int) Math.ceil((float) getLengthInBits() / 8.0); - } - - @Override - public int getLengthInBits() { - int lengthInBits = 0; - AdsDataTypeTableChildEntry _value = this; - boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get(); - - // Simple field (entryLength) - lengthInBits += 32; - - // Simple field (version) - lengthInBits += 32; - - // Simple field (hashValue) - lengthInBits += 32; - - // Simple field (typeHashValue) - lengthInBits += 32; - - // Simple field (size) - lengthInBits += 32; - - // Simple field (offset) - lengthInBits += 32; - - // Simple field (dataType) - lengthInBits += 32; - - // Simple field (flags) - lengthInBits += 32; - - // Implicit Field (propertyNameLength) - lengthInBits += 16; - - // Implicit Field (dataTypeNameLength) - lengthInBits += 16; - - // Implicit Field (commentLength) - lengthInBits += 16; - - // Simple field (arrayDimensions) - lengthInBits += 16; - - // Simple field (numChildren) - lengthInBits += 16; - - // Simple field (propertyName) - lengthInBits += (STR_LEN(getPropertyName())) * (8); - - // Const Field (propertyNameTerminator) - lengthInBits += 8; - - // Simple field (dataTypeName) - lengthInBits += (STR_LEN(getDataTypeName())) * (8); - - // Const Field (dataTypeNameTerminator) - lengthInBits += 8; - - // Simple field (comment) - lengthInBits += (STR_LEN(getComment())) * (8); - - // Const Field (commentTerminator) - lengthInBits += 8; - - // Array field - if (arrayInfo != null) { - int i = 0; - for (AdsDataTypeArrayInfo element : arrayInfo) { - ThreadLocalHelper.lastItemThreadLocal.set(++i >= arrayInfo.size()); - lengthInBits += element.getLengthInBits(); - } - } - - // Array field - if (children != null) { - int i = 0; - for (AdsDataTypeTableEntry element : children) { - ThreadLocalHelper.lastItemThreadLocal.set(++i >= children.size()); - lengthInBits += element.getLengthInBits(); - } - } - - // Array field - if (rest != null) { - lengthInBits += 8 * rest.length; - } - - return lengthInBits; - } - - public static AdsDataTypeTableChildEntry staticParse(ReadBuffer readBuffer) - throws ParseException { - readBuffer.pullContext("AdsDataTypeTableChildEntry"); - PositionAware positionAware = readBuffer; - int startPos = positionAware.getPos(); - int curPos; - boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get(); - - long entryLength = - readSimpleField( - "entryLength", - readUnsignedLong(readBuffer, 32), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - long version = - readSimpleField( - "version", - readUnsignedLong(readBuffer, 32), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - long hashValue = - readSimpleField( - "hashValue", - readUnsignedLong(readBuffer, 32), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - long typeHashValue = - readSimpleField( - "typeHashValue", - readUnsignedLong(readBuffer, 32), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - long size = - readSimpleField( - "size", - readUnsignedLong(readBuffer, 32), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - long offset = - readSimpleField( - "offset", - readUnsignedLong(readBuffer, 32), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - long dataType = - readSimpleField( - "dataType", - readUnsignedLong(readBuffer, 32), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - long flags = - readSimpleField( - "flags", - readUnsignedLong(readBuffer, 32), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - int propertyNameLength = - readImplicitField( - "propertyNameLength", - readUnsignedInt(readBuffer, 16), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - int dataTypeNameLength = - readImplicitField( - "dataTypeNameLength", - readUnsignedInt(readBuffer, 16), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - int commentLength = - readImplicitField( - "commentLength", - readUnsignedInt(readBuffer, 16), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - int arrayDimensions = - readSimpleField( - "arrayDimensions", - readUnsignedInt(readBuffer, 16), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - int numChildren = - readSimpleField( - "numChildren", - readUnsignedInt(readBuffer, 16), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - String propertyName = - readSimpleField( - "propertyName", - readString(readBuffer, (propertyNameLength) * (8)), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - short propertyNameTerminator = - readConstField( - "propertyNameTerminator", - readUnsignedShort(readBuffer, 8), - AdsDataTypeTableChildEntry.PROPERTYNAMETERMINATOR, - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - String dataTypeName = - readSimpleField( - "dataTypeName", - readString(readBuffer, (dataTypeNameLength) * (8)), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - short dataTypeNameTerminator = - readConstField( - "dataTypeNameTerminator", - readUnsignedShort(readBuffer, 8), - AdsDataTypeTableChildEntry.DATATYPENAMETERMINATOR, - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - String comment = - readSimpleField( - "comment", - readString(readBuffer, (commentLength) * (8)), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - short commentTerminator = - readConstField( - "commentTerminator", - readUnsignedShort(readBuffer, 8), - AdsDataTypeTableChildEntry.COMMENTTERMINATOR, - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - List<AdsDataTypeArrayInfo> arrayInfo = - readCountArrayField( - "arrayInfo", - readComplex(() -> AdsDataTypeArrayInfo.staticParse(readBuffer), readBuffer), - arrayDimensions, - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - List<AdsDataTypeTableEntry> children = - readCountArrayField( - "children", - readComplex(() -> AdsDataTypeTableEntry.staticParse(readBuffer), readBuffer), - numChildren, - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - byte[] rest = - readBuffer.readByteArray( - "rest", - Math.toIntExact((entryLength) - ((positionAware.getPos() - startPos))), - WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - - readBuffer.closeContext("AdsDataTypeTableChildEntry"); - // Create the instance - AdsDataTypeTableChildEntry _adsDataTypeTableChildEntry; - _adsDataTypeTableChildEntry = - new AdsDataTypeTableChildEntry( - entryLength, - version, - hashValue, - typeHashValue, - size, - offset, - dataType, - flags, - arrayDimensions, - numChildren, - propertyName, - dataTypeName, - comment, - arrayInfo, - children, - rest); - return _adsDataTypeTableChildEntry; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (!(o instanceof AdsDataTypeTableChildEntry)) { - return false; - } - AdsDataTypeTableChildEntry that = (AdsDataTypeTableChildEntry) o; - return (getEntryLength() == that.getEntryLength()) - && (getVersion() == that.getVersion()) - && (getHashValue() == that.getHashValue()) - && (getTypeHashValue() == that.getTypeHashValue()) - && (getSize() == that.getSize()) - && (getOffset() == that.getOffset()) - && (getDataType() == that.getDataType()) - && (getFlags() == that.getFlags()) - && (getArrayDimensions() == that.getArrayDimensions()) - && (getNumChildren() == that.getNumChildren()) - && (getPropertyName() == that.getPropertyName()) - && (getDataTypeName() == that.getDataTypeName()) - && (getComment() == that.getComment()) - && (getArrayInfo() == that.getArrayInfo()) - && (getChildren() == that.getChildren()) - && (getRest() == that.getRest()) - && true; - } - - @Override - public int hashCode() { - return Objects.hash( - getEntryLength(), - getVersion(), - getHashValue(), - getTypeHashValue(), - getSize(), - getOffset(), - getDataType(), - getFlags(), - getArrayDimensions(), - getNumChildren(), - getPropertyName(), - getDataTypeName(), - getComment(), - getArrayInfo(), - getChildren(), - getRest()); - } - - @Override - public String toString() { - WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true); - try { - writeBufferBoxBased.writeSerializable(this); - } catch (SerializationException e) { - throw new RuntimeException(e); - } - return "\n" + writeBufferBoxBased.getBox().toString() + "\n"; - } -} diff --git a/plc4j/drivers/ads/src/main/generated/org/apache/plc4x/java/ads/readwrite/AdsDataTypeTableEntry.java b/plc4j/drivers/ads/src/main/generated/org/apache/plc4x/java/ads/readwrite/AdsDataTypeTableEntry.java index 2a7f0848bb..eb7f4a3d7a 100644 --- a/plc4j/drivers/ads/src/main/generated/org/apache/plc4x/java/ads/readwrite/AdsDataTypeTableEntry.java +++ b/plc4j/drivers/ads/src/main/generated/org/apache/plc4x/java/ads/readwrite/AdsDataTypeTableEntry.java @@ -39,8 +39,8 @@ import org.apache.plc4x.java.spi.generation.*; public class AdsDataTypeTableEntry implements Message { // Constant values. - public static final Short DATATYPENAMETERMINATOR = 0x00; - public static final Short SIMPLETYPENAMETERMINATOR = 0x00; + public static final Short MAINNAMETERMINATOR = 0x00; + public static final Short SECONDARYNAMETERMINATOR = 0x00; public static final Short COMMENTTERMINATOR = 0x00; // Properties. @@ -54,11 +54,11 @@ public class AdsDataTypeTableEntry implements Message { protected final long flags; protected final int arrayDimensions; protected final int numChildren; - protected final String dataTypeName; - protected final String simpleTypeName; + protected final String mainName; + protected final String secondaryName; protected final String comment; protected final List<AdsDataTypeArrayInfo> arrayInfo; - protected final List<AdsDataTypeTableChildEntry> children; + protected final List<AdsDataTypeTableEntry> children; /** * Gobbling up the rest, but it seems there is content in here, when looking at the data in @@ -79,11 +79,11 @@ public class AdsDataTypeTableEntry implements Message { long flags, int arrayDimensions, int numChildren, - String dataTypeName, - String simpleTypeName, + String mainName, + String secondaryName, String comment, List<AdsDataTypeArrayInfo> arrayInfo, - List<AdsDataTypeTableChildEntry> children, + List<AdsDataTypeTableEntry> children, byte[] rest) { super(); this.entryLength = entryLength; @@ -96,8 +96,8 @@ public class AdsDataTypeTableEntry implements Message { this.flags = flags; this.arrayDimensions = arrayDimensions; this.numChildren = numChildren; - this.dataTypeName = dataTypeName; - this.simpleTypeName = simpleTypeName; + this.mainName = mainName; + this.secondaryName = secondaryName; this.comment = comment; this.arrayInfo = arrayInfo; this.children = children; @@ -144,12 +144,12 @@ public class AdsDataTypeTableEntry implements Message { return numChildren; } - public String getDataTypeName() { - return dataTypeName; + public String getMainName() { + return mainName; } - public String getSimpleTypeName() { - return simpleTypeName; + public String getSecondaryName() { + return secondaryName; } public String getComment() { @@ -160,7 +160,7 @@ public class AdsDataTypeTableEntry implements Message { return arrayInfo; } - public List<AdsDataTypeTableChildEntry> getChildren() { + public List<AdsDataTypeTableEntry> getChildren() { return children; } @@ -174,12 +174,12 @@ public class AdsDataTypeTableEntry implements Message { return rest; } - public short getDataTypeNameTerminator() { - return DATATYPENAMETERMINATOR; + public short getMainNameTerminator() { + return MAINNAMETERMINATOR; } - public short getSimpleTypeNameTerminator() { - return SIMPLETYPENAMETERMINATOR; + public short getSecondaryNameTerminator() { + return SECONDARYNAMETERMINATOR; } public short getCommentTerminator() { @@ -248,21 +248,21 @@ public class AdsDataTypeTableEntry implements Message { writeUnsignedLong(writeBuffer, 32), WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - // Implicit Field (dataTypeNameLength) (Used for parsing, but its value is not stored as it's + // Implicit Field (mainNameLength) (Used for parsing, but its value is not stored as it's // implicitly given by the objects content) - int dataTypeNameLength = (int) (STR_LEN(getDataTypeName())); + int mainNameLength = (int) (STR_LEN(getMainName())); writeImplicitField( - "dataTypeNameLength", - dataTypeNameLength, + "mainNameLength", + mainNameLength, writeUnsignedInt(writeBuffer, 16), WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - // Implicit Field (simpleTypeNameLength) (Used for parsing, but its value is not stored as it's + // Implicit Field (secondaryNameLength) (Used for parsing, but its value is not stored as it's // implicitly given by the objects content) - int simpleTypeNameLength = (int) (STR_LEN(getSimpleTypeName())); + int secondaryNameLength = (int) (STR_LEN(getSecondaryName())); writeImplicitField( - "simpleTypeNameLength", - simpleTypeNameLength, + "secondaryNameLength", + secondaryNameLength, writeUnsignedInt(writeBuffer, 16), WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); @@ -289,31 +289,31 @@ public class AdsDataTypeTableEntry implements Message { writeUnsignedInt(writeBuffer, 16), WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - // Simple Field (dataTypeName) + // Simple Field (mainName) writeSimpleField( - "dataTypeName", - dataTypeName, - writeString(writeBuffer, (dataTypeNameLength) * (8)), + "mainName", + mainName, + writeString(writeBuffer, (mainNameLength) * (8)), WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - // Const Field (dataTypeNameTerminator) + // Const Field (mainNameTerminator) writeConstField( - "dataTypeNameTerminator", - DATATYPENAMETERMINATOR, + "mainNameTerminator", + MAINNAMETERMINATOR, writeUnsignedShort(writeBuffer, 8), WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - // Simple Field (simpleTypeName) + // Simple Field (secondaryName) writeSimpleField( - "simpleTypeName", - simpleTypeName, - writeString(writeBuffer, (simpleTypeNameLength) * (8)), + "secondaryName", + secondaryName, + writeString(writeBuffer, (secondaryNameLength) * (8)), WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - // Const Field (simpleTypeNameTerminator) + // Const Field (secondaryNameTerminator) writeConstField( - "simpleTypeNameTerminator", - SIMPLETYPENAMETERMINATOR, + "secondaryNameTerminator", + SECONDARYNAMETERMINATOR, writeUnsignedShort(writeBuffer, 8), WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); @@ -384,10 +384,10 @@ public class AdsDataTypeTableEntry implements Message { // Simple field (flags) lengthInBits += 32; - // Implicit Field (dataTypeNameLength) + // Implicit Field (mainNameLength) lengthInBits += 16; - // Implicit Field (simpleTypeNameLength) + // Implicit Field (secondaryNameLength) lengthInBits += 16; // Implicit Field (commentLength) @@ -399,16 +399,16 @@ public class AdsDataTypeTableEntry implements Message { // Simple field (numChildren) lengthInBits += 16; - // Simple field (dataTypeName) - lengthInBits += (STR_LEN(getDataTypeName())) * (8); + // Simple field (mainName) + lengthInBits += (STR_LEN(getMainName())) * (8); - // Const Field (dataTypeNameTerminator) + // Const Field (mainNameTerminator) lengthInBits += 8; - // Simple field (simpleTypeName) - lengthInBits += (STR_LEN(getSimpleTypeName())) * (8); + // Simple field (secondaryName) + lengthInBits += (STR_LEN(getSecondaryName())) * (8); - // Const Field (simpleTypeNameTerminator) + // Const Field (secondaryNameTerminator) lengthInBits += 8; // Simple field (comment) @@ -429,7 +429,7 @@ public class AdsDataTypeTableEntry implements Message { // Array field if (children != null) { int i = 0; - for (AdsDataTypeTableChildEntry element : children) { + for (AdsDataTypeTableEntry element : children) { ThreadLocalHelper.lastItemThreadLocal.set(++i >= children.size()); lengthInBits += element.getLengthInBits(); } @@ -498,15 +498,15 @@ public class AdsDataTypeTableEntry implements Message { readUnsignedLong(readBuffer, 32), WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - int dataTypeNameLength = + int mainNameLength = readImplicitField( - "dataTypeNameLength", + "mainNameLength", readUnsignedInt(readBuffer, 16), WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - int simpleTypeNameLength = + int secondaryNameLength = readImplicitField( - "simpleTypeNameLength", + "secondaryNameLength", readUnsignedInt(readBuffer, 16), WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); @@ -528,30 +528,30 @@ public class AdsDataTypeTableEntry implements Message { readUnsignedInt(readBuffer, 16), WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - String dataTypeName = + String mainName = readSimpleField( - "dataTypeName", - readString(readBuffer, (dataTypeNameLength) * (8)), + "mainName", + readString(readBuffer, (mainNameLength) * (8)), WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - short dataTypeNameTerminator = + short mainNameTerminator = readConstField( - "dataTypeNameTerminator", + "mainNameTerminator", readUnsignedShort(readBuffer, 8), - AdsDataTypeTableEntry.DATATYPENAMETERMINATOR, + AdsDataTypeTableEntry.MAINNAMETERMINATOR, WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - String simpleTypeName = + String secondaryName = readSimpleField( - "simpleTypeName", - readString(readBuffer, (simpleTypeNameLength) * (8)), + "secondaryName", + readString(readBuffer, (secondaryNameLength) * (8)), WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - short simpleTypeNameTerminator = + short secondaryNameTerminator = readConstField( - "simpleTypeNameTerminator", + "secondaryNameTerminator", readUnsignedShort(readBuffer, 8), - AdsDataTypeTableEntry.SIMPLETYPENAMETERMINATOR, + AdsDataTypeTableEntry.SECONDARYNAMETERMINATOR, WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); String comment = @@ -574,10 +574,10 @@ public class AdsDataTypeTableEntry implements Message { arrayDimensions, WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); - List<AdsDataTypeTableChildEntry> children = + List<AdsDataTypeTableEntry> children = readCountArrayField( "children", - readComplex(() -> AdsDataTypeTableChildEntry.staticParse(readBuffer), readBuffer), + readComplex(() -> AdsDataTypeTableEntry.staticParse(readBuffer), readBuffer), numChildren, WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN)); @@ -602,8 +602,8 @@ public class AdsDataTypeTableEntry implements Message { flags, arrayDimensions, numChildren, - dataTypeName, - simpleTypeName, + mainName, + secondaryName, comment, arrayInfo, children, @@ -630,8 +630,8 @@ public class AdsDataTypeTableEntry implements Message { && (getFlags() == that.getFlags()) && (getArrayDimensions() == that.getArrayDimensions()) && (getNumChildren() == that.getNumChildren()) - && (getDataTypeName() == that.getDataTypeName()) - && (getSimpleTypeName() == that.getSimpleTypeName()) + && (getMainName() == that.getMainName()) + && (getSecondaryName() == that.getSecondaryName()) && (getComment() == that.getComment()) && (getArrayInfo() == that.getArrayInfo()) && (getChildren() == that.getChildren()) @@ -652,8 +652,8 @@ public class AdsDataTypeTableEntry implements Message { getFlags(), getArrayDimensions(), getNumChildren(), - getDataTypeName(), - getSimpleTypeName(), + getMainName(), + getSecondaryName(), getComment(), getArrayInfo(), getChildren(), diff --git a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/protocol/AdsProtocolLogic.java b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/protocol/AdsProtocolLogic.java index 1ca0279f13..eb604f254e 100644 --- a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/protocol/AdsProtocolLogic.java +++ b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/protocol/AdsProtocolLogic.java @@ -380,7 +380,7 @@ public class AdsProtocolLogic extends Plc4xProtocolBase<AmsTCPPacket> implements for (int i = 0; i < adsTableSizes.getDataTypeCount(); i++) { try { AdsDataTypeTableEntry adsDataTypeTableEntry = AdsDataTypeTableEntry.staticParse(rb); - dataTypeTable.put(adsDataTypeTableEntry.getDataTypeName(), adsDataTypeTableEntry); + dataTypeTable.put(adsDataTypeTableEntry.getMainName(), adsDataTypeTableEntry); } catch (ParseException e) { throw new RuntimeException(e); } @@ -492,7 +492,7 @@ public class AdsProtocolLogic extends Plc4xProtocolBase<AmsTCPPacket> implements @Override public CompletableFuture<PlcBrowseResponse> browse(PlcBrowseRequest browseRequest) { - return browseWithInterceptor(browseRequest, item -> true); + return browseWithInterceptor(browseRequest, (query, item) -> true); } public CompletableFuture<PlcBrowseResponse> browseWithInterceptor(PlcBrowseRequest browseRequest, PlcBrowseRequestInterceptor interceptor) { @@ -500,6 +500,7 @@ public class AdsProtocolLogic extends Plc4xProtocolBase<AmsTCPPacket> implements Map<String, PlcResponseCode> responseCodes = new HashMap<>(); Map<String, List<PlcBrowseItem>> values = new HashMap<>(); for (String queryName : browseRequest.getQueryNames()) { + PlcQuery query = browseRequest.getQuery(queryName); List<PlcBrowseItem> resultsForQuery = new ArrayList<>(); for (AdsSymbolTableEntry symbol : symbolTable.values()) { // Get the datatype of this entry. @@ -539,7 +540,7 @@ public class AdsProtocolLogic extends Plc4xProtocolBase<AmsTCPPacket> implements true, !symbol.getFlagReadOnly(), true, false, itemArrayInfo, childMap, options); // Check if this item should be added to the result - if (interceptor.intercept(item)) { + if (interceptor.intercept(query, item)) { // Add the type itself. resultsForQuery.add(item); } @@ -555,9 +556,9 @@ public class AdsProtocolLogic extends Plc4xProtocolBase<AmsTCPPacket> implements protected List<PlcBrowseItem> getBrowseItems(String basePath, long baseGroupId, long baseOffset, boolean parentWritable, AdsDataTypeTableEntry dataType) { // If this is an array type, then we need to lookup it's elemental type and use that instead if(dataType.getArrayDimensions() > 0) { - Optional<AdsDataTypeTableEntry> dataTypeTableEntry = getDataTypeTableEntry(dataType.getSimpleTypeName()); + Optional<AdsDataTypeTableEntry> dataTypeTableEntry = getDataTypeTableEntry(dataType.getMainName()); if(dataTypeTableEntry.isEmpty()) { - LOGGER.warn("couldn't find datatype: {}", dataType.getSimpleTypeName()); + LOGGER.warn("couldn't find datatype: {}", dataType.getMainName()); return Collections.emptyList(); } dataType = dataTypeTableEntry.get(); @@ -568,14 +569,14 @@ public class AdsProtocolLogic extends Plc4xProtocolBase<AmsTCPPacket> implements } List<PlcBrowseItem> values = new ArrayList<>(dataType.getNumChildren()); - for (AdsDataTypeTableChildEntry child : dataType.getChildren()) { - Optional<AdsDataTypeTableEntry> dataTypeTableEntry = getDataTypeTableEntry(child.getDataTypeName()); + for (AdsDataTypeTableEntry child : dataType.getChildren()) { + Optional<AdsDataTypeTableEntry> dataTypeTableEntry = getDataTypeTableEntry(child.getSecondaryName()); if(dataTypeTableEntry.isEmpty()) { - LOGGER.warn("couldn't find datatype: {} for child {}", dataType.getSimpleTypeName(), child.getPropertyName()); + LOGGER.warn("couldn't find datatype: {} for child {}", dataType.getSecondaryName(), child.getMainName()); continue; } AdsDataTypeTableEntry childDataType = dataTypeTableEntry.get(); - String itemAddress = basePath + "." + child.getPropertyName(); + String itemAddress = basePath + "." + child.getMainName(); // Convert the plc value type from the ADS specific one to the PLC4X global one. org.apache.plc4x.java.api.types.PlcValueType plc4xPlcValueType = @@ -605,7 +606,7 @@ public class AdsProtocolLogic extends Plc4xProtocolBase<AmsTCPPacket> implements } // Add the type itself. values.add(new DefaultPlcBrowseItem(new SymbolicAdsTag( - basePath + "." + child.getPropertyName(), plc4xPlcValueType, arrayInfo), child.getPropertyName(), + basePath + "." + child.getMainName(), plc4xPlcValueType, arrayInfo), child.getMainName(), true, parentWritable, true, false, itemArrayInfo, childMap, options)); } return values; @@ -924,7 +925,7 @@ public class AdsProtocolLogic extends Plc4xProtocolBase<AmsTCPPacket> implements Map<String, PlcValue> properties = new HashMap<>(); int startPos = readBuffer.getPos(); int curPos = 0; - for (AdsDataTypeTableChildEntry child : adsDataTypeTableEntry.getChildren()) { + for (AdsDataTypeTableEntry child : adsDataTypeTableEntry.getChildren()) { // In some cases the starting position of the data is not where we are expecting it. // So we need to skip some bytes. if (child.getOffset() > curPos) { @@ -934,16 +935,16 @@ public class AdsProtocolLogic extends Plc4xProtocolBase<AmsTCPPacket> implements } } - String propertyName = child.getPropertyName(); - Optional<AdsDataTypeTableEntry> dataTypeTableEntryOptional = getDataTypeTableEntry(child.getDataTypeName()); + String propertyName = child.getMainName(); + Optional<AdsDataTypeTableEntry> dataTypeTableEntryOptional = getDataTypeTableEntry(child.getSecondaryName()); if(dataTypeTableEntryOptional.isEmpty()) { - throw new ParseException(String.format("couldn't find datatype: %s", child.getDataTypeName())); + throw new ParseException(String.format("couldn't find datatype: %s", child.getSecondaryName())); } AdsDataTypeTableEntry propertyDataTypeTableEntry = dataTypeTableEntryOptional.get(); PlcValueType propertyPlcValueType = getPlcValueTypeForAdsDataType(propertyDataTypeTableEntry); int strLen = 0; if ((propertyPlcValueType == PlcValueType.STRING) || (propertyPlcValueType == PlcValueType.WSTRING)) { - String dataTypeName = propertyDataTypeTableEntry.getDataTypeName(); + String dataTypeName = propertyDataTypeTableEntry.getMainName(); // Extract the string length from the data type name. strLen = Integer.parseInt(dataTypeName.substring(dataTypeName.indexOf("(") + 1, dataTypeName.indexOf(")"))); } @@ -963,7 +964,7 @@ public class AdsProtocolLogic extends Plc4xProtocolBase<AmsTCPPacket> implements private PlcValue parseArrayLevel(AdsDataTypeTableEntry adsDataTypeTableEntry, List<AdsDataTypeArrayInfo> arrayLayers, ReadBuffer readBuffer) throws ParseException { // If this is the last layer of the Array, parse the values themselves. if (arrayLayers.isEmpty()) { - String dataTypeName = adsDataTypeTableEntry.getDataTypeName(); + String dataTypeName = adsDataTypeTableEntry.getMainName(); dataTypeName = dataTypeName.substring(dataTypeName.lastIndexOf(" OF ") + 4); int stringLength = 0; if (dataTypeName.startsWith("STRING(")) { @@ -1228,9 +1229,9 @@ public class AdsProtocolLogic extends Plc4xProtocolBase<AmsTCPPacket> implements throw new SerializationException(String.format( "Expected a PlcList of size %d, but got one of size %d", curArrayLevel.getNumElements(), list.size())); } - Optional<AdsDataTypeTableEntry> dataTypeTableEntryOptional = getDataTypeTableEntry(dataType.getSimpleTypeName()); + Optional<AdsDataTypeTableEntry> dataTypeTableEntryOptional = getDataTypeTableEntry(dataType.getSecondaryName()); if(dataTypeTableEntryOptional.isEmpty()) { - throw new SerializationException("Could not find data type: " + dataType.getSimpleTypeName()); + throw new SerializationException("Could not find data type: " + dataType.getSecondaryName()); } AdsDataTypeTableEntry childDataType = dataTypeTableEntryOptional.get(); for (PlcValue plcValue : list) { @@ -1246,14 +1247,14 @@ public class AdsProtocolLogic extends Plc4xProtocolBase<AmsTCPPacket> implements PlcStruct plcStruct = (PlcStruct) contextValue; int startPos = writeBuffer.getPos(); int curPos = 0; - for (AdsDataTypeTableChildEntry child : dataType.getChildren()) { - Optional<AdsDataTypeTableEntry> dataTypeTableEntryOptional = getDataTypeTableEntry(child.getDataTypeName()); + for (AdsDataTypeTableEntry child : dataType.getChildren()) { + Optional<AdsDataTypeTableEntry> dataTypeTableEntryOptional = getDataTypeTableEntry(child.getSecondaryName()); if(dataTypeTableEntryOptional.isEmpty()) { - throw new SerializationException("Could not find data type: " + child.getDataTypeName()); + throw new SerializationException("Could not find data type: " + child.getSecondaryName()); } AdsDataTypeTableEntry childDataType = dataTypeTableEntryOptional.get(); - if (!plcStruct.hasKey(child.getPropertyName())) { - throw new SerializationException("PlcStruct is missing a child with the name " + child.getPropertyName()); + if (!plcStruct.hasKey(child.getMainName())) { + throw new SerializationException("PlcStruct is missing a child with the name " + child.getMainName()); } // In some cases the starting position of the data is not where we are expecting it. // So we need to add some fill-bytes. @@ -1264,7 +1265,7 @@ public class AdsProtocolLogic extends Plc4xProtocolBase<AmsTCPPacket> implements } } - PlcValue childValue = plcStruct.getValue(child.getPropertyName()); + PlcValue childValue = plcStruct.getValue(child.getMainName()); serializeInternal(childValue, childDataType, childDataType.getArrayInfo(), writeBuffer); curPos = writeBuffer.getPos() - startPos; @@ -1275,11 +1276,11 @@ public class AdsProtocolLogic extends Plc4xProtocolBase<AmsTCPPacket> implements else { PlcValueType plcValueType = getPlcValueTypeForAdsDataType(dataType); if (plcValueType == null) { - throw new SerializationException("Unsupported simple type: " + dataType.getDataTypeName()); + throw new SerializationException("Unsupported simple type: " + dataType.getMainName()); } int stringLength = 0; if ((plcValueType == PlcValueType.STRING) || (plcValueType == PlcValueType.WSTRING)) { - String stringTypeName = dataType.getDataTypeName(); + String stringTypeName = dataType.getMainName(); stringLength = Integer.parseInt( stringTypeName.substring(stringTypeName.indexOf("(") + 1, stringTypeName.indexOf(")"))); } @@ -1839,7 +1840,7 @@ public class AdsProtocolLogic extends Plc4xProtocolBase<AmsTCPPacket> implements } AdsDataTypeTableEntry dataTypeTableEntry = dataTypeTableEntryOptional.get(); return new DirectAdsTag(adsSymbolTableEntry.getGroup(), adsSymbolTableEntry.getOffset(), - dataTypeTableEntry.getDataTypeName(), dataTypeTableEntry.getArrayDimensions()); + dataTypeTableEntry.getMainName(), dataTypeTableEntry.getArrayDimensions()); } // Otherwise we'll have to crawl through the dataType definitions. else { @@ -1865,21 +1866,21 @@ public class AdsProtocolLogic extends Plc4xProtocolBase<AmsTCPPacket> implements // TODO: Implement the Array support if (adsDataTypeTableEntry.getDataType() == AdsDataType.CHAR.getValue()) { int stringLength = (int) adsDataTypeTableEntry.getSize() - 1; - return new DirectAdsStringTag(currentGroup, currentOffset, adsDataTypeTableEntry.getDataTypeName(), stringLength, 1); + return new DirectAdsStringTag(currentGroup, currentOffset, adsDataTypeTableEntry.getMainName(), stringLength, 1); } else if (adsDataTypeTableEntry.getDataType() == AdsDataType.WCHAR.getValue()) { int stringLength = (int) (adsDataTypeTableEntry.getSize() - 2) / 2; - return new DirectAdsStringTag(currentGroup, currentOffset, adsDataTypeTableEntry.getDataTypeName(), stringLength, 1); + return new DirectAdsStringTag(currentGroup, currentOffset, adsDataTypeTableEntry.getMainName(), stringLength, 1); } else { - return new DirectAdsTag(currentGroup, currentOffset, adsDataTypeTableEntry.getDataTypeName(), 1); + return new DirectAdsTag(currentGroup, currentOffset, adsDataTypeTableEntry.getMainName(), 1); } } // Go through all children looking for a matching one. - for (AdsDataTypeTableChildEntry child : adsDataTypeTableEntry.getChildren()) { - if (child.getPropertyName().equals(remainingAddressParts.get(0))) { - Optional<AdsDataTypeTableEntry> dataTypeTableEntryOptional = getDataTypeTableEntry(child.getDataTypeName()); + for (AdsDataTypeTableEntry child : adsDataTypeTableEntry.getChildren()) { + if (child.getMainName().equals(remainingAddressParts.get(0))) { + Optional<AdsDataTypeTableEntry> dataTypeTableEntryOptional = getDataTypeTableEntry(child.getSecondaryName()); if(dataTypeTableEntryOptional.isEmpty()) { - throw new PlcRuntimeException("Could not resolve data type " + child.getDataTypeName()); + throw new PlcRuntimeException("Could not resolve data type " + child.getSecondaryName()); } AdsDataTypeTableEntry childAdsDataTypeTableEntry = dataTypeTableEntryOptional.get(); return resolveDirectAdsTagForSymbolicNameFromDataType( @@ -1889,12 +1890,12 @@ public class AdsProtocolLogic extends Plc4xProtocolBase<AmsTCPPacket> implements } throw new PlcRuntimeException(String.format("Couldn't find child with name '%s' for type '%s'", - remainingAddressParts.get(0), adsDataTypeTableEntry.getDataTypeName())); + remainingAddressParts.get(0), adsDataTypeTableEntry.getMainName())); } protected PlcValueType getPlcValueTypeForAdsDataTypeForBrowse(AdsDataTypeTableEntry dataTypeTableEntry) { - String dataTypeName = (!dataTypeTableEntry.getSimpleTypeName().isEmpty() && !dataTypeTableEntry.getDataTypeName().equals("BOOL")) ? - dataTypeTableEntry.getSimpleTypeName() : dataTypeTableEntry.getDataTypeName(); + String dataTypeName = (!dataTypeTableEntry.getSecondaryName().isEmpty() && !dataTypeTableEntry.getMainName().equals("BOOL")) ? + dataTypeTableEntry.getSecondaryName() : dataTypeTableEntry.getMainName(); if (dataTypeName.startsWith("STRING(")) { dataTypeName = "STRING"; } else if (dataTypeName.startsWith("WSTRING(")) { @@ -1909,7 +1910,7 @@ public class AdsProtocolLogic extends Plc4xProtocolBase<AmsTCPPacket> implements } protected PlcValueType getPlcValueTypeForAdsDataType(AdsDataTypeTableEntry dataTypeTableEntry) { - String dataTypeName = dataTypeTableEntry.getDataTypeName(); + String dataTypeName = dataTypeTableEntry.getMainName(); if (dataTypeName.startsWith("STRING(")) { dataTypeName = "STRING"; } else if (dataTypeName.startsWith("WSTRING(")) { @@ -1927,7 +1928,7 @@ public class AdsProtocolLogic extends Plc4xProtocolBase<AmsTCPPacket> implements // So we'll check if their "simpleTypeName" matches instead. if (dataTypeTableEntry.getChildren().isEmpty()) { try { - dataTypeName = dataTypeTableEntry.getSimpleTypeName(); + dataTypeName = dataTypeTableEntry.getSecondaryName(); if (dataTypeName.startsWith("STRING(")) { dataTypeName = "STRING"; } else if (dataTypeName.startsWith("WSTRING(")) { diff --git a/plc4j/drivers/ads/src/test/java/org/apache/plc4x/protocol/ads/ManualAdsBrowse.java b/plc4j/drivers/ads/src/test/java/org/apache/plc4x/protocol/ads/ManualAdsBrowse.java index 5c850d372e..a4be7ec1ff 100644 --- a/plc4j/drivers/ads/src/test/java/org/apache/plc4x/protocol/ads/ManualAdsBrowse.java +++ b/plc4j/drivers/ads/src/test/java/org/apache/plc4x/protocol/ads/ManualAdsBrowse.java @@ -26,7 +26,7 @@ public class ManualAdsBrowse { public static void main(String[] args) throws Exception { try (PlcConnection connection = PlcDriverManager.getDefault().getConnectionManager().getConnection("ads:tcp://192.168.23.20:48898?target-ams-port=851&source-ams-port=65534&source-ams-net-id=192.168.23.220.1.1&target-ams-net-id=192.168.23.20.1.1")){ - connection.browseRequestBuilder().addQuery("all", "*").build().executeWithInterceptor(item -> { + connection.browseRequestBuilder().addQuery("all", "*").build().executeWithInterceptor((query, item) -> { System.out.printf("- %s%n", item.getTag().getAddressString()); return true; }).get(); diff --git a/plc4j/drivers/ctrlx/src/main/java/org/apache/plc4x/java/ctrlx/readwrite/connection/CtrlXConnection.java b/plc4j/drivers/ctrlx/src/main/java/org/apache/plc4x/java/ctrlx/readwrite/connection/CtrlXConnection.java index 454fdb2f72..58c4a54ba8 100644 --- a/plc4j/drivers/ctrlx/src/main/java/org/apache/plc4x/java/ctrlx/readwrite/connection/CtrlXConnection.java +++ b/plc4j/drivers/ctrlx/src/main/java/org/apache/plc4x/java/ctrlx/readwrite/connection/CtrlXConnection.java @@ -205,7 +205,7 @@ public class CtrlXConnection implements PlcConnection, PlcPinger, PlcBrowser { @Override public CompletableFuture<PlcBrowseResponse> browse(PlcBrowseRequest browseRequest) { - return browseWithInterceptor(browseRequest, item -> true); + return browseWithInterceptor(browseRequest, (query, item) -> true); } @Override diff --git a/protocols/ads/src/main/resources/protocols/ads/ads.mspec b/protocols/ads/src/main/resources/protocols/ads/ads.mspec index 109523320c..4b5ae082ba 100644 --- a/protocols/ads/src/main/resources/protocols/ads/ads.mspec +++ b/protocols/ads/src/main/resources/protocols/ads/ads.mspec @@ -833,7 +833,7 @@ ] // https://gitlab.com/xilix-systems-llc/go-native-ads/-/blob/master/symbols.go#L15 -[discriminatedType AdsDataTypeTableEntry byteOrder='LITTLE_ENDIAN' +[type AdsDataTypeTableEntry byteOrder='LITTLE_ENDIAN' [simple uint 32 entryLength ] [simple uint 32 version ] [simple uint 32 hashValue ] @@ -842,19 +842,19 @@ [simple uint 32 offset ] [simple uint 32 dataType ] [simple uint 32 flags ] - [implicit uint 16 dataTypeNameLength 'STR_LEN(dataTypeName)' ] - [implicit uint 16 simpleTypeNameLength 'STR_LEN(simpleTypeName)' ] + [implicit uint 16 mainNameLength 'STR_LEN(mainName)' ] + [implicit uint 16 secondaryNameLength 'STR_LEN(secondaryName)' ] [implicit uint 16 commentLength 'STR_LEN(comment)' ] [simple uint 16 arrayDimensions ] [simple uint 16 numChildren ] - [simple vstring 'dataTypeNameLength * 8' dataTypeName ] - [const uint 8 dataTypeNameTerminator 0x00 ] - [simple vstring 'simpleTypeNameLength * 8' simpleTypeName ] - [const uint 8 simpleTypeNameTerminator 0x00 ] + [simple vstring 'mainNameLength * 8' mainName ] + [const uint 8 mainNameTerminator 0x00 ] + [simple vstring 'secondaryNameLength * 8' secondaryName ] + [const uint 8 secondaryNameTerminator 0x00 ] [simple vstring 'commentLength * 8' comment ] [const uint 8 commentTerminator 0x00 ] [array AdsDataTypeArrayInfo arrayInfo count 'arrayDimensions' ] - [array AdsDataTypeTableChildEntry children count 'numChildren' ] + [array AdsDataTypeTableEntry children count 'numChildren' ] // Gobbling up the rest, but it seems there is content in here, when looking // at the data in wireshark, it seems to be related to the flags field. // Will have to continue searching for more details on how to decode this. @@ -863,39 +863,6 @@ [array byte rest length 'entryLength - curPos'] ] -// In data-type child entries, the name seems to be used by the property name and the data-type name seems to contain -// what in the parent case the "name" attribute seems to use. -// TODO: In general only the propertyName, dataTypeName and offset are interesting here. The rest is mostly not fully initialized -[discriminatedType AdsDataTypeTableChildEntry byteOrder='LITTLE_ENDIAN' - [simple uint 32 entryLength ] - [simple uint 32 version ] - [simple uint 32 hashValue ] - [simple uint 32 typeHashValue ] - [simple uint 32 size ] - [simple uint 32 offset ] - [simple uint 32 dataType ] - [simple uint 32 flags ] - [implicit uint 16 propertyNameLength 'STR_LEN(propertyName)' ] - [implicit uint 16 dataTypeNameLength 'STR_LEN(dataTypeName)' ] - [implicit uint 16 commentLength 'STR_LEN(comment)' ] - [simple uint 16 arrayDimensions ] - [simple uint 16 numChildren ] - [simple vstring 'propertyNameLength * 8' propertyName ] - [const uint 8 propertyNameTerminator 0x00 ] - [simple vstring 'dataTypeNameLength * 8' dataTypeName ] - [const uint 8 dataTypeNameTerminator 0x00 ] - [simple vstring 'commentLength * 8' comment ] - [const uint 8 commentTerminator 0x00 ] - [array AdsDataTypeArrayInfo arrayInfo count 'arrayDimensions' ] - [array AdsDataTypeTableEntry children count 'numChildren' ] - // Gobbling up the rest, but it seems there is content in here, when looking - // at the data in wireshark, it seems to be related to the flags field. - // Will have to continue searching for more details on how to decode this. - // I would assume that we'll have some "optional" fields here which depend - // on values in the flags section. - [array byte rest length 'entryLength - curPos'] -] - [type AdsDataTypeArrayInfo byteOrder='LITTLE_ENDIAN' [simple uint 32 lowerBound ] [simple uint 32 numElements ]
