SMACC2
Loading...
Searching...
No Matches
cl_generic_sensor::components::CpMessageTimeout< MessageType > Class Template Reference

#include <cp_message_timeout.hpp>

Inheritance diagram for cl_generic_sensor::components::CpMessageTimeout< MessageType >:
Inheritance graph
Collaboration diagram for cl_generic_sensor::components::CpMessageTimeout< MessageType >:
Collaboration graph

Public Types

typedef MessageType TMessageType
 

Public Member Functions

 CpMessageTimeout ()
 
virtual ~CpMessageTimeout ()
 
template<typename T >
boost::signals2::connection onMessageTimeout (void(T::*callback)(), T *object)
 
template<typename TOrthogonal , typename TSourceObject >
void onComponentInitialization ()
 
void onInitialize () override
 
- Public Member Functions inherited from smacc2::ISmaccComponent
 ISmaccComponent ()
 
virtual ~ISmaccComponent ()
 
virtual std::string getName () const
 

Public Attributes

SmaccSignal< void()> onMessageTimeout_
 
std::optional< rclcpp::Duration > timeout_
 
std::function< void()> postTimeoutMessageEvent
 

Protected Member Functions

void resetTimer (const MessageType &)
 
- Protected Member Functions inherited from smacc2::ISmaccComponent
template<typename TOrthogonal , typename TClient >
void onComponentInitialization ()
 
template<typename EventType >
void postEvent (const EventType &ev)
 
template<typename EventType >
void postEvent ()
 
template<typename TOrthogonal , typename TSourceObject >
void onStateOrthogonalAllocation ()
 
template<typename TComponent >
void requiresComponent (TComponent *&requiredComponentStorage, ComponentRequirement requirementType=ComponentRequirement::SOFT)
 
template<typename TComponent >
void requiresComponent (std::string name, TComponent *&requiredComponentStorage, ComponentRequirement requirementType=ComponentRequirement::SOFT)
 
template<typename TClient >
void requiresClient (TClient *&requiredClientStorage)
 
template<typename SmaccComponentType , typename TOrthogonal , typename TClient , typename... TArgs>
SmaccComponentType * createSiblingComponent (TArgs... targs)
 
template<typename SmaccComponentType , typename TOrthogonal , typename TClient , typename... TArgs>
SmaccComponentType * createSiblingNamedComponent (std::string name, TArgs... targs)
 
rclcpp::Node::SharedPtr getNode ()
 
rclcpp::Logger getLogger () const
 
ISmaccStateMachinegetStateMachine ()
 

Private Member Functions

void timeoutCallback ()
 

Private Attributes

rclcpp::TimerBase::SharedPtr timeoutTimer_
 
bool initialized_
 

Additional Inherited Members

- Protected Attributes inherited from smacc2::ISmaccComponent
ISmaccStateMachinestateMachine_
 
ISmaccClientowner_
 

Detailed Description

template<typename MessageType>
class cl_generic_sensor::components::CpMessageTimeout< MessageType >

Definition at line 38 of file cp_message_timeout.hpp.

Member Typedef Documentation

◆ TMessageType

template<typename MessageType >
MessageType cl_generic_sensor::components::CpMessageTimeout< MessageType >::TMessageType

Definition at line 41 of file cp_message_timeout.hpp.

Constructor & Destructor Documentation

◆ CpMessageTimeout()

template<typename MessageType >
cl_generic_sensor::components::CpMessageTimeout< MessageType >::CpMessageTimeout ( )
inline

◆ ~CpMessageTimeout()

template<typename MessageType >
virtual cl_generic_sensor::components::CpMessageTimeout< MessageType >::~CpMessageTimeout ( )
inlinevirtual

Definition at line 51 of file cp_message_timeout.hpp.

51{}

Member Function Documentation

◆ onComponentInitialization()

template<typename MessageType >
template<typename TOrthogonal , typename TSourceObject >
void cl_generic_sensor::components::CpMessageTimeout< MessageType >::onComponentInitialization ( )
inline

Definition at line 65 of file cp_message_timeout.hpp.

66 {
67 // Setup the event posting function with proper template types
68 this->postTimeoutMessageEvent = [this]()
69 {
70 // Emit signal
71 this->onMessageTimeout_();
72
73 // Post SMACC event
74 auto event = new EvTopicMessageTimeout<TSourceObject, TOrthogonal>();
75 this->postEvent(event);
76 };
77
78 // Require the CpTopicSubscriber component to monitor messages
80 this->requiresComponent(subscriberComponent);
81
82 // Subscribe to message received signal to reset timer
84 }
void requiresComponent(TComponent *&requiredComponentStorage, ComponentRequirement requirementType=ComponentRequirement::SOFT)
boost::signals2::connection onMessageReceived(void(T::*callback)(const MessageType &), T *object)

References smacc2::client_core_components::CpTopicSubscriber< MessageType >::onMessageReceived(), cl_generic_sensor::components::CpMessageTimeout< MessageType >::onMessageTimeout_, smacc2::ISmaccComponent::postEvent(), and smacc2::ISmaccComponent::requiresComponent().

Here is the call graph for this function:

◆ onInitialize()

template<typename MessageType >
void cl_generic_sensor::components::CpMessageTimeout< MessageType >::onInitialize ( )
inlineoverridevirtual

Reimplemented from smacc2::ISmaccComponent.

Definition at line 87 of file cp_message_timeout.hpp.

88 {
89 if (!initialized_)
90 {
91 if (timeout_)
92 {
93 RCLCPP_INFO_STREAM(
94 getLogger(), "[" << this->getName()
95 << "] Initializing message timeout watchdog with duration: "
96 << timeout_->seconds() << "s");
97
98 // Create the timeout timer
99 timeoutTimer_ = rclcpp::create_timer(
100 this->getNode(), this->getNode()->get_clock(), *timeout_,
102
103 timeoutTimer_->reset();
104 }
105 else
106 {
107 RCLCPP_WARN(
108 getLogger(),
109 "[CpMessageTimeout] Timeout duration not set, skipping timeout watchdog functionality");
110 }
111
112 initialized_ = true;
113 }
114 }
virtual std::string getName() const
rclcpp::Logger getLogger() const
rclcpp::Node::SharedPtr getNode()

References smacc2::ISmaccComponent::getLogger(), smacc2::ISmaccComponent::getName(), smacc2::ISmaccComponent::getNode(), cl_generic_sensor::components::CpMessageTimeout< MessageType >::initialized_, cl_generic_sensor::components::CpMessageTimeout< MessageType >::timeout_, and cl_generic_sensor::components::CpMessageTimeout< MessageType >::timeoutTimer_.

Here is the call graph for this function:

◆ onMessageTimeout()

template<typename MessageType >
template<typename T >
boost::signals2::connection cl_generic_sensor::components::CpMessageTimeout< MessageType >::onMessageTimeout ( void(T::* callback )(),
T * object )
inline

Definition at line 55 of file cp_message_timeout.hpp.

56 {
57 return this->getStateMachine()->createSignalConnection(onMessageTimeout_, callback, object);
58 }
ISmaccStateMachine * getStateMachine()
boost::signals2::connection createSignalConnection(TSmaccSignal &signal, TMemberFunctionPrototype callback, TSmaccObjectType *object)

References smacc2::ISmaccStateMachine::createSignalConnection(), and smacc2::ISmaccComponent::getStateMachine().

Referenced by cl_generic_sensor::CbDefaultGenericSensorBehavior< ClientType >::onStateOrthogonalAllocation().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ resetTimer()

template<typename MessageType >
void cl_generic_sensor::components::CpMessageTimeout< MessageType >::resetTimer ( const MessageType & )
inlineprotected

Definition at line 118 of file cp_message_timeout.hpp.

119 {
120 if (timeoutTimer_)
121 {
122 timeoutTimer_->reset();
123 }
124 }

References cl_generic_sensor::components::CpMessageTimeout< MessageType >::timeoutTimer_.

◆ timeoutCallback()

template<typename MessageType >
void cl_generic_sensor::components::CpMessageTimeout< MessageType >::timeoutCallback ( )
inlineprivate

Definition at line 131 of file cp_message_timeout.hpp.

132 {
133 RCLCPP_WARN(
134 getLogger(), "[CpMessageTimeout] Message timeout occurred after %f seconds",
135 timeout_->seconds());
136
138 {
140 }
141 }

References smacc2::ISmaccComponent::getLogger(), cl_generic_sensor::components::CpMessageTimeout< MessageType >::postTimeoutMessageEvent, and cl_generic_sensor::components::CpMessageTimeout< MessageType >::timeout_.

Here is the call graph for this function:

Member Data Documentation

◆ initialized_

template<typename MessageType >
bool cl_generic_sensor::components::CpMessageTimeout< MessageType >::initialized_
private

◆ onMessageTimeout_

template<typename MessageType >
SmaccSignal<void()> cl_generic_sensor::components::CpMessageTimeout< MessageType >::onMessageTimeout_

◆ postTimeoutMessageEvent

template<typename MessageType >
std::function<void()> cl_generic_sensor::components::CpMessageTimeout< MessageType >::postTimeoutMessageEvent

◆ timeout_

◆ timeoutTimer_

template<typename MessageType >
rclcpp::TimerBase::SharedPtr cl_generic_sensor::components::CpMessageTimeout< MessageType >::timeoutTimer_
private

The documentation for this class was generated from the following file: