diff --git a/include/mcc/mcc_generic_movecontrols.h b/include/mcc/mcc_generic_movecontrols.h index b7b6924..4f9119c 100644 --- a/include/mcc/mcc_generic_movecontrols.h +++ b/include/mcc/mcc_generic_movecontrols.h @@ -255,6 +255,7 @@ public: _stopFunc(std::forward(stop_func)) { if constexpr (executePolicy == MccGenericMovementControlsPolicy::POLICY_ASYNC) { + *_doStop = false; *_doSlew = false; *_doTrack = false; *_stopMovementRequest = false; @@ -263,21 +264,27 @@ public: _fstFuture = std::async( [&, this](std::stop_token stoken) { while (!stoken.stop_requested()) { - if (_stopMovementRequest->load()) { + if (_doStop->load()) { + *_stopMovementRequest = true; _currentState = STATE_IDLE; _stopFunc(); + *_doStop = false; } if (_doSlew->load()) { + *_stopMovementRequest = false; _currentState = STATE_SLEW; _slewFunc(_slewAndStop->load()); _currentState = STATE_IDLE; + *_doSlew = false; } if (_doTrack->load()) { + *_stopMovementRequest = false; _currentState = STATE_TRACK; _trackFunc(); _currentState = STATE_IDLE; + *_doTrack = false; } // wait here ... @@ -353,7 +360,7 @@ public: if (_currentState == STATE_SLEW || _currentState == STATE_TRACK) { // first, stop mount - *_stopMovementRequest = true; + *_doStop = true; } *_doTrack = false; *_doSlew = true; @@ -380,7 +387,7 @@ public: if (_currentState != STATE_TRACK) { if (_currentState == STATE_SLEW) { // first, stop mount - *_stopMovementRequest = true; + *_doStop = true; } *_doSlew = false; *_doTrack = true; @@ -406,6 +413,7 @@ public: // _stopFuncFuture = std::async(std::launch::async, _stopFunc); // } + *_doStop = true; *_doSlew = false; *_doTrack = false; _wakeupRequest->test_and_set(); @@ -474,6 +482,7 @@ protected: std::stop_source _fstStopSource{}; std::unique_ptr _wakeupRequest{new std::atomic_flag}; + std::unique_ptr _doStop{new std::atomic_bool{false}}; std::unique_ptr _doSlew{new std::atomic_bool{false}}; std::unique_ptr _doTrack{new std::atomic_bool{false}}; std::unique_ptr _slewAndStop{new std::atomic_bool{false}};