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