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:44 UTC

[plc4x] branch feature/ads-symbol-discovery updated (bd1162193 -> 01405a02f)

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

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


    from bd1162193 chore(plc4j/ads): Introduced a data-type child type as it seems things were arranged a bit different there (the name being the property-name and the data-type-name being locaded in the other field.
     add 21bd5a923 build(deps): bump actions/github-script from 6.1.0 to 6.1.1 (#449)
     add 6920ed9da build(deps): bump maven-assembly-plugin from 3.3.0 to 3.4.2 (#448)
     add 14ebe5bc0 build(deps): bump maven-bundle-plugin from 5.1.7 to 5.1.8 (#447)
     add c3d7b9f59 build(deps): bump camel.version from 3.18.0 to 3.18.1 (#446)
     add a21cbc6c6 feat(plc4go): introduced ExecuteWithContext(ctx... calls
     add fbe964bfa feat(plc4go/spi): propagate ctx down into implementations
     add aa93c2784 feat(plc4go/spi): integrate ctx into DefaultCodec
     add 576951d31 test(plc4go/simulated): set context for simulated
     add 5ff39f7a1 feat(plc4go): added DiscoverWithContext to driver manager
     add 9f941a4e5 fix(plc4go): fixed close result of empty connection cache
     add 2f58834fe refactor(plc4go/cbus): put connect parts into methods added todo about power up
     add 633794d1e refactor(plc4go/cbus): put connect parts into methods added todo about power up
     add 62722c718 chore(build): add a second un-parallel call to the first build try to avoid wrong warnings
     add 90bb657d7 build(deps): bump mockito.version from 4.6.1 to 4.7.0 (#450)
     add 739e1bb08 build(deps): bump cmake-maven-plugin from 3.22.1-b1 to 3.23.2-b1 (#452)
     add b9848a0e8 build(deps): bump jakarta.activation-api from 1.2.2 to 2.1.0 (#451)
     add 834608525 build(deps): bump Saxon-HE from 10.5 to 11.4 (#445)
     add 514ae51fe fix(plc4go): fixed issue with broken discovery
     add 385f6e6c0 fix(cbus): fixed typo in network terminal levels
     add 8a208fa99 feat(plc4go/cbus): implemented proper plc-value mapping for identify calls
     add 2a5b518ba fix(plc4go/cbus): fix address string of unit info field
     add 16d5348a4 fix(plc4go/cbus): fix address string of cal identify field
     add ed5297d1b fix(cbus): fixed typo in summary command
     add 4925d81a9 fix(plc4go/cbus): removed wrong mapping
     add 7c814cc27 fix(plc4go/spi): disconnect message code on close
     add e514fe10e fix(plc4go/cbus): fixed issue when connection doesn't work on a power up notification
     add a96135126 chore(doc): added note about blocking calls in MessageCodec
     add 438cd428b fix(plc4go/cbus): removed connection closing on timeout
     add a64125789 fix(plc4go/cbus): fixed go routine leak
     add de4fab5f1 feat(plc4go/spi): added new ConnectWithContext to transport instance
     add 1f38cc9f8 feat(plc4go/spi): added new ConnectWithContext to message codec
     add 04fa66d53 feat(plc4go/knxnetip): use context for discovery
     add ce2db6b31 fix(plc4go/cbus): avoid channel leak by adding wait groups
     add 33fdbda7b fix(plc4go/spi): fixed minor issue with RequestTransaction
     add 5fa24325b chore(cbus): fixed some typos
     add 2651c2952 feat(plc4go/cbus): introduced sal field
     add 23df43ea1 fix(plc4go/cbus): don't misreport fields which are meant for sal or mmi
     add 6bd288c47 refactor(plc4go/cbus): move MMI handling to subscription handling
     new f2387df8d Merge remote-tracking branch 'origin/develop' into feature/ads-symbol-discovery
     new 01405a02f chore(plc4j/ads): Merged the ReservedIndexGroups and AdsSignificantGroupAddresses

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .github/workflows/ensure-platforms.yml             |   11 +-
 plc4c/pom.xml                                      |    2 +-
 plc4go/internal/ads/Reader.go                      |   83 +-
 plc4go/internal/ads/Writer.go                      |   59 +-
 plc4go/internal/bacnetip/Discoverer.go             |    5 +-
 plc4go/internal/bacnetip/Driver.go                 |    7 +-
 plc4go/internal/bacnetip/Reader.go                 |   99 +-
 plc4go/internal/bacnetip/Subscriber.go             |    7 +-
 plc4go/internal/cbus/Browser.go                    |  183 ++-
 plc4go/internal/cbus/Connection.go                 |  367 +++---
 plc4go/internal/cbus/Discoverer.go                 |  209 ++--
 plc4go/internal/cbus/Driver.go                     |    7 +-
 plc4go/internal/cbus/Field.go                      |   86 +-
 plc4go/internal/cbus/FieldHandler.go               |   55 +
 plc4go/internal/cbus/MessageCodec.go               |  104 +-
 plc4go/internal/cbus/Reader.go                     |  383 ++++---
 plc4go/internal/cbus/Subscriber.go                 |  130 ++-
 plc4go/internal/cbus/Writer.go                     |    4 +-
 plc4go/internal/cbus/fieldtype_string.go           |   11 +-
 plc4go/internal/eip/Connection.go                  |   93 +-
 plc4go/internal/eip/Reader.go                      |  184 ++-
 plc4go/internal/eip/Writer.go                      |  184 ++-
 plc4go/internal/knxnetip/Browser.go                |   76 +-
 plc4go/internal/knxnetip/Connection.go             |   19 +-
 .../knxnetip/ConnectionDriverSpecificOperations.go |   41 +-
 plc4go/internal/knxnetip/ConnectionHelper.go       |    7 +-
 .../knxnetip/ConnectionInternalOperations.go       | 1189 +++++++++-----------
 plc4go/internal/knxnetip/Discoverer.go             |  128 ++-
 plc4go/internal/knxnetip/Driver.go                 |   15 +-
 plc4go/internal/knxnetip/Reader.go                 |   14 +-
 plc4go/internal/knxnetip/Subscriber.go             |    7 +-
 plc4go/internal/knxnetip/Writer.go                 |    4 +-
 plc4go/internal/modbus/Connection.go               |   46 +-
 plc4go/internal/modbus/Reader.go                   |   63 +-
 plc4go/internal/modbus/Writer.go                   |   61 +-
 plc4go/internal/s7/Connection.go                   |  191 ++--
 plc4go/internal/s7/Reader.go                       |   85 +-
 plc4go/internal/s7/Writer.go                       |   87 +-
 plc4go/internal/simulated/Driver.go                |   34 +-
 plc4go/internal/simulated/Driver_test.go           |  120 +-
 plc4go/internal/simulated/Reader.go                |    4 +-
 plc4go/internal/simulated/Reader_test.go           |    3 +-
 plc4go/internal/simulated/Writer.go                |    4 +-
 plc4go/internal/simulated/Writer_test.go           |    3 +-
 plc4go/pkg/api/cache/plc_connection_cache.go       |    9 +
 plc4go/pkg/api/driver.go                           |    2 +
 plc4go/pkg/api/driverManager.go                    |    9 +-
 plc4go/pkg/api/model/plc_browse.go                 |    9 +-
 plc4go/pkg/api/model/plc_read.go                   |    6 +-
 plc4go/pkg/api/model/plc_subscription.go           |    2 +
 plc4go/pkg/api/model/plc_unsubscription.go         |    3 +
 plc4go/pkg/api/model/plc_write.go                  |    6 +-
 .../ads/readwrite/model/AdsDataTypeTableEntry.go   |  132 +--
 .../ads/readwrite/model/ReservedIndexGroups.go     |   76 +-
 .../cbus/readwrite/model/IdentifyReplyCommand.go   |    4 +-
 .../IdentifyReplyCommandNetworkTerminalLevels.go   |   36 +-
 ...reSummary.go => IdentifyReplyCommandSummary.go} |  114 +-
 .../knxnetip/readwrite/model/KnxManufacturer.go    |   26 +-
 plc4go/spi/MessageCodec.go                         |   12 +-
 plc4go/spi/PlcBrowser.go                           |    9 +-
 plc4go/spi/PlcDiscoverer.go                        |    2 +
 plc4go/spi/PlcReader.go                            |    7 +-
 plc4go/spi/PlcSubscriber.go                        |    9 +-
 plc4go/spi/PlcWriter.go                            |    7 +-
 plc4go/spi/RequestTransactionManager.go            |    2 +-
 plc4go/spi/default/DefaultBrowser.go               |   84 ++
 plc4go/spi/default/DefaultCodec.go                 |   39 +-
 plc4go/spi/default/DefaultConnection.go            |    3 +
 plc4go/spi/default/DefaultDriver.go                |    5 +
 plc4go/spi/interceptors/RequestInterceptor.go      |    9 +-
 .../interceptors/SingleItemRequestInterceptor.go   |   13 +-
 plc4go/spi/model/DefaultPlcBrowseRequest.go        |   13 +-
 plc4go/spi/model/DefaultPlcReadRequest.go          |   25 +-
 plc4go/spi/model/DefaultPlcSubscriptionRequest.go  |    7 +-
 plc4go/spi/model/DefaultPlcWriteRequest.go         |   24 +-
 plc4go/spi/testutils/DriverTestRunner.go           |    9 +-
 plc4go/spi/transports/TransportInstance.go         |   67 +-
 plc4go/spi/transports/pcap/Transport.go            |   11 +-
 plc4go/spi/transports/serial/Transport.go          |   11 +-
 plc4go/spi/transports/tcp/Transport.go             |   19 +-
 plc4go/spi/transports/test/Transport.go            |    5 +
 plc4go/spi/transports/udp/Transport.go             |    8 +-
 plc4go/spi/utils/net.go                            |   25 +-
 .../tests/drivers/tests/manual_cbus_driver_test.go |   52 +
 .../plc4x/java/ads/protocol/AdsProtocolLogic.java  |    6 +-
 .../apache/plc4x/java/cbus/RandomPackagesTest.java |    1 +
 plc4j/integrations/apache-camel/pom.xml            |    2 +-
 .../knxnetip/readwrite/model/KnxManufacturer.cs    |   19 +-
 pom.xml                                            |   14 +-
 .../ads/src/main/resources/protocols/ads/ads.mspec |   22 +-
 .../src/main/resources/protocols/cbus/c-bus.mspec  |   10 +-
 protocols/knxnetip/pom.xml                         |    2 +-
 protocols/opcua/pom.xml                            |    2 +-
 .../server/cbus/protocol/CBusServerAdapter.java    |    2 +-
 94 files changed, 3013 insertions(+), 2452 deletions(-)
 rename plc4go/protocols/cbus/readwrite/model/{IdentifyReplyCommandFirmwareSummary.go => IdentifyReplyCommandSummary.go} (55%)
 create mode 100644 plc4go/spi/default/DefaultBrowser.go


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

Posted by cd...@apache.org.
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  ]


[plc4x] 01/02: Merge remote-tracking branch 'origin/develop' into feature/ads-symbol-discovery

Posted by cd...@apache.org.
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 f2387df8d4f519b2d054b41346677c65c12a1f3e
Merge: bd1162193 6bd288c47
Author: Christofer Dutz <ch...@rivian.com>
AuthorDate: Wed Aug 17 20:24:11 2022 +0200

    Merge remote-tracking branch 'origin/develop' into feature/ads-symbol-discovery
    
    # Conflicts:
    #       plc4go/internal/bacnetip/Discoverer.go
    #       plc4go/internal/bacnetip/Driver.go
    #       plc4go/internal/knxnetip/Discoverer.go
    #       plc4go/internal/knxnetip/Driver.go
    #       plc4go/internal/simulated/Driver.go
    #       plc4go/internal/simulated/Driver_test.go
    #       plc4go/pkg/api/driver.go
    #       plc4go/pkg/api/driverManager.go
    #       plc4go/spi/PlcDiscoverer.go

 .github/workflows/ensure-platforms.yml             |   11 +-
 plc4c/pom.xml                                      |    2 +-
 plc4go/internal/ads/Reader.go                      |   83 +-
 plc4go/internal/ads/Writer.go                      |   59 +-
 plc4go/internal/bacnetip/Discoverer.go             |    5 +-
 plc4go/internal/bacnetip/Driver.go                 |    7 +-
 plc4go/internal/bacnetip/Reader.go                 |   99 +-
 plc4go/internal/bacnetip/Subscriber.go             |    7 +-
 plc4go/internal/cbus/Browser.go                    |  183 ++-
 plc4go/internal/cbus/Connection.go                 |  367 +++---
 plc4go/internal/cbus/Discoverer.go                 |  209 ++--
 plc4go/internal/cbus/Driver.go                     |    7 +-
 plc4go/internal/cbus/Field.go                      |   86 +-
 plc4go/internal/cbus/FieldHandler.go               |   55 +
 plc4go/internal/cbus/MessageCodec.go               |  104 +-
 plc4go/internal/cbus/Reader.go                     |  383 ++++---
 plc4go/internal/cbus/Subscriber.go                 |  130 ++-
 plc4go/internal/cbus/Writer.go                     |    4 +-
 plc4go/internal/cbus/fieldtype_string.go           |   11 +-
 plc4go/internal/eip/Connection.go                  |   93 +-
 plc4go/internal/eip/Reader.go                      |  184 ++-
 plc4go/internal/eip/Writer.go                      |  184 ++-
 plc4go/internal/knxnetip/Browser.go                |   76 +-
 plc4go/internal/knxnetip/Connection.go             |   19 +-
 .../knxnetip/ConnectionDriverSpecificOperations.go |   41 +-
 plc4go/internal/knxnetip/ConnectionHelper.go       |    7 +-
 .../knxnetip/ConnectionInternalOperations.go       | 1189 +++++++++-----------
 plc4go/internal/knxnetip/Discoverer.go             |  128 ++-
 plc4go/internal/knxnetip/Driver.go                 |   15 +-
 plc4go/internal/knxnetip/Reader.go                 |   14 +-
 plc4go/internal/knxnetip/Subscriber.go             |    7 +-
 plc4go/internal/knxnetip/Writer.go                 |    4 +-
 plc4go/internal/modbus/Connection.go               |   46 +-
 plc4go/internal/modbus/Reader.go                   |   63 +-
 plc4go/internal/modbus/Writer.go                   |   61 +-
 plc4go/internal/s7/Connection.go                   |  191 ++--
 plc4go/internal/s7/Reader.go                       |   85 +-
 plc4go/internal/s7/Writer.go                       |   87 +-
 plc4go/internal/simulated/Driver.go                |   34 +-
 plc4go/internal/simulated/Driver_test.go           |  120 +-
 plc4go/internal/simulated/Reader.go                |    4 +-
 plc4go/internal/simulated/Reader_test.go           |    3 +-
 plc4go/internal/simulated/Writer.go                |    4 +-
 plc4go/internal/simulated/Writer_test.go           |    3 +-
 plc4go/pkg/api/cache/plc_connection_cache.go       |    9 +
 plc4go/pkg/api/driver.go                           |    2 +
 plc4go/pkg/api/driverManager.go                    |    9 +-
 plc4go/pkg/api/model/plc_browse.go                 |    9 +-
 plc4go/pkg/api/model/plc_read.go                   |    6 +-
 plc4go/pkg/api/model/plc_subscription.go           |    2 +
 plc4go/pkg/api/model/plc_unsubscription.go         |    3 +
 plc4go/pkg/api/model/plc_write.go                  |    6 +-
 .../cbus/readwrite/model/IdentifyReplyCommand.go   |    4 +-
 .../IdentifyReplyCommandNetworkTerminalLevels.go   |   36 +-
 ...reSummary.go => IdentifyReplyCommandSummary.go} |  114 +-
 plc4go/spi/MessageCodec.go                         |   12 +-
 plc4go/spi/PlcBrowser.go                           |    9 +-
 plc4go/spi/PlcDiscoverer.go                        |    2 +
 plc4go/spi/PlcReader.go                            |    7 +-
 plc4go/spi/PlcSubscriber.go                        |    9 +-
 plc4go/spi/PlcWriter.go                            |    7 +-
 plc4go/spi/RequestTransactionManager.go            |    2 +-
 plc4go/spi/default/DefaultBrowser.go               |   84 ++
 plc4go/spi/default/DefaultCodec.go                 |   39 +-
 plc4go/spi/default/DefaultConnection.go            |    3 +
 plc4go/spi/default/DefaultDriver.go                |    5 +
 plc4go/spi/interceptors/RequestInterceptor.go      |    9 +-
 .../interceptors/SingleItemRequestInterceptor.go   |   13 +-
 plc4go/spi/model/DefaultPlcBrowseRequest.go        |   13 +-
 plc4go/spi/model/DefaultPlcReadRequest.go          |   25 +-
 plc4go/spi/model/DefaultPlcSubscriptionRequest.go  |    7 +-
 plc4go/spi/model/DefaultPlcWriteRequest.go         |   24 +-
 plc4go/spi/testutils/DriverTestRunner.go           |    9 +-
 plc4go/spi/transports/TransportInstance.go         |   67 +-
 plc4go/spi/transports/pcap/Transport.go            |   11 +-
 plc4go/spi/transports/serial/Transport.go          |   11 +-
 plc4go/spi/transports/tcp/Transport.go             |   19 +-
 plc4go/spi/transports/test/Transport.go            |    5 +
 plc4go/spi/transports/udp/Transport.go             |    8 +-
 plc4go/spi/utils/net.go                            |   25 +-
 .../tests/drivers/tests/manual_cbus_driver_test.go |   52 +
 .../apache/plc4x/java/cbus/RandomPackagesTest.java |    1 +
 plc4j/integrations/apache-camel/pom.xml            |    2 +-
 pom.xml                                            |   14 +-
 .../src/main/resources/protocols/cbus/c-bus.mspec  |   10 +-
 protocols/knxnetip/pom.xml                         |    2 +-
 protocols/opcua/pom.xml                            |    2 +-
 .../server/cbus/protocol/CBusServerAdapter.java    |    2 +-
 88 files changed, 2852 insertions(+), 2332 deletions(-)

diff --cc plc4go/internal/bacnetip/Discoverer.go
index e61f6ed6b,36f1d77b9..e303c847b
--- a/plc4go/internal/bacnetip/Discoverer.go
+++ b/plc4go/internal/bacnetip/Discoverer.go
@@@ -48,7 -48,8 +48,8 @@@ func NewDiscoverer() *Discoverer 
  	return &Discoverer{}
  }
  
- func (d *Discoverer) Discover(callback func(event apiModel.PlcDiscoveryItem), discoveryOptions ...options.WithDiscoveryOption) error {
 -func (d *Discoverer) Discover(ctx context.Context, callback func(event apiModel.PlcDiscoveryEvent), discoveryOptions ...options.WithDiscoveryOption) error {
++func (d *Discoverer) Discover(ctx context.Context, callback func(event apiModel.PlcDiscoveryItem), discoveryOptions ...options.WithDiscoveryOption) error {
+ 	// TODO: handle ctx
  	interfaces, err := extractInterfaces(discoveryOptions)
  	if err != nil {
  		return errors.Wrap(err, "error extracting interfaces")
diff --cc plc4go/internal/bacnetip/Driver.go
index 26552395a,24512c95f..f9d40dd7e
--- a/plc4go/internal/bacnetip/Driver.go
+++ b/plc4go/internal/bacnetip/Driver.go
@@@ -133,6 -134,10 +134,10 @@@ func (m *Driver) SupportsDiscovery() bo
  	return true
  }
  
 -func (m *Driver) Discover(callback func(event apiModel.PlcDiscoveryEvent), discoveryOptions ...options.WithDiscoveryOption) error {
 +func (m *Driver) Discover(callback func(event apiModel.PlcDiscoveryItem), discoveryOptions ...options.WithDiscoveryOption) error {
- 	return NewDiscoverer().Discover(callback, discoveryOptions...)
+ 	return m.DiscoverWithContext(context.TODO(), callback, discoveryOptions...)
+ }
+ 
+ func (m *Driver) DiscoverWithContext(ctx context.Context, callback func(event apiModel.PlcDiscoveryEvent), discoveryOptions ...options.WithDiscoveryOption) error {
+ 	return NewDiscoverer().Discover(ctx, callback, discoveryOptions...)
  }
diff --cc plc4go/internal/knxnetip/Discoverer.go
index 12f780068,7c435bca2..965fa1220
--- a/plc4go/internal/knxnetip/Discoverer.go
+++ b/plc4go/internal/knxnetip/Discoverer.go
@@@ -44,7 -45,8 +45,8 @@@ func NewDiscoverer() *Discoverer 
  	return &Discoverer{}
  }
  
- func (d *Discoverer) Discover(callback func(event apiModel.PlcDiscoveryItem), discoveryOptions ...options.WithDiscoveryOption) error {
 -func (d *Discoverer) Discover(ctx context.Context, callback func(event apiModel.PlcDiscoveryEvent), discoveryOptions ...options.WithDiscoveryOption) error {
++func (d *Discoverer) Discover(ctx context.Context, callback func(event apiModel.PlcDiscoveryItem), discoveryOptions ...options.WithDiscoveryOption) error {
+ 	// TODO: handle ctx
  	udpTransport := udp.NewTransport()
  
  	// Create a connection string for the KNX broadcast discovery address.
diff --cc plc4go/internal/knxnetip/Driver.go
index 9c456e440,721c65861..60deb4fb9
--- a/plc4go/internal/knxnetip/Driver.go
+++ b/plc4go/internal/knxnetip/Driver.go
@@@ -77,6 -78,10 +78,10 @@@ func (m *Driver) SupportsDiscovery() bo
  	return true
  }
  
- func (m Driver) Discover(callback func(event apiModel.PlcDiscoveryItem), discoveryOptions ...options.WithDiscoveryOption) error {
- 	return NewDiscoverer().Discover(callback, discoveryOptions...)
 -func (m *Driver) Discover(callback func(event apiModel.PlcDiscoveryEvent), discoveryOptions ...options.WithDiscoveryOption) error {
++func (m *Driver) Discover(callback func(event apiModel.PlcDiscoveryItem), discoveryOptions ...options.WithDiscoveryOption) error {
+ 	return m.DiscoverWithContext(context.TODO(), callback, discoveryOptions...)
+ }
+ 
+ func (m *Driver) DiscoverWithContext(ctx context.Context, callback func(event apiModel.PlcDiscoveryEvent), discoveryOptions ...options.WithDiscoveryOption) error {
+ 	return NewDiscoverer().Discover(ctx, callback, discoveryOptions...)
  }
diff --cc plc4go/internal/simulated/Driver.go
index ec1d97a13,0b0fdd19c..2026bbc35
--- a/plc4go/internal/simulated/Driver.go
+++ b/plc4go/internal/simulated/Driver.go
@@@ -40,40 -38,8 +38,18 @@@ func NewDriver() plc4go.PlcDriver 
  	}
  }
  
- // GetProtocolCode Get the short code used to identify this driver (As used in the connection string)
- func (d *Driver) GetProtocolCode() string {
- 	return "simulated"
- }
- 
- // GetProtocolName Get a human-readable name for this driver
- func (d *Driver) GetProtocolName() string {
- 	return "Simulated PLC4X Datasource"
- }
- 
- // GetDefaultTransport If the driver has a default form of transport, provide this and make
- // providing the transport code optional in the connection string
- func (d *Driver) GetDefaultTransport() string {
- 	return "none"
- }
- 
- // CheckQuery Have the driver parse the query string and provide feedback if it's not a valid one
- func (d *Driver) CheckQuery(query string) error {
- 	_, err := d.fieldHandler.ParseQuery(query)
- 	return err
- }
- 
  // GetConnection Establishes a connection to a given PLC using the information in the connectionString
  func (d *Driver) GetConnection(_ url.URL, _ map[string]transports.Transport, options map[string][]string) <-chan plc4go.PlcConnectionConnectResult {
- 	connection := NewConnection(NewDevice("test"), d.fieldHandler, d.valueHandler, options)
+ 	connection := NewConnection(NewDevice("test"), d.GetPlcFieldHandler(), d.valueHandler, options)
  	return connection.Connect()
  }
 +
 +// SupportsDiscovery returns true if this driver supports discovery
 +// TODO: Actually the connection could support discovery to list up all fields in the Device
 +func (d *Driver) SupportsDiscovery() bool {
 +	return false
 +}
 +
 +func (d *Driver) Discover(_ func(event model.PlcDiscoveryItem), _ ...options.WithDiscoveryOption) error {
 +	return errors.New("unsupported operation")
 +}
diff --cc plc4go/internal/simulated/Driver_test.go
index aca7bf1f1,ad34db3ec..16631d0c6
--- a/plc4go/internal/simulated/Driver_test.go
+++ b/plc4go/internal/simulated/Driver_test.go
@@@ -67,53 -53,7 +53,49 @@@ func TestDriver_CheckQuery(t *testing.T
  	}
  }
  
 +func TestDriver_Discover(t *testing.T) {
 +	type fields struct {
 +		fieldHandler FieldHandler
 +		valueHandler ValueHandler
 +	}
 +	type args struct {
 +		callback         func(event model.PlcDiscoveryItem)
 +		discoveryOptions []options.WithDiscoveryOption
 +	}
 +	tests := []struct {
 +		name    string
 +		fields  fields
 +		args    args
 +		wantErr bool
 +	}{
 +		{
 +			name: "discovery fails",
 +			fields: fields{
 +				fieldHandler: NewFieldHandler(),
 +				valueHandler: NewValueHandler(),
 +			},
 +			args: args{
 +				// Can all be nil, as the call is expected to fail
 +				callback:         nil,
 +				discoveryOptions: nil,
 +			},
 +			wantErr: true,
 +		},
 +	}
 +	for _, tt := range tests {
 +		t.Run(tt.name, func(t *testing.T) {
 +			d := &Driver{
 +				fieldHandler: tt.fields.fieldHandler,
 +				valueHandler: tt.fields.valueHandler,
 +			}
 +			if err := d.Discover(tt.args.callback, tt.args.discoveryOptions...); (err != nil) != tt.wantErr {
 +				t.Errorf("Discover() error = %v, wantErr %v", err, tt.wantErr)
 +			}
 +		})
 +	}
 +}
 +
  func TestDriver_GetConnection(t *testing.T) {
- 	type fields struct {
- 		fieldHandler FieldHandler
- 		valueHandler ValueHandler
- 	}
  	type args struct {
  		in0     url.URL
  		in1     map[string]transports.Transport
diff --cc plc4go/pkg/api/driver.go
index f07ba0a21,ffdf79adf..67760f4d3
--- a/plc4go/pkg/api/driver.go
+++ b/plc4go/pkg/api/driver.go
@@@ -48,5 -49,6 +49,6 @@@ type PlcDriver interface 
  
  	// Discover TODO: document me
  	// FIXME: this leaks spi in the signature move to spi driver or create interfaces. Can also be done by moving spi in a proper module
 -	Discover(callback func(event model.PlcDiscoveryEvent), discoveryOptions ...options.WithDiscoveryOption) error
 +	Discover(callback func(event model.PlcDiscoveryItem), discoveryOptions ...options.WithDiscoveryOption) error
+ 	DiscoverWithContext(ctx context.Context, callback func(event model.PlcDiscoveryEvent), discoveryOptions ...options.WithDiscoveryOption) error
  }
diff --cc plc4go/pkg/api/driverManager.go
index d093ed6e0,8f0be21c9..4e8e5ecc4
--- a/plc4go/pkg/api/driverManager.go
+++ b/plc4go/pkg/api/driverManager.go
@@@ -41,7 -42,9 +42,9 @@@ type PlcDriverManager interface 
  	GetConnection(connectionString string) <-chan PlcConnectionConnectResult
  
  	// Discover Execute all available discovery methods on all available drivers using all transports
 -	Discover(callback func(event model.PlcDiscoveryEvent), discoveryOptions ...WithDiscoveryOption) error
 +	Discover(callback func(event model.PlcDiscoveryItem), discoveryOptions ...WithDiscoveryOption) error
+ 	// DiscoverWithContext Execute all available discovery methods on all available drivers using all transports
+ 	DiscoverWithContext(ctx context.Context, callback func(event model.PlcDiscoveryEvent), discoveryOptions ...WithDiscoveryOption) error
  }
  
  func NewPlcDriverManager() PlcDriverManager {
@@@ -282,7 -285,11 +285,11 @@@ func (m *plcDriverManger) GetConnection
  	return driver.GetConnection(transportUrl, m.transports, configOptions)
  }
  
 -func (m *plcDriverManger) Discover(callback func(event model.PlcDiscoveryEvent), discoveryOptions ...WithDiscoveryOption) error {
 +func (m *plcDriverManger) Discover(callback func(event model.PlcDiscoveryItem), discoveryOptions ...WithDiscoveryOption) error {
+ 	return m.DiscoverWithContext(context.TODO(), callback, discoveryOptions...)
+ }
+ 
+ func (m *plcDriverManger) DiscoverWithContext(ctx context.Context, callback func(event model.PlcDiscoveryEvent), discoveryOptions ...WithDiscoveryOption) error {
  	// Check if we've got at least one option to restrict to certain protocols only.
  	// If there is at least one, we only check that protocol, if there are none, all
  	// available protocols are checked.
diff --cc plc4go/spi/PlcDiscoverer.go
index 812a25fab,33c8af325..d0241389a
--- a/plc4go/spi/PlcDiscoverer.go
+++ b/plc4go/spi/PlcDiscoverer.go
@@@ -25,5 -26,6 +26,6 @@@ import 
  )
  
  type PlcDiscoverer interface {
 -	Discover(callback func(event model.PlcDiscoveryEvent), discoveryOptions ...options.WithDiscoveryOption) error
 +	Discover(callback func(event model.PlcDiscoveryItem), discoveryOptions ...options.WithDiscoveryOption) error
+ 	DiscoverWithContext(ctx context.Context, callback func(event model.PlcDiscoveryEvent), discoveryOptions ...options.WithDiscoveryOption) error
  }