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