From b12c0ec52166afa92d3924e67e07ddb371c8d8ee Mon Sep 17 00:00:00 2001 From: "Timur A. Fatkhullin" Date: Tue, 16 Dec 2025 17:53:50 +0300 Subject: [PATCH] ... --- mcc/mcc_generics.h | 42 ++++++++++++++++++++++++++++++--------- mcc/mcc_moving_controls.h | 12 ++++++++--- 2 files changed, 42 insertions(+), 12 deletions(-) diff --git a/mcc/mcc_generics.h b/mcc/mcc_generics.h index cfe9caa..898219b 100644 --- a/mcc/mcc_generics.h +++ b/mcc/mcc_generics.h @@ -759,6 +759,24 @@ template concept mcc_telemetry_c = std::derived_from>; +// template +// concept mcc_retval_c = requires(T t) { +// // +// [](std::expected) {}(t); +// }; + +template +concept mcc_telemetry_controls_c = requires(T t) { + requires mcc_telemetry_data_c; + + { t.telemetryData(std::declval()) } -> mcc_error_c; + // { t.telemetryData() } -> mcc_retval_c; + + { + t.setPointingTarget(std::declval().entered_target)>()) + } -> mcc_error_c; +}; + /* PROHIBITED ZONE CLASS CONCEPT */ @@ -975,6 +993,21 @@ concept mcc_tracking_model_c = requires(T t) { // }; + +// a concept of a class of mount moving control methods +template +concept mcc_moving_controls_c = requires(T t) { + typename T::moving_params_t; + + { t.slewToTarget(std::declval()) } -> mcc_error_c; + { t.trackTarget() } -> mcc_error_c; + + { t.setMovingParams(std::declval()) } -> mcc_error_c; + { t.getMovingParams() } -> std::same_as; + + { t.stopMount() } -> mcc_error_c; +}; + /* GENERIC MOUNT CLASS CONCEPT */ @@ -995,23 +1028,14 @@ concept mcc_all_controls_c = mcc_position_controls_c && mcc_telemetry_c && // 3) slewing and tracking, stop and init mount methods template concept mcc_generic_mount_c = mcc_telemetry_c && mcc_pzone_container_c && requires(T t, const T t_const) { - // requires mcc_error_c; - // slew mount to target (it is assumed that the target coordinates are determined in the telemetry data) { t.slewToTarget(std::declval()) }; - // { t.slewToTarget() } -> std::same_as; // track target, i.e., the mount moves with celestial speed { t.trackTarget() }; - // { t.trackTarget() } -> std::same_as; - - - // { t.startGuidingTarget() } -> std::same_as; - // { t.stopGuidingTarget() } -> std::same_as; // stop any movement { t.stopMount() }; - // { t.stopMount() } -> std::same_as; // init mount { t.initMount() }; diff --git a/mcc/mcc_moving_controls.h b/mcc/mcc_moving_controls.h index 95b6d06..0566f8e 100644 --- a/mcc/mcc_moving_controls.h +++ b/mcc/mcc_moving_controls.h @@ -142,6 +142,10 @@ class MccSimpleMovingControls return false; } + if (_st.str().empty()) { // nothing to save + return true; + } + fst.open(_filename); if (!fst.is_open()) { @@ -164,6 +168,8 @@ class MccSimpleMovingControls public: typedef std::error_code error_t; + typedef MccSimpleMovingModelParams moving_params_t; + enum Mode { MOVING_MODE_SLEW, MOVING_MODE_TRACK, MOVING_MODE_ERROR }; // typedef std::CallbackFuncTion mode_switch_callback_t; @@ -769,7 +775,7 @@ public: return *_lastError; } - error_t setMovingParams(MccSimpleMovingModelParams params) + error_t setMovingParams(moving_params_t params) { std::lock_guard lock{*_currentParamsMutex}; @@ -778,7 +784,7 @@ public: return MccSimpleMovingControlsErrorCode::ERROR_OK; } - MccSimpleMovingModelParams getMovingParams() const + moving_params_t getMovingParams() const { std::lock_guard lock{*_currentParamsMutex}; @@ -798,7 +804,7 @@ protected: std::unique_ptr _stopMoving; std::unique_ptr _currentParamsMutex; - MccSimpleMovingModelParams _currentParams{}; + moving_params_t _currentParams{}; std::unique_ptr> _lastError;