From 5e9e8897f012146e068b0aa066009ccff78887db Mon Sep 17 00:00:00 2001 From: "Timur A. Fatkhullin" Date: Sun, 1 Mar 2026 23:42:34 +0300 Subject: [PATCH] ... --- include/mcc/mcc_generic_movecontrols.h | 40 ++++++++++++++++++++------ 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/include/mcc/mcc_generic_movecontrols.h b/include/mcc/mcc_generic_movecontrols.h index 4f9119c..b784fa9 100644 --- a/include/mcc/mcc_generic_movecontrols.h +++ b/include/mcc/mcc_generic_movecontrols.h @@ -17,6 +17,9 @@ #include #include + +#include + #include "mcc_coordinate.h" #include "mcc_error.h" @@ -265,28 +268,37 @@ public: [&, this](std::stop_token stoken) { while (!stoken.stop_requested()) { if (_doStop->load()) { + std::println("******* DO-STOP ({} {} {}) *******", _doStop->load(), _doSlew->load(), + _doTrack->load()); *_stopMovementRequest = true; - _currentState = STATE_IDLE; + // _currentState = STATE_IDLE; _stopFunc(); - *_doStop = false; + // *_doStop = false; } if (_doSlew->load()) { + std::println("******* DO-SLEW ({} {} {}) *******", _doStop->load(), _doSlew->load(), + _doTrack->load()); *_stopMovementRequest = false; _currentState = STATE_SLEW; _slewFunc(_slewAndStop->load()); - _currentState = STATE_IDLE; - *_doSlew = false; + // _currentState = STATE_IDLE; + // *_doSlew = false; + continue; // to guarantee execute doStop if tracking is requested!!! } if (_doTrack->load()) { + std::println("******* DO-TRACK ({} {} {}) *******", _doStop->load(), _doSlew->load(), + _doTrack->load()); *_stopMovementRequest = false; _currentState = STATE_TRACK; _trackFunc(); - _currentState = STATE_IDLE; - *_doTrack = false; + // _currentState = STATE_IDLE; + // *_doTrack = false; } + _currentState = STATE_IDLE; + // wait here ... _wakeupRequest->wait(false, std::memory_order_relaxed); @@ -337,7 +349,7 @@ public: error_t slewToTarget(bool slew_and_stop) { - *_stopMovementRequest = false; + // *_stopMovementRequest = false; if constexpr (executePolicy == MccGenericMovementControlsPolicy::POLICY_ASYNC) { // if (_slewFuncFuture.valid()) { // already slewing @@ -361,6 +373,9 @@ public: if (_currentState == STATE_SLEW || _currentState == STATE_TRACK) { // first, stop mount *_doStop = true; + *_stopMovementRequest = true; // to exit from slewing or tracking + } else { + *_doStop = false; } *_doTrack = false; *_doSlew = true; @@ -378,7 +393,7 @@ public: error_t trackTarget() { - *_stopMovementRequest = false; + // *_stopMovementRequest = false; if constexpr (executePolicy == MccGenericMovementControlsPolicy::POLICY_ASYNC) { // if (!_trackFuncFuture.valid()) { @@ -388,9 +403,13 @@ public: if (_currentState != STATE_TRACK) { if (_currentState == STATE_SLEW) { // first, stop mount *_doStop = true; + *_stopMovementRequest = true; // to exit from slewing + } else { + *_doStop = false; } *_doSlew = false; *_doTrack = true; + _wakeupRequest->test_and_set(); _wakeupRequest->notify_one(); } // already tracking, just ignore @@ -405,7 +424,7 @@ public: error_t stopMount() { - *_stopMovementRequest = true; + // *_stopMovementRequest = true; if constexpr (executePolicy == MccGenericMovementControlsPolicy::POLICY_ASYNC) { // if future is valid then stop is already called @@ -416,6 +435,9 @@ public: *_doStop = true; *_doSlew = false; *_doTrack = false; + + *_stopMovementRequest = true; // to exit from slewing or tracking + _wakeupRequest->test_and_set(); _wakeupRequest->notify_one();