...
This commit is contained in:
parent
6fc0b8bb4e
commit
15cf04f164
@ -158,12 +158,14 @@ Asibfm700Mount::error_t Asibfm700Mount::initMount()
|
|||||||
|
|
||||||
logInfo("ERFA engine initialization ...");
|
logInfo("ERFA engine initialization ...");
|
||||||
|
|
||||||
|
|
||||||
// set ERFA state
|
// set ERFA state
|
||||||
Asibfm700CCTE::engine_state_t ccte_state{.meteo{},
|
Asibfm700CCTE::engine_state_t ccte_state{
|
||||||
.wavelength = _mountConfig.refractWavelength(),
|
.meteo = Asibfm700CCTE::_currentState.meteo, // just use of previous values
|
||||||
.lat = _mountConfig.siteLatitude(),
|
.wavelength = _mountConfig.refractWavelength(),
|
||||||
.lon = _mountConfig.siteLongitude(),
|
.lat = _mountConfig.siteLatitude(),
|
||||||
.elev = _mountConfig.siteElevation()};
|
.lon = _mountConfig.siteLongitude(),
|
||||||
|
.elev = _mountConfig.siteElevation()};
|
||||||
|
|
||||||
|
|
||||||
if (_mountConfig.leapSecondFilename().size()) { // load leap seconds file
|
if (_mountConfig.leapSecondFilename().size()) { // load leap seconds file
|
||||||
|
|||||||
@ -35,7 +35,10 @@ struct MccJulianDay {
|
|||||||
|
|
||||||
MccJulianDay(double jd) : mjd(jd - MJD0) {}
|
MccJulianDay(double jd) : mjd(jd - MJD0) {}
|
||||||
|
|
||||||
constexpr operator double() const { return MccJulianDay::MJD0 + mjd; }
|
constexpr operator double() const
|
||||||
|
{
|
||||||
|
return MccJulianDay::MJD0 + mjd;
|
||||||
|
}
|
||||||
|
|
||||||
MccJulianDay& operator=(double jd)
|
MccJulianDay& operator=(double jd)
|
||||||
{
|
{
|
||||||
@ -44,11 +47,17 @@ struct MccJulianDay {
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
double MJD() const { return mjd; }
|
double MJD() const
|
||||||
|
{
|
||||||
|
return mjd;
|
||||||
|
}
|
||||||
|
|
||||||
constexpr auto operator<=>(const MccJulianDay&) const = default;
|
constexpr auto operator<=>(const MccJulianDay&) const = default;
|
||||||
|
|
||||||
constexpr auto operator<=>(double v) const { return v <=> (MccJulianDay::MJD0 + mjd); };
|
constexpr auto operator<=>(double v) const
|
||||||
|
{
|
||||||
|
return v <=> (MccJulianDay::MJD0 + mjd);
|
||||||
|
};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
double mjd{51544.5}; // J2000.0
|
double mjd{51544.5}; // J2000.0
|
||||||
@ -220,7 +229,10 @@ public:
|
|||||||
return _MJD;
|
return _MJD;
|
||||||
}
|
}
|
||||||
|
|
||||||
double MJD() const { return _MJD; }
|
double MJD() const
|
||||||
|
{
|
||||||
|
return _MJD;
|
||||||
|
}
|
||||||
|
|
||||||
template <typename DT>
|
template <typename DT>
|
||||||
std::chrono::sys_time<DT> UTC() const
|
std::chrono::sys_time<DT> UTC() const
|
||||||
@ -228,7 +240,10 @@ public:
|
|||||||
return std::chrono::time_point_cast<DT>(_UTC);
|
return std::chrono::time_point_cast<DT>(_UTC);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::chrono::system_clock::time_point UTC() const { return _UTC; }
|
std::chrono::system_clock::time_point UTC() const
|
||||||
|
{
|
||||||
|
return _UTC;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template <traits::mcc_output_char_range R>
|
template <traits::mcc_output_char_range R>
|
||||||
@ -253,11 +268,20 @@ public:
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string JEpoch(uint8_t prec = 0) const { return JEpoch<std::string>(prec); }
|
std::string JEpoch(uint8_t prec = 0) const
|
||||||
|
{
|
||||||
|
return JEpoch<std::string>(prec);
|
||||||
|
}
|
||||||
|
|
||||||
auto operator<=>(const MccCelestialCoordEpoch& rhs) const { return _UTC <=> rhs._UTC; }
|
auto operator<=>(const MccCelestialCoordEpoch& rhs) const
|
||||||
|
{
|
||||||
|
return _UTC <=> rhs._UTC;
|
||||||
|
}
|
||||||
|
|
||||||
auto operator==(const MccCelestialCoordEpoch& rhs) const { return _UTC == rhs._UTC; }
|
auto operator==(const MccCelestialCoordEpoch& rhs) const
|
||||||
|
{
|
||||||
|
return _UTC == rhs._UTC;
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::chrono::system_clock::time_point _UTC;
|
std::chrono::system_clock::time_point _UTC;
|
||||||
@ -611,9 +635,15 @@ public:
|
|||||||
|
|
||||||
virtual ~MccCoordinateSerializer() = default;
|
virtual ~MccCoordinateSerializer() = default;
|
||||||
|
|
||||||
void setFormat(SerializedCoordFormat fmt) { _currentFormat = fmt; }
|
void setFormat(SerializedCoordFormat fmt)
|
||||||
|
{
|
||||||
|
_currentFormat = fmt;
|
||||||
|
}
|
||||||
|
|
||||||
void setPrecision(SexagesimalCoordPrec prec) { _currentPrec = std::move(prec); }
|
void setPrecision(SexagesimalCoordPrec prec)
|
||||||
|
{
|
||||||
|
_currentPrec = std::move(prec);
|
||||||
|
}
|
||||||
|
|
||||||
template <traits::mcc_input_char_range R>
|
template <traits::mcc_input_char_range R>
|
||||||
void setDelimiter(R&& delim)
|
void setDelimiter(R&& delim)
|
||||||
@ -675,7 +705,7 @@ protected:
|
|||||||
std::format_to(std::back_inserter(bytes), "{}", MccAngle(angle).sexagesimal(false, _currentPrec.deg_prec));
|
std::format_to(std::back_inserter(bytes), "{}", MccAngle(angle).sexagesimal(false, _currentPrec.deg_prec));
|
||||||
if constexpr (sizeof...(Ts)) {
|
if constexpr (sizeof...(Ts)) {
|
||||||
std::format_to(std::back_inserter(bytes), "{}", _delimiter);
|
std::format_to(std::back_inserter(bytes), "{}", _delimiter);
|
||||||
toSexagesimalHour(bytes, angles...);
|
toSexagesimalDeg(bytes, angles...);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -1004,7 +1034,7 @@ public:
|
|||||||
static MccEqtHrzCoordsSerializer eqhrz_ser;
|
static MccEqtHrzCoordsSerializer eqhrz_ser;
|
||||||
static MccPointingTargetSerializer pt_ser;
|
static MccPointingTargetSerializer pt_ser;
|
||||||
|
|
||||||
// output format: <mount data>, speedX, speedY, pcmX, pcmY, refCorr, <target data>
|
// output format: <mount data>, speedX, speedY, pcmX, pcmY, refCorr (in arcsecs), <target data>
|
||||||
|
|
||||||
eqhrz_ser.setFormat(_currentFormat);
|
eqhrz_ser.setFormat(_currentFormat);
|
||||||
eqhrz_ser.setPrecision(_currentPrec);
|
eqhrz_ser.setPrecision(_currentPrec);
|
||||||
@ -1013,7 +1043,8 @@ public:
|
|||||||
// MccEqtHrzCoordsSerializer{}(value, bytes);
|
// MccEqtHrzCoordsSerializer{}(value, bytes);
|
||||||
std::format_to(std::back_inserter(bytes), "{}", _delimiter);
|
std::format_to(std::back_inserter(bytes), "{}", _delimiter);
|
||||||
|
|
||||||
toDegrees(bytes, value.speedX, value.speedY, value.pcmX, value.pcmY, value.refCorr);
|
// '*3600.0' to express refraction correction in arcseconds!
|
||||||
|
toDegrees(bytes, value.speedX, value.speedY, value.pcmX, value.pcmY, value.refCorr * 3600.0);
|
||||||
std::format_to(std::back_inserter(bytes), "{}", _delimiter);
|
std::format_to(std::back_inserter(bytes), "{}", _delimiter);
|
||||||
|
|
||||||
pt_ser.setFormat(_currentFormat);
|
pt_ser.setFormat(_currentFormat);
|
||||||
|
|||||||
@ -156,6 +156,18 @@ public:
|
|||||||
|
|
||||||
enum class mount_status_t : int { IDLE, INITIALIZATION, STOPPED, SLEWING, ADJUSTING, TRACKING, ERROR };
|
enum class mount_status_t : int { IDLE, INITIALIZATION, STOPPED, SLEWING, ADJUSTING, TRACKING, ERROR };
|
||||||
|
|
||||||
|
static constexpr std::string_view mountStatusStr(mount_status_t status)
|
||||||
|
{
|
||||||
|
return status == mount_status_t::IDLE ? "IDLE"
|
||||||
|
: mount_status_t::INITIALIZATION ? "INIT"
|
||||||
|
: mount_status_t::STOPPED ? "STOP"
|
||||||
|
: mount_status_t::SLEWING ? "SLEW"
|
||||||
|
: mount_status_t::ADJUSTING ? "ADJST"
|
||||||
|
: mount_status_t::TRACKING ? "TRACK"
|
||||||
|
: mount_status_t::ERROR ? "ERR"
|
||||||
|
: "UNKNOWN";
|
||||||
|
}
|
||||||
|
|
||||||
template <typename... HardwareCtorArgTs,
|
template <typename... HardwareCtorArgTs,
|
||||||
typename... TelemetryCtorArgTs,
|
typename... TelemetryCtorArgTs,
|
||||||
typename... PZoneContCtorArgTs,
|
typename... PZoneContCtorArgTs,
|
||||||
|
|||||||
@ -395,6 +395,7 @@ public:
|
|||||||
return MccTelemetryErrorCode::ERROR_UPDATE_STOPPED;
|
return MccTelemetryErrorCode::ERROR_UPDATE_STOPPED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// to compute refraction coefficients
|
||||||
_data.pair_kind = MccCoordPairKind::COORDS_KIND_AZZD;
|
_data.pair_kind = MccCoordPairKind::COORDS_KIND_AZZD;
|
||||||
_data.X = _data.AZ;
|
_data.X = _data.AZ;
|
||||||
_data.Y = _data.ZD;
|
_data.Y = _data.ZD;
|
||||||
@ -416,10 +417,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ccte_err) {
|
// restore according to the mount type
|
||||||
return mcc_deduce_error_code(ccte_err, MccTelemetryErrorCode::ERROR_COORD_TRANSFORM);
|
|
||||||
}
|
|
||||||
|
|
||||||
if constexpr (mccIsEquatorialMount(pcm_t::mountType)) {
|
if constexpr (mccIsEquatorialMount(pcm_t::mountType)) {
|
||||||
_data.pair_kind = MccCoordPairKind::COORDS_KIND_HADEC_APP;
|
_data.pair_kind = MccCoordPairKind::COORDS_KIND_HADEC_APP;
|
||||||
} else if constexpr (mccIsAltAzMount(pcm_t::mountType)) {
|
} else if constexpr (mccIsAltAzMount(pcm_t::mountType)) {
|
||||||
@ -429,6 +427,10 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (ccte_err) {
|
||||||
|
return mcc_deduce_error_code(ccte_err, MccTelemetryErrorCode::ERROR_COORD_TRANSFORM);
|
||||||
|
}
|
||||||
|
|
||||||
return MccTelemetryErrorCode::ERROR_OK;
|
return MccTelemetryErrorCode::ERROR_OK;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user