This is an automated email from the ASF dual-hosted git repository. sruehl pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/plc4x-extras.git
The following commit(s) were added to refs/heads/main by this push: new ae0b52b fix(plc4go): compile errors ae0b52b is described below commit ae0b52b7b15e5fb2b132e9e04d79f9bc9120e48a Author: Sebastian Rühl <sru...@apache.org> AuthorDate: Mon Apr 8 09:10:20 2024 +0200 fix(plc4go): compile errors --- plc4go/examples/ads/discovery/Discovery.go | 36 ------------- plc4go/tools/plc4xbrowser/ui/actions.go | 21 +++----- .../internal/cbusanalyzer/analyzer.go | 63 ++++++++++++++++++---- plc4go/tools/plc4xpcapanalyzer/ui/actions.go | 13 ++--- 4 files changed, 63 insertions(+), 70 deletions(-) diff --git a/plc4go/examples/ads/discovery/Discovery.go b/plc4go/examples/ads/discovery/Discovery.go deleted file mode 100644 index e19cc19..0000000 --- a/plc4go/examples/ads/discovery/Discovery.go +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package main - -import ( - "context" - "time" - - "github.com/apache/plc4x/plc4go/internal/ads" - apiModel "github.com/apache/plc4x/plc4go/pkg/api/model" -) - -func main() { - discoverer := ads.NewDiscoverer() - _ = discoverer.Discover(context.Background(), func(event apiModel.PlcDiscoveryItem) { - print(event) - }) - time.Sleep(time.Second * 5) -} diff --git a/plc4go/tools/plc4xbrowser/ui/actions.go b/plc4go/tools/plc4xbrowser/ui/actions.go index ef6ca83..7902fff 100644 --- a/plc4go/tools/plc4xbrowser/ui/actions.go +++ b/plc4go/tools/plc4xbrowser/ui/actions.go @@ -22,13 +22,9 @@ package ui import ( "bytes" "fmt" + "github.com/apache/plc4x/plc4go/pkg/api/drivers" "strings" - "github.com/apache/plc4x/plc4go/internal/ads" - "github.com/apache/plc4x/plc4go/internal/bacnetip" - "github.com/apache/plc4x/plc4go/internal/cbus" - "github.com/apache/plc4x/plc4go/internal/opcua" - "github.com/apache/plc4x/plc4go/internal/s7" plc4go "github.com/apache/plc4x/plc4go/pkg/api" "github.com/apache/plc4x/plc4go/pkg/api/transports" @@ -118,36 +114,31 @@ func registerDriver(driverId string) error { var driver plc4go.PlcDriver switch driverId { case "ads": - driver = ads.NewDriver() - driverManager.RegisterDriver(driver) + drivers.RegisterAdsDriver(driverManager) if !tcpRegistered { transports.RegisterTcpTransport(driverManager) tcpRegistered = true } case "bacnetip": - driver = bacnetip.NewDriver() - driverManager.RegisterDriver(driver) + drivers.RegisterBacnetDriver(driverManager) if !udpRegistered { transports.RegisterUdpTransport(driverManager) udpRegistered = true } case "c-bus": - driver = cbus.NewDriver() - driverManager.RegisterDriver(driver) + drivers.RegisterCBusDriver(driverManager) if !tcpRegistered { transports.RegisterTcpTransport(driverManager) tcpRegistered = true } case "s7": - driver = s7.NewDriver() - driverManager.RegisterDriver(driver) + drivers.RegisterS7Driver(driverManager) if !tcpRegistered { transports.RegisterTcpTransport(driverManager) tcpRegistered = true } case "opcua": - driver = opcua.NewDriver() - driverManager.RegisterDriver(driver) + drivers.RegisterOpcuaDriver(driverManager) if !tcpRegistered { transports.RegisterTcpTransport(driverManager) tcpRegistered = true diff --git a/plc4go/tools/plc4xpcapanalyzer/internal/cbusanalyzer/analyzer.go b/plc4go/tools/plc4xpcapanalyzer/internal/cbusanalyzer/analyzer.go index 7583239..6b40f20 100644 --- a/plc4go/tools/plc4xpcapanalyzer/internal/cbusanalyzer/analyzer.go +++ b/plc4go/tools/plc4xpcapanalyzer/internal/cbusanalyzer/analyzer.go @@ -27,8 +27,7 @@ import ( "github.com/apache/plc4x/plc4go-extras/tools/plc4xpcapanalyzer/config" "github.com/apache/plc4x/plc4go-extras/tools/plc4xpcapanalyzer/internal/common" - "github.com/apache/plc4x/plc4go/internal/cbus" - "github.com/apache/plc4x/plc4go/protocols/cbus/readwrite/model" + readWriteModel "github.com/apache/plc4x/plc4go/protocols/cbus/readwrite/model" "github.com/apache/plc4x/plc4go/spi" "github.com/gopacket/gopacket" @@ -39,8 +38,8 @@ import ( type Analyzer struct { Client net.IP - requestContext model.RequestContext - cBusOptions model.CBusOptions + requestContext readWriteModel.RequestContext + cBusOptions readWriteModel.CBusOptions initialized bool currentInboundPayloads map[string][]byte currentPrefilterInboundPayloads map[string][]byte @@ -54,8 +53,8 @@ func (a *Analyzer) Init() { if a.initialized { return } - a.requestContext = model.NewRequestContext(false) - a.cBusOptions = model.NewCBusOptions(config.CBusConfigInstance.Connect, config.CBusConfigInstance.Smart, config.CBusConfigInstance.Idmon, config.CBusConfigInstance.Exstat, config.CBusConfigInstance.Monitor, config.CBusConfigInstance.Monall, config.CBusConfigInstance.Pun, config.CBusConfigInstance.Pcn, config.CBusConfigInstance.Srchk) + a.requestContext = readWriteModel.NewRequestContext(false) + a.cBusOptions = readWriteModel.NewCBusOptions(config.CBusConfigInstance.Connect, config.CBusConfigInstance.Smart, config.CBusConfigInstance.Idmon, config.CBusConfigInstance.Exstat, config.CBusConfigInstance.Monitor, config.CBusConfigInstance.Monall, config.CBusConfigInstance.Pun, config.CBusConfigInstance.Pcn, config.CBusConfigInstance.Srchk) a.currentInboundPayloads = make(map[string][]byte) a.currentPrefilterInboundPayloads = make(map[string][]byte) a.initialized = true @@ -76,7 +75,7 @@ func (a *Analyzer) PackageParse(packetInformation common.PacketInformation, payl isResponse := a.isResponse(packetInformation) if isResponse { // Responses should have a checksum - cBusOptions = model.NewCBusOptions( + cBusOptions = readWriteModel.NewCBusOptions( cBusOptions.GetConnect(), cBusOptions.GetSmart(), cBusOptions.GetIdmon(), @@ -99,9 +98,9 @@ func (a *Analyzer) PackageParse(packetInformation common.PacketInformation, payl return nil, common.ErrEcho } a.lastParsePayload = currentPayload - parse, err := model.CBusMessageParse(context.TODO(), currentPayload, isResponse, a.requestContext, cBusOptions) + parse, err := readWriteModel.CBusMessageParse(context.TODO(), currentPayload, isResponse, a.requestContext, cBusOptions) if err != nil { - if secondParse, err := model.CBusMessageParse(context.TODO(), currentPayload, isResponse, model.NewRequestContext(false), model.NewCBusOptions(false, false, false, false, false, false, false, false, false)); err != nil { + if secondParse, err := readWriteModel.CBusMessageParse(context.TODO(), currentPayload, isResponse, readWriteModel.NewRequestContext(false), readWriteModel.NewCBusOptions(false, false, false, false, false, false, false, false, false)); err != nil { log.Debug().Err(err).Msg("Second parse failed too") return nil, errors.Wrap(err, "Error parsing CBusCommand") } else { @@ -112,7 +111,7 @@ func (a *Analyzer) PackageParse(packetInformation common.PacketInformation, payl parse = secondParse } } - a.requestContext = cbus.CreateRequestContextWithInfoCallback(parse, func(infoString string) { + a.requestContext = CreateRequestContextWithInfoCallback(parse, func(infoString string) { log.Debug(). Int("packetNumber", packetInformation.PacketNumber). Str("infoString", infoString). @@ -265,7 +264,7 @@ func filterOneServerError(unfilteredPayload []byte) (filteredPayload []byte, con } func (a *Analyzer) SerializePackage(message spi.Message) ([]byte, error) { - if message, ok := message.(model.CBusMessage); !ok { + if message, ok := message.(readWriteModel.CBusMessage); !ok { log.Fatal().Type("message", message).Msg("Unsupported type supplied") panic("unreachable statement") } else { @@ -339,3 +338,45 @@ func (p *manipulatedPackage) SetApplicationLayer(l gopacket.ApplicationLayer) { func (p *manipulatedPackage) ApplicationLayer() gopacket.ApplicationLayer { return p.newApplicationLayer } + +func CreateRequestContextWithInfoCallback(cBusMessage readWriteModel.CBusMessage, infoCallBack func(string)) readWriteModel.RequestContext { + if infoCallBack == nil { + infoCallBack = func(_ string) {} + } + switch cBusMessage := cBusMessage.(type) { + case readWriteModel.CBusMessageToServerExactly: + switch request := cBusMessage.GetRequest().(type) { + case readWriteModel.RequestDirectCommandAccessExactly: + sendIdentifyRequestBefore := false + infoCallBack("CAL request detected") + switch request.GetCalData().(type) { + case readWriteModel.CALDataIdentifyExactly: + sendIdentifyRequestBefore = true + } + return readWriteModel.NewRequestContext(sendIdentifyRequestBefore) + case readWriteModel.RequestCommandExactly: + switch command := request.GetCbusCommand().(type) { + case readWriteModel.CBusCommandPointToPointExactly: + sendIdentifyRequestBefore := false + infoCallBack("CAL request detected") + switch command.GetCommand().GetCalData().(type) { + case readWriteModel.CALDataIdentifyExactly: + sendIdentifyRequestBefore = true + } + return readWriteModel.NewRequestContext(sendIdentifyRequestBefore) + } + case readWriteModel.RequestObsoleteExactly: + sendIdentifyRequestBefore := false + infoCallBack("CAL request detected") + switch request.GetCalData().(type) { + case readWriteModel.CALDataIdentifyExactly: + sendIdentifyRequestBefore = true + } + return readWriteModel.NewRequestContext(sendIdentifyRequestBefore) + } + case readWriteModel.CBusMessageToClientExactly: + // We received a request, so we need to reset our flags + return readWriteModel.NewRequestContext(false) + } + return readWriteModel.NewRequestContext(false) +} diff --git a/plc4go/tools/plc4xpcapanalyzer/ui/actions.go b/plc4go/tools/plc4xpcapanalyzer/ui/actions.go index 117dae0..3e35cf7 100644 --- a/plc4go/tools/plc4xpcapanalyzer/ui/actions.go +++ b/plc4go/tools/plc4xpcapanalyzer/ui/actions.go @@ -22,14 +22,11 @@ package ui import ( "bytes" "fmt" + "github.com/apache/plc4x/plc4go/pkg/api/drivers" "os" "path" "strings" - "github.com/apache/plc4x/plc4go/internal/ads" - "github.com/apache/plc4x/plc4go/internal/bacnetip" - "github.com/apache/plc4x/plc4go/internal/cbus" - "github.com/apache/plc4x/plc4go/internal/s7" plc4go "github.com/apache/plc4x/plc4go/pkg/api" "github.com/apache/plc4x/plc4go/spi" "github.com/apache/plc4x/plc4go/spi/transports/pcap" @@ -139,13 +136,13 @@ func validateDriverParam(driver string) error { func registerDriver(driver string) error { switch driver { case "ads": - driverManager.RegisterDriver(ads.NewDriver()) + drivers.RegisterAdsDriver(driverManager) case "bacnetip": - driverManager.RegisterDriver(bacnetip.NewDriver()) + drivers.RegisterBacnetDriver(driverManager) case "c-bus": - driverManager.RegisterDriver(cbus.NewDriver()) + drivers.RegisterCBusDriver(driverManager) case "s7": - driverManager.RegisterDriver(s7.NewDriver()) + drivers.RegisterS7Driver(driverManager) default: return errors.Errorf("Unknown driver %s", driver) }