This commit is contained in:
Timur A. Fatkhullin 2025-12-16 17:53:50 +03:00
parent d417c03f59
commit b12c0ec521
2 changed files with 42 additions and 12 deletions

View File

@ -759,6 +759,24 @@ template <typename T>
concept mcc_telemetry_c = std::derived_from<T, mcc_telemetry_interface_t<typename T::error_t>>;
// template <typename T, typename VT>
// concept mcc_retval_c = requires(T t) {
// //
// []<mcc_error_c ErrT>(std::expected<VT, ErrT>) {}(t);
// };
template <typename T>
concept mcc_telemetry_controls_c = requires(T t) {
requires mcc_telemetry_data_c<typename T::telemetry_data_t>;
{ t.telemetryData(std::declval<typename T::telemetry_data_t*>()) } -> mcc_error_c;
// { t.telemetryData() } -> mcc_retval_c<typename T::telemetry_data_t>;
{
t.setPointingTarget(std::declval<decltype(std::declval<typename T::telemetry_data_t>().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 <typename T>
concept mcc_moving_controls_c = requires(T t) {
typename T::moving_params_t;
{ t.slewToTarget(std::declval<bool>()) } -> mcc_error_c;
{ t.trackTarget() } -> mcc_error_c;
{ t.setMovingParams(std::declval<typename T::moving_params_t>()) } -> mcc_error_c;
{ t.getMovingParams() } -> std::same_as<typename T::moving_params_t>;
{ t.stopMount() } -> mcc_error_c;
};
/* GENERIC MOUNT CLASS CONCEPT */
@ -995,23 +1028,14 @@ concept mcc_all_controls_c = mcc_position_controls_c<T> && mcc_telemetry_c<T> &&
// 3) slewing and tracking, stop and init mount methods
template <typename T>
concept mcc_generic_mount_c = mcc_telemetry_c<T> && mcc_pzone_container_c<T> && requires(T t, const T t_const) {
// requires mcc_error_c<typename T::error_t>;
// slew mount to target (it is assumed that the target coordinates are determined in the telemetry data)
{ t.slewToTarget(std::declval<bool>()) };
// { t.slewToTarget() } -> std::same_as<typename T::error_t>;
// track target, i.e., the mount moves with celestial speed
{ t.trackTarget() };
// { t.trackTarget() } -> std::same_as<typename T::error_t>;
// { t.startGuidingTarget() } -> std::same_as<typename T::error_t>;
// { t.stopGuidingTarget() } -> std::same_as<typename T::error_t>;
// stop any movement
{ t.stopMount() };
// { t.stopMount() } -> std::same_as<typename T::error_t>;
// init mount
{ t.initMount() };

View File

@ -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<void(Mode mode)> 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<std::atomic_bool> _stopMoving;
std::unique_ptr<std::mutex> _currentParamsMutex;
MccSimpleMovingModelParams _currentParams{};
moving_params_t _currentParams{};
std::unique_ptr<std::atomic<error_t>> _lastError;