From 18e6a99267fdec4a54fc80173ac3fae07ff8e861 Mon Sep 17 00:00:00 2001 From: "Timur A. Fatkhullin" Date: Wed, 18 Feb 2026 18:50:55 +0300 Subject: [PATCH] ... --- include/mcc/mcc_angle.h | 2 +- include/mcc/mcc_movement_controls.h | 39 +++++++++++++++++++---------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/include/mcc/mcc_angle.h b/include/mcc/mcc_angle.h index 3413190..f86a4b9 100644 --- a/include/mcc/mcc_angle.h +++ b/include/mcc/mcc_angle.h @@ -433,7 +433,7 @@ static T1 operator/(const T1& v1, const T2& v2) std::string MccAngleFancyString(std::convertible_to auto const& ang, - std::format_string val_fmt = "{}") + std::format_string val_fmt = "{:.2f}") { std::string s; diff --git a/include/mcc/mcc_movement_controls.h b/include/mcc/mcc_movement_controls.h index 044e3f5..635c8f1 100644 --- a/include/mcc/mcc_movement_controls.h +++ b/include/mcc/mcc_movement_controls.h @@ -464,16 +464,18 @@ public: x_tag = coord_pair.x(); y_tag = coord_pair.y(); - logger->logTrace(std::format(" current target: {} = {}, {} = {}", x_str, - coord_pair.x().sexagesimal(true), y_str, coord_pair.y().sexagesimal())); + logger->logTrace(std::format(" current target: {} = {}, {} = {} (encoders: {} {})", x_str, + coord_pair.x().sexagesimal(true), y_str, coord_pair.y().sexagesimal(), + tdata.targetXY.x().sexagesimal(), tdata.targetXY.y().sexagesimal())); ccte_err = tdata.mountPos.toAtSameEpoch(coord_pair); if (ccte_err) { return mcc_deduced_err(ccte_err, MccSimpleMovementControlsErrorCode::ERROR_CCTE_COMP); } - logger->logTrace(std::format(" current mount: {} = {}, {} = {}", x_str, coord_pair.x().sexagesimal(true), - y_str, coord_pair.y().sexagesimal())); + logger->logTrace(std::format(" current mount: {} = {}, {} = {} (encoders: {} {})", x_str, + coord_pair.x().sexagesimal(true), y_str, coord_pair.y().sexagesimal(), + tdata.hwState.XY.x().sexagesimal(), tdata.hwState.XY.y().sexagesimal())); _pathFile << tdata.mountPos.epoch().UTC().time_since_epoch().count() << " " << x_tag << " " << y_tag << " " << x_mnt << " " << y_mnt << " " << (x_tag - x_mnt) << " " << (y_tag - y_mnt) << " " @@ -605,6 +607,8 @@ public: mcc_deduced_coord_pair_t tag_cp, mnt_cp; + *_stopMoving = false; + while (!*_stopMoving) { t_err = telemetry->telemetryData(&tdata); if (t_err) { @@ -661,9 +665,9 @@ public: auto dist = utils::distanceOnSphere(tag_cp.x(), tag_cp.y(), mnt_cp.x(), mnt_cp.y()); - logger->logTrace(std::format(" target-to-mount distance: {} (dx = {}, dy = {})", - MccAngleFancyString(std::get<2>(dist)), std::get<0>(dist), - std::get<1>(dist))); + logger->logTrace(std::format( + " target-to-mount distance: {} (dx = {}, dy = {})", MccAngleFancyString(std::get<2>(dist)), + MccAngleFancyString(std::get<0>(dist)), MccAngleFancyString(std::get<1>(dist)))); // stop slewing and exit from the cycle? @@ -682,7 +686,6 @@ public: if (*_stopMoving) { - *_lastError = MccSimpleMovementControlsErrorCode::ERROR_STOPPED; break; } @@ -702,6 +705,11 @@ public: } } + if (_stopMoving->load()) { // external stop + logger->logWarn("Slewing was stopped!"); + *_lastError = MccSimpleMovementControlsErrorCode::ERROR_OK; + } + *_stopMoving = true; logger->logInfo("Slewing finished"); @@ -752,7 +760,7 @@ public: }; - _trackingFunc = [telemetry, cb_sptr, logger, this]() { + _trackingFunc = [log_pos, check_pzones, send_to_hardware, telemetry, cb_sptr, logger, this]() { double braking_accelX, braking_accelY; double min_time_to_pzone_in_secs; @@ -824,6 +832,7 @@ public: mcc_deduced_coord_pair_t tag_cp, mnt_cp; + *_stopMoving = false; while (!_stopMoving->load()) { t_err = telemetry->telemetryData(&tdata); @@ -865,9 +874,9 @@ public: auto dist = utils::distanceOnSphere(tag_cp.x(), tag_cp.y(), mnt_cp.x(), mnt_cp.y()); - logger->logTrace(std::format(" target-to-mount distance: {} (dx = {}, dy = {})", - MccAngleFancyString(std::get<2>(dist)), std::get<0>(dist), - std::get<1>(dist))); + logger->logTrace(std::format( + " target-to-mount distance: {} (dx = {}, dy = {})", MccAngleFancyString(std::get<2>(dist)), + MccAngleFancyString(std::get<0>(dist)), MccAngleFancyString(std::get<1>(dist)))); // resend new position since target coordinates are changed in time hw_state.movementState = HARDWARE_T::hardware_movement_state_t::HW_MOVE_TRACKING; @@ -880,7 +889,6 @@ public: } if (*_stopMoving) { - *_lastError = MccSimpleMovementControlsErrorCode::ERROR_STOPPED; break; } @@ -888,6 +896,11 @@ public: std::this_thread::sleep_for(_currentParams.trackingTelemetryInterval); } + if (_stopMoving->load()) { // external stop + logger->logWarn("Tracking was stopped!"); + *_lastError = MccSimpleMovementControlsErrorCode::ERROR_OK; + } + *_stopMoving = true; logger->logInfo("Tracking finished");