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,12 +158,14 @@ Asibfm700Mount::error_t Asibfm700Mount::initMount()
logInfo("ERFA engine initialization ...");
// set ERFA state
Asibfm700CCTE::engine_state_t ccte_state{.meteo{},
.wavelength = _mountConfig.refractWavelength(),
.lat = _mountConfig.siteLatitude(),
.lon = _mountConfig.siteLongitude(),
.elev = _mountConfig.siteElevation()};
Asibfm700CCTE::engine_state_t ccte_state{
.meteo = Asibfm700CCTE::_currentState.meteo, // just use of previous values
.wavelength = _mountConfig.refractWavelength(),
.lat = _mountConfig.siteLatitude(),
.lon = _mountConfig.siteLongitude(),
.elev = _mountConfig.siteElevation()};
if (_mountConfig.leapSecondFilename().size()) { // load leap seconds file

View File

@ -35,7 +35,10 @@ struct MccJulianDay {
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)
{
@ -44,11 +47,17 @@ struct MccJulianDay {
return *this;
}
double MJD() const { return mjd; }
double MJD() const
{
return mjd;
}
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:
double mjd{51544.5}; // J2000.0
@ -220,7 +229,10 @@ public:
return _MJD;
}
double MJD() const { return _MJD; }
double MJD() const
{
return _MJD;
}
template <typename DT>
std::chrono::sys_time<DT> UTC() const
@ -228,7 +240,10 @@ public:
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>
@ -253,11 +268,20 @@ public:
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:
std::chrono::system_clock::time_point _UTC;
@ -611,9 +635,15 @@ public:
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>
void setDelimiter(R&& delim)
@ -675,7 +705,7 @@ protected:
std::format_to(std::back_inserter(bytes), "{}", MccAngle(angle).sexagesimal(false, _currentPrec.deg_prec));
if constexpr (sizeof...(Ts)) {
std::format_to(std::back_inserter(bytes), "{}", _delimiter);
toSexagesimalHour(bytes, angles...);
toSexagesimalDeg(bytes, angles...);
}
}
};
@ -1004,7 +1034,7 @@ public:
static MccEqtHrzCoordsSerializer eqhrz_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.setPrecision(_currentPrec);
@ -1013,7 +1043,8 @@ public:
// MccEqtHrzCoordsSerializer{}(value, bytes);
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);
pt_ser.setFormat(_currentFormat);

View File

@ -156,6 +156,18 @@ public:
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,
typename... TelemetryCtorArgTs,
typename... PZoneContCtorArgTs,

View File

@ -395,6 +395,7 @@ public:
return MccTelemetryErrorCode::ERROR_UPDATE_STOPPED;
}
// to compute refraction coefficients
_data.pair_kind = MccCoordPairKind::COORDS_KIND_AZZD;
_data.X = _data.AZ;
_data.Y = _data.ZD;
@ -416,10 +417,7 @@ public:
}
}
if (ccte_err) {
return mcc_deduce_error_code(ccte_err, MccTelemetryErrorCode::ERROR_COORD_TRANSFORM);
}
// restore according to the mount type
if constexpr (mccIsEquatorialMount(pcm_t::mountType)) {
_data.pair_kind = MccCoordPairKind::COORDS_KIND_HADEC_APP;
} 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;
};