From 8eb093c13ad950dc20d32ccf73ca1736f00d41b8 Mon Sep 17 00:00:00 2001 From: Colin Dawson Date: Sat, 7 May 2022 18:09:37 +0100 Subject: [PATCH] Upgraded the align mode command to have a retry and added support for land mode. --- Meade.net.Telescope/Telescope.cs | 43 +++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/Meade.net.Telescope/Telescope.cs b/Meade.net.Telescope/Telescope.cs index 4cae501..ac62ae2 100644 --- a/Meade.net.Telescope/Telescope.cs +++ b/Meade.net.Telescope/Telescope.cs @@ -979,10 +979,13 @@ namespace ASCOM.Meade.net if (IsGwCommandSupported()) { var alignmentStatus = GetScopeAlignmentStatus(); + LogMessage("AlignmentMode Get", $"alignmode = {alignmentStatus.AlignmentMode}"); return alignmentStatus.AlignmentMode; } - else + + return Retry(6, () => { + LogMessage("AlignmentMode Get", $"Sending Ack code."); const char ack = (char)6; //ACK <0x06> Query of alignment mounting mode. //Returns: @@ -995,22 +998,29 @@ namespace ASCOM.Meade.net switch (alignmentString) { case "A": + LogMessage("AlignmentMode Get", $"Telescope is in AltAz"); alignmentMode = AlignmentModes.algAltAz; break; case "P": + LogMessage("AlignmentMode Get", $"Telescope is in Polar"); alignmentMode = AlignmentModes.algPolar; break; + case "L": + LogMessage("AlignmentMode Get", $"Telescope is in Land mode"); + alignmentMode = AlignmentModes.algAltAz; + break; //case "G": - //alignmentMode = AlignmentModes.algGermanPolar; - //break; + //alignmentMode = AlignmentModes.algGermanPolar; + //break; default: - throw new InvalidValueException( - $"unknown alignment returned from telescope: {alignmentString}"); + var msg = $"unknown alignment returned from telescope: {alignmentString}"; + LogMessage("AlignmentMode Get", msg); + throw new InvalidValueException(msg); } LogMessage("AlignmentMode Get", $"alignmode = {alignmentMode}"); return alignmentMode; - } + }); } set { @@ -2422,6 +2432,27 @@ namespace ASCOM.Meade.net } } + private T Retry(int i, Func func) + { + while (true) + { + try + { + return func(); + } + catch (Exception e) + { + LogMessage("Retry", $"Attempt failed {i} attempts remaining error: {e.Message}"); + if (i > 0) + { + i--; + } + else + throw; + } + } + } + public void SlewToCoordinates(double rightAscension, double declination) { LogMessage("SlewToCoordinates", $"Ra={rightAscension}, Dec={declination}");