summaryrefslogtreecommitdiffstats
path: root/indi-celestronaux/celestronaux.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indi-celestronaux/celestronaux.cpp')
-rw-r--r--indi-celestronaux/celestronaux.cpp71
1 files changed, 54 insertions, 17 deletions
diff --git a/indi-celestronaux/celestronaux.cpp b/indi-celestronaux/celestronaux.cpp
index 51583ad..ccf15a0 100644
--- a/indi-celestronaux/celestronaux.cpp
+++ b/indi-celestronaux/celestronaux.cpp
@@ -788,6 +788,8 @@ bool CelestronAUX::ISNewSwitch(const char *dev, const char *name, ISState *state
TrackMethodSP.update(states, names, n);
TrackMethodSP.setState(IPS_OK);
TrackMethodSP.apply();
+
+ track_method_changed();
return true;
}
@@ -797,6 +799,8 @@ bool CelestronAUX::ISNewSwitch(const char *dev, const char *name, ISState *state
DriverTrackMethodSP.update(states, names, n);
DriverTrackMethodSP.setState(IPS_OK);
DriverTrackMethodSP.apply();
+
+ track_method_changed();
return true;
}
@@ -1213,8 +1217,9 @@ bool CelestronAUX::ReadScopeStatus()
// For equatorial mounts, engage tracking.
if ((TrackMethodSP[TRACK_METHOD_MOUNT].getState() == ISS_ON) && \
- (MountTypeSP[EQUATORIAL].getState() == ISS_ON))
- SetTrackMode(IUFindOnSwitchIndex(&TrackModeSP));
+ (MountTypeSP[EQUATORIAL].getState() == ISS_ON))
+ SetTrackMode(IUFindOnSwitchIndex(&TrackModeSP));
+
LOG_INFO("Tracking started.");
}
else
@@ -1496,7 +1501,9 @@ void CelestronAUX::calculate_tracking_vector(double &mt_ra, double &mt_dec)
double delta = 1./3600.;
double ra1 = m_SkyTrackingTarget.rightascension;
double ra2 = ra1 + delta;
- double dec= m_SkyTrackingTarget.declination;
+ double dec = m_SkyTrackingTarget.declination;
+ int mode = IUFindOnSwitchIndex(&TrackModeSP);
+ double rate = 0.0;
TelescopeDirectionVector TDV;
INDI::IEquatorialCoordinates m1 { ra1, dec };
@@ -1528,8 +1535,15 @@ void CelestronAUX::calculate_tracking_vector(double &mt_ra, double &mt_dec)
int d_a1 = e2[0] - e1[0];
int d_a2 = e2[1] - e1[1];
- r_ra *= TRACKRATE_SIDEREAL;
- r_dec *= TRACKRATE_SIDEREAL * (24. / 360.);
+ if (mode == TRACK_SIDEREAL)
+ rate = TRACKRATE_SIDEREAL;
+ else if (mode == TRACK_SOLAR)
+ rate = TRACKRATE_SOLAR;
+ else if (mode == TRACK_LUNAR)
+ rate = TRACKRATE_LUNAR;
+
+ r_ra *= rate;
+ r_dec *= rate * (24. / 360.);
mt_ra = std::abs(r_ra);
mt_dec = std::abs(r_dec);
@@ -1668,23 +1682,23 @@ void CelestronAUX::TimerHit()
trackByRate(AXIS_ALT, trackRates[AXIS_ALT]);
}
} else if (TrackMethodSP[TRACK_METHOD_DRIVER].getState() == ISS_ON) {
- double r_ra, r_dec;
+ double r_ra, r_dec;
- calculate_tracking_vector(r_ra, r_dec);
+ calculate_tracking_vector(r_ra, r_dec);
- if ((TrackRateN[AXIS_AZ].value != r_ra) || (TrackRateN[AXIS_ALT].value != r_dec)) {
+ if ((TrackRateN[AXIS_AZ].value != r_ra) || (TrackRateN[AXIS_ALT].value != r_dec)) {
TrackRateN[AXIS_AZ].value = r_ra;
TrackRateN[AXIS_ALT].value = r_dec;
- IDSetNumber(&TrackRateNP, nullptr);
+ IDSetNumber(&TrackRateNP, nullptr);
}
#if 0
if (IUFindOnSwitchIndex(&TrackModeSP) != TRACK_CUSTOM) {
- IUResetSwitch(&TrackModeSP);
- TrackModeS[TRACK_CUSTOM].s=ISS_ON;
- TrackModeSP.s = IPS_ALERT;
- IDSetSwitch(&TrackModeSP, nullptr);
- }
+ IUResetSwitch(&TrackModeSP);
+ TrackModeS[TRACK_CUSTOM].s=ISS_ON;
+ TrackModeSP.s = IPS_ALERT;
+ IDSetSwitch(&TrackModeSP, nullptr);
+ }
#endif
CelestronAUX::SetTrackRate(r_ra, r_dec);
@@ -1712,6 +1726,28 @@ void CelestronAUX::TimerHit()
}
}
+
+bool CelestronAUX::track_method_changed(void)
+{
+ if (TrackState != SCOPE_TRACKING) return false;
+
+ if (TrackMethodSP[TRACK_METHOD_MOUNT].getState() == ISS_ON) {
+ if (IUFindOnSwitchIndex(&TrackModeSP) == TRACK_CUSTOM)
+ return SetTrackRate(TrackRateN[AXIS_AZ].value, TrackRateN[AXIS_ALT].value);
+ else
+ return SetTrackMode(IUFindOnSwitchIndex(&TrackModeSP));
+ }
+
+ if (TrackMethodSP[TRACK_METHOD_NONE].getState() == ISS_ON) {
+ syslog_proxy("CelestronAUX::trackByRate 0 0");
+ trackByRate(AXIS_AZ, 0);
+ trackByRate(AXIS_ALT, 0);
+ return true;
+ }
+
+ return true;
+}
+
/////////////////////////////////////////////////////////////////////////////////////
///
/////////////////////////////////////////////////////////////////////////////////////
@@ -2228,6 +2264,7 @@ bool CelestronAUX::SetTrackEnabled(bool enabled)
else
{
TrackState = SCOPE_IDLE;
+ syslog_proxy("CelestronAUX::trackByRate 0 0");
trackByRate(AXIS_AZ, 0);
trackByRate(AXIS_ALT, 0);
@@ -2256,7 +2293,7 @@ bool CelestronAUX::SetTrackRate(double raRate, double deRate)
// rate = (steps) * gain
steps[AXIS_AZ] = raRate * STEPS_PER_ARCSEC * GAIN_STEPS;
steps[AXIS_ALT] = deRate * STEPS_PER_ARCSEC * GAIN_STEPS;
- syslog_proxy("CelestronAUX::trackByRate %.2f %.2f", steps[AXIS_AZ], step[AXIS_ALT]);
+ syslog_proxy("CelestronAUX::trackByRate %.2f %.2f", steps[AXIS_AZ], steps[AXIS_ALT]);
trackByRate(AXIS_AZ, steps[AXIS_AZ]);
trackByRate(AXIS_ALT, steps[AXIS_ALT]);
}
@@ -2289,7 +2326,7 @@ bool CelestronAUX::SetTrackMode(uint8_t mode)
// rate = (steps) * gain
steps[AXIS_AZ] = m_TrackRates[AXIS_AZ] * STEPS_PER_ARCSEC * GAIN_STEPS;
steps[AXIS_ALT] = m_TrackRates[AXIS_ALT] * STEPS_PER_ARCSEC * GAIN_STEPS;
- syslog_proxy("CelestronAUX::trackByRate %.2f %.2f", steps[AXIS_AZ], step[AXIS_ALT]);
+ syslog_proxy("CelestronAUX::trackByRate %.2f %.2f", steps[AXIS_AZ], steps[AXIS_ALT]);
trackByRate(AXIS_AZ, steps[AXIS_AZ]);
trackByRate(AXIS_ALT, steps[AXIS_ALT]);
}
@@ -2587,7 +2624,7 @@ bool CelestronAUX::processResponse(AUXCommand &m)
}
#if 0 // This turned out to be a stupid idea
else if (m.destination() == 0xdd) {
- fwrite((const unsigned char *) (&m.data()[0]),m.dataSize(),1,stderr);
+ fwrite((const unsigned char *) (&m.data()[0]),m.dataSize(),1,stderr);
}
#endif
else