From e15537e6c38f6b8ff6fca754b8f0b61dd22c111d Mon Sep 17 00:00:00 2001 From: Colin Date: Fri, 19 Jul 2019 22:15:41 +0100 Subject: [PATCH] Added support for being able to have ASCOM see a value for guide rate. --- .../TelescopeUnitTests.cs | 50 ++++++++++++++++--- Meade.net.Telescope/Telescope.cs | 14 ++++-- 2 files changed, 51 insertions(+), 13 deletions(-) diff --git a/Meade.net.Telescope.UnitTests/TelescopeUnitTests.cs b/Meade.net.Telescope.UnitTests/TelescopeUnitTests.cs index 1f29a92..230a271 100644 --- a/Meade.net.Telescope.UnitTests/TelescopeUnitTests.cs +++ b/Meade.net.Telescope.UnitTests/TelescopeUnitTests.cs @@ -769,10 +769,9 @@ namespace Meade.net.Telescope.UnitTests [Test] public void GuideRateDeclination_Get_ThenThrowsException() { - var excpetion = Assert.Throws(() => { var result = _telescope.GuideRateDeclination; }); + var result = _telescope.GuideRateDeclination; - Assert.That(excpetion.Property, Is.EqualTo("GuideRateDeclination")); - Assert.That(excpetion.AccessorSet, Is.False); + Assert.That(result, Is.EqualTo(0.004178074616551509)); } [Test] @@ -787,10 +786,9 @@ namespace Meade.net.Telescope.UnitTests [Test] public void GuideRateRightAscension_Get_ThenThrowsException() { - var excpetion = Assert.Throws(() => { var result = _telescope.GuideRateRightAscension; }); + var result = _telescope.GuideRateRightAscension; - Assert.That(excpetion.Property, Is.EqualTo("GuideRateRightAscension")); - Assert.That(excpetion.AccessorSet, Is.False); + Assert.That(result, Is.EqualTo(0.004178074616551509)); } [Test] @@ -969,7 +967,7 @@ namespace Meade.net.Telescope.UnitTests var duration = 0; ConnectTelescope(); - _telescope.PulseGuide(direction, 0); + _telescope.PulseGuide(direction, duration); string d = string.Empty; switch (direction) @@ -1003,7 +1001,43 @@ namespace Meade.net.Telescope.UnitTests _sharedResourcesWrapperMock.Setup(x => x.FirmwareVersion).Returns(() => "31Ed"); _telescope.Connected = true; - _telescope.PulseGuide(direction, 0); + _telescope.PulseGuide(direction, duration); + + string d = string.Empty; + switch (direction) + { + case GuideDirections.guideEast: + d = "e"; + break; + case GuideDirections.guideWest: + d = "w"; + break; + case GuideDirections.guideNorth: + d = "n"; + break; + case GuideDirections.guideSouth: + d = "s"; + break; + } + + _sharedResourcesWrapperMock.Verify(x => x.SendBlind(":RG#")); + _sharedResourcesWrapperMock.Verify(x => x.SendBlind($":M{d}#")); + _utilMock.Verify(x => x.WaitForMilliseconds(duration), Times.Once); + _sharedResourcesWrapperMock.Verify(x => x.SendBlind($":Q{d}#")); + } + + [TestCase(GuideDirections.guideEast)] + [TestCase(GuideDirections.guideWest)] + [TestCase(GuideDirections.guideNorth)] + [TestCase(GuideDirections.guideSouth)] + public void PulseGuide_WhenConnectedAndNewerPulseGuidingAvailableButDurationTooLong_ThenSendsOldCommandsAndWaits(GuideDirections direction) + { + var duration = 10000; + _sharedResourcesWrapperMock.Setup(x => x.ProductName).Returns(() => _sharedResourcesWrapperMock.Object.Autostar497); + _sharedResourcesWrapperMock.Setup(x => x.FirmwareVersion).Returns(() => "31Ed"); + _telescope.Connected = true; + + _telescope.PulseGuide(direction, duration); string d = string.Empty; switch (direction) diff --git a/Meade.net.Telescope/Telescope.cs b/Meade.net.Telescope/Telescope.cs index 0ce3b53..99c45ff 100644 --- a/Meade.net.Telescope/Telescope.cs +++ b/Meade.net.Telescope/Telescope.cs @@ -97,6 +97,10 @@ namespace ASCOM.Meade.net Initialise(); } + private double _guideRate; + + private const double SIDRATE = 0.9972695677; //synodic/solar seconds per sidereal second + private void Initialise() { //todo move the TraceLogger out to a factory class. @@ -107,6 +111,8 @@ namespace ASCOM.Meade.net IsConnected = false; // Initialise connected to false + _guideRate = 15.0 * (1.0 / 3600.0) / SIDRATE; + LogMessage("Telescope", "Completed initialisation"); } @@ -903,7 +909,7 @@ namespace ASCOM.Meade.net get { LogMessage("GuideRateDeclination Get", "Not implemented"); - throw new PropertyNotImplementedException("GuideRateDeclination", false); + return _guideRate; } set { @@ -917,7 +923,7 @@ namespace ASCOM.Meade.net get { LogMessage("GuideRateRightAscension Get", "Not implemented"); - throw new PropertyNotImplementedException("GuideRateRightAscension", false); + return _guideRate; } set { @@ -1075,7 +1081,7 @@ namespace ASCOM.Meade.net break; } - if (_userNewerPulseGuiding) + if (_userNewerPulseGuiding && duration < 10000) { _sharedResourcesWrapper.SendBlind($":Mg{d}{duration:0000}#"); //:MgnDDDD# @@ -1086,8 +1092,6 @@ namespace ASCOM.Meade.net //passed in the command.These commands support serial port driven guiding. //Returns – Nothing //LX200 – Not Supported - - //todo implement IsPulseGuiding if WaitForMilliseconds is not needed _utilities.WaitForMilliseconds(duration); //todo figure out if this is really needed } else