From 0d04ecd5873a52a14ca32a01933db862c0d6bf7f Mon Sep 17 00:00:00 2001 From: Colin Date: Wed, 1 May 2019 22:43:59 +0100 Subject: [PATCH] Added support for UTC offset. --- .../TelescopeControllerUnitTests.cs | 16 ++++++++++++---- .../Controller/TelescopeController.cs | 19 ++++++++++++++++--- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/MeadeAutostar497.UnitTests/TelescopeControllerUnitTests.cs b/MeadeAutostar497.UnitTests/TelescopeControllerUnitTests.cs index a1d20b4..600b538 100644 --- a/MeadeAutostar497.UnitTests/TelescopeControllerUnitTests.cs +++ b/MeadeAutostar497.UnitTests/TelescopeControllerUnitTests.cs @@ -32,6 +32,7 @@ namespace MeadeAutostar497.UnitTests serialMock.Setup(x => x.IsOpen).Returns(() => _isConnected); _telescopeController = TelescopeController.Instance; + _telescopeController.Connected = false; _telescopeController.SerialPort = serialMock.Object; } @@ -195,7 +196,7 @@ namespace MeadeAutostar497.UnitTests [Test] public void utcDate_Get_ReturnsExpectedValue() { - DateTime expectedDate = new DateTime(2019, 04, 30, 12, 32, 24, DateTimeKind.Utc); + DateTime expectedDate = new DateTime(2019, 04, 30, 11, 32, 24, DateTimeKind.Local); var dateString = "04/30/19"; var timeString = "12:32:24"; @@ -204,6 +205,7 @@ namespace MeadeAutostar497.UnitTests _telescopeController.Connected = true; + serialMock.Setup(x => x.CommandTerminated(":GG#", "#")).Returns("-01"); serialMock.Setup(x => x.CommandTerminated(":GC#", "#")).Returns(dateString); serialMock.Setup(x => x.CommandTerminated(":GL#", "#")).Returns(timeString); @@ -216,7 +218,9 @@ namespace MeadeAutostar497.UnitTests public void utcDate_Set_SetsTelescopeDateAndTime() { DateTime testDateTime = new DateTime(2019, 04, 30, 19, 53, 32, DateTimeKind.Utc); - serialMock.Setup(x => x.CommandChar($":SL{testDateTime.Hour:00}:{testDateTime.Minute:00}:{testDateTime.Second:00}#")).Returns('1'); + + serialMock.Setup(x => x.CommandTerminated(":GG#", "#")).Returns("-01"); + serialMock.Setup(x => x.CommandChar($":SL{testDateTime.Hour+1:00}:{testDateTime.Minute:00}:{testDateTime.Second:00}#")).Returns('1'); serialMock.Setup(x => x.CommandChar($":SC{testDateTime.Month:00}/{testDateTime.Day:00}/{testDateTime:yy}#")).Returns('1'); _isConnected = true; @@ -230,6 +234,8 @@ namespace MeadeAutostar497.UnitTests public void utcDate_Set_ThrowsExceptionWhenTimeInvalid() { DateTime testDateTime = new DateTime(2019, 04, 30, 19, 53, 32, DateTimeKind.Utc); + + serialMock.Setup(x => x.CommandTerminated(":GG#", "#")).Returns("-01"); //serialMock.Setup(x => x.CommandChar($":SL{testDateTime.Hour:00}:{testDateTime.Minute:00}:{testDateTime.Second:00}#")).Returns('1'); serialMock.Setup(x => x.CommandChar($":SC{testDateTime.Month:00}/{testDateTime.Day:00}/{testDateTime:yy}#")).Returns('1'); @@ -245,8 +251,10 @@ namespace MeadeAutostar497.UnitTests [Test] public void utcDate_Set_ThrowsExceptionWhenDateInvalid() { - DateTime testDateTime = new DateTime(2019, 04, 30, 19, 53, 32, DateTimeKind.Utc); - serialMock.Setup(x => x.CommandChar($":SL{testDateTime.Hour:00}:{testDateTime.Minute:00}:{testDateTime.Second:00}#")).Returns('1'); + DateTime testDateTime = new DateTime(2019, 04, 30, 19, 53, 32, DateTimeKind.Local); + + serialMock.Setup(x => x.CommandTerminated(":GG#", "#")).Returns("-01"); + serialMock.Setup(x => x.CommandChar($":SL{testDateTime.Hour+1:00}:{testDateTime.Minute:00}:{testDateTime.Second:00}#")).Returns('1'); //serialMock.Setup(x => x.CommandChar($":SC{testDateTime.Month:00}/{testDateTime.Day:00}/{testDateTime:yy}#")).Returns('1'); _isConnected = true; diff --git a/MeadeAutostar497/Controller/TelescopeController.cs b/MeadeAutostar497/Controller/TelescopeController.cs index 7df3662..b35089c 100644 --- a/MeadeAutostar497/Controller/TelescopeController.cs +++ b/MeadeAutostar497/Controller/TelescopeController.cs @@ -131,15 +131,20 @@ namespace ASCOM.MeadeAutostar497.Controller int minute = telescopeTime.Substring(3, 2).ToInteger(); int second = telescopeTime.Substring(6, 2).ToInteger(); + var utcCorrection = GetUtcCorrection(); + //Todo is this telescope local time, or real utc? - var newDate = new DateTime(year, month, day, hour, minute, second, DateTimeKind.Utc); + var newDate = new DateTime(year, month, day, hour, minute, second, DateTimeKind.Utc) + utcCorrection; return newDate; } set { + var utcCorrection = GetUtcCorrection(); + var localDateTime = value - utcCorrection; + //Todo is this telescope local time, or real utc? - var timeResult = SerialPort.CommandChar($":SL{value:HH:mm:ss}#"); + var timeResult = SerialPort.CommandChar($":SL{localDateTime:HH:mm:ss}#"); if (timeResult != '1') { throw new InvalidOperationException("Failed to set local time"); @@ -148,7 +153,7 @@ namespace ASCOM.MeadeAutostar497.Controller SerialPort.Lock(); try { - var dateResult = SerialPort.CommandChar($":SC{value:MM/dd/yy}#"); + var dateResult = SerialPort.CommandChar($":SC{localDateTime:MM/dd/yy}#"); if (dateResult != '1') { throw new InvalidOperationException("Failed to set local date"); @@ -166,6 +171,14 @@ namespace ASCOM.MeadeAutostar497.Controller } + private TimeSpan GetUtcCorrection() + { + string utcOffSet = SerialPort.CommandTerminated(":GG#", "#"); + double utcOffsetHours = double.Parse(utcOffSet); + TimeSpan utcCorrection = TimeSpan.FromHours(utcOffsetHours); + return utcCorrection; + } + public double SiteLatitude { get