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