From 6601fa62056c546fa8c2c3a3aad60ad8caf6e46d Mon Sep 17 00:00:00 2001 From: Colin Date: Wed, 11 Dec 2019 23:53:37 +0000 Subject: [PATCH] Added a check to ensure that pulse guide commands fail when the scope is slewing or already being moved on the same axes. --- .../TelescopeUnitTests.cs | 34 +++++++++++++ Meade.net.Telescope/Telescope.cs | 48 ++++++++++++------- 2 files changed, 65 insertions(+), 17 deletions(-) diff --git a/Meade.net.Telescope.UnitTests/TelescopeUnitTests.cs b/Meade.net.Telescope.UnitTests/TelescopeUnitTests.cs index df3637c..25f49a3 100644 --- a/Meade.net.Telescope.UnitTests/TelescopeUnitTests.cs +++ b/Meade.net.Telescope.UnitTests/TelescopeUnitTests.cs @@ -1322,6 +1322,40 @@ namespace Meade.net.Telescope.UnitTests _utilMock.Verify( x => x.WaitForMilliseconds(duration), Times.Once); } + [TestCase(GuideDirections.guideEast)] + [TestCase(GuideDirections.guideWest)] + [TestCase(GuideDirections.guideNorth)] + [TestCase(GuideDirections.guideSouth)] + public void PulseGuide_WhenSlewingAndPulseGuideAttempted_ThenThrowsExpectedException(GuideDirections direction) + { + _sharedResourcesWrapperMock.Setup(x => x.SendString("#:D#")).Returns("|"); + + var duration = 0; + ConnectTelescope(); + + var exception = Assert.Throws(() => { _telescope.PulseGuide(direction, duration); }); + + Assert.That(exception.Message, Is.EqualTo("Unable to PulseGuide whilst slewing to target.")); + } + + [TestCase(GuideDirections.guideEast, TelescopeAxes.axisPrimary)] + [TestCase(GuideDirections.guideWest, TelescopeAxes.axisPrimary)] + [TestCase(GuideDirections.guideNorth, TelescopeAxes.axisSecondary)] + [TestCase(GuideDirections.guideSouth, TelescopeAxes.axisSecondary)] + public void PulseGuide_WhenMovingAxisAndPulseGuideAttempted_ThenThrowsExpectedException(GuideDirections direction, TelescopeAxes axes) + { + _sharedResourcesWrapperMock.Setup(x => x.SendString("#:D#")).Returns(""); + + var duration = 0; + ConnectTelescope(); + + _telescope.MoveAxis(axes, 1); + + var exception = Assert.Throws(() => { _telescope.PulseGuide(direction, duration); }); + + Assert.That(exception.Message, Is.EqualTo("Unable to PulseGuide while moving same axis.")); + } + [TestCase(GuideDirections.guideEast)] [TestCase(GuideDirections.guideWest)] [TestCase(GuideDirections.guideNorth)] diff --git a/Meade.net.Telescope/Telescope.cs b/Meade.net.Telescope/Telescope.cs index 96173de..f1d55f0 100644 --- a/Meade.net.Telescope/Telescope.cs +++ b/Meade.net.Telescope/Telescope.cs @@ -1415,6 +1415,15 @@ namespace ASCOM.Meade.net LogMessage("PulseGuide", $"pulse guide direction {direction} duration {duration}"); CheckConnected("PulseGuide"); + if (IsSlewingToTarget()) + throw new InvalidOperationException("Unable to PulseGuide whilst slewing to target."); + + if (_movingPrimary && (direction == GuideDirections.guideEast || direction == GuideDirections.guideWest)) + throw new InvalidOperationException("Unable to PulseGuide while moving same axis."); + + if (_movingSecondary && (direction == GuideDirections.guideNorth || direction == GuideDirections.guideSouth)) + throw new InvalidOperationException("Unable to PulseGuide while moving same axis."); + var coordinatesBeforeMove = GetTelescopeRaAndDec(); if (_userNewerPulseGuiding && duration < 10000) @@ -1928,26 +1937,31 @@ namespace ASCOM.Meade.net if (MovingAxis()) return true; - CheckConnected("Slewing Get"); - - var result = _sharedResourcesWrapper.SendString("#:D#"); - //:D# Requests a string of bars indicating the distance to the current target location. - //Returns: - //LX200's – a string of bar characters indicating the distance. - //Autostars and Autostar II – a string containing one bar until a slew is complete, then a null string is returned. - - if (result == null) - { - return false; - } - - bool isSlewing = result != string.Empty; - - LogMessage("Slewing Get", $"Result = {isSlewing}"); - return isSlewing; + return IsSlewingToTarget(); } } + private bool IsSlewingToTarget() + { + CheckConnected("Slewing Get"); + + var result = _sharedResourcesWrapper.SendString("#:D#"); + //:D# Requests a string of bars indicating the distance to the current target location. + //Returns: + //LX200's – a string of bar characters indicating the distance. + //Autostars and Autostar II – a string containing one bar until a slew is complete, then a null string is returned. + + if (result == null) + { + return false; + } + + bool isSlewing = result != string.Empty; + + LogMessage("Slewing Get", $"Result = {isSlewing}"); + return isSlewing; + } + public void SyncToAltAz(double azimuth, double altitude) { LogMessage("SyncToAltAz", "Not implemented");