This commit is contained in:
Timur A. Fatkhullin
2026-03-01 23:42:34 +03:00
parent f72d0bc3f0
commit 5e9e8897f0

View File

@@ -17,6 +17,9 @@
#include <thread>
#include <type_traits>
#include <print>
#include "mcc_coordinate.h"
#include "mcc_error.h"
@@ -265,28 +268,37 @@ public:
[&, this](std::stop_token stoken) {
while (!stoken.stop_requested()) {
if (_doStop->load()) {
std::println("******* DO-STOP ({} {} {}) *******", _doStop->load(), _doSlew->load(),
_doTrack->load());
*_stopMovementRequest = true;
_currentState = STATE_IDLE;
// _currentState = STATE_IDLE;
_stopFunc();
*_doStop = false;
// *_doStop = false;
}
if (_doSlew->load()) {
std::println("******* DO-SLEW ({} {} {}) *******", _doStop->load(), _doSlew->load(),
_doTrack->load());
*_stopMovementRequest = false;
_currentState = STATE_SLEW;
_slewFunc(_slewAndStop->load());
_currentState = STATE_IDLE;
*_doSlew = false;
// _currentState = STATE_IDLE;
// *_doSlew = false;
continue; // to guarantee execute doStop if tracking is requested!!!
}
if (_doTrack->load()) {
std::println("******* DO-TRACK ({} {} {}) *******", _doStop->load(), _doSlew->load(),
_doTrack->load());
*_stopMovementRequest = false;
_currentState = STATE_TRACK;
_trackFunc();
_currentState = STATE_IDLE;
*_doTrack = false;
// _currentState = STATE_IDLE;
// *_doTrack = false;
}
_currentState = STATE_IDLE;
// wait here ...
_wakeupRequest->wait(false, std::memory_order_relaxed);
@@ -337,7 +349,7 @@ public:
error_t slewToTarget(bool slew_and_stop)
{
*_stopMovementRequest = false;
// *_stopMovementRequest = false;
if constexpr (executePolicy == MccGenericMovementControlsPolicy::POLICY_ASYNC) {
// if (_slewFuncFuture.valid()) { // already slewing
@@ -361,6 +373,9 @@ public:
if (_currentState == STATE_SLEW || _currentState == STATE_TRACK) { // first, stop mount
*_doStop = true;
*_stopMovementRequest = true; // to exit from slewing or tracking
} else {
*_doStop = false;
}
*_doTrack = false;
*_doSlew = true;
@@ -378,7 +393,7 @@ public:
error_t trackTarget()
{
*_stopMovementRequest = false;
// *_stopMovementRequest = false;
if constexpr (executePolicy == MccGenericMovementControlsPolicy::POLICY_ASYNC) {
// if (!_trackFuncFuture.valid()) {
@@ -388,9 +403,13 @@ public:
if (_currentState != STATE_TRACK) {
if (_currentState == STATE_SLEW) { // first, stop mount
*_doStop = true;
*_stopMovementRequest = true; // to exit from slewing
} else {
*_doStop = false;
}
*_doSlew = false;
*_doTrack = true;
_wakeupRequest->test_and_set();
_wakeupRequest->notify_one();
} // already tracking, just ignore
@@ -405,7 +424,7 @@ public:
error_t stopMount()
{
*_stopMovementRequest = true;
// *_stopMovementRequest = true;
if constexpr (executePolicy == MccGenericMovementControlsPolicy::POLICY_ASYNC) {
// if future is valid then stop is already called
@@ -416,6 +435,9 @@ public:
*_doStop = true;
*_doSlew = false;
*_doTrack = false;
*_stopMovementRequest = true; // to exit from slewing or tracking
_wakeupRequest->test_and_set();
_wakeupRequest->notify_one();