This commit is contained in:
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() };