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