SMACC2
Loading...
Searching...
No Matches
cl_generic_sensor::CbDefaultGenericSensorBehavior< ClientType > Class Template Reference

#include <cb_default_generic_sensor_behavior.hpp>

Inheritance diagram for cl_generic_sensor::CbDefaultGenericSensorBehavior< ClientType >:
Inheritance graph
Collaboration diagram for cl_generic_sensor::CbDefaultGenericSensorBehavior< ClientType >:
Collaboration graph

Public Types

typedef ClientType::TMessageType TMessageType
 

Public Member Functions

 CbDefaultGenericSensorBehavior ()
 
template<typename TOrthogonal , typename TSourceObject >
void onStateOrthogonalAllocation ()
 
template<typename EvType >
void propagateMessageEvent (const TMessageType &msg)
 
template<typename EvType >
void propagateTimeoutEvent ()
 
void onEntry () override
 
void onExit () override
 
virtual void onMessageCallback (const TMessageType &)
 
- Public Member Functions inherited from smacc2::SmaccClientBehavior
virtual ~SmaccClientBehavior ()
 
void onEntry () override
 
void onExit () override
 
- Public Member Functions inherited from smacc2::ISmaccClientBehavior
 ISmaccClientBehavior ()
 
virtual ~ISmaccClientBehavior ()
 
ISmaccStateMachinegetStateMachine ()
 
std::string getName () const
 
template<typename SmaccClientType >
void requiresClient (SmaccClientType *&storage)
 
template<typename SmaccComponentType >
void requiresComponent (SmaccComponentType *&storage, ComponentRequirement requirementType=ComponentRequirement::SOFT)
 
virtual void executeOnEntry ()
 
virtual void executeOnExit ()
 

Static Public Member Functions

static std::string getEventLabel ()
 

Public Attributes

ClientType * sensor_
 
smacc2::client_core_components::CpTopicSubscriber< TMessageType > * subscriberComponent_
 
cl_generic_sensor::components::CpMessageTimeout< TMessageType > * timeoutComponent_
 
std::function< void()> deferredComponentConnection
 

Additional Inherited Members

- Protected Member Functions inherited from smacc2::ISmaccClientBehavior
virtual void runtimeConfigure ()
 
template<typename EventType >
void postEvent (const EventType &ev)
 
template<typename EventType >
void postEvent ()
 
ISmaccStategetCurrentState ()
 
virtual void dispose ()
 
virtual rclcpp::Node::SharedPtr getNode () const
 
virtual rclcpp::Logger getLogger () const
 

Detailed Description

template<typename ClientType>
class cl_generic_sensor::CbDefaultGenericSensorBehavior< ClientType >

Definition at line 30 of file cb_default_generic_sensor_behavior.hpp.

Member Typedef Documentation

◆ TMessageType

template<typename ClientType >
ClientType::TMessageType cl_generic_sensor::CbDefaultGenericSensorBehavior< ClientType >::TMessageType

Definition at line 33 of file cb_default_generic_sensor_behavior.hpp.

Constructor & Destructor Documentation

◆ CbDefaultGenericSensorBehavior()

template<typename ClientType >
cl_generic_sensor::CbDefaultGenericSensorBehavior< ClientType >::CbDefaultGenericSensorBehavior ( )
inline

Definition at line 41 of file cb_default_generic_sensor_behavior.hpp.

42 : sensor_(nullptr), subscriberComponent_(nullptr), timeoutComponent_(nullptr)
43 {
44 }
smacc2::client_core_components::CpTopicSubscriber< TMessageType > * subscriberComponent_
cl_generic_sensor::components::CpMessageTimeout< TMessageType > * timeoutComponent_

Member Function Documentation

◆ getEventLabel()

template<typename ClientType >
static std::string cl_generic_sensor::CbDefaultGenericSensorBehavior< ClientType >::getEventLabel ( )
inlinestatic

Definition at line 46 of file cb_default_generic_sensor_behavior.hpp.

47 {
48 // Show ros message type
49 return smacc2::demangleSymbol(typeid(TMessageType).name());
50 }
std::string demangleSymbol()

References smacc2::introspection::demangleSymbol().

Here is the call graph for this function:

◆ onEntry()

template<typename ClientType >
void cl_generic_sensor::CbDefaultGenericSensorBehavior< ClientType >::onEntry ( )
inlineoverridevirtual

Reimplemented from smacc2::ISmaccClientBehavior.

Definition at line 143 of file cb_default_generic_sensor_behavior.hpp.

144 {
145 RCLCPP_INFO(
146 getLogger(), "[CbDefaultGenericSensorBehavior] onEntry. Requires client of type '%s'",
148
149 // Get the client if we don't have it yet
150 if (sensor_ == nullptr)
151 {
152 this->requiresClient(sensor_);
153 }
154
155 if (sensor_ == nullptr)
156 {
157 RCLCPP_FATAL_STREAM(
158 getLogger(),
159 "[CbDefaultGenericSensorBehavior] Sensor client behavior needs a client of type: "
160 << smacc2::demangleSymbol<ClientType>() << " but it is not found.");
161 }
162 else
163 {
164 // Connect to components
166 RCLCPP_INFO(getLogger(), "[CbDefaultGenericSensorBehavior] Sensor behavior initialized");
167 }
168 }
virtual rclcpp::Logger getLogger() const
void requiresClient(SmaccClientType *&storage)

References cl_generic_sensor::CbDefaultGenericSensorBehavior< ClientType >::deferredComponentConnection, smacc2::introspection::demangleSymbol(), smacc2::ISmaccClientBehavior::getLogger(), smacc2::ISmaccClientBehavior::requiresClient(), and cl_generic_sensor::CbDefaultGenericSensorBehavior< ClientType >::sensor_.

Here is the call graph for this function:

◆ onExit()

template<typename ClientType >
void cl_generic_sensor::CbDefaultGenericSensorBehavior< ClientType >::onExit ( )
inlineoverridevirtual

Reimplemented from smacc2::ISmaccClientBehavior.

Definition at line 170 of file cb_default_generic_sensor_behavior.hpp.

170{ RCLCPP_INFO(getLogger(), "[CbDefaultGenericSensorBehavior] onExit"); }

References smacc2::ISmaccClientBehavior::getLogger().

Here is the call graph for this function:

◆ onMessageCallback()

template<typename ClientType >
virtual void cl_generic_sensor::CbDefaultGenericSensorBehavior< ClientType >::onMessageCallback ( const TMessageType & )
inlinevirtual

Definition at line 173 of file cb_default_generic_sensor_behavior.hpp.

174 {
175 // Empty to fill by sensor customization based on inheritance
176 }

◆ onStateOrthogonalAllocation()

template<typename ClientType >
template<typename TOrthogonal , typename TSourceObject >
void cl_generic_sensor::CbDefaultGenericSensorBehavior< ClientType >::onStateOrthogonalAllocation ( )
inline

Definition at line 56 of file cb_default_generic_sensor_behavior.hpp.

57 {
58 // Setup deferred component connection and event propagation
60 {
61 RCLCPP_INFO(
62 getLogger(),
63 "[CbDefaultGenericSensorBehavior] Connecting to components for client type '%s'",
65
66 // Get the subscriber component from the client
68
69 if (subscriberComponent_ == nullptr)
70 {
71 RCLCPP_ERROR(
72 getLogger(),
73 "[CbDefaultGenericSensorBehavior] Failed to get CpTopicSubscriber component!");
74 return;
75 }
76
77 // Connect to subscriber component signals to propagate events
81 this);
82
86 this);
87
88 RCLCPP_INFO(
89 getLogger(), "[CbDefaultGenericSensorBehavior] Connected to subscriber component");
90
91 // Try to get the timeout component (it's optional)
92 try
93 {
95
96 if (timeoutComponent_ != nullptr)
97 {
98 // Connect to timeout component signal to propagate timeout events
102 this);
103
104 RCLCPP_INFO(
105 getLogger(),
106 "[CbDefaultGenericSensorBehavior] Connected to timeout component (watchdog active)");
107 }
108 }
109 catch (const std::exception & e)
110 {
111 RCLCPP_INFO(
112 getLogger(),
113 "[CbDefaultGenericSensorBehavior] Timeout component not found (watchdog disabled): %s",
114 e.what());
115 }
116 };
117 }
boost::signals2::connection onMessageTimeout(void(T::*callback)(), T *object)
void requiresComponent(SmaccComponentType *&storage, ComponentRequirement requirementType=ComponentRequirement::SOFT)
boost::signals2::connection onMessageReceived(void(T::*callback)(const MessageType &), T *object)
boost::signals2::connection onFirstMessageReceived(void(T::*callback)(const MessageType &), T *object)

References cl_generic_sensor::CbDefaultGenericSensorBehavior< ClientType >::deferredComponentConnection, smacc2::introspection::demangleSymbol(), smacc2::ISmaccClientBehavior::getLogger(), smacc2::client_core_components::CpTopicSubscriber< MessageType >::onFirstMessageReceived(), smacc2::client_core_components::CpTopicSubscriber< MessageType >::onMessageReceived(), cl_generic_sensor::components::CpMessageTimeout< MessageType >::onMessageTimeout(), smacc2::ISmaccClientBehavior::requiresComponent(), cl_generic_sensor::CbDefaultGenericSensorBehavior< ClientType >::subscriberComponent_, and cl_generic_sensor::CbDefaultGenericSensorBehavior< ClientType >::timeoutComponent_.

Here is the call graph for this function:

◆ propagateMessageEvent()

template<typename ClientType >
template<typename EvType >
void cl_generic_sensor::CbDefaultGenericSensorBehavior< ClientType >::propagateMessageEvent ( const TMessageType & msg)
inline

Definition at line 121 of file cb_default_generic_sensor_behavior.hpp.

122 {
123 RCLCPP_DEBUG(
124 getLogger(), "[CbDefaultGenericSensorBehavior] Propagating message event: %s",
126
127 auto event = new EvType();
128 event->msgData = msg;
129 this->postEvent(event);
130 }

References smacc2::introspection::demangleSymbol(), smacc2::ISmaccClientBehavior::getLogger(), and smacc2::ISmaccClientBehavior::postEvent().

Here is the call graph for this function:

◆ propagateTimeoutEvent()

template<typename ClientType >
template<typename EvType >
void cl_generic_sensor::CbDefaultGenericSensorBehavior< ClientType >::propagateTimeoutEvent ( )
inline

Definition at line 134 of file cb_default_generic_sensor_behavior.hpp.

135 {
136 RCLCPP_WARN(
137 getLogger(), "[CbDefaultGenericSensorBehavior] Propagating timeout event: %s",
139
140 this->postEvent<EvType>();
141 }

References smacc2::introspection::demangleSymbol(), smacc2::ISmaccClientBehavior::getLogger(), and smacc2::ISmaccClientBehavior::postEvent().

Here is the call graph for this function:

Member Data Documentation

◆ deferredComponentConnection

◆ sensor_

template<typename ClientType >
ClientType* cl_generic_sensor::CbDefaultGenericSensorBehavior< ClientType >::sensor_

◆ subscriberComponent_

◆ timeoutComponent_


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