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 } }