diff options
Diffstat (limited to 'indi-celestronaux/celestronaux.cpp')
-rw-r--r-- | indi-celestronaux/celestronaux.cpp | 71 |
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 |