add RELOADCFG network command

This commit is contained in:
2026-03-12 16:11:06 +03:00
parent 76c42c03f6
commit 70510def0f
4 changed files with 69 additions and 24 deletions

View File

@@ -386,7 +386,10 @@ public:
return static_cast<double>(getValue<mcc::impl::MccAngle>("siteLatitude").value_or(mcc::impl::MccAngle{}));
};
mcc::impl::MccAngle siteLatitude() const { return siteLatitude<mcc::impl::MccAngle>(); };
mcc::impl::MccAngle siteLatitude() const
{
return siteLatitude<mcc::impl::MccAngle>();
};
template <mcc::mcc_angle_c T>
T siteLongitude() const
@@ -394,7 +397,10 @@ public:
return static_cast<double>(getValue<mcc::impl::MccAngle>("siteLongitude").value_or(mcc::impl::MccAngle{}));
};
mcc::impl::MccAngle siteLongitude() const { return siteLongitude<mcc::impl::MccAngle>(); };
mcc::impl::MccAngle siteLongitude() const
{
return siteLongitude<mcc::impl::MccAngle>();
};
template <typename T>
T siteElevation() const
@@ -403,7 +409,10 @@ public:
return getValue<double>("siteElevation").value_or(0.0);
}
double siteElevation() const { return getValue<double>("siteElevation").value_or(0.0); };
double siteElevation() const
{
return getValue<double>("siteElevation").value_or(0.0);
};
template <typename T>
T refractWavelength() const
@@ -412,7 +421,10 @@ public:
return getValue<double>("refractWavelength").value_or(0.0);
}
double refractWavelength() const { return getValue<double>("refractWavelength").value_or(0.0); };
double refractWavelength() const
{
return getValue<double>("refractWavelength").value_or(0.0);
};
template <mcc::traits::mcc_output_char_range R>
R leapSecondFilename() const
@@ -425,7 +437,10 @@ public:
return r;
}
std::string leapSecondFilename() const { return leapSecondFilename<std::string>(); };
std::string leapSecondFilename() const
{
return leapSecondFilename<std::string>();
};
template <mcc::traits::mcc_output_char_range R>
R bulletinAFilename() const
@@ -437,7 +452,10 @@ public:
return r;
}
std::string bulletinAFilename() const { return bulletinAFilename<std::string>(); };
std::string bulletinAFilename() const
{
return bulletinAFilename<std::string>();
};
template <mcc::mcc_angle_c T>
@@ -446,7 +464,10 @@ public:
return static_cast<double>(getValue<mcc::impl::MccAngle>("pzMinAltitude").value_or(mcc::impl::MccAngle{}));
};
mcc::impl::MccAngle pzMinAltitude() const { return pzMinAltitude<mcc::impl::MccAngle>(); };
mcc::impl::MccAngle pzMinAltitude() const
{
return pzMinAltitude<mcc::impl::MccAngle>();
};
template <mcc::mcc_angle_c T>
T pzLimitSwitchHAMin() const
@@ -454,7 +475,10 @@ public:
return static_cast<double>(getValue<mcc::impl::MccAngle>("pzLimitSwitchHAMin").value_or(mcc::impl::MccAngle{}));
};
mcc::impl::MccAngle pzLimitSwitchHAMin() const { return pzLimitSwitchHAMin<mcc::impl::MccAngle>(); };
mcc::impl::MccAngle pzLimitSwitchHAMin() const
{
return pzLimitSwitchHAMin<mcc::impl::MccAngle>();
};
template <mcc::mcc_angle_c T>
T pzLimitSwitchHAMax() const
@@ -462,7 +486,10 @@ public:
return static_cast<double>(getValue<mcc::impl::MccAngle>("pzLimitSwitchHAMax").value_or(mcc::impl::MccAngle{}));
};
mcc::impl::MccAngle pzLimitSwitchHAMax() const { return pzLimitSwitchHAMax<mcc::impl::MccAngle>(); };
mcc::impl::MccAngle pzLimitSwitchHAMax() const
{
return pzLimitSwitchHAMax<mcc::impl::MccAngle>();
};
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{};
};

View File

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

View File

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

View File

@@ -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<std::string>(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<std::string>(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