From d892ab9e12eaec4fb38e9eb3eac30de0357b6850 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Thu, 28 May 2026 09:13:10 -0400 Subject: [PATCH] refactor(driver-focas): extract FocasDriverOptions to .Contracts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move FocasDriverOptions (and companion option types), FocasCncSeries, and the FocasDataType enum to a new Driver.FOCAS.Contracts sibling project. FocasDataTypeExtensions (which uses DriverDataType from Core.Abstractions) stays in the runtime driver as FocasDataTypeExtensions.cs. Convert two doc-comment references: FocasDriver.InitializeAsync FocasAddress.TryParse per the approved decision — no compilable usings were present in the moved files. The runtime Driver.FOCAS project gains a ProjectReference to .Contracts; the .slnx is updated accordingly. --- ZB.MOM.WW.OtOpcUa.slnx | 1 + .../FocasCncSeries.cs | 0 .../FocasDataType.cs | 18 ------------------ .../FocasDriverOptions.cs | 4 ++-- ...M.WW.OtOpcUa.Driver.FOCAS.Contracts.csproj | 9 +++++++++ .../FocasDataTypeExtensions.cs | 19 +++++++++++++++++++ .../ZB.MOM.WW.OtOpcUa.Driver.FOCAS.csproj | 1 + 7 files changed, 32 insertions(+), 20 deletions(-) rename src/Drivers/{ZB.MOM.WW.OtOpcUa.Driver.FOCAS => ZB.MOM.WW.OtOpcUa.Driver.FOCAS.Contracts}/FocasCncSeries.cs (100%) rename src/Drivers/{ZB.MOM.WW.OtOpcUa.Driver.FOCAS => ZB.MOM.WW.OtOpcUa.Driver.FOCAS.Contracts}/FocasDataType.cs (57%) rename src/Drivers/{ZB.MOM.WW.OtOpcUa.Driver.FOCAS => ZB.MOM.WW.OtOpcUa.Driver.FOCAS.Contracts}/FocasDriverOptions.cs (97%) create mode 100644 src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS.Contracts/ZB.MOM.WW.OtOpcUa.Driver.FOCAS.Contracts.csproj create mode 100644 src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS/FocasDataTypeExtensions.cs diff --git a/ZB.MOM.WW.OtOpcUa.slnx b/ZB.MOM.WW.OtOpcUa.slnx index 2d0ed744..974386b7 100644 --- a/ZB.MOM.WW.OtOpcUa.slnx +++ b/ZB.MOM.WW.OtOpcUa.slnx @@ -35,6 +35,7 @@ + diff --git a/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS/FocasCncSeries.cs b/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS.Contracts/FocasCncSeries.cs similarity index 100% rename from src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS/FocasCncSeries.cs rename to src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS.Contracts/FocasCncSeries.cs diff --git a/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS/FocasDataType.cs b/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS.Contracts/FocasDataType.cs similarity index 57% rename from src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS/FocasDataType.cs rename to src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS.Contracts/FocasDataType.cs index 1ef4ee26..cb425e55 100644 --- a/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS/FocasDataType.cs +++ b/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS.Contracts/FocasDataType.cs @@ -1,5 +1,3 @@ -using ZB.MOM.WW.OtOpcUa.Core.Abstractions; - namespace ZB.MOM.WW.OtOpcUa.Driver.FOCAS; /// @@ -24,19 +22,3 @@ public enum FocasDataType /// ASCII string (alarm text, parameter names, some PMC string areas). String, } - -public static class FocasDataTypeExtensions -{ - /// Converts a FOCAS data type to the corresponding driver data type. - /// The FOCAS data type to convert. - /// The equivalent driver data type. - public static DriverDataType ToDriverDataType(this FocasDataType t) => t switch - { - FocasDataType.Bit => DriverDataType.Boolean, - FocasDataType.Byte or FocasDataType.Int16 or FocasDataType.Int32 => DriverDataType.Int32, - FocasDataType.Float32 => DriverDataType.Float32, - FocasDataType.Float64 => DriverDataType.Float64, - FocasDataType.String => DriverDataType.String, - _ => DriverDataType.Int32, - }; -} diff --git a/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS/FocasDriverOptions.cs b/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS.Contracts/FocasDriverOptions.cs similarity index 97% rename from src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS/FocasDriverOptions.cs rename to src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS.Contracts/FocasDriverOptions.cs index 0b0868e6..35a26941 100644 --- a/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS/FocasDriverOptions.cs +++ b/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS.Contracts/FocasDriverOptions.cs @@ -96,7 +96,7 @@ public sealed class FocasAlarmProjectionOptions /// /// One CNC the driver talks to. enables per-series -/// address validation at ; leave as +/// address validation at FocasDriver.InitializeAsync; leave as /// to skip validation (legacy behaviour). /// public sealed record FocasDeviceOptions( @@ -106,7 +106,7 @@ public sealed record FocasDeviceOptions( /// /// One FOCAS-backed OPC UA variable. is the canonical FOCAS -/// address string that parses via — +/// address string that parses via FocasAddress.TryParse — /// X0.0 / R100 / PARAM:1815/0 / MACRO:500. /// public sealed record FocasTagDefinition( diff --git a/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS.Contracts/ZB.MOM.WW.OtOpcUa.Driver.FOCAS.Contracts.csproj b/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS.Contracts/ZB.MOM.WW.OtOpcUa.Driver.FOCAS.Contracts.csproj new file mode 100644 index 00000000..3896f7bd --- /dev/null +++ b/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS.Contracts/ZB.MOM.WW.OtOpcUa.Driver.FOCAS.Contracts.csproj @@ -0,0 +1,9 @@ + + + net10.0 + enable + enable + true + + + diff --git a/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS/FocasDataTypeExtensions.cs b/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS/FocasDataTypeExtensions.cs new file mode 100644 index 00000000..9de7573d --- /dev/null +++ b/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS/FocasDataTypeExtensions.cs @@ -0,0 +1,19 @@ +using ZB.MOM.WW.OtOpcUa.Core.Abstractions; + +namespace ZB.MOM.WW.OtOpcUa.Driver.FOCAS; + +public static class FocasDataTypeExtensions +{ + /// Converts a FOCAS data type to the corresponding driver data type. + /// The FOCAS data type to convert. + /// The equivalent driver data type. + public static DriverDataType ToDriverDataType(this FocasDataType t) => t switch + { + FocasDataType.Bit => DriverDataType.Boolean, + FocasDataType.Byte or FocasDataType.Int16 or FocasDataType.Int32 => DriverDataType.Int32, + FocasDataType.Float32 => DriverDataType.Float32, + FocasDataType.Float64 => DriverDataType.Float64, + FocasDataType.String => DriverDataType.String, + _ => DriverDataType.Int32, + }; +} diff --git a/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS/ZB.MOM.WW.OtOpcUa.Driver.FOCAS.csproj b/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS/ZB.MOM.WW.OtOpcUa.Driver.FOCAS.csproj index 9caac97a..fb622f68 100644 --- a/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS/ZB.MOM.WW.OtOpcUa.Driver.FOCAS.csproj +++ b/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.FOCAS/ZB.MOM.WW.OtOpcUa.Driver.FOCAS.csproj @@ -13,6 +13,7 @@ +