Added support for AlignmentMode

This commit is contained in:
2019-05-02 14:05:23 +01:00
parent d2fae7607b
commit 7225c2d70f
4 changed files with 77 additions and 1 deletions
@@ -444,5 +444,35 @@ namespace MeadeAutostar497.UnitTests
serialMock.Verify(x => x.Command(":Mgs1024#"), Times.Once); serialMock.Verify(x => x.Command(":Mgs1024#"), Times.Once);
} }
[TestCase("AT0", AlignmentModes.algAltAz)]
[TestCase("PT0", AlignmentModes.algPolar)]
[TestCase("GT0", AlignmentModes.algGermanPolar)]
public void AlignmentMode_Get_ReturnsExpectedValue(string commandResponse, AlignmentModes mode)
{
serialMock.Setup(x => x.CommandTerminated(":GW#", "#")).Returns(commandResponse);
_isConnected = true;
_telescopeController.Connected = true;
var result = _telescopeController.AlignmentMode;
Assert.That(result, Is.EqualTo(mode));
}
[TestCase(AlignmentModes.algAltAz, ":AA#")]
[TestCase(AlignmentModes.algPolar, ":AP#")]
[TestCase(AlignmentModes.algGermanPolar, ":AP#")]
public void AligmentMode_Set_WorksAsExpected(AlignmentModes mode, string command)
{
_isConnected = true;
_telescopeController.Connected = true;
_telescopeController.AlignmentMode = mode;
serialMock.Verify( x => x.Command(command), Times.Once);
}
} }
} }
+1 -1
View File
@@ -298,7 +298,7 @@ namespace ASCOM.MeadeAutostar497
get get
{ {
tl.LogMessage("AlignmentMode Get", "Not implemented"); tl.LogMessage("AlignmentMode Get", "Not implemented");
throw new ASCOM.PropertyNotImplementedException("AlignmentMode", false); return _telescopeController.AlignmentMode;
} }
} }
@@ -12,6 +12,7 @@ namespace ASCOM.MeadeAutostar497.Controller
DateTime utcDate { get; set; } DateTime utcDate { get; set; }
double SiteLatitude { get; set; } double SiteLatitude { get; set; }
double SiteLongitude { get; set; } double SiteLongitude { get; set; }
AlignmentModes AlignmentMode { get; set; }
void AbortSlew(); void AbortSlew();
void PulseGuide(GuideDirections direction, int duration); void PulseGuide(GuideDirections direction, int duration);
} }
@@ -6,6 +6,7 @@ using ASCOM.DeviceInterface;
namespace ASCOM.MeadeAutostar497.Controller namespace ASCOM.MeadeAutostar497.Controller
{ {
//todo stop this being a singleton, and instead use a server to make only a single instance.
public sealed class TelescopeController : ITelescopeController public sealed class TelescopeController : ITelescopeController
{ {
private static readonly Lazy<TelescopeController> lazy = new Lazy<TelescopeController>(); private static readonly Lazy<TelescopeController> lazy = new Lazy<TelescopeController>();
@@ -248,6 +249,50 @@ namespace ASCOM.MeadeAutostar497.Controller
} }
public AlignmentModes AlignmentMode
{
get
{
var alignmentString = SerialPort.CommandTerminated(":GW#", "#");
switch (alignmentString[0])
{
case 'A': return AlignmentModes.algAltAz;
case 'P': return AlignmentModes.algPolar;
case 'G': return AlignmentModes.algGermanPolar;
default:
throw new ASCOM.InvalidValueException($"unknown alignment returned from telescope: {alignmentString[0]}");
}
//:GW# Get Scope Alignment Status
//Returns: <mount><tracking><alignment>#
// where:
//mount: A - AzEl mounted, P - Equatorially mounted, G - german mounted equatorial
//tracking: T - tracking, N - not tracking
//alignment: 0 - needs alignment, 1 - one star aligned, 2 - two star aligned, 3 - three star aligned.
}
set
{
switch (value)
{
case AlignmentModes.algAltAz: SerialPort.Command(":AA#");
break;
case AlignmentModes.algPolar:
case AlignmentModes.algGermanPolar:
SerialPort.Command(":AP#");
break;
default:
throw new ArgumentOutOfRangeException(nameof(value), value, null);
}
//:AL# Sets telescope to Land alignment mode
//Returns: nothing
//:AP# Sets telescope to Polar alignment mode
//Returns: nothing
//:AA# Sets telescope the AltAz alignment mode
//Returns: nothing
}
}
public void AbortSlew() public void AbortSlew()
{ {
SerialPort.Command("#:Q#"); SerialPort.Command("#:Q#");