...
This commit is contained in:
@@ -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}};
|
||||
|
||||
Reference in New Issue
Block a user