diff --git a/MeadeAutostar497/AscomClasses/Telescope.cs b/MeadeAutostar497/AscomClasses/Telescope.cs index 8af1855..9892ea6 100644 --- a/MeadeAutostar497/AscomClasses/Telescope.cs +++ b/MeadeAutostar497/AscomClasses/Telescope.cs @@ -56,7 +56,7 @@ namespace ASCOM.MeadeAutostar497 /// [Guid("58e4fe97-1760-4e22-8ecd-2225876aeefc")] [ClassInterface(ClassInterfaceType.None)] - public class Telescope : ITelescopeV3 + public class Telescope : ITelescopeV3, IFocuserV3 { private ITelescopeController _telescopeController; @@ -947,6 +947,124 @@ namespace ASCOM.MeadeAutostar497 #endregion + #region IFocuser Implementation + + private int focuserPosition = 0; // Class level variable to hold the current focuser position + private const int focuserSteps = 10000; + + public bool Absolute + { + get + { + tl.LogMessage("Absolute Get", true.ToString()); + return true; // This is an absolute focuser + } + } + + public void Halt() + { + tl.LogMessage("Halt", "Not implemented"); + throw new ASCOM.MethodNotImplementedException("Halt"); + } + + public bool IsMoving + { + get + { + tl.LogMessage("IsMoving Get", false.ToString()); + return false; // This focuser always moves instantaneously so no need for IsMoving ever to be True + } + } + + public bool Link + { + get + { + tl.LogMessage("Link Get", this.Connected.ToString()); + return this.Connected; // Direct function to the connected method, the Link method is just here for backwards compatibility + } + set + { + tl.LogMessage("Link Set", value.ToString()); + this.Connected = value; // Direct function to the connected method, the Link method is just here for backwards compatibility + } + } + + public int MaxIncrement + { + get + { + tl.LogMessage("MaxIncrement Get", focuserSteps.ToString()); + return focuserSteps; // Maximum change in one move + } + } + + public int MaxStep + { + get + { + tl.LogMessage("MaxStep Get", focuserSteps.ToString()); + return focuserSteps; // Maximum extent of the focuser, so position range is 0 to 10,000 + } + } + + public void Move(int Position) + { + tl.LogMessage("Move", Position.ToString()); + focuserPosition = Position; // Set the focuser position + } + + public int Position + { + get + { + return focuserPosition; // Return the focuser position + } + } + + public double StepSize + { + get + { + tl.LogMessage("StepSize Get", "Not implemented"); + throw new ASCOM.PropertyNotImplementedException("StepSize", false); + } + } + + public bool TempComp + { + get + { + tl.LogMessage("TempComp Get", false.ToString()); + return false; + } + set + { + tl.LogMessage("TempComp Set", "Not implemented"); + throw new ASCOM.PropertyNotImplementedException("TempComp", false); + } + } + + public bool TempCompAvailable + { + get + { + tl.LogMessage("TempCompAvailable Get", false.ToString()); + return false; // Temperature compensation is not available in this driver + } + } + + public double Temperature + { + get + { + tl.LogMessage("Temperature Get", "Not implemented"); + throw new ASCOM.PropertyNotImplementedException("Temperature", false); + } + } + + #endregion + #region Private properties and methods // here are some useful properties and methods that can be used as required // to help with driver development @@ -963,16 +1081,29 @@ namespace ASCOM.MeadeAutostar497 /// If true, registers the driver, otherwise unregisters it. private static void RegUnregASCOM(bool bRegister) { - using (var P = new ASCOM.Utilities.Profile()) + using (var p = new ASCOM.Utilities.Profile()) { - P.DeviceType = "Telescope"; + p.DeviceType = "Telescope"; if (bRegister) { - P.Register(driverID, driverDescription); + p.Register(driverID, driverDescription); } else { - P.Unregister(driverID); + p.Unregister(driverID); + } + } + + using (var p = new ASCOM.Utilities.Profile()) + { + p.DeviceType = "Focuser"; + if (bRegister) + { + p.Register(driverID, driverDescription); + } + else + { + p.Unregister(driverID); } } }