diff --git a/asibfm700/asibfm700_mount.cpp b/asibfm700/asibfm700_mount.cpp index 987a4b3..a419ec1 100644 --- a/asibfm700/asibfm700_mount.cpp +++ b/asibfm700/asibfm700_mount.cpp @@ -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 diff --git a/mcc/mcc_defaults.h b/mcc/mcc_defaults.h index bef2473..89c86e6 100644 --- a/mcc/mcc_defaults.h +++ b/mcc/mcc_defaults.h @@ -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 std::chrono::sys_time
UTC() const @@ -228,7 +240,10 @@ public: return std::chrono::time_point_cast
(_UTC); } - std::chrono::system_clock::time_point UTC() const { return _UTC; } + std::chrono::system_clock::time_point UTC() const + { + return _UTC; + } template @@ -253,11 +268,20 @@ public: return r; } - std::string JEpoch(uint8_t prec = 0) const { return JEpoch(prec); } + std::string JEpoch(uint8_t prec = 0) const + { + return JEpoch(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 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: , speedX, speedY, pcmX, pcmY, refCorr, + // output format: , speedX, speedY, pcmX, pcmY, refCorr (in arcsecs), 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); diff --git a/mcc/mcc_generic_mount.h b/mcc/mcc_generic_mount.h index b5fbd52..a9cc172 100644 --- a/mcc/mcc_generic_mount.h +++ b/mcc/mcc_generic_mount.h @@ -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