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/08/30 11:34:33 UTC
[plc4x] branch s7event updated: Made the KNX driver interpret the
"device name discovery-option"
This is an automated email from the ASF dual-hosted git repository.
cdutz pushed a commit to branch s7event
in repository https://gitbox.apache.org/repos/asf/plc4x.git
The following commit(s) were added to refs/heads/s7event by this push:
new 4355963 Made the KNX driver interpret the "device name discovery-option"
4355963 is described below
commit 435596313cc8ae810f8ccbb2c01737980114f98f
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Mon Aug 30 04:34:25 2021 -0700
Made the KNX driver interpret the "device name discovery-option"
---
plc4go/internal/plc4go/knxnetip/Discoverer.go | 26 ++++++++++++++---
plc4go/internal/plc4go/knxnetip/Driver.go | 2 +-
plc4go/pkg/plc4go/model/plc_discovery.go | 40 +++++++++++++++++++++++----
3 files changed, 58 insertions(+), 10 deletions(-)
diff --git a/plc4go/internal/plc4go/knxnetip/Discoverer.go b/plc4go/internal/plc4go/knxnetip/Discoverer.go
index 0e5d552..8e074f5 100644
--- a/plc4go/internal/plc4go/knxnetip/Discoverer.go
+++ b/plc4go/internal/plc4go/knxnetip/Discoverer.go
@@ -32,7 +32,7 @@ import (
"github.com/apache/plc4x/plc4go/internal/plc4go/spi/transports"
"github.com/apache/plc4x/plc4go/internal/plc4go/spi/transports/udp"
"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
- "github.com/apache/plc4x/plc4go/pkg/plc4go/model"
+ apiModel "github.com/apache/plc4x/plc4go/pkg/plc4go/model"
)
type Discoverer struct {
@@ -43,7 +43,7 @@ func NewDiscoverer() *Discoverer {
return &Discoverer{}
}
-func (d *Discoverer) Discover(callback func(event model.PlcDiscoveryEvent)) error {
+func (d *Discoverer) Discover(callback func(event apiModel.PlcDiscoveryEvent), options ...apiModel.WithDiscoveryOption) error {
udpTransport := udp.NewTransport()
// Create a connection string for the KNX broadcast discovery address.
@@ -52,11 +52,29 @@ func (d *Discoverer) Discover(callback func(event model.PlcDiscoveryEvent)) erro
return err
}
- interfaces, err := net.Interfaces()
+ allInterfaces, err := net.Interfaces()
if err != nil {
return err
}
+ // If no device is explicitly selected via option, simply use all of them
+ // However if a discovery option is present to select a device by name, only
+ // add those devices matching any of the given names.
+ var interfaces []net.Interface
+ deviceNames := apiModel.FilterDiscoveryOptionsDeviceName(options)
+ if len(deviceNames) > 0 {
+ for _, curInterface := range allInterfaces {
+ for _, deviceNameOption := range deviceNames {
+ if curInterface.Name == deviceNameOption.GetDeviceName() {
+ interfaces = append(interfaces, curInterface)
+ break
+ }
+ }
+ }
+ } else {
+ interfaces = allInterfaces
+ }
+
var tranportInstances []transports.TransportInstance
// Iterate over all network devices of this system.
for _, interf := range interfaces {
@@ -144,7 +162,7 @@ func (d *Discoverer) Discover(callback func(event model.PlcDiscoveryEvent)) erro
}
deviceName := string(bytes.Trim(utils.Int8ArrayToByteArray(
searchResponse.DibDeviceInfo.DeviceFriendlyName), "\x00"))
- discoveryEvent := model.NewPlcDiscoveryEvent(
+ discoveryEvent := apiModel.NewPlcDiscoveryEvent(
"knxnet-ip", "udp", *remoteUrl, nil, deviceName)
// Pass the event back to the callback
callback(discoveryEvent)
diff --git a/plc4go/internal/plc4go/knxnetip/Driver.go b/plc4go/internal/plc4go/knxnetip/Driver.go
index 152265e..09c413a 100644
--- a/plc4go/internal/plc4go/knxnetip/Driver.go
+++ b/plc4go/internal/plc4go/knxnetip/Driver.go
@@ -89,5 +89,5 @@ func (m Driver) SupportsDiscovery() bool {
}
func (m Driver) Discover(callback func(event apiModel.PlcDiscoveryEvent), options ...apiModel.WithDiscoveryOption) error {
- return NewDiscoverer().Discover(callback)
+ return NewDiscoverer().Discover(callback, options...)
}
diff --git a/plc4go/pkg/plc4go/model/plc_discovery.go b/plc4go/pkg/plc4go/model/plc_discovery.go
index e39f1e2..98edb02 100644
--- a/plc4go/pkg/plc4go/model/plc_discovery.go
+++ b/plc4go/pkg/plc4go/model/plc_discovery.go
@@ -85,11 +85,17 @@ func (_ discoveryOption) IsDiscoveryOption() bool {
}
func FilterDiscoveryOptionsProtocol(options []WithDiscoveryOption) []DiscoveryOptionProtocol {
+ castFunc := func(typ interface{}) DiscoveryOptionProtocol {
+ if casted, ok := typ.(discoveryOptionProtocol); ok {
+ return &casted
+ }
+ return nil
+ }
var filtered []DiscoveryOptionProtocol
for _, option := range options {
switch option.(type) {
case discoveryOptionProtocol:
- filtered = append(filtered, option.(DiscoveryOptionProtocol))
+ filtered = append(filtered, castFunc(option))
}
}
return filtered
@@ -109,11 +115,17 @@ func (d *discoveryOptionProtocol) GetProtocolName() string {
}
func FilterDiscoveryOptionsTransport(options []WithDiscoveryOption) []DiscoveryOptionTransport {
+ castFunc := func(typ interface{}) DiscoveryOptionTransport {
+ if casted, ok := typ.(discoveryOptionTransport); ok {
+ return &casted
+ }
+ return nil
+ }
var filtered []DiscoveryOptionTransport
for _, option := range options {
switch option.(type) {
case discoveryOptionTransport:
- filtered = append(filtered, option.(DiscoveryOptionTransport))
+ filtered = append(filtered, castFunc(option))
}
}
return filtered
@@ -133,11 +145,17 @@ func (d *discoveryOptionTransport) GetTransportName() string {
}
func FilterDiscoveryOptionsDeviceName(options []WithDiscoveryOption) []DiscoveryOptionDeviceName {
+ castFunc := func(typ interface{}) DiscoveryOptionDeviceName {
+ if casted, ok := typ.(discoveryOptionDeviceName); ok {
+ return &casted
+ }
+ return nil
+ }
var filtered []DiscoveryOptionDeviceName
for _, option := range options {
switch option.(type) {
case discoveryOptionDeviceName:
- filtered = append(filtered, option.(DiscoveryOptionDeviceName))
+ filtered = append(filtered, castFunc(option))
}
}
return filtered
@@ -157,11 +175,17 @@ func (d *discoveryOptionDeviceName) GetDeviceName() string {
}
func FilterDiscoveryOptionsLocalAddress(options []WithDiscoveryOption) []DiscoveryOptionLocalAddress {
+ castFunc := func(typ interface{}) DiscoveryOptionLocalAddress {
+ if casted, ok := typ.(discoveryOptionLocalAddress); ok {
+ return &casted
+ }
+ return nil
+ }
var filtered []DiscoveryOptionLocalAddress
for _, option := range options {
switch option.(type) {
case discoveryOptionLocalAddress:
- filtered = append(filtered, option.(DiscoveryOptionLocalAddress))
+ filtered = append(filtered, castFunc(option))
}
}
return filtered
@@ -181,11 +205,17 @@ func (d *discoveryOptionLocalAddress) GetLocalAddress() string {
}
func FilterDiscoveryOptionsRemoteAddress(options []WithDiscoveryOption) []DiscoveryOptionRemoteAddress {
+ castFunc := func(typ interface{}) DiscoveryOptionRemoteAddress {
+ if casted, ok := typ.(discoveryOptionRemoteAddress); ok {
+ return &casted
+ }
+ return nil
+ }
var filtered []DiscoveryOptionRemoteAddress
for _, option := range options {
switch option.(type) {
case discoveryOptionRemoteAddress:
- filtered = append(filtered, option.(DiscoveryOptionRemoteAddress))
+ filtered = append(filtered, castFunc(option))
}
}
return filtered