23#include <boost/thread.hpp>
25#include <smacc2_msgs/msg/smacc_status.hpp>
60 template <
typename EventType>
63 boost::intrusive_ptr<EventType> weakPtrEvent = ev;
67 rclcpp::Node::SharedPtr
getNode();
95 rclcpp::Publisher<smacc2_msgs::msg::SmaccStatus>::SharedPtr
statusPub_;
123template <
typename StateMachineType>
141 SmaccFifoScheduler::processor_handle sm =
142 scheduler1.create_processor<StateMachineType>(&signalDetector);
147 scheduler1.initiate_processor(sm);
150 boost::thread schedulerThread(boost::bind(&sc::fifo_scheduler<>::operator(), &scheduler1, 0));
157 RCLCPP_INFO(rclcpp::get_logger(
"SMACC"),
"Polling loop exited. Terminating scheduler...");
161 RCLCPP_INFO(rclcpp::get_logger(
"SMACC"),
"Waiting for scheduler thread to join...");
162 schedulerThread.join();
163 RCLCPP_INFO(rclcpp::get_logger(
"SMACC"),
"Scheduler thread terminated. Shutdown complete.");
175 SmaccFifoScheduler::processor_handle
sm;
178template <
typename StateMachineType>
207 new boost::thread(boost::bind(&sc::fifo_scheduler<>::operator(), ret->
scheduler1, NULL));
SmaccFifoScheduler * scheduler_
void terminateScheduler()
boost::thread signalDetectorThread_
void postEvent(EventType *ev)
void notifyStateExited(ISmaccState *currentState)
ExecutionModel executionModel_
void initialize(ISmaccStateMachine *stateMachine)
std::vector< std::vector< ISmaccUpdatable * > > updatableStateElements_
rclcpp::Logger getLogger()
rclcpp::Node::SharedPtr getNode()
SmaccFifoScheduler::processor_handle processorHandle_
SignalDetector(SmaccFifoScheduler *scheduler, ExecutionModel executionModel=ExecutionModel::SINGLE_THREAD_SPINNER)
std::atomic< int64_t > lastState_
std::vector< ISmaccUpdatable * > updatableClients_
void setProcessorHandle(SmaccFifoScheduler::processor_handle processorHandle)
rclcpp::Publisher< smacc2_msgs::msg::SmaccStatus >::SharedPtr statusPub_
void findUpdatableStateElements(ISmaccState *currentState)
void findUpdatableClientsAndComponents()
ISmaccStateMachine * smaccStateMachine_
void notifyStateConfigured(ISmaccState *currentState)
std::atomic< bool > initialized_
SignalDetector * g_signal_detector
SmExecution * run_async()
void onSignalShutdown(int sig)
std::atomic< bool > g_shutdown_requested
void run(ExecutionModel executionModel=ExecutionModel::SINGLE_THREAD_SPINNER)
boost::statechart::fifo_scheduler< SmaccFifoWorker, SmaccAllocator > SmaccFifoScheduler
SmaccFifoScheduler::processor_handle sm
boost::thread * schedulerThread
boost::thread * signalDetectorLoop
SmaccFifoScheduler * scheduler1
SignalDetector * signalDetector