diff --git a/LynxAstro.DewController.Switch/Switch.cs b/LynxAstro.DewController.Switch/Switch.cs index 624101f..68a72ed 100644 --- a/LynxAstro.DewController.Switch/Switch.cs +++ b/LynxAstro.DewController.Switch/Switch.cs @@ -28,7 +28,7 @@ namespace ASCOM.LynxAstro.DewController [ProgId("ASCOM.LynxAstro.DewController.Switch")] [ServedClassName("LynxAstro.DewController")] [ClassInterface(ClassInterfaceType.None)] - public class Switch : ISwitchV2 + public class Switch : AscomDriverBase, ISwitchV2 { /// /// ASCOM DeviceID (COM ProgID) for this driver. @@ -36,48 +36,21 @@ namespace ASCOM.LynxAstro.DewController /// internal static string DriverId = Marshal.GenerateProgIdForType(MethodBase.GetCurrentMethod().DeclaringType ?? throw new System.InvalidOperationException()); - /// - /// Driver description that displays in the ASCOM Chooser. - /// - private static string DriverDescription = "ASCOM Switch Driver for LynxAstro.DewController"; - - protected static string ComPort; // Variables to hold the currrent device configuration - protected static TraceLogger Tl; - - protected readonly ISharedResourcesWrapper SharedResourcesWrapper; - /// /// Initializes a new instance of the class. /// Must be public for COM registration. /// /// public Switch() - { - SharedResourcesWrapper = new SharedResourcesWrapper(); - + { Initialise(nameof(Switch)); } - public Switch(ISharedResourcesWrapper sharedResourcesWrapper) + public Switch(ISharedResourcesWrapper sharedResourcesWrapper) : base (sharedResourcesWrapper) { - SharedResourcesWrapper = sharedResourcesWrapper; - Initialise(nameof(Switch)); } - - - protected void Initialise(string className) - { - Tl = new TraceLogger("", $"LynxAstro.DewController.{className}"); - - ReadProfile(); // Read device configuration from the ASCOM Profile store - - IsConnected = false; // Initialise connected to false - - LogMessage(className, "Completed initialisation"); - LogMessage(className, $"Driver version: {DriverVersion}"); - } - + // // PUBLIC COM INTERFACE ISwitchV2 IMPLEMENTATION // @@ -196,36 +169,6 @@ namespace ASCOM.LynxAstro.DewController } } - public string Description - { - get - { - Tl.LogMessage("Description Get", DriverDescription); - return DriverDescription; - } - } - - public string DriverInfo - { - get - { - string driverInfo = $"{Description} .net driver. Version: {DriverVersion}"; - LogMessage("DriverInfo Get", driverInfo); - return driverInfo; - } - } - - public string DriverVersion - { - get - { - Version version = Assembly.GetExecutingAssembly().GetName().Version; - string driverVersion = $"{version.Major}.{version.Minor}.{version.Build}.{version.Revision}"; - LogMessage("DriverVersion Get", driverVersion); - return driverVersion; - } - } - public short InterfaceVersion { // set by the driver wizard @@ -638,8 +581,6 @@ namespace ASCOM.LynxAstro.DewController #endregion - protected bool IsConnected { get; set; } - /// /// Use this function to throw an exception if we aren't connected to the hardware /// @@ -651,24 +592,7 @@ namespace ASCOM.LynxAstro.DewController throw new ASCOM.NotConnectedException(message); } } - - /// - /// Read the device configuration from the ASCOM Profile store - /// - protected void ReadProfile() - { - var profileProperties = SharedResourcesWrapper.ReadProfile(); - Tl.Enabled = profileProperties.TraceLogger; - ComPort = profileProperties.ComPort; - - switchNames.Clear(); - switchNames.AddRange(profileProperties.SwitchNames); - - LogMessage("ReadProfile", $"Trace logger enabled: {Tl.Enabled}"); - LogMessage("ReadProfile", $"Com Port: {ComPort}"); - - } - + protected void WriteSwitchNames() { var profileProperties = SharedResourcesWrapper.ReadProfile(); @@ -678,18 +602,6 @@ namespace ASCOM.LynxAstro.DewController SharedResourcesWrapper.WriteProfile(profileProperties); } - - /// - /// Log helper function that takes formatted strings and arguments - /// - /// - /// - /// - internal void LogMessage(string identifier, string message, params object[] args) - { - var msg = string.Format(message, args); - Tl.LogMessage(identifier, msg); - } #endregion } } diff --git a/LynxAstro.DewController.UnitTests/SharedResourcesUnitTests.cs b/LynxAstro.DewController.UnitTests/SharedResourcesUnitTests.cs index db1d8ea..09eab88 100644 --- a/LynxAstro.DewController.UnitTests/SharedResourcesUnitTests.cs +++ b/LynxAstro.DewController.UnitTests/SharedResourcesUnitTests.cs @@ -130,12 +130,7 @@ namespace LynxAstro.DewController.UnitTests string ComPortDefault = "COM1"; string TraceStateDefault = "false"; - string GuideRateProfileNameDefault = "10.077939"; //67% of sidereal rate - string PrecisionDefault = "Unchanged"; - string GuidingStyleDefault = "Auto"; - string BacklashCompensationDefault = "3000"; - string ReverseFocuserDiectionDefault = "true"; - + Mock profileWrapperMock = new Mock(); profileWrapperMock.SetupAllProperties(); diff --git a/LynxAstro.DewController/AscomDriverBase.cs b/LynxAstro.DewController/AscomDriverBase.cs new file mode 100644 index 0000000..3330a33 --- /dev/null +++ b/LynxAstro.DewController/AscomDriverBase.cs @@ -0,0 +1,120 @@ +using System; +using System.Reflection; +using System.Runtime.InteropServices; +using ASCOM.Utilities; + +namespace ASCOM.LynxAstro.DewController +{ + [ComVisible(false)] + public class AscomDriverBase : ReferenceCountedObjectBase + { + /// + /// Variable to hold the trace logger object (creates a diagnostic log file with information that you specify) + /// + protected static TraceLogger Tl; + + /// + /// Driver description that displays in the ASCOM Chooser. + /// + protected static readonly string DriverDescription = "Meade Generic"; + + protected static string ComPort; // Variables to hold the currrent device configuration + + protected readonly ISharedResourcesWrapper SharedResourcesWrapper; + + public AscomDriverBase() + { + SharedResourcesWrapper = new SharedResourcesWrapper(); + } + + public AscomDriverBase(ISharedResourcesWrapper sharedResourcesWrapper) + { + SharedResourcesWrapper = sharedResourcesWrapper; + } + + protected void Initialise(string className) + { + Tl = new TraceLogger("", $"Meade.Generic.{className}"); + + ReadProfile(); // Read device configuration from the ASCOM Profile store + + IsConnected = false; // Initialise connected to false + + LogMessage(className, "Completed initialisation"); + LogMessage(className, $"Driver version: {DriverVersion}"); + } + + /// + /// Read the device configuration from the ASCOM Profile store + /// + protected void ReadProfile() + { + var profileProperties = SharedResourcesWrapper.ReadProfile(); + Tl.Enabled = profileProperties.TraceLogger; + ComPort = profileProperties.ComPort; + + LogMessage("ReadProfile", $"Trace logger enabled: {Tl.Enabled}"); + LogMessage("ReadProfile", $"Com Port: {ComPort}"); + } + + /// + /// Log helper function that takes formatted strings and arguments + /// + /// + /// + /// + public static void LogMessage(string identifier, string message, params object[] args) + { + var msg = string.Format(message, args); + Tl.LogMessage(identifier, msg); + } + + /// + /// Returns true if there is a valid connection to the driver hardware + /// + protected bool IsConnected { get; set; } + + public string Description + { + get + { + Tl.LogMessage("Description Get", DriverDescription); + return DriverDescription; + } + } + + public string DriverInfo + { + get + { + string driverInfo = $"{Description} .net driver. Version: {DriverVersion}"; + LogMessage("DriverInfo Get", driverInfo); + return driverInfo; + } + } + + public string DriverVersion + { + get + { + Version version = Assembly.GetExecutingAssembly().GetName().Version; + string driverVersion = $"{version.Major}.{version.Minor}.{version.Build}.{version.Revision}"; + LogMessage("DriverVersion Get", driverVersion); + return driverVersion; + } + } + + #region ASCOM Registration + + private static IProfileFactory _profileFactory; + + public static IProfileFactory ProfileFactory + { + get => _profileFactory ?? (_profileFactory = new ProfileFactory()); + set => _profileFactory = value; + } + + #endregion + + } +} \ No newline at end of file diff --git a/LynxAstro.DewController/LynxAstro.DewController.csproj b/LynxAstro.DewController/LynxAstro.DewController.csproj index f620283..7edc12e 100644 --- a/LynxAstro.DewController/LynxAstro.DewController.csproj +++ b/LynxAstro.DewController/LynxAstro.DewController.csproj @@ -116,6 +116,7 @@ +