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