This commit is contained in:
Timur A. Fatkhullin
2026-02-28 10:39:49 +03:00
parent d42fa37a04
commit f72d0bc3f0

View File

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