This commit is contained in:
Timur A. Fatkhullin
2026-03-12 23:50:47 +03:00
parent 0ee87ccbf9
commit 28352f6c64

View File

@@ -339,7 +339,7 @@ public:
void stopAsyncMovementCycle(this SelfT&& self)
requires(EXEC_POLICY == MccGenericMovementControlsPolicy::POLICY_ASYNC)
{
self->_fsmState = STATE_IDLE;
*self._fsmState = STATE_IDLE;
self._fstStopSource.request_stop();
self._wakeupRequest->test_and_set();
@@ -353,7 +353,7 @@ public:
}
template <typename SelfT>
void startAsyncMovementCycle(this SelfT&& self)
void startAsyncMovementCycle(this SelfT& self)
requires(EXEC_POLICY == MccGenericMovementControlsPolicy::POLICY_ASYNC)
{
using self_t = std::decay_t<SelfT>;
@@ -362,15 +362,16 @@ public:
self.stopAsyncMovementCycle();
}
self->_stopMovementRequest = false;
*self._stopMovementRequest = false;
self._fstStopSource = std::stop_source{};
self->_fsmState = STATE_IDLE;
*self._fsmState = STATE_IDLE;
// start thread of movements
self._fstFuture = std::async(
[&self](std::stop_token stoken) {
std::launch::async,
[&self](std::stop_token stoken) mutable {
auto do_state = self._fsmState->load();
std::string log_str;
@@ -379,7 +380,7 @@ public:
if constexpr (mcc_generic_mount_c<self_t>) {
self.logTrace(log_str);
} else {
std::println(log_str);
std::println("{}", log_str);
}
// wait here ...
@@ -391,7 +392,7 @@ public:
if constexpr (mcc_generic_mount_c<self_t>) {
self.logTrace(log_str);
} else {
std::println(log_str);
std::println("{}", log_str);
}
// if (stoken.stop_requested()) {
@@ -402,17 +403,17 @@ public:
if (do_state & STATE_STOP) {
// if (_fsmState->load() & STATE_STOP) {
self->_stopMovementRequest = true;
*self._stopMovementRequest = true;
self._stopFunc();
}
if (do_state & STATE_SLEW) {
// if (_fsmState->load() & STATE_SLEW) {
self->_stopMovementRequest = false;
*self._stopMovementRequest = false;
self._slewFunc(self._slewAndStop->load());
} else if (do_state & STATE_TRACK) {
// } else if (_fsmState->load() & STATE_TRACK) {
self->_stopMovementRequest = false;
*self._stopMovementRequest = false;
self._trackFunc();
}
}
@@ -542,6 +543,59 @@ protected:
std::unique_ptr<std::atomic_int> _fsmState{new std::atomic_int};
// template <typename SelfT>
// void mainCycle(this SelfT&& self, std::stop_token stoken)
// {
// using self_t = std::decay_t<SelfT>;
// auto do_state = _fsmState->load();
// std::string log_str;
// while (!stoken.stop_requested()) {
// log_str = std::format("\n{:*^80}\n", " WAIT LOCK ");
// if constexpr (mcc_generic_mount_c<self_t>) {
// self.logTrace(log_str);
// } else {
// std::println(log_str);
// }
// // wait here ...
// _wakeupRequest->wait(false, std::memory_order_relaxed);
// _wakeupRequest->clear();
// log_str = std::format("\n{:*^80}\n", " UNLOCKED ");
// if constexpr (mcc_generic_mount_c<self_t>) {
// self.logTrace(log_str);
// } else {
// std::println(log_str);
// }
// // if (stoken.stop_requested()) {
// // break;
// // }
// do_state = _fsmState->load();
// if (do_state & STATE_STOP) {
// // if (_fsmState->load() & STATE_STOP) {
// *_stopMovementRequest = true;
// _stopFunc();
// }
// if (do_state & STATE_SLEW) {
// // if (_fsmState->load() & STATE_SLEW) {
// *_stopMovementRequest = false;
// _slewFunc(_slewAndStop->load());
// } else if (do_state & STATE_TRACK) {
// // } else if (_fsmState->load() & STATE_TRACK) {
// *_stopMovementRequest = false;
// _trackFunc();
// }
// }
// }
// utility methods
// the method calculates the change in coordinates of a point over a given time given the current speed and braking