This commit is contained in:
Timur A. Fatkhullin 2025-11-03 18:27:43 +03:00
parent 6fc0b8bb4e
commit 15cf04f164
4 changed files with 69 additions and 22 deletions

View File

@ -158,8 +158,10 @@ 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{
.meteo = Asibfm700CCTE::_currentState.meteo, // just use of previous values
.wavelength = _mountConfig.refractWavelength(), .wavelength = _mountConfig.refractWavelength(),
.lat = _mountConfig.siteLatitude(), .lat = _mountConfig.siteLatitude(),
.lon = _mountConfig.siteLongitude(), .lon = _mountConfig.siteLongitude(),

View 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);

View File

@ -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,

View File

@ -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;
}; };