@@ -87,6 +87,8 @@ struct SolarSysToolWin : public wxDialog
8787 wxString m_trackingRateName;
8888 wxChoice *m_mountTrackingRate;
8989 wxCheckBox *m_restoreSidereal;
90+ bool m_trackingRateNeedsConfirmation;
91+ wxDateTime m_ConfirmationPeriodStart;
9092
9193 wxCheckBox *m_RoiCheckBox;
9294 wxCheckBox *m_PauseCheckBox;
@@ -155,6 +157,7 @@ struct SolarSysToolWin : public wxDialog
155157 void OnResetDetectionStats (wxCommandEvent& evnt);
156158 void HandleWarningMsgs (int selection);
157159 void ShowStatus (const wxString& msg, bool appending = false );
160+ void ConfirmMountTrackingRate ();
158161};
159162
160163static wxString TITLE = wxTRANSLATE(" Solar System Guiding" );
@@ -193,7 +196,7 @@ static wxSpinCtrlDouble *NewSpinner(wxWindow *parent, wxString formatstr, double
193196SolarSysToolWin::SolarSysToolWin ()
194197 : wxDialog(pFrame, wxID_ANY, wxGetTranslation(TITLE ), wxDefaultPosition, wxDefaultSize,
195198 wxCAPTION | wxCLOSE_BOX | wxMINIMIZE_BOX),
196- m_lastDiameter(0 ), m_autoAdjustingActive(false )
199+ m_lastDiameter(0 ), m_autoAdjustingActive(false ), m_trackingRateNeedsConfirmation( false )
197200
198201{
199202 SetSizeHints (wxDefaultSize, wxDefaultSize);
@@ -865,6 +868,7 @@ void SolarSysToolWin::OnAutoAdjustButton(wxCommandEvent& event)
865868 m_maxBlobDiameter->SetValue (DefaultMaxBlobSize ());
866869 wxSpinDoubleEvent evt;
867870 OnSpinCtrl_maxBlobDiameter (evt);
871+ // Setting the MinBlobDiameter this large will invariably trigger retries
868872 m_solarSystemObj->SetMinBlobDiameter (0.8 * m_maxBlobDiameter->GetValue ());
869873
870874 if (!pFrame->pGuider ->IsGuiding ())
@@ -969,6 +973,31 @@ void SolarSysToolWin::InitializeTrackingRates(wxString trackingRateName)
969973 }
970974}
971975
976+ void SolarSysToolWin::ConfirmMountTrackingRate ()
977+ {
978+ // Need to see if the change "stuck" - can be over-written by mount s/w using customized tracking
979+ Scope::TrackingRateInfo rateInfo;
980+ wxStopWatch timer;
981+
982+ if (!pPointingSource->GetTrackingRate (rateInfo))
983+ {
984+ if (rateInfo.name != m_trackingRateName)
985+ {
986+ int inx = m_mountTrackingRate->FindString (rateInfo.name );
987+ m_mountTrackingRate->SetSelection (inx);
988+ ShowStatus (_ (" Mount tracking rate reset by another application" ));
989+ }
990+ else
991+ ShowStatus (_ (" Mount tracking rate confirmed" ));
992+ }
993+ else
994+ {
995+ int inx = m_mountTrackingRate->FindString (" Sidereal" );
996+ m_mountTrackingRate->SetSelection (inx);
997+ ShowStatus (_ (" Mount driver can't set/return tracking rates correctly" ));
998+ }
999+ }
1000+
9721001void SolarSysToolWin::OnMountTrackingRateClick (wxCommandEvent& event)
9731002{
9741003 if (pPointingSource && pPointingSource->IsConnected ())
@@ -982,30 +1011,11 @@ void SolarSysToolWin::OnMountTrackingRateClick(wxCommandEvent& event)
9821011 int *pRate = (int *) m_mountTrackingRate->GetClientData (sel);
9831012 pPointingSource->SetTrackingRate ((TrackingRates) *pRate);
9841013 Debug.Write (wxString::Format (" SSG: requesting mount tracking rate of %s\n " , m_trackingRateName));
1014+ ShowStatus (wxString::Format (_ (" Requested mount tracking rate change to %s\n " ), m_trackingRateName));
9851015 pFrame->NotifyGuidingParam (" SSG: mount tracking rate" , m_trackingRateName);
9861016 // Need to see if the change "stuck" - can be over-written by mount s/w using customized tracking
987- Scope::TrackingRateInfo rateInfo;
988- wxStopWatch timer;
989- timer.Start ();
990- while (timer.Time () < 3000 )
991- wxMilliSleep (100 );
992- if (!pPointingSource->GetTrackingRate (rateInfo))
993- {
994- if (rateInfo.name != m_trackingRateName)
995- {
996- int inx = m_mountTrackingRate->FindString (rateInfo.name );
997- m_mountTrackingRate->SetSelection (inx);
998- ShowStatus (_ (" Mount tracking rate reset by another application" ));
999- }
1000- else
1001- ShowStatus (_ (" Mount tracking rate confirmed" ));
1002- }
1003- else
1004- {
1005- int inx = m_mountTrackingRate->FindString (" Sidereal" );
1006- m_mountTrackingRate->SetSelection (inx);
1007- ShowStatus (_ (" Mount driver can't set/return tracking rates correctly" ));
1008- }
1017+ m_ConfirmationPeriodStart = wxDateTime::Now (); // Check it after 3 seconds
1018+ m_trackingRateNeedsConfirmation = true ;
10091019 }
10101020}
10111021
@@ -1205,6 +1215,17 @@ void SolarSysToolWin::UpdateCentroidInfo(float xLoc, float yLoc, float radius)
12051215 m_statsGrid->SetCellValue (1 , 1 , locStr);
12061216 m_statsGrid->SetCellValue (4 , 1 , wxString::Format (" %0.2f" , radius * 2.0 ));
12071217 m_lastDiameter = 2 * radius;
1218+ // Just take advantage of a periodic function to handle a one-time, little-used verification
1219+ if (m_trackingRateNeedsConfirmation)
1220+ {
1221+ wxDateTime now = wxDateTime::Now ();
1222+ wxTimeSpan interval = now - m_ConfirmationPeriodStart;
1223+ if (interval.GetSeconds () >= 3 )
1224+ {
1225+ ConfirmMountTrackingRate ();
1226+ m_trackingRateNeedsConfirmation = false ;
1227+ }
1228+ }
12081229}
12091230
12101231void SolarSysToolWin::UpdateDetectionStats (int rsmpCount, int rsmpReductions, int lostEvents, int totalEvents)
@@ -1304,10 +1325,12 @@ void SolarSysToolWin::NotifyMountConnectionChange(bool Connected)
13041325 m_mountTrackingRate->Enable (false );
13051326}
13061327
1328+ // This is used by SolarSys.cpp for auto-adjusting min blob size
13071329void SolarSysToolWin::ChangeMinBlobDiameter (int val)
13081330{
13091331 m_minBlobDiameter->SetValue (val);
13101332 ShowAngularSize (val, m_minBlobDiameterAngle);
1333+ pFrame->NotifyGuidingParam (" SolarSys: Blob min diam" , val);
13111334}
13121335
13131336// Restores profile value in UI if profile is switched while window is already displayed
0 commit comments