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))
{
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<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> _doTrack{new std::atomic_bool{false}};
std::unique_ptr<std::atomic_bool> _slewAndStop{new std::atomic_bool{false}};