Skip to content

Commit

Permalink
Correct bug in telescope park logic where the scope would show AtPark…
Browse files Browse the repository at this point in the history
… when it was not.

Bumped version to 6.5.1.8
  • Loading branch information
astroman133 committed Dec 13, 2021
1 parent be5bf0e commit 56c8f75
Show file tree
Hide file tree
Showing 9 changed files with 158 additions and 162 deletions.
2 changes: 1 addition & 1 deletion DeviceHub/Business Object Classes/Enumerations.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public enum DeviceTypeEnum
[Display(Name = "Focuser")]
Focuser
};
public enum ParkingStateEnum { Unparked, ParkInProgress, IsAtPark, ParkFailed };
public enum ParkingStateEnum { Unparked, ParkInProgress, IsAtPark };
public enum HomingStateEnum { NotAtHome, HomingInProgress, IsAtHome, HomeFailed };
public enum MoveDirections { None = -1, North, South, East, West, Up, Down, Left, Right, Clockwise, CounterClockwise };
public enum ScopeMoveEnum { Variable, Fixed };
Expand Down
Original file line number Diff line number Diff line change
@@ -1,119 +1,119 @@
using System;
using System.Diagnostics;
//using System.Diagnostics;

using ASCOM.DeviceInterface;

namespace ASCOM.DeviceHub
{
public class DevHubTelescopeStatus : AscomTelescopeStatus, ICloneable
{
public static DevHubTelescopeStatus GetEmptyStatus()
{
DevHubTelescopeStatus status = new DevHubTelescopeStatus();
status.Clean();

return status;
}

public DevHubTelescopeStatus()
: base()
{ }

public DevHubTelescopeStatus( DevHubTelescopeStatus other )
: base( other )
public class DevHubTelescopeStatus : AscomTelescopeStatus, ICloneable
{
public static DevHubTelescopeStatus GetEmptyStatus()
{
this.IsCounterWeightUp = other.IsCounterWeightUp;
this.LocalHourAngle = other.LocalHourAngle;
this.ParkingState = other.ParkingState;
DevHubTelescopeStatus status = new DevHubTelescopeStatus();
status.Clean();

return status;
}

public DevHubTelescopeStatus()
: base()
{ }

public DevHubTelescopeStatus( DevHubTelescopeStatus other )
: base( other )
{
this.IsCounterWeightUp = other.IsCounterWeightUp;
this.LocalHourAngle = other.LocalHourAngle;
this.ParkingState = other.ParkingState;
}

public DevHubTelescopeStatus( TelescopeManager mgr )
: base( mgr )
{
try
{
ParkingState = mgr.ParkingState;

double sidTime = SiderealTime;
double ra = RightAscension;

if ( Double.IsNaN( sidTime ) || Double.IsNaN( ra ) )
{
LocalHourAngle = Double.NaN;
}
else
{
LocalHourAngle = CalculateHourAngle( RightAscension );
}
public DevHubTelescopeStatus( TelescopeManager mgr )
: base( mgr )
{
try
{
ParkingState = this.AtPark ? ParkingStateEnum.IsAtPark : ParkingStateEnum.Unparked;

double sidTime = SiderealTime;
double ra = RightAscension;

if ( Double.IsNaN( sidTime ) || Double.IsNaN( ra ) )
{
LocalHourAngle = Double.NaN;
}
else
{
LocalHourAngle = CalculateHourAngle( RightAscension );
}

IsCounterWeightUp = ( mgr.Parameters.AlignmentMode == AlignmentModes.algGermanPolar
&& CalculateCounterWeightUp( SideOfPier, LocalHourAngle ) );

}
catch ( Exception )
{
IsCounterWeightUp = false;
ParkingState = ParkingStateEnum.Unparked;
LocalHourAngle = Double.NaN;
}
}

#region Public Properties

public bool IsReadyToSlew => ParkingState == ParkingStateEnum.Unparked && !Slewing;

#endregion

#region Change Notification Properties

private bool _isCounterWeightUp;

public bool IsCounterWeightUp
{
get { return _isCounterWeightUp; }
set
{
if ( value != _isCounterWeightUp )
{
_isCounterWeightUp = value;
OnPropertyChanged();
}
}
}

private ParkingStateEnum _parkingState;

public ParkingStateEnum ParkingState
{
get { return _parkingState; }
set
{
if ( value != _parkingState )
{
_parkingState = value;
OnPropertyChanged();
}
}
}

private double _localHourAngle;

public double LocalHourAngle
{
get { return _localHourAngle; }
set
{
if ( value != _localHourAngle )
{
_localHourAngle = value;
OnPropertyChanged();
}
}
}

#endregion

#region Public Methods
{
IsCounterWeightUp = false;
ParkingState = ParkingStateEnum.Unparked;
LocalHourAngle = Double.NaN;
}
}

#region Public Properties

public bool IsReadyToSlew => ParkingState == ParkingStateEnum.Unparked && !Slewing;

#endregion

#region Change Notification Properties

private bool _isCounterWeightUp;

public bool IsCounterWeightUp
{
get { return _isCounterWeightUp; }
set
{
if ( value != _isCounterWeightUp )
{
_isCounterWeightUp = value;
OnPropertyChanged();
}
}
}

private ParkingStateEnum _parkingState;

public ParkingStateEnum ParkingState
{
get { return _parkingState; }
set
{
if ( value != _parkingState )
{
_parkingState = value;
OnPropertyChanged();
}
}
}

private double _localHourAngle;

public double LocalHourAngle
{
get { return _localHourAngle; }
set
{
if ( value != _localHourAngle )
{
_localHourAngle = value;
OnPropertyChanged();
}
}
}

#endregion

#region Public Methods

public double CalculateHourAngle( double rightAscension )
{
Expand All @@ -126,35 +126,35 @@ public double CalculateHourAngle( double rightAscension )
return retval;
}

public override void Clean()
{
base.Clean();
public override void Clean()
{
base.Clean();

IsCounterWeightUp = false;
ParkingState = ( AtPark ) ? ParkingStateEnum.IsAtPark : ParkingStateEnum.Unparked;
LocalHourAngle = Double.NaN;
}
IsCounterWeightUp = false;
ParkingState = ( AtPark ) ? ParkingStateEnum.IsAtPark : ParkingStateEnum.Unparked;
LocalHourAngle = Double.NaN;
}

#region ICloneable Implementation

object ICloneable.Clone()
{
return new DevHubTelescopeStatus( this );
return new DevHubTelescopeStatus( this );
}

public new DevHubTelescopeStatus Clone()
public new DevHubTelescopeStatus Clone()
{
return new DevHubTelescopeStatus( this );
return new DevHubTelescopeStatus( this );
}

#endregion ICloneable Implementation
#endregion ICloneable Implementation

#endregion Public Methods
#endregion Public Methods

#region Helper Methods
#region Helper Methods

private bool CalculateCounterWeightUp( PierSide pierSide, double hourAngle )
{
private bool CalculateCounterWeightUp( PierSide pierSide, double hourAngle )
{
// The CW state is determined by looking at two things: pier side and hour angle (HA = LST – RA).
// Pier Side = West; 0 > HA > -12 CW Down
// Pier Side = East; 0 < HA < +12 CW Down
Expand All @@ -164,25 +164,25 @@ private bool CalculateCounterWeightUp( PierSide pierSide, double hourAngle )

bool retval = false;

if ( pierSide == PierSide.pierEast && -12 < hourAngle && hourAngle < 0 )
{
retval = true;
}
else if ( pierSide == PierSide.pierWest && 0 < hourAngle && hourAngle < 12 )
{
retval = true;
}
if ( pierSide == PierSide.pierEast && -12 < hourAngle && hourAngle < 0 )
{
retval = true;
}
else if ( pierSide == PierSide.pierWest && 0 < hourAngle && hourAngle < 12 )
{
retval = true;
}

return retval;
}
return retval;
}

private double ConditionHA( double ha )
{
double lowerBound = -12.0;
double upperBound = 12.0;
double range = upperBound - lowerBound;
{
double lowerBound = -12.0;
double upperBound = 12.0;
double range = upperBound - lowerBound;

double retval = ha;
double retval = ha;

while ( retval < lowerBound )
{
Expand All @@ -194,9 +194,9 @@ private double ConditionHA( double ha )
retval -= range;
}

return retval;
}
return retval;
}

#endregion
}
#endregion
}
}
19 changes: 4 additions & 15 deletions DeviceHub/DeviceManagers/TelescopeManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -115,8 +115,6 @@ private TelescopeManager()

public string ConnectError { get; protected set; }
public Exception ConnectException { get; protected set; }
public ParkingStateEnum ParkingState { get; private set; }

public TelescopeCapabilities Capabilities { get; private set; }
public TelescopeParameters Parameters { get; private set; }
public DevHubTelescopeStatus Status { get; private set; }
Expand Down Expand Up @@ -361,21 +359,13 @@ public void SetParkingState( ParkingStateEnum desiredState )

if ( !Service.AtPark )
{
ParkingState = ParkingStateEnum.Unparked;
Status.AtPark = false;
Status.ParkingState = ParkingStateEnum.Unparked;
}
}

Status.ParkingState = ParkingStateEnum.Unparked;

//if ( !Status.AtPark )
//{
// ParkingState = ParkingStateEnum.Unparked;
//}
}

Debug.WriteLine( $"ParkingState set to {ParkingState}." );
//Debug.WriteLine( $"ParkingState set to {ParkingState}." );

}

Expand Down Expand Up @@ -1138,7 +1128,7 @@ private void ParkScopeTask()
{
// This method is called as a Task to run on a worker thread.

ParkingState = ParkingStateEnum.ParkInProgress;
Status.ParkingState = ParkingStateEnum.ParkInProgress;

// Since we don't know whether Park is synchronous or asynchronous, call it on another thread.
// which is set it up to cancel after 60 seconds.
Expand All @@ -1157,17 +1147,16 @@ private void ParkScopeTask()
if ( Status.AtPark )
{
more = false;
ParkingState = ParkingStateEnum.IsAtPark;
}
else if ( task.IsCanceled ) // not parked in 60 seconds causes cancellation.
{
more = false;
ParkingState = ParkingStateEnum.ParkFailed;
Status.ParkingState = ParkingStateEnum.Unparked; // Err on the side of caution.
}
else if ( task.IsFaulted )
{
more = false;
ParkingState = ParkingStateEnum.ParkFailed;
Status.ParkingState = ParkingStateEnum.Unparked; // Err on the side of caution.
}

if ( more )
Expand Down
Loading

0 comments on commit 56c8f75

Please sign in to comment.