rewrite to use of the new implementation of mount config

(asibfm700_config.h: Asibfm700MountConfiguration class)
This commit is contained in:
2026-06-02 12:07:23 +03:00
parent a984f77351
commit 64db29704d
5 changed files with 78 additions and 27 deletions

View File

@@ -11,7 +11,7 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# pass to mcc-library
option(USE_BSPLINE_PCM "Use of FITPACK bivariate splines for PCM" ON)
find_package(cxxopts REQUIRED)
# find_package(cxxopts REQUIRED)
#set(EXAMPLES OFF CACHE BOOL "" FORCE)
# set(CMAKE_BUILD_TYPE "Release")
@@ -82,14 +82,23 @@ set(CMAKE_BUILD_TYPE "Debug")
include(FetchContent)
FetchContent_Declare(
cxxopts
GIT_REPOSITORY https://github.com/jarro2783/cxxopts.git
GIT_SHALLOW 1
GIT_PROGRESS 1
CMAKE_ARGS
-DCXXOPTS_USE_UNICODE=0
)
FetchContent_MakeAvailable(cxxopts)
set(EXAMPLES OFF CACHE BOOL "" FORCE)
FetchContent_Declare(
servo_lib
GIT_REPOSITORY https://timur@git.sao.ru/timur/LibSidServo.git
GIT_SHALLOW 1
GIT_PROGRESS 1
SOURCE_DIR
${CMAKE_BINARY_DIR}/LibSidServo
SOURCE_DIR ${CMAKE_BINARY_DIR}/LibSidServo
)
FetchContent_MakeAvailable(servo_lib)
@@ -101,8 +110,7 @@ FetchContent_Declare(
# GIT_REPOSITORY ssh://git@95.140.147.151:/home/git/mcc.git
GIT_SHALLOW 1
GIT_PROGRESS 1
SOURCE_DIR
${CMAKE_BINARY_DIR}/mcc
SOURCE_DIR ${CMAKE_BINARY_DIR}/mcc
# OVERRIDE_FIND_PACKAGE
)
set(BUILD_TESTS OFF)

View File

@@ -293,6 +293,11 @@ static auto Asibfm700MountConfigurationDefaults = std::make_tuple(
);
static_assert(std::is_copy_assignable_v<mcc::impl::MccAxisLimitSwitchPZ<mcc::impl::MccCoordKind::COORDS_KIND_HA_OBS>>);
static_assert(std::is_copy_assignable_v<mcc::impl::MccAltLimitPZ<mcc::impl::MccAltLimitKind::MIN_ALT_LIMIT>>);
// static_assert(std::is_copy_assignable_v<decltype(Asibfm700MountConfigurationDefaults)>);
class Asibfm700MountConfiguration : public mcc::impl::MccKeyValueHolder<decltype(Asibfm700MountConfigurationDefaults)>
{
using base_t = mcc::impl::MccKeyValueHolder<decltype(Asibfm700MountConfigurationDefaults)>;
@@ -321,6 +326,12 @@ public:
~Asibfm700MountConfiguration() = default;
Asibfm700MountConfiguration(const Asibfm700MountConfiguration&) = default;
Asibfm700MountConfiguration(Asibfm700MountConfiguration&&) = default;
Asibfm700MountConfiguration& operator=(const Asibfm700MountConfiguration&) = default;
Asibfm700MountConfiguration& operator=(Asibfm700MountConfiguration&&) = default;
std::error_code load(const std::filesystem::path& path)
{
std::string buffer;

View File

@@ -10,7 +10,8 @@ namespace asibfm700
/* CONSTRUCTOR AND DESTRUCTOR */
Asibfm700Mount::Asibfm700Mount(Asibfm700MountConfig const& config, std::shared_ptr<spdlog::logger> logger)
// Asibfm700Mount::Asibfm700Mount(Asibfm700MountConfig const& config, std::shared_ptr<spdlog::logger> logger)
Asibfm700Mount::Asibfm700Mount(Asibfm700MountConfiguration const& config, std::shared_ptr<spdlog::logger> logger)
: _servolController(config.servoControllerConfig()),
_pcm(config.pcmData()),
gm_class_t(std::make_tuple(&_servolController, &_pcm),
@@ -106,17 +107,36 @@ Asibfm700Mount::error_t Asibfm700Mount::initMount()
clearPZones();
logInfo("Add prohibited zones ...");
// logInfo(" Add MccAltLimitPZ zone: min alt = {}, lat = {} (pzone type: '{}')",
// _mountConfig.pzMinAltitude().degrees(), _mountConfig.siteLatitude().degrees(),
// "Minimal altitude prohibited zone");
// addPZone(mcc::impl::MccAltLimitPZ<mcc::impl::MccAltLimitKind::MIN_ALT_LIMIT>{_mountConfig.pzMinAltitude(),
// _mountConfig.siteLatitude()});
// logInfo(" Add MccAxisLimitSwitchPZ zone: min value = {}, max value = {} (pzone type: '{}')",
// _mountConfig.pzLimitSwitchHAMin().degrees(), _mountConfig.pzLimitSwitchHAMax().degrees(),
// "HA-axis limit switch");
// size_t pz_num = addPZone(mcc::impl::MccAxisLimitSwitchPZ<mcc::impl::MccCoordKind::COORDS_KIND_HA_OBS>{
// _mountConfig.pzLimitSwitchHAMin(), _mountConfig.pzLimitSwitchHAMax(), &_pcm});
size_t pz_num = addPZone(_mountConfig.minAltPZone());
logInfo(" Add MccAltLimitPZ zone: min alt = {}, lat = {} (pzone type: '{}')",
_mountConfig.pzMinAltitude().degrees(), _mountConfig.siteLatitude().degrees(),
_mountConfig.minAltPZone().altLimit().degrees(), _mountConfig.minAltPZone().latitude().sexagesimal(),
"Minimal altitude prohibited zone");
addPZone(mcc::impl::MccAltLimitPZ<mcc::impl::MccAltLimitKind::MIN_ALT_LIMIT>{_mountConfig.pzMinAltitude(),
_mountConfig.siteLatitude()});
auto haPZone = _mountConfig.axisLimitSwitchHA();
haPZone.setPCM(&_pcm);
logInfo(" Add MccAxisLimitSwitchPZ zone: min value = {}, max value = {} (pzone type: '{}')",
_mountConfig.pzLimitSwitchHAMin().degrees(), _mountConfig.pzLimitSwitchHAMax().degrees(),
"HA-axis limit switch");
size_t pz_num = addPZone(mcc::impl::MccAxisLimitSwitchPZ<mcc::impl::MccCoordKind::COORDS_KIND_HA_OBS>{
_mountConfig.pzLimitSwitchHAMin(), _mountConfig.pzLimitSwitchHAMax(), &_pcm});
haPZone.maxLimit().degrees(), haPZone.maxLimit().degrees(), "HA-axis limit switch");
pz_num = addPZone(std::move(haPZone));
auto decPZone = _mountConfig.axisLimitSwitchDEC();
decPZone.setPCM(&_pcm);
logInfo(" Add MccAxisLimitSwitchPZ zone: min value = {}, max value = {} (pzone type: '{}')",
decPZone.maxLimit().degrees(), decPZone.maxLimit().degrees(), "DEC-axis limit switch");
pz_num = addPZone(std::move(decPZone));
logInfo("{} prohibited zones were added successfully", pz_num);
@@ -149,12 +169,12 @@ Asibfm700Mount::error_t Asibfm700Mount::initMount()
logInfo(" PIDRefreshDt: {}", to_msecs(hw_cfg.devConfig.PIDRefreshDt));
logInfo(" PIDCycleDt: {}", to_msecs(hw_cfg.devConfig.PIDCycleDt));
logInfo(" XPIDC: [P: {}, I: {}, D: {}]", hw_cfg.devConfig.XPIDC.P, hw_cfg.devConfig.XPIDC.I,
hw_cfg.devConfig.XPIDC.D);
// logInfo(" XPIDC: [P: {}, I: {}, D: {}]", hw_cfg.devConfig.XPIDC.P, hw_cfg.devConfig.XPIDC.I,
// hw_cfg.devConfig.XPIDC.D);
logInfo(" XPIDV: [P: {}, I: {}, D: {}]", hw_cfg.devConfig.XPIDV.P, hw_cfg.devConfig.XPIDV.I,
hw_cfg.devConfig.XPIDV.D);
logInfo(" YPIDC: [P: {}, I: {}, D: {}]", hw_cfg.devConfig.YPIDC.P, hw_cfg.devConfig.YPIDC.I,
hw_cfg.devConfig.YPIDC.D);
// logInfo(" YPIDC: [P: {}, I: {}, D: {}]", hw_cfg.devConfig.YPIDC.P, hw_cfg.devConfig.YPIDC.I,
// hw_cfg.devConfig.YPIDC.D);
logInfo(" YPIDV: [P: {}, I: {}, D: {}]", hw_cfg.devConfig.YPIDV.P, hw_cfg.devConfig.YPIDV.I,
hw_cfg.devConfig.YPIDV.D);
logInfo(" XEncZero: {}", hw_cfg.devConfig.XEncZero);
@@ -359,7 +379,8 @@ Asibfm700Mount::error_t Asibfm700Mount::initMount()
}
Asibfm700Mount::error_t Asibfm700Mount::updateMountConfig(const Asibfm700MountConfig& cfg)
// Asibfm700Mount::error_t Asibfm700Mount::updateMountConfig(const Asibfm700MountConfig& cfg)
Asibfm700Mount::error_t Asibfm700Mount::updateMountConfig(const Asibfm700MountConfiguration& cfg)
{
std::lock_guard lock{*_mountConfigMutex};
@@ -375,7 +396,8 @@ Asibfm700Mount::error_t Asibfm700Mount::updateMountConfig(const Asibfm700MountCo
Asibfm700Mount::error_t Asibfm700Mount::updateMountConfig(const std::string& cfg_filename)
{
Asibfm700MountConfig new_config;
// Asibfm700MountConfig new_config;
Asibfm700MountConfiguration new_config;
auto err =
new_config.load(cfg_filename.empty() ? _mountConfig.configFilename() : std::filesystem::path{cfg_filename});
if (err) {

View File

@@ -8,7 +8,8 @@
#include <mcc/mcc_telemetry.h>
#include "asibfm700_common.h"
#include "asibfm700_configfile.h"
// #include "asibfm700_configfile.h"
#include "asibfm700_config.h"
namespace asibfm700
{
@@ -50,7 +51,8 @@ public:
// using Asibfm700PZoneContainer::addPZone;
Asibfm700Mount(Asibfm700MountConfig const& config, std::shared_ptr<spdlog::logger> logger);
// Asibfm700Mount(Asibfm700MountConfig const& config, std::shared_ptr<spdlog::logger> logger);
Asibfm700Mount(Asibfm700MountConfiguration const& config, std::shared_ptr<spdlog::logger> logger);
~Asibfm700Mount();
@@ -62,9 +64,11 @@ public:
error_t initMount();
error_t updateMountConfig(Asibfm700MountConfig const&);
// error_t updateMountConfig(Asibfm700MountConfig const&);
error_t updateMountConfig(Asibfm700MountConfiguration const&);
error_t updateMountConfig(std::string const& = std::string{}); // new filename
Asibfm700MountConfig currentMountConfig();
// Asibfm700MountConfig currentMountConfig();
Asibfm700MountConfiguration currentMountConfig();
// redefined method
auto getPointingTarget() const
@@ -73,7 +77,8 @@ public:
}
protected:
Asibfm700MountConfig _mountConfig;
// Asibfm700MountConfig _mountConfig;
Asibfm700MountConfiguration _mountConfig;
std::unique_ptr<std::mutex> _mountConfigMutex;
AsibFM700ServoController _servolController;

View File

@@ -64,12 +64,17 @@ int main(int argc, char* argv[])
return 0;
}
asibfm700::Asibfm700MountConfig mount_cfg;
// asibfm700::Asibfm700MountConfig mount_cfg;
asibfm700::Asibfm700MountConfiguration mount_cfg;
std::string fname = opt_result["dump"].as<std::string>();
if (fname.size()) {
bool ok = mount_cfg.dumpDefaultsToFile(fname);
if (!ok) {
// bool ok = mount_cfg.dumpDefaultsToFile(fname);
// if (!ok) {
// return 255;
// }
auto err = mount_cfg.dumpDefaultsToFile(fname);
if (!err) {
return 255;
}