diff --git a/asibfm700_configfile.h b/asibfm700_configfile.h index 8dcb15b..695ed63 100644 --- a/asibfm700_configfile.h +++ b/asibfm700_configfile.h @@ -386,7 +386,10 @@ public: return static_cast(getValue("siteLatitude").value_or(mcc::impl::MccAngle{})); }; - mcc::impl::MccAngle siteLatitude() const { return siteLatitude(); }; + mcc::impl::MccAngle siteLatitude() const + { + return siteLatitude(); + }; template T siteLongitude() const @@ -394,7 +397,10 @@ public: return static_cast(getValue("siteLongitude").value_or(mcc::impl::MccAngle{})); }; - mcc::impl::MccAngle siteLongitude() const { return siteLongitude(); }; + mcc::impl::MccAngle siteLongitude() const + { + return siteLongitude(); + }; template T siteElevation() const @@ -403,7 +409,10 @@ public: return getValue("siteElevation").value_or(0.0); } - double siteElevation() const { return getValue("siteElevation").value_or(0.0); }; + double siteElevation() const + { + return getValue("siteElevation").value_or(0.0); + }; template T refractWavelength() const @@ -412,7 +421,10 @@ public: return getValue("refractWavelength").value_or(0.0); } - double refractWavelength() const { return getValue("refractWavelength").value_or(0.0); }; + double refractWavelength() const + { + return getValue("refractWavelength").value_or(0.0); + }; template R leapSecondFilename() const @@ -425,7 +437,10 @@ public: return r; } - std::string leapSecondFilename() const { return leapSecondFilename(); }; + std::string leapSecondFilename() const + { + return leapSecondFilename(); + }; template R bulletinAFilename() const @@ -437,7 +452,10 @@ public: return r; } - std::string bulletinAFilename() const { return bulletinAFilename(); }; + std::string bulletinAFilename() const + { + return bulletinAFilename(); + }; template @@ -446,7 +464,10 @@ public: return static_cast(getValue("pzMinAltitude").value_or(mcc::impl::MccAngle{})); }; - mcc::impl::MccAngle pzMinAltitude() const { return pzMinAltitude(); }; + mcc::impl::MccAngle pzMinAltitude() const + { + return pzMinAltitude(); + }; template T pzLimitSwitchHAMin() const @@ -454,7 +475,10 @@ public: return static_cast(getValue("pzLimitSwitchHAMin").value_or(mcc::impl::MccAngle{})); }; - mcc::impl::MccAngle pzLimitSwitchHAMin() const { return pzLimitSwitchHAMin(); }; + mcc::impl::MccAngle pzLimitSwitchHAMin() const + { + return pzLimitSwitchHAMin(); + }; template T pzLimitSwitchHAMax() const @@ -462,7 +486,10 @@ public: return static_cast(getValue("pzLimitSwitchHAMax").value_or(mcc::impl::MccAngle{})); }; - mcc::impl::MccAngle pzLimitSwitchHAMax() const { return pzLimitSwitchHAMax(); }; + mcc::impl::MccAngle pzLimitSwitchHAMax() const + { + return pzLimitSwitchHAMax(); + }; AsibFM700ServoController::hardware_config_t servoControllerConfig() const @@ -771,11 +798,23 @@ public: } catch (...) { ec = std::make_error_code(std::errc::operation_canceled); } + + _lastConfigPath = path; } return ec; } + std::error_code reloadCurrentConfig() + { + return load(_lastConfigPath); + } + + std::filesystem::path configFilename() const + { + return _lastConfigPath; + } + bool dumpDefaultsToFile(const std::filesystem::path& path) { std::ofstream fst(path); @@ -840,6 +879,9 @@ public: return true; }; + +protected: + std::filesystem::path _lastConfigPath{}; }; diff --git a/asibfm700_mount.cpp b/asibfm700_mount.cpp index 37c3650..8fbfec3 100644 --- a/asibfm700_mount.cpp +++ b/asibfm700_mount.cpp @@ -372,7 +372,8 @@ Asibfm700Mount::error_t Asibfm700Mount::updateMountConfig(const Asibfm700MountCo Asibfm700Mount::error_t Asibfm700Mount::updateMountConfig(const std::string& cfg_filename) { Asibfm700MountConfig new_config; - auto err = new_config.load(cfg_filename); + auto err = + new_config.load(cfg_filename.empty() ? _mountConfig.configFilename() : std::filesystem::path{cfg_filename}); if (err) { return mcc::mcc_deduced_err(err, std::make_error_code(std::errc::file_exists)); } @@ -775,7 +776,7 @@ Asibfm700Mount::error_t Asibfm700Mount::slewingImpl(bool slew_and_stop) if (!_lastMountError->load() && !_stopMovementRequest->load()) { // do not start tracking if an error occured if (!slew_and_stop) { // or stop requested -// return trackTarget(); + // return trackTarget(); return trackingImpl(); } } else { diff --git a/asibfm700_mount.h b/asibfm700_mount.h index 5fc0dde..f6d3858 100644 --- a/asibfm700_mount.h +++ b/asibfm700_mount.h @@ -63,7 +63,7 @@ public: error_t initMount(); error_t updateMountConfig(Asibfm700MountConfig const&); - error_t updateMountConfig(std::string const&); + error_t updateMountConfig(std::string const& = std::string{}); // new filename Asibfm700MountConfig currentMountConfig(); // redefined method diff --git a/asibfm700_netserver.cpp b/asibfm700_netserver.cpp index 61f588c..c0d3c36 100644 --- a/asibfm700_netserver.cpp +++ b/asibfm700_netserver.cpp @@ -57,18 +57,20 @@ Asibfm700MountNetServer::Asibfm700MountNetServer(asio::io_context& ctx, output_msg.construct(mcc::network::MCC_COMMPROTO_KEYWORD_SERVER_ACK_STR, ASIBFM700_COMMPROTO_KEYWORD_SITEGEO_STR, lon, lat); } else if (input_msg.withKey(ASIBFM700_COMMPROTO_KEYWORD_RELOADCFG_STR)) { - if (input_msg.paramSize()) { - auto vp = input_msg.paramValue(0); - auto err = mount_ptr->updateMountConfig(vp.value()); - if (err) { - output_msg.construct(mcc::network::MCC_COMMPROTO_KEYWORD_SERVER_ERROR_STR, err); - } else { - output_msg.construct(mcc::network::MCC_COMMPROTO_KEYWORD_SERVER_ACK_STR, - ASIBFM700_COMMPROTO_KEYWORD_RELOADCFG_STR); - } - } else { // a filename must be given - output_msg.construct(mcc::network::MCC_COMMPROTO_KEYWORD_SERVER_ERROR_STR, - std::make_error_code(std::errc::invalid_argument)); + Asibfm700Mount::error_t err; + + auto vp = input_msg.paramValue(0); + if (vp) { // filename is given + err = mount_ptr->updateMountConfig(vp.value()); + } else { // reload with previous filename + err = mount_ptr->updateMountConfig(); + } + + if (err) { + output_msg.construct(mcc::network::MCC_COMMPROTO_KEYWORD_SERVER_ERROR_STR, err); + } else { + output_msg.construct(mcc::network::MCC_COMMPROTO_KEYWORD_SERVER_ACK_STR, + ASIBFM700_COMMPROTO_KEYWORD_RELOADCFG_STR); } } else { // basic network message processing