From 64df8282a06fbedfee07e998ecf22e236489b4f3 Mon Sep 17 00:00:00 2001 From: Sebastian Godelet Date: Mon, 28 Jun 2021 16:33:46 +1000 Subject: [PATCH] Support Set Tracking when GW is supported --- .../TelescopeUnitTests.cs | 69 +++++++++++++------ Meade.net.Telescope/Telescope.cs | 15 ++-- .../SharedResourcesUnitTests.cs | 6 ++ 3 files changed, 64 insertions(+), 26 deletions(-) diff --git a/Meade.net.Telescope.UnitTests/TelescopeUnitTests.cs b/Meade.net.Telescope.UnitTests/TelescopeUnitTests.cs index 7536c95..0b9a1d9 100644 --- a/Meade.net.Telescope.UnitTests/TelescopeUnitTests.cs +++ b/Meade.net.Telescope.UnitTests/TelescopeUnitTests.cs @@ -18,20 +18,23 @@ namespace Meade.net.Telescope.UnitTests { public class TestProperties { - internal string telescopeRaResult = "HH:MM:SS"; - internal double rightAscension = 1.2; //todo rename to declination; - internal double declination = 45; + internal string telescopeRaResult { get; set; } = "HH:MM:SS"; + internal double rightAscension { get; set; } = 1.2; //todo rename to declination; + internal double declination { get; set; } = 45; - internal string SiteLatitudeString = "testLatString"; - internal double SiteLatitudeValue = 123.45; + internal string SiteLatitudeString { get; set; } = "testLatString"; + internal double SiteLatitudeValue { get; set; } = 123.45; - internal string telescopeDate = "10/15/20"; - internal string telescopeTime = "20:15:10"; - internal string telescopeUtcCorrection = "-1.0"; + internal string telescopeDate { get; set; } = "10/15/20"; + internal string telescopeTime { get; set; } = "20:15:10"; + internal string telescopeUtcCorrection { get; set; } = "-1.0"; - internal double hourAngle; - internal int telescopeAltitude = 45; - internal int telescopeAzimuth = 200; + internal double hourAngle { get; set; } + internal int telescopeAltitude { get; set; } = 45; + internal int telescopeAzimuth { get; set; } = 200; + + internal char[] AlignmentStatus { get; set; } + internal string TrackingRate { get; set; } } [TestFixture] @@ -53,7 +56,6 @@ namespace Meade.net.Telescope.UnitTests private bool _isParked; private ParkedPosition _parkedPosition; - private string _trackingRate; [SetUp] public void Setup() @@ -124,7 +126,12 @@ namespace Meade.net.Telescope.UnitTests private void ConnectTelescope(string productName = TelescopeList.Autostar497, string firmwareVersion = TelescopeList.Autostar497_31Ee, string alignmentStatus = "GT0") { - _sharedResourcesWrapperMock.Setup(x => x.SendChars("GW", false, 3)).Returns(alignmentStatus); + _testProperties.AlignmentStatus = alignmentStatus.ToCharArray(); + + _sharedResourcesWrapperMock.Setup(x => x.SendChars("GW", false, 3)).Returns(() => new string(_testProperties.AlignmentStatus)); + _sharedResourcesWrapperMock.Setup(x => x.SendBlind("AP", false)).Callback(() => _testProperties.AlignmentStatus[1] = 'T'); + _sharedResourcesWrapperMock.Setup(x => x.SendBlind("AL", false)).Callback(() => _testProperties.AlignmentStatus[1] = 'N'); + _sharedResourcesWrapperMock.Setup(x => x.SendString("Gt", false)).Returns( () => _testProperties.SiteLatitudeString); _utilMock.Setup(x => x.DMSToDegrees(_testProperties.SiteLatitudeString)).Returns( () => _testProperties.SiteLatitudeValue); @@ -136,10 +143,10 @@ namespace Meade.net.Telescope.UnitTests _sharedResourcesWrapperMock.Setup(x => x.SendString("GG", false)).Returns(() => _testProperties.telescopeUtcCorrection); const string siderealTrackingRate = "+60.1"; - _trackingRate = siderealTrackingRate; - _sharedResourcesWrapperMock.Setup(x => x.SendString("GT", false)).Returns(() => _trackingRate); - _sharedResourcesWrapperMock.Setup(x => x.SendBlind("TL", false)).Callback(() => _trackingRate = "lunar"); - _sharedResourcesWrapperMock.Setup(x => x.SendBlind("TQ", false)).Callback(() => _trackingRate = siderealTrackingRate); + _testProperties.TrackingRate = siderealTrackingRate; + _sharedResourcesWrapperMock.Setup(x => x.SendString("GT", false)).Returns(() => _testProperties.TrackingRate); + _sharedResourcesWrapperMock.Setup(x => x.SendBlind("TL", false)).Callback(() => _testProperties.TrackingRate = "lunar"); + _sharedResourcesWrapperMock.Setup(x => x.SendBlind("TQ", false)).Callback(() => _testProperties.TrackingRate = siderealTrackingRate); _sharedResourcesWrapperMock.Setup(x => x.ProductName).Returns(() => productName); _sharedResourcesWrapperMock.Setup(x => x.FirmwareVersion).Returns(() => firmwareVersion); @@ -1121,12 +1128,15 @@ namespace Meade.net.Telescope.UnitTests Assert.That(result, Is.False); } - [Test] - public void CanSetTracking_Get_ReturnsFalse() + [TestCase(TelescopeList.Autostar497_30Ee, false)] + [TestCase(TelescopeList.Autostar497_43Eg, true)] + public void CanSetTracking_Get_ReturnsTrueIffGWCommandIsSupported(string firmware, bool supported) { + ConnectTelescope(firmwareVersion: firmware); + var result = _telescope.CanSetTracking; - Assert.That(result, Is.False); + Assert.That(result, Is.EqualTo(supported)); } [Test] @@ -2659,11 +2669,28 @@ namespace Meade.net.Telescope.UnitTests [TestCase(true)] [TestCase(false)] - public void Tracking_Set_ThenThrowsNotImplementedException(bool tracking) + public void Tracking_Set_WhenCanSetTrackingIsFalse_ThenThrowsNotImplementedException(bool tracking) { + // GW is not supported, so CanSetTracking is false + ConnectTelescope(firmwareVersion: TelescopeList.Autostar497_30Ee); + Assert.Throws( () => { _telescope.Tracking = tracking; } ); } + [TestCase(true, "AP")] + [TestCase(false, "AL")] + public void Tracking_Set_WhenCanSetTrackingIsTrue_ThenValueIsUpdated(bool tracking, string alignmentCommand) + { + // GW is supported, so CanSetTracking is true + ConnectTelescope(firmwareVersion: TelescopeList.Autostar497_43Eg); + + _telescope.Tracking = tracking; + + Assert.That(_telescope.Tracking, Is.EqualTo(tracking)); + + _sharedResourcesWrapperMock.Verify(x => x.SendBlind(alignmentCommand, false), Times.Once); + } + [Test] public void TrackingRate_Set_WhenNotConnected_ThenThrowsException() { diff --git a/Meade.net.Telescope/Telescope.cs b/Meade.net.Telescope/Telescope.cs index a3c5e1e..2c8928e 100644 --- a/Meade.net.Telescope/Telescope.cs +++ b/Meade.net.Telescope/Telescope.cs @@ -1309,8 +1309,9 @@ namespace ASCOM.Meade.net { get { - LogMessage("CanSetTracking", "Get - " + false); - return false; + var canSetTracking = IsGWCommandSupported(); + LogMessage("CanSetTracking", "Get - " + canSetTracking); + return canSetTracking; } } @@ -2600,9 +2601,13 @@ namespace ASCOM.Meade.net } set { - throw new ASCOM.NotImplementedException("Tracking Set"); - //LogMessage("Tracking Set", $"{value}"); - //_tracking = value; + if (!CanSetTracking) + { + throw new ASCOM.NotImplementedException("Tracking Set"); + } + + LogMessage("Tracking Set", $"{value}"); + SharedResourcesWrapper.SendBlind(value ? "AP" : "AL"); } } diff --git a/Meade.net.UnitTests/SharedResourcesUnitTests.cs b/Meade.net.UnitTests/SharedResourcesUnitTests.cs index 8c5fb79..b9becdf 100644 --- a/Meade.net.UnitTests/SharedResourcesUnitTests.cs +++ b/Meade.net.UnitTests/SharedResourcesUnitTests.cs @@ -649,5 +649,11 @@ namespace Meade.net.UnitTests [Test] public void CheckTargetRightAscensionIsNullByDefault() => Assert.That(SharedResources.TargetRightAscension.HasValue, Is.False); + + [Test] + public void CheckIsTargetCoordinateInitRequired() => Assert.That(SharedResources.IsTargetCoordinateInitRequired, Is.True); + + [Test] + public void CheckIsGuiding() => Assert.That(SharedResources.IsGuiding, Is.False); } }