You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2022/08/17 19:37:46 UTC

[plc4x] 02/02: chore(plc4j/ads): Merged the ReservedIndexGroups and AdsSignificantGroupAddresses

This is an automated email from the ASF dual-hosted git repository.

cdutz pushed a commit to branch feature/ads-symbol-discovery
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 01405a02f3b1047e1a7582c42cf9188e58cd1ca5
Author: Christofer Dutz <ch...@rivian.com>
AuthorDate: Wed Aug 17 21:37:33 2022 +0200

    chore(plc4j/ads): Merged the ReservedIndexGroups and AdsSignificantGroupAddresses
---
 .../ads/readwrite/model/AdsDataTypeTableEntry.go   | 132 ++++++++++-----------
 .../ads/readwrite/model/ReservedIndexGroups.go     |  76 +++++++-----
 .../knxnetip/readwrite/model/KnxManufacturer.go    |  26 +++-
 .../plc4x/java/ads/protocol/AdsProtocolLogic.java  |   6 +-
 .../knxnetip/readwrite/model/KnxManufacturer.cs    |  19 ++-
 .../ads/src/main/resources/protocols/ads/ads.mspec |  22 ++--
 6 files changed, 161 insertions(+), 120 deletions(-)

diff --git a/plc4go/protocols/ads/readwrite/model/AdsDataTypeTableEntry.go b/plc4go/protocols/ads/readwrite/model/AdsDataTypeTableEntry.go
index 8a9905d06..e4ef888a1 100644
--- a/plc4go/protocols/ads/readwrite/model/AdsDataTypeTableEntry.go
+++ b/plc4go/protocols/ads/readwrite/model/AdsDataTypeTableEntry.go
@@ -28,8 +28,8 @@ import (
 // Code generated by code-generation. DO NOT EDIT.
 
 // Constant values.
-const AdsDataTypeTableEntry_NAMETERMINATOR uint8 = 0x00
 const AdsDataTypeTableEntry_DATATYPENAMETERMINATOR uint8 = 0x00
+const AdsDataTypeTableEntry_SIMPLETYPENAMETERMINATOR uint8 = 0x00
 const AdsDataTypeTableEntry_COMMENTTERMINATOR uint8 = 0x00
 
 // AdsDataTypeTableEntry is the corresponding interface of AdsDataTypeTableEntry
@@ -56,10 +56,10 @@ type AdsDataTypeTableEntry interface {
 	GetArrayDimensions() uint16
 	// GetNumChildren returns NumChildren (property field)
 	GetNumChildren() uint16
-	// GetName returns Name (property field)
-	GetName() string
 	// GetDataTypeName returns DataTypeName (property field)
 	GetDataTypeName() string
+	// GetSimpleTypeName returns SimpleTypeName (property field)
+	GetSimpleTypeName() string
 	// GetComment returns Comment (property field)
 	GetComment() string
 	// GetArrayInfo returns ArrayInfo (property field)
@@ -89,8 +89,8 @@ type _AdsDataTypeTableEntry struct {
 	Flags           uint32
 	ArrayDimensions uint16
 	NumChildren     uint16
-	Name            string
 	DataTypeName    string
+	SimpleTypeName  string
 	Comment         string
 	ArrayInfo       []AdsDataTypeArrayInfo
 	Children        []AdsDataTypeTableChildEntry
@@ -142,14 +142,14 @@ func (m *_AdsDataTypeTableEntry) GetNumChildren() uint16 {
 	return m.NumChildren
 }
 
-func (m *_AdsDataTypeTableEntry) GetName() string {
-	return m.Name
-}
-
 func (m *_AdsDataTypeTableEntry) GetDataTypeName() string {
 	return m.DataTypeName
 }
 
+func (m *_AdsDataTypeTableEntry) GetSimpleTypeName() string {
+	return m.SimpleTypeName
+}
+
 func (m *_AdsDataTypeTableEntry) GetComment() string {
 	return m.Comment
 }
@@ -175,14 +175,14 @@ func (m *_AdsDataTypeTableEntry) GetRest() []byte {
 /////////////////////// Accessors for const fields.
 ///////////////////////
 
-func (m *_AdsDataTypeTableEntry) GetNameTerminator() uint8 {
-	return AdsDataTypeTableEntry_NAMETERMINATOR
-}
-
 func (m *_AdsDataTypeTableEntry) GetDataTypeNameTerminator() uint8 {
 	return AdsDataTypeTableEntry_DATATYPENAMETERMINATOR
 }
 
+func (m *_AdsDataTypeTableEntry) GetSimpleTypeNameTerminator() uint8 {
+	return AdsDataTypeTableEntry_SIMPLETYPENAMETERMINATOR
+}
+
 func (m *_AdsDataTypeTableEntry) GetCommentTerminator() uint8 {
 	return AdsDataTypeTableEntry_COMMENTTERMINATOR
 }
@@ -193,8 +193,8 @@ func (m *_AdsDataTypeTableEntry) GetCommentTerminator() uint8 {
 ///////////////////////////////////////////////////////////
 
 // 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, name string, dataTypeName 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, Name: name, DataTypeName: dataTypeName, 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, 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}
 }
 
 // Deprecated: use the interface for direct cast
@@ -243,10 +243,10 @@ func (m *_AdsDataTypeTableEntry) GetLengthInBitsConditional(lastItem bool) uint1
 	// Simple field (flags)
 	lengthInBits += 32
 
-	// Implicit Field (nameLength)
+	// Implicit Field (dataTypeNameLength)
 	lengthInBits += 16
 
-	// Implicit Field (dataTypeNameLength)
+	// Implicit Field (simpleTypeNameLength)
 	lengthInBits += 16
 
 	// Implicit Field (commentLength)
@@ -258,18 +258,18 @@ func (m *_AdsDataTypeTableEntry) GetLengthInBitsConditional(lastItem bool) uint1
 	// Simple field (numChildren)
 	lengthInBits += 16
 
-	// Simple field (name)
-	lengthInBits += uint16(int32(GetSTR_LEN()(m.GetName())) * int32(int32(8)))
-
-	// Const Field (nameTerminator)
-	lengthInBits += 8
-
 	// Simple field (dataTypeName)
 	lengthInBits += uint16(int32(GetSTR_LEN()(m.GetDataTypeName())) * int32(int32(8)))
 
 	// Const Field (dataTypeNameTerminator)
 	lengthInBits += 8
 
+	// Simple field (simpleTypeName)
+	lengthInBits += uint16(int32(GetSTR_LEN()(m.GetSimpleTypeName())) * int32(int32(8)))
+
+	// Const Field (simpleTypeNameTerminator)
+	lengthInBits += 8
+
 	// Simple field (comment)
 	lengthInBits += uint16(int32(GetSTR_LEN()(m.GetComment())) * int32(int32(8)))
 
@@ -371,13 +371,6 @@ func AdsDataTypeTableEntryParse(readBuffer utils.ReadBuffer) (AdsDataTypeTableEn
 	}
 	flags := _flags
 
-	// Implicit Field (nameLength) (Used for parsing, but its value is not stored as it's implicitly given by the objects content)
-	nameLength, _nameLengthErr := readBuffer.ReadUint16("nameLength", 16)
-	_ = nameLength
-	if _nameLengthErr != nil {
-		return nil, errors.Wrap(_nameLengthErr, "Error parsing 'nameLength' field of AdsDataTypeTableEntry")
-	}
-
 	// Implicit Field (dataTypeNameLength) (Used for parsing, but its value is not stored as it's implicitly given by the objects content)
 	dataTypeNameLength, _dataTypeNameLengthErr := readBuffer.ReadUint16("dataTypeNameLength", 16)
 	_ = dataTypeNameLength
@@ -385,6 +378,13 @@ func AdsDataTypeTableEntryParse(readBuffer utils.ReadBuffer) (AdsDataTypeTableEn
 		return nil, errors.Wrap(_dataTypeNameLengthErr, "Error parsing 'dataTypeNameLength' field of AdsDataTypeTableEntry")
 	}
 
+	// Implicit Field (simpleTypeNameLength) (Used for parsing, but its value is not stored as it's implicitly given by the objects content)
+	simpleTypeNameLength, _simpleTypeNameLengthErr := readBuffer.ReadUint16("simpleTypeNameLength", 16)
+	_ = simpleTypeNameLength
+	if _simpleTypeNameLengthErr != nil {
+		return nil, errors.Wrap(_simpleTypeNameLengthErr, "Error parsing 'simpleTypeNameLength' field of AdsDataTypeTableEntry")
+	}
+
 	// Implicit Field (commentLength) (Used for parsing, but its value is not stored as it's implicitly given by the objects content)
 	commentLength, _commentLengthErr := readBuffer.ReadUint16("commentLength", 16)
 	_ = commentLength
@@ -406,22 +406,6 @@ func AdsDataTypeTableEntryParse(readBuffer utils.ReadBuffer) (AdsDataTypeTableEn
 	}
 	numChildren := _numChildren
 
-	// Simple Field (name)
-	_name, _nameErr := readBuffer.ReadString("name", uint32((nameLength)*(8)))
-	if _nameErr != nil {
-		return nil, errors.Wrap(_nameErr, "Error parsing 'name' field of AdsDataTypeTableEntry")
-	}
-	name := _name
-
-	// Const Field (nameTerminator)
-	nameTerminator, _nameTerminatorErr := readBuffer.ReadUint8("nameTerminator", 8)
-	if _nameTerminatorErr != nil {
-		return nil, errors.Wrap(_nameTerminatorErr, "Error parsing 'nameTerminator' field of AdsDataTypeTableEntry")
-	}
-	if nameTerminator != AdsDataTypeTableEntry_NAMETERMINATOR {
-		return nil, errors.New("Expected constant value " + fmt.Sprintf("%d", AdsDataTypeTableEntry_NAMETERMINATOR) + " but got " + fmt.Sprintf("%d", nameTerminator))
-	}
-
 	// Simple Field (dataTypeName)
 	_dataTypeName, _dataTypeNameErr := readBuffer.ReadString("dataTypeName", uint32((dataTypeNameLength)*(8)))
 	if _dataTypeNameErr != nil {
@@ -438,6 +422,22 @@ func AdsDataTypeTableEntryParse(readBuffer utils.ReadBuffer) (AdsDataTypeTableEn
 		return nil, errors.New("Expected constant value " + fmt.Sprintf("%d", AdsDataTypeTableEntry_DATATYPENAMETERMINATOR) + " but got " + fmt.Sprintf("%d", dataTypeNameTerminator))
 	}
 
+	// Simple Field (simpleTypeName)
+	_simpleTypeName, _simpleTypeNameErr := readBuffer.ReadString("simpleTypeName", uint32((simpleTypeNameLength)*(8)))
+	if _simpleTypeNameErr != nil {
+		return nil, errors.Wrap(_simpleTypeNameErr, "Error parsing 'simpleTypeName' field of AdsDataTypeTableEntry")
+	}
+	simpleTypeName := _simpleTypeName
+
+	// Const Field (simpleTypeNameTerminator)
+	simpleTypeNameTerminator, _simpleTypeNameTerminatorErr := readBuffer.ReadUint8("simpleTypeNameTerminator", 8)
+	if _simpleTypeNameTerminatorErr != nil {
+		return nil, errors.Wrap(_simpleTypeNameTerminatorErr, "Error parsing 'simpleTypeNameTerminator' field of AdsDataTypeTableEntry")
+	}
+	if simpleTypeNameTerminator != AdsDataTypeTableEntry_SIMPLETYPENAMETERMINATOR {
+		return nil, errors.New("Expected constant value " + fmt.Sprintf("%d", AdsDataTypeTableEntry_SIMPLETYPENAMETERMINATOR) + " but got " + fmt.Sprintf("%d", simpleTypeNameTerminator))
+	}
+
 	// Simple Field (comment)
 	_comment, _commentErr := readBuffer.ReadString("comment", uint32((commentLength)*(8)))
 	if _commentErr != nil {
@@ -522,8 +522,8 @@ func AdsDataTypeTableEntryParse(readBuffer utils.ReadBuffer) (AdsDataTypeTableEn
 		Flags:           flags,
 		ArrayDimensions: arrayDimensions,
 		NumChildren:     numChildren,
-		Name:            name,
 		DataTypeName:    dataTypeName,
+		SimpleTypeName:  simpleTypeName,
 		Comment:         comment,
 		ArrayInfo:       arrayInfo,
 		Children:        children,
@@ -594,13 +594,6 @@ func (m *_AdsDataTypeTableEntry) Serialize(writeBuffer utils.WriteBuffer) error
 		return errors.Wrap(_flagsErr, "Error serializing 'flags' field")
 	}
 
-	// Implicit Field (nameLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-	nameLength := uint16(GetSTR_LEN()(m.GetName()))
-	_nameLengthErr := writeBuffer.WriteUint16("nameLength", 16, (nameLength))
-	if _nameLengthErr != nil {
-		return errors.Wrap(_nameLengthErr, "Error serializing 'nameLength' field")
-	}
-
 	// Implicit Field (dataTypeNameLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
 	dataTypeNameLength := uint16(GetSTR_LEN()(m.GetDataTypeName()))
 	_dataTypeNameLengthErr := writeBuffer.WriteUint16("dataTypeNameLength", 16, (dataTypeNameLength))
@@ -608,6 +601,13 @@ func (m *_AdsDataTypeTableEntry) Serialize(writeBuffer utils.WriteBuffer) error
 		return errors.Wrap(_dataTypeNameLengthErr, "Error serializing 'dataTypeNameLength' field")
 	}
 
+	// Implicit Field (simpleTypeNameLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
+	simpleTypeNameLength := uint16(GetSTR_LEN()(m.GetSimpleTypeName()))
+	_simpleTypeNameLengthErr := writeBuffer.WriteUint16("simpleTypeNameLength", 16, (simpleTypeNameLength))
+	if _simpleTypeNameLengthErr != nil {
+		return errors.Wrap(_simpleTypeNameLengthErr, "Error serializing 'simpleTypeNameLength' field")
+	}
+
 	// Implicit Field (commentLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
 	commentLength := uint16(GetSTR_LEN()(m.GetComment()))
 	_commentLengthErr := writeBuffer.WriteUint16("commentLength", 16, (commentLength))
@@ -629,19 +629,6 @@ func (m *_AdsDataTypeTableEntry) Serialize(writeBuffer utils.WriteBuffer) error
 		return errors.Wrap(_numChildrenErr, "Error serializing 'numChildren' field")
 	}
 
-	// Simple Field (name)
-	name := string(m.GetName())
-	_nameErr := writeBuffer.WriteString("name", uint32((GetSTR_LEN()(m.GetName()))*(8)), "UTF-8", (name))
-	if _nameErr != nil {
-		return errors.Wrap(_nameErr, "Error serializing 'name' field")
-	}
-
-	// Const Field (nameTerminator)
-	_nameTerminatorErr := writeBuffer.WriteUint8("nameTerminator", 8, 0x00)
-	if _nameTerminatorErr != nil {
-		return errors.Wrap(_nameTerminatorErr, "Error serializing 'nameTerminator' field")
-	}
-
 	// Simple Field (dataTypeName)
 	dataTypeName := string(m.GetDataTypeName())
 	_dataTypeNameErr := writeBuffer.WriteString("dataTypeName", uint32((GetSTR_LEN()(m.GetDataTypeName()))*(8)), "UTF-8", (dataTypeName))
@@ -655,6 +642,19 @@ func (m *_AdsDataTypeTableEntry) Serialize(writeBuffer utils.WriteBuffer) error
 		return errors.Wrap(_dataTypeNameTerminatorErr, "Error serializing 'dataTypeNameTerminator' field")
 	}
 
+	// Simple Field (simpleTypeName)
+	simpleTypeName := string(m.GetSimpleTypeName())
+	_simpleTypeNameErr := writeBuffer.WriteString("simpleTypeName", uint32((GetSTR_LEN()(m.GetSimpleTypeName()))*(8)), "UTF-8", (simpleTypeName))
+	if _simpleTypeNameErr != nil {
+		return errors.Wrap(_simpleTypeNameErr, "Error serializing 'simpleTypeName' field")
+	}
+
+	// Const Field (simpleTypeNameTerminator)
+	_simpleTypeNameTerminatorErr := writeBuffer.WriteUint8("simpleTypeNameTerminator", 8, 0x00)
+	if _simpleTypeNameTerminatorErr != nil {
+		return errors.Wrap(_simpleTypeNameTerminatorErr, "Error serializing 'simpleTypeNameTerminator' field")
+	}
+
 	// Simple Field (comment)
 	comment := string(m.GetComment())
 	_commentErr := writeBuffer.WriteString("comment", uint32((GetSTR_LEN()(m.GetComment()))*(8)), "UTF-8", (comment))
diff --git a/plc4go/protocols/ads/readwrite/model/ReservedIndexGroups.go b/plc4go/protocols/ads/readwrite/model/ReservedIndexGroups.go
index edd11d25a..aa594c7aa 100644
--- a/plc4go/protocols/ads/readwrite/model/ReservedIndexGroups.go
+++ b/plc4go/protocols/ads/readwrite/model/ReservedIndexGroups.go
@@ -35,36 +35,38 @@ type IReservedIndexGroups interface {
 }
 
 const (
-	ReservedIndexGroups_ADSIGRP_SYMTAB                  ReservedIndexGroups = 0x0000F000
-	ReservedIndexGroups_ADSIGRP_SYMNAME                 ReservedIndexGroups = 0x0000F001
-	ReservedIndexGroups_ADSIGRP_SYMVAL                  ReservedIndexGroups = 0x0000F002
-	ReservedIndexGroups_ADSIGRP_SYM_HNDBYNAME           ReservedIndexGroups = 0x0000F003
-	ReservedIndexGroups_ADSIGRP_SYM_VALBYNAME           ReservedIndexGroups = 0x0000F004
-	ReservedIndexGroups_ADSIGRP_SYM_VALBYHND            ReservedIndexGroups = 0x0000F005
-	ReservedIndexGroups_ADSIGRP_SYM_RELEASEHND          ReservedIndexGroups = 0x0000F006
-	ReservedIndexGroups_ADSIGRP_SYM_INFOBYNAME          ReservedIndexGroups = 0x0000F007
-	ReservedIndexGroups_ADSIGRP_SYM_VERSION             ReservedIndexGroups = 0x0000F008
-	ReservedIndexGroups_ADSIGRP_SYM_INFOBYNAMEEX        ReservedIndexGroups = 0x0000F009
-	ReservedIndexGroups_ADSIGRP_SYM_DOWNLOAD            ReservedIndexGroups = 0x0000F00A
-	ReservedIndexGroups_ADSIGRP_SYM_UPLOAD              ReservedIndexGroups = 0x0000F00B
-	ReservedIndexGroups_ADSIGRP_SYM_UPLOADINFO          ReservedIndexGroups = 0x0000F00C
-	ReservedIndexGroups_ADSIGRP_SYMNOTE                 ReservedIndexGroups = 0x0000F010
-	ReservedIndexGroups_ADSIGRP_IOIMAGE_RWIB            ReservedIndexGroups = 0x0000F020
-	ReservedIndexGroups_ADSIGRP_IOIMAGE_RWIX            ReservedIndexGroups = 0x0000F021
-	ReservedIndexGroups_ADSIGRP_IOIMAGE_RISIZE          ReservedIndexGroups = 0x0000F025
-	ReservedIndexGroups_ADSIGRP_IOIMAGE_RWOB            ReservedIndexGroups = 0x0000F030
-	ReservedIndexGroups_ADSIGRP_IOIMAGE_RWOX            ReservedIndexGroups = 0x0000F031
-	ReservedIndexGroups_ADSIGRP_IOIMAGE_RWOSIZE         ReservedIndexGroups = 0x0000F035
-	ReservedIndexGroups_ADSIGRP_IOIMAGE_CLEARI          ReservedIndexGroups = 0x0000F040
-	ReservedIndexGroups_ADSIGRP_IOIMAGE_CLEARO          ReservedIndexGroups = 0x0000F050
-	ReservedIndexGroups_ADSIGRP_IOIMAGE_RWIOB           ReservedIndexGroups = 0x0000F060
-	ReservedIndexGroups_ADSIGRP_MULTIPLE_READ           ReservedIndexGroups = 0x0000F080
-	ReservedIndexGroups_ADSIGRP_MULTIPLE_WRITE          ReservedIndexGroups = 0x0000F081
-	ReservedIndexGroups_ADSIGRP_MULTIPLE_READ_WRITE     ReservedIndexGroups = 0x0000F082
-	ReservedIndexGroups_ADSIGRP_MULTIPLE_RELEASE_HANDLE ReservedIndexGroups = 0x0000F083
-	ReservedIndexGroups_ADSIGRP_DEVICE_DATA             ReservedIndexGroups = 0x0000F100
-	ReservedIndexGroups_ADSIOFFS_DEVDATA_ADSSTATE       ReservedIndexGroups = 0x00000000
-	ReservedIndexGroups_ADSIOFFS_DEVDATA_DEVSTATE       ReservedIndexGroups = 0x00000002
+	ReservedIndexGroups_ADSIGRP_SYMTAB                     ReservedIndexGroups = 0x0000F000
+	ReservedIndexGroups_ADSIGRP_SYMNAME                    ReservedIndexGroups = 0x0000F001
+	ReservedIndexGroups_ADSIGRP_SYMVAL                     ReservedIndexGroups = 0x0000F002
+	ReservedIndexGroups_ADSIGRP_SYM_HNDBYNAME              ReservedIndexGroups = 0x0000F003
+	ReservedIndexGroups_ADSIGRP_SYM_VALBYNAME              ReservedIndexGroups = 0x0000F004
+	ReservedIndexGroups_ADSIGRP_SYM_VALBYHND               ReservedIndexGroups = 0x0000F005
+	ReservedIndexGroups_ADSIGRP_SYM_RELEASEHND             ReservedIndexGroups = 0x0000F006
+	ReservedIndexGroups_ADSIGRP_SYM_INFOBYNAME             ReservedIndexGroups = 0x0000F007
+	ReservedIndexGroups_ADSIGRP_SYM_VERSION                ReservedIndexGroups = 0x0000F008
+	ReservedIndexGroups_ADSIGRP_SYM_INFOBYNAMEEX           ReservedIndexGroups = 0x0000F009
+	ReservedIndexGroups_ADSIGRP_SYM_DOWNLOAD               ReservedIndexGroups = 0x0000F00A
+	ReservedIndexGroups_ADSIGRP_SYM_UPLOAD                 ReservedIndexGroups = 0x0000F00B
+	ReservedIndexGroups_ADSIGRP_SYM_UPLOADINFO             ReservedIndexGroups = 0x0000F00C
+	ReservedIndexGroups_ADSIGRP_DATA_TYPE_TABLE_UPLOAD     ReservedIndexGroups = 0x0000F00E
+	ReservedIndexGroups_ADSIGRP_SYMBOL_AND_DATA_TYPE_SIZES ReservedIndexGroups = 0x0000F00F
+	ReservedIndexGroups_ADSIGRP_SYMNOTE                    ReservedIndexGroups = 0x0000F010
+	ReservedIndexGroups_ADSIGRP_IOIMAGE_RWIB               ReservedIndexGroups = 0x0000F020
+	ReservedIndexGroups_ADSIGRP_IOIMAGE_RWIX               ReservedIndexGroups = 0x0000F021
+	ReservedIndexGroups_ADSIGRP_IOIMAGE_RISIZE             ReservedIndexGroups = 0x0000F025
+	ReservedIndexGroups_ADSIGRP_IOIMAGE_RWOB               ReservedIndexGroups = 0x0000F030
+	ReservedIndexGroups_ADSIGRP_IOIMAGE_RWOX               ReservedIndexGroups = 0x0000F031
+	ReservedIndexGroups_ADSIGRP_IOIMAGE_RWOSIZE            ReservedIndexGroups = 0x0000F035
+	ReservedIndexGroups_ADSIGRP_IOIMAGE_CLEARI             ReservedIndexGroups = 0x0000F040
+	ReservedIndexGroups_ADSIGRP_IOIMAGE_CLEARO             ReservedIndexGroups = 0x0000F050
+	ReservedIndexGroups_ADSIGRP_IOIMAGE_RWIOB              ReservedIndexGroups = 0x0000F060
+	ReservedIndexGroups_ADSIGRP_MULTIPLE_READ              ReservedIndexGroups = 0x0000F080
+	ReservedIndexGroups_ADSIGRP_MULTIPLE_WRITE             ReservedIndexGroups = 0x0000F081
+	ReservedIndexGroups_ADSIGRP_MULTIPLE_READ_WRITE        ReservedIndexGroups = 0x0000F082
+	ReservedIndexGroups_ADSIGRP_MULTIPLE_RELEASE_HANDLE    ReservedIndexGroups = 0x0000F083
+	ReservedIndexGroups_ADSIGRP_DEVICE_DATA                ReservedIndexGroups = 0x0000F100
+	ReservedIndexGroups_ADSIOFFS_DEVDATA_ADSSTATE          ReservedIndexGroups = 0x00000000
+	ReservedIndexGroups_ADSIOFFS_DEVDATA_DEVSTATE          ReservedIndexGroups = 0x00000002
 )
 
 var ReservedIndexGroupsValues []ReservedIndexGroups
@@ -85,6 +87,8 @@ func init() {
 		ReservedIndexGroups_ADSIGRP_SYM_DOWNLOAD,
 		ReservedIndexGroups_ADSIGRP_SYM_UPLOAD,
 		ReservedIndexGroups_ADSIGRP_SYM_UPLOADINFO,
+		ReservedIndexGroups_ADSIGRP_DATA_TYPE_TABLE_UPLOAD,
+		ReservedIndexGroups_ADSIGRP_SYMBOL_AND_DATA_TYPE_SIZES,
 		ReservedIndexGroups_ADSIGRP_SYMNOTE,
 		ReservedIndexGroups_ADSIGRP_IOIMAGE_RWIB,
 		ReservedIndexGroups_ADSIGRP_IOIMAGE_RWIX,
@@ -137,6 +141,10 @@ func ReservedIndexGroupsByValue(value uint32) (enum ReservedIndexGroups, ok bool
 		return ReservedIndexGroups_ADSIGRP_SYM_UPLOAD, true
 	case 0x0000F00C:
 		return ReservedIndexGroups_ADSIGRP_SYM_UPLOADINFO, true
+	case 0x0000F00E:
+		return ReservedIndexGroups_ADSIGRP_DATA_TYPE_TABLE_UPLOAD, true
+	case 0x0000F00F:
+		return ReservedIndexGroups_ADSIGRP_SYMBOL_AND_DATA_TYPE_SIZES, true
 	case 0x0000F010:
 		return ReservedIndexGroups_ADSIGRP_SYMNOTE, true
 	case 0x0000F020:
@@ -203,6 +211,10 @@ func ReservedIndexGroupsByName(value string) (enum ReservedIndexGroups, ok bool)
 		return ReservedIndexGroups_ADSIGRP_SYM_UPLOAD, true
 	case "ADSIGRP_SYM_UPLOADINFO":
 		return ReservedIndexGroups_ADSIGRP_SYM_UPLOADINFO, true
+	case "ADSIGRP_DATA_TYPE_TABLE_UPLOAD":
+		return ReservedIndexGroups_ADSIGRP_DATA_TYPE_TABLE_UPLOAD, true
+	case "ADSIGRP_SYMBOL_AND_DATA_TYPE_SIZES":
+		return ReservedIndexGroups_ADSIGRP_SYMBOL_AND_DATA_TYPE_SIZES, true
 	case "ADSIGRP_SYMNOTE":
 		return ReservedIndexGroups_ADSIGRP_SYMNOTE, true
 	case "ADSIGRP_IOIMAGE_RWIB":
@@ -314,6 +326,10 @@ func (e ReservedIndexGroups) PLC4XEnumName() string {
 		return "ADSIGRP_SYM_UPLOAD"
 	case ReservedIndexGroups_ADSIGRP_SYM_UPLOADINFO:
 		return "ADSIGRP_SYM_UPLOADINFO"
+	case ReservedIndexGroups_ADSIGRP_DATA_TYPE_TABLE_UPLOAD:
+		return "ADSIGRP_DATA_TYPE_TABLE_UPLOAD"
+	case ReservedIndexGroups_ADSIGRP_SYMBOL_AND_DATA_TYPE_SIZES:
+		return "ADSIGRP_SYMBOL_AND_DATA_TYPE_SIZES"
 	case ReservedIndexGroups_ADSIGRP_SYMNOTE:
 		return "ADSIGRP_SYMNOTE"
 	case ReservedIndexGroups_ADSIGRP_IOIMAGE_RWIB:
diff --git a/plc4go/protocols/knxnetip/readwrite/model/KnxManufacturer.go b/plc4go/protocols/knxnetip/readwrite/model/KnxManufacturer.go
index 01e0555ac..eba4ce85f 100644
--- a/plc4go/protocols/knxnetip/readwrite/model/KnxManufacturer.go
+++ b/plc4go/protocols/knxnetip/readwrite/model/KnxManufacturer.go
@@ -632,8 +632,9 @@ const (
 	KnxManufacturer_M_DELTA_ELECTRONICS                                  KnxManufacturer = 592
 	KnxManufacturer_M_SHANGHAI_LEWIN_INTELLIGENT_TECHNOLOGY_CO__LTD_     KnxManufacturer = 593
 	KnxManufacturer_M_KG_POWER                                           KnxManufacturer = 594
-	KnxManufacturer_M_ABB___RESERVED                                     KnxManufacturer = 595
-	KnxManufacturer_M_BUSCH_JAEGER_ELEKTRO___RESERVED                    KnxManufacturer = 596
+	KnxManufacturer_M_ZHEJIANG_MOORGEN_INTELLIGENT_TECHNOLOGY_CO___LTD   KnxManufacturer = 595
+	KnxManufacturer_M_ABB___RESERVED                                     KnxManufacturer = 596
+	KnxManufacturer_M_BUSCH_JAEGER_ELEKTRO___RESERVED                    KnxManufacturer = 597
 )
 
 var KnxManufacturerValues []KnxManufacturer
@@ -1236,6 +1237,7 @@ func init() {
 		KnxManufacturer_M_DELTA_ELECTRONICS,
 		KnxManufacturer_M_SHANGHAI_LEWIN_INTELLIGENT_TECHNOLOGY_CO__LTD_,
 		KnxManufacturer_M_KG_POWER,
+		KnxManufacturer_M_ZHEJIANG_MOORGEN_INTELLIGENT_TECHNOLOGY_CO___LTD,
 		KnxManufacturer_M_ABB___RESERVED,
 		KnxManufacturer_M_BUSCH_JAEGER_ELEKTRO___RESERVED,
 	}
@@ -3449,10 +3451,14 @@ func (e KnxManufacturer) Number() uint16 {
 		}
 	case 595:
 		{ /* '595' */
-			return 43954
+			return 653
 		}
 	case 596:
 		{ /* '596' */
+			return 43954
+		}
+	case 597:
+		{ /* '597' */
 			return 43959
 		}
 	case 6:
@@ -5855,10 +5861,14 @@ func (e KnxManufacturer) Name() string {
 		}
 	case 595:
 		{ /* '595' */
-			return "ABB - reserved"
+			return "Zhejiang Moorgen Intelligent Technology Co., Ltd"
 		}
 	case 596:
 		{ /* '596' */
+			return "ABB - reserved"
+		}
+	case 597:
+		{ /* '597' */
 			return "Busch-Jaeger Elektro - reserved"
 		}
 	case 6:
@@ -7157,8 +7167,10 @@ func KnxManufacturerByValue(value uint16) (enum KnxManufacturer, ok bool) {
 	case 594:
 		return KnxManufacturer_M_KG_POWER, true
 	case 595:
-		return KnxManufacturer_M_ABB___RESERVED, true
+		return KnxManufacturer_M_ZHEJIANG_MOORGEN_INTELLIGENT_TECHNOLOGY_CO___LTD, true
 	case 596:
+		return KnxManufacturer_M_ABB___RESERVED, true
+	case 597:
 		return KnxManufacturer_M_BUSCH_JAEGER_ELEKTRO___RESERVED, true
 	case 6:
 		return KnxManufacturer_M_BUSCH_JAEGER_ELEKTRO, true
@@ -8356,6 +8368,8 @@ func KnxManufacturerByName(value string) (enum KnxManufacturer, ok bool) {
 		return KnxManufacturer_M_SHANGHAI_LEWIN_INTELLIGENT_TECHNOLOGY_CO__LTD_, true
 	case "M_KG_POWER":
 		return KnxManufacturer_M_KG_POWER, true
+	case "M_ZHEJIANG_MOORGEN_INTELLIGENT_TECHNOLOGY_CO___LTD":
+		return KnxManufacturer_M_ZHEJIANG_MOORGEN_INTELLIGENT_TECHNOLOGY_CO___LTD, true
 	case "M_ABB___RESERVED":
 		return KnxManufacturer_M_ABB___RESERVED, true
 	case "M_BUSCH_JAEGER_ELEKTRO___RESERVED":
@@ -9601,6 +9615,8 @@ func (e KnxManufacturer) PLC4XEnumName() string {
 		return "M_SHANGHAI_LEWIN_INTELLIGENT_TECHNOLOGY_CO__LTD_"
 	case KnxManufacturer_M_KG_POWER:
 		return "M_KG_POWER"
+	case KnxManufacturer_M_ZHEJIANG_MOORGEN_INTELLIGENT_TECHNOLOGY_CO___LTD:
+		return "M_ZHEJIANG_MOORGEN_INTELLIGENT_TECHNOLOGY_CO___LTD"
 	case KnxManufacturer_M_ABB___RESERVED:
 		return "M_ABB___RESERVED"
 	case KnxManufacturer_M_BUSCH_JAEGER_ELEKTRO___RESERVED:
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 8ceade36f..a71bab324 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
@@ -107,7 +107,7 @@ public class AdsProtocolLogic extends Plc4xProtocolBase<AmsTCPPacket> implements
         List<AdsDataTypeTableEntry> dataTypes = new ArrayList<>();
         List<AdsSymbolTableEntry> symbols = new ArrayList<>();
         // Initialize the request.
-        AdsData adsData = new AdsReadRequest(AdsSignificantGroupAddresses.TABLE_SIZES.getValue(), 0x00000000, 24);
+        AdsData adsData = new AdsReadRequest(ReservedIndexGroups.ADSIGRP_SYMBOL_AND_DATA_TYPE_SIZES.getValue(), 0x00000000, 24);
         AmsPacket amsPacket = new AmsPacket(configuration.getTargetAmsNetId(), configuration.getTargetAmsPort(),
             configuration.getSourceAmsNetId(), configuration.getSourceAmsPort(),
             CommandId.ADS_READ, DEFAULT_COMMAND_STATE, 0, getInvokeId(), adsData);
@@ -129,7 +129,7 @@ public class AdsProtocolLogic extends Plc4xProtocolBase<AmsTCPPacket> implements
                         LOGGER.debug("PLC contains {} symbols and {} data-types", adsTableSizes.getSymbolCount(), adsTableSizes.getDataTypeCount());
 
                         // Now we load the datatype definitions.
-                        AdsData adsReadTypeTableData = new AdsReadRequest(AdsSignificantGroupAddresses.DATA_TYPE_TABLE.getValue(), 0x00000000, adsTableSizes.getDataTypeLength());
+                        AdsData adsReadTypeTableData = new AdsReadRequest(ReservedIndexGroups.ADSIGRP_DATA_TYPE_TABLE_UPLOAD.getValue(), 0x00000000, adsTableSizes.getDataTypeLength());
                         AmsPacket amsReadTablePacket = new AmsPacket(configuration.getTargetAmsNetId(), configuration.getTargetAmsPort(),
                             configuration.getSourceAmsNetId(), configuration.getSourceAmsPort(),
                             CommandId.ADS_READ, DEFAULT_COMMAND_STATE, 0, getInvokeId(), adsReadTypeTableData);
@@ -155,7 +155,7 @@ public class AdsProtocolLogic extends Plc4xProtocolBase<AmsTCPPacket> implements
                                         }
                                     }
 
-                                    AdsData adsReadSymbolTableData = new AdsReadRequest(AdsSignificantGroupAddresses.SYMBOL_TABLE.getValue(), 0x00000000, adsTableSizes.getSymbolLength());
+                                    AdsData adsReadSymbolTableData = new AdsReadRequest(ReservedIndexGroups.ADSIGRP_SYM_UPLOAD.getValue(), 0x00000000, adsTableSizes.getSymbolLength());
                                     AmsPacket amsReadSymbolTablePacket = new AmsPacket(configuration.getTargetAmsNetId(), configuration.getTargetAmsPort(),
                                         configuration.getSourceAmsNetId(), configuration.getSourceAmsPort(),
                                         CommandId.ADS_READ, DEFAULT_COMMAND_STATE, 0, getInvokeId(), adsReadSymbolTableData);
diff --git a/plc4net/drivers/knxnetip/src/drivers/knxnetip/readwrite/model/KnxManufacturer.cs b/plc4net/drivers/knxnetip/src/drivers/knxnetip/readwrite/model/KnxManufacturer.cs
index bd0a28d2e..0df9c2f6b 100644
--- a/plc4net/drivers/knxnetip/src/drivers/knxnetip/readwrite/model/KnxManufacturer.cs
+++ b/plc4net/drivers/knxnetip/src/drivers/knxnetip/readwrite/model/KnxManufacturer.cs
@@ -619,8 +619,9 @@ namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
         M_DELTA_ELECTRONICS = 592,
         M_SHANGHAI_LEWIN_INTELLIGENT_TECHNOLOGY_CO__LTD_ = 593,
         M_KG_POWER = 594,
-        M_ABB___RESERVED = 595,
-        M_BUSCH_JAEGER_ELEKTRO___RESERVED = 596,
+        M_ZHEJIANG_MOORGEN_INTELLIGENT_TECHNOLOGY_CO___LTD = 595,
+        M_ABB___RESERVED = 596,
+        M_BUSCH_JAEGER_ELEKTRO___RESERVED = 597,
     }
 
     public static class KnxManufacturerInfo
@@ -2283,10 +2284,13 @@ namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
                 case KnxManufacturer.M_KG_POWER: { /* '594' */
                     return 652;
                 }
-                case KnxManufacturer.M_ABB___RESERVED: { /* '595' */
+                case KnxManufacturer.M_ZHEJIANG_MOORGEN_INTELLIGENT_TECHNOLOGY_CO___LTD: { /* '595' */
+                    return 653;
+                }
+                case KnxManufacturer.M_ABB___RESERVED: { /* '596' */
                     return 43954;
                 }
-                case KnxManufacturer.M_BUSCH_JAEGER_ELEKTRO___RESERVED: { /* '596' */
+                case KnxManufacturer.M_BUSCH_JAEGER_ELEKTRO___RESERVED: { /* '597' */
                     return 43959;
                 }
                 case KnxManufacturer.M_BUSCH_JAEGER_ELEKTRO: { /* '6' */
@@ -4084,10 +4088,13 @@ namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
                 case KnxManufacturer.M_KG_POWER: { /* '594' */
                     return "KG-POWER";
                 }
-                case KnxManufacturer.M_ABB___RESERVED: { /* '595' */
+                case KnxManufacturer.M_ZHEJIANG_MOORGEN_INTELLIGENT_TECHNOLOGY_CO___LTD: { /* '595' */
+                    return "Zhejiang Moorgen Intelligent Technology Co., Ltd";
+                }
+                case KnxManufacturer.M_ABB___RESERVED: { /* '596' */
                     return "ABB - reserved";
                 }
-                case KnxManufacturer.M_BUSCH_JAEGER_ELEKTRO___RESERVED: { /* '596' */
+                case KnxManufacturer.M_BUSCH_JAEGER_ELEKTRO___RESERVED: { /* '597' */
                     return "Busch-Jaeger Elektro - reserved";
                 }
                 case KnxManufacturer.M_BUSCH_JAEGER_ELEKTRO: { /* '6' */
diff --git a/protocols/ads/src/main/resources/protocols/ads/ads.mspec b/protocols/ads/src/main/resources/protocols/ads/ads.mspec
index f8421ba02..bc82fd672 100644
--- a/protocols/ads/src/main/resources/protocols/ads/ads.mspec
+++ b/protocols/ads/src/main/resources/protocols/ads/ads.mspec
@@ -569,6 +569,10 @@
     ['0x28' DT             ['4', '"IEC61131_DATE_AND_TIME"']]
 ]
 
+// https://github.com/Beckhoff/ADS/blob/master/AdsLib/standalone/AdsDef.h
+// https://gitlab.com/xilix-systems-llc/go-native-ads/-/blob/master/ads.go#L145
+// https://gitlab.com/xilix-systems-llc/go-native-ads/-/blob/master/connection.go#L109
+// https://gitlab.com/xilix-systems-llc/go-native-ads/-/blob/master/symbols.go#L222
 [enum uint 32 ReservedIndexGroups
     ['0x0000F000' ADSIGRP_SYMTAB]
     ['0x0000F001' ADSIGRP_SYMNAME]
@@ -579,10 +583,18 @@
     ['0x0000F006' ADSIGRP_SYM_RELEASEHND]
     ['0x0000F007' ADSIGRP_SYM_INFOBYNAME]
     ['0x0000F008' ADSIGRP_SYM_VERSION]
+    // We can use this GID to read the type information of a given variable
+    // in the operation mode in which we don't read the entire structures on
+    // connection start.
     ['0x0000F009' ADSIGRP_SYM_INFOBYNAMEEX]
     ['0x0000F00A' ADSIGRP_SYM_DOWNLOAD]
+    // Read the symbol-table (All variables defined in the PLC)
     ['0x0000F00B' ADSIGRP_SYM_UPLOAD]
     ['0x0000F00C' ADSIGRP_SYM_UPLOADINFO]
+    // Read the data-type-table (All data-types defined in the PLC)
+    ['0x0000F00E' ADSIGRP_DATA_TYPE_TABLE_UPLOAD]
+    // Read the sizes of the symbol and data-type-tables
+    ['0x0000F00F' ADSIGRP_SYMBOL_AND_DATA_TYPE_SIZES]
     ['0x0000F010' ADSIGRP_SYMNOTE]
     ['0x0000F020' ADSIGRP_IOIMAGE_RWIB]
     ['0x0000F021' ADSIGRP_IOIMAGE_RWIX]
@@ -736,16 +748,6 @@
     ['0x2751' WSAEHOSTUNREACH]
 ]
 
-// https://github.com/Beckhoff/ADS/blob/master/AdsLib/standalone/AdsDef.h
-// https://gitlab.com/xilix-systems-llc/go-native-ads/-/blob/master/ads.go#L145
-// https://gitlab.com/xilix-systems-llc/go-native-ads/-/blob/master/connection.go#L109
-// https://gitlab.com/xilix-systems-llc/go-native-ads/-/blob/master/symbols.go#L222
-[enum uint 32 AdsSignificantGroupAddresses
-    ['0x0000F00B' SYMBOL_TABLE   ]
-    ['0x0000F00E' DATA_TYPE_TABLE]
-    ['0x0000F00F' TABLE_SIZES    ]
-]
-
 [type AdsTableSizes byteOrder='LITTLE_ENDIAN'
 	[simple   uint 32 symbolCount   ]
 	[simple   uint 32 symbolLength  ]