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 @@
+