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 2021/03/02 11:12:18 UTC

[plc4x] branch develop updated: - Fixed a bug only returning results for only one group address for a given com object in System7 devices

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

cdutz pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git


The following commit(s) were added to refs/heads/develop by this push:
     new 197183f  - Fixed a bug only returning results for only one group address for a given com object in System7 devices
197183f is described below

commit 197183fe7aca32906becb739a6408920845cb9bf
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Tue Mar 2 12:12:08 2021 +0100

    - Fixed a bug only returning results for only one group address for a given com object in System7 devices
---
 plc4go/internal/plc4go/knxnetip/KnxNetIpBrowser.go | 38 ++++++++++++----------
 1 file changed, 21 insertions(+), 17 deletions(-)

diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpBrowser.go b/plc4go/internal/plc4go/knxnetip/KnxNetIpBrowser.go
index 48ad733..b8e49d2 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpBrowser.go
+++ b/plc4go/internal/plc4go/knxnetip/KnxNetIpBrowser.go
@@ -278,11 +278,11 @@ func (b KnxNetIpBrowser) executeCommunicationObjectQuery(field KnxNetIpCommunica
 	rrr = readRequest.Execute()
 	readResult = <-rrr
 	if readResult.Err != nil {
-		return nil, errors.New("error reading the group address association table content: " + readResult.Err.Error())
+		return nil, errors.New("error reading the group address association table address: " + readResult.Err.Error())
 	}
 	if (readResult.Response != nil) &&
 		(readResult.Response.GetResponseCode("groupAddressAssociationTableAddress") != apiModel.PlcResponseCode_OK) {
-		return nil, errors.New("error reading the group address association table content: " +
+		return nil, errors.New("error reading the group address association table address: " +
 			readResult.Response.GetResponseCode("groupAddressAssociationTableAddress").GetName())
 	}
 	groupAddressAssociationTableAddress := readResult.Response.GetValue("groupAddressAssociationTableAddress").GetUint16()
@@ -456,14 +456,16 @@ func (b KnxNetIpBrowser) executeCommunicationObjectQuery(field KnxNetIpCommunica
 
 		readRequestBuilder = b.connection.ReadRequestBuilder()
 		// Read data for all com objects that are assigned a group address
-		groupAddressMap := map[uint16]*driverModel.KnxGroupAddress{}
+		groupAddressMap := map[uint16][]*driverModel.KnxGroupAddress{}
 		for groupAddress, comObjectNumber := range groupAddressComObjectNumberMapping {
-			groupAddressMap[comObjectNumber] = groupAddress
+			if groupAddressMap[comObjectNumber] == nil {
+				groupAddressMap[comObjectNumber] = []*driverModel.KnxGroupAddress{}
+			}
+			groupAddressMap[comObjectNumber] = append(groupAddressMap[comObjectNumber], groupAddress)
 			entryAddress := comObjectTableAddresses.ComObjectTableAddress() + 3 + (comObjectNumber * 4)
 			readRequestBuilder.AddQuery(strconv.Itoa(int(comObjectNumber)),
 				fmt.Sprintf("%s#%X:USINT[4]", knxAddressString, entryAddress))
 		}
-		//readRequestBuilder.AddQuery("cot", fmt.Sprintf("%s#43FF:USINT[100]", knxAddressString))
 		readRequest, err = readRequestBuilder.Build()
 		if err != nil {
 			return nil, errors.New("error creating read request: " + err.Error())
@@ -481,24 +483,26 @@ func (b KnxNetIpBrowser) executeCommunicationObjectQuery(field KnxNetIpCommunica
 
 			// We saved the com object number in the field name.
 			comObjectNumber, _ := strconv.Atoi(fieldName)
-			groupAddress := groupAddressMap[uint16(comObjectNumber)]
+			groupAddresses := groupAddressMap[uint16(comObjectNumber)]
 			readable := descriptor.CommunicationEnable && descriptor.ReadEnable
 			writable := descriptor.CommunicationEnable && descriptor.WriteEnable
 			subscribable := descriptor.CommunicationEnable && descriptor.TransmitEnable
 			// Find a matching datatype for the given value-type.
 			fieldType := b.getFieldTypeForValueType(descriptor.ValueType)
 
-			// Create a field for the given input.
-			field := b.getFieldForGroupAddress(groupAddress, fieldType)
-
-			results = append(results, apiModel.PlcBrowseQueryResult{
-				Field:             field,
-				Name:              fmt.Sprintf("#%d", comObjectNumber),
-				Readable:          readable,
-				Writable:          writable,
-				Subscribable:      subscribable,
-				PossibleDataTypes: nil,
-			})
+			// Create a field for each of the given inputs.
+			for _, groupAddress := range groupAddresses {
+				field := b.getFieldForGroupAddress(groupAddress, fieldType)
+
+				results = append(results, apiModel.PlcBrowseQueryResult{
+					Field:             field,
+					Name:              fmt.Sprintf("#%d", comObjectNumber),
+					Readable:          readable,
+					Writable:          writable,
+					Subscribable:      subscribable,
+					PossibleDataTypes: nil,
+				})
+			}
 		}
 		// da 0700
 		// 0:07db1300 1:07dc4300 2:07dd1300 3:07de1300 4:07df1300