ros2_canopen  master
C++ ROS CANopen Library
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
ros2_canopen::node_interfaces::NodeCanopenBaseDriver< NODETYPE > Class Template Reference

#include <node_canopen_base_driver.hpp>

Inheritance diagram for ros2_canopen::node_interfaces::NodeCanopenBaseDriver< NODETYPE >:
Inheritance graph
[legend]
Collaboration diagram for ros2_canopen::node_interfaces::NodeCanopenBaseDriver< NODETYPE >:
Collaboration graph
[legend]

Public Member Functions

 NodeCanopenBaseDriver (NODETYPE *node)
 
virtual ~NodeCanopenBaseDriver ()
 
virtual void init (bool called_from_base)
 Initialises the driver. More...
 
virtual void configure (bool called_from_base)
 Configure the driver. More...
 
virtual void activate (bool called_from_base)
 Activates the driver. More...
 
virtual void deactivate (bool called_from_base)
 Deactivates the driver. More...
 
virtual void cleanup (bool called_from_base)
 Cleanup the driver. More...
 
virtual void shutdown (bool called_from_base)
 Shuts down the driver. More...
 
virtual void add_to_master ()
 Add the driver to master. More...
 
virtual void remove_from_master ()
 Remove the driver from master. More...
 
void register_nmt_state_cb (std::function< void(canopen::NmtState, uint8_t)> nmt_state_cb)
 Register a callback for NMT state change. More...
 
void register_rpdo_cb (std::function< void(COData, uint8_t)> rpdo_cb)
 Register a callback for RPDO. More...
 
void register_emcy_cb (std::function< void(COEmcy, uint8_t)> emcy_cb)
 Register a callback for EMCY. More...
 
- Public Member Functions inherited from ros2_canopen::node_interfaces::NodeCanopenDriver< NODETYPE >
 NodeCanopenDriver (NODETYPE *node)
 
virtual void set_master (std::shared_ptr< lely::ev::Executor > exec, std::shared_ptr< lely::canopen::AsyncMaster > master)
 Set Master. More...
 
void init ()
 Initialise the driver. More...
 
void configure ()
 Configure the driver. More...
 
void activate ()
 Activate the driver. More...
 
void deactivate ()
 Deactivate the driver. More...
 
void cleanup ()
 Cleanup the driver. More...
 
void shutdown ()
 Shutdown the driver. More...
 
virtual void demand_set_master ()
 Demand set Master. More...
 
- Public Member Functions inherited from ros2_canopen::node_interfaces::NodeCanopenDriverInterface
 NodeCanopenDriverInterface ()
 

Protected Member Functions

virtual void poll_timer_callback ()
 
void nmt_listener ()
 
virtual void on_nmt (canopen::NmtState nmt_state)
 
void rdpo_listener ()
 
virtual void on_rpdo (COData data)
 
void emcy_listener ()
 
virtual void on_emcy (COEmcy emcy)
 
virtual void diagnostic_callback (diagnostic_updater::DiagnosticStatusWrapper &stat)
 

Protected Attributes

std::thread nmt_state_publisher_thread_
 
std::thread rpdo_publisher_thread_
 
std::thread emcy_publisher_thread_
 
std::mutex driver_mutex_
 
std::shared_ptr< ros2_canopen::LelyDriverBridgelely_driver_
 
uint32_t period_ms_
 
int sdo_timeout_ms_
 
bool polling_
 
std::function< void(canopen::NmtState, uint8_t)> nmt_state_cb_
 
std::function< void(COData, uint8_t)> rpdo_cb_
 
std::function< void(COEmcy, uint8_t)> emcy_cb_
 
std::shared_ptr< ros2_canopen::SafeQueue< ros2_canopen::COEmcy > > emcy_queue_
 
std::shared_ptr< ros2_canopen::SafeQueue< ros2_canopen::COData > > rpdo_queue_
 
rclcpp::TimerBase::SharedPtr poll_timer_
 
std::atomic< bool > diagnostic_enabled_
 
uint32_t diagnostic_period_ms_
 
std::shared_ptr< diagnostic_updater::Updater > diagnostic_updater_
 
std::shared_ptr< DiagnosticsCollectordiagnostic_collector_
 
- Protected Attributes inherited from ros2_canopen::node_interfaces::NodeCanopenDriver< NODETYPE >
NODETYPE * node_
 
std::shared_ptr< lely::ev::Executor > exec_
 
std::shared_ptr< lely::canopen::AsyncMaster > master_
 
std::shared_ptr< lely::canopen::BasicDriver > driver_
 
std::chrono::milliseconds non_transmit_timeout_
 
YAML::Node config_
 
uint8_t node_id_
 
std::string container_name_
 
std::string eds_
 
std::string bin_
 
rclcpp::CallbackGroup::SharedPtr client_cbg_
 
rclcpp::CallbackGroup::SharedPtr timer_cbg_
 
std::atomic< bool > master_set_
 
std::atomic< bool > initialised_
 
std::atomic< bool > configured_
 
std::atomic< bool > activated_
 

Constructor & Destructor Documentation

◆ NodeCanopenBaseDriver()

template<class NODETYPE >
NodeCanopenBaseDriver::NodeCanopenBaseDriver ( NODETYPE *  node)

◆ ~NodeCanopenBaseDriver()

template<class NODETYPE >
virtual ros2_canopen::node_interfaces::NodeCanopenBaseDriver< NODETYPE >::~NodeCanopenBaseDriver ( )
inlinevirtual

Member Function Documentation

◆ poll_timer_callback()

template<class NODETYPE >
void NodeCanopenBaseDriver::poll_timer_callback
protectedvirtual

◆ nmt_listener()

template<class NODETYPE >
void NodeCanopenBaseDriver::nmt_listener
protected

◆ on_nmt()

template<class NODETYPE >
void NodeCanopenBaseDriver::on_nmt ( canopen::NmtState  nmt_state)
protectedvirtual

◆ rdpo_listener()

template<class NODETYPE >
void NodeCanopenBaseDriver::rdpo_listener
protected

◆ on_rpdo()

template<class NODETYPE >
void NodeCanopenBaseDriver::on_rpdo ( COData  data)
protectedvirtual

◆ emcy_listener()

template<class NODETYPE >
void NodeCanopenBaseDriver::emcy_listener
protected

◆ on_emcy()

template<class NODETYPE >
void NodeCanopenBaseDriver::on_emcy ( COEmcy  emcy)
protectedvirtual

◆ diagnostic_callback()

template<class NODETYPE >
void NodeCanopenBaseDriver::diagnostic_callback ( diagnostic_updater::DiagnosticStatusWrapper &  stat)
protectedvirtual

◆ init()

template<class NODETYPE >
void NodeCanopenBaseDriver::init ( bool  called_from_base)
virtual

Initialises the driver.

This does not do anything, it is an empty function. it should be overridden by derived classes.

Todo:
Potentially make this an abstract function. This is mainly for debugging purposes.
Parameters
called_from_base

Reimplemented from ros2_canopen::node_interfaces::NodeCanopenDriver< NODETYPE >.

Reimplemented in ros2_canopen::node_interfaces::NodeCanopenProxyDriver< NODETYPE >, and ros2_canopen::node_interfaces::NodeCanopen402Driver< NODETYPE >.

◆ configure()

template<class NODETYPE >
virtual void ros2_canopen::node_interfaces::NodeCanopenBaseDriver< NODETYPE >::configure ( bool  called_from_base)
virtual

Configure the driver.

This function should be overridden by derived classes.

Parameters
called_from_base

Reimplemented from ros2_canopen::node_interfaces::NodeCanopenDriver< NODETYPE >.

Reimplemented in ros2_canopen::node_interfaces::NodeCanopen402Driver< NODETYPE >.

◆ activate()

template<class NODETYPE >
void NodeCanopenBaseDriver::activate ( bool  called_from_base)
virtual

Activates the driver.

This function should be overridden by derived classes.

Parameters
called_from_base

Reimplemented from ros2_canopen::node_interfaces::NodeCanopenDriver< NODETYPE >.

Reimplemented in ros2_canopen::node_interfaces::NodeCanopen402Driver< NODETYPE >.

◆ deactivate()

template<class NODETYPE >
void NodeCanopenBaseDriver::deactivate ( bool  called_from_base)
virtual

Deactivates the driver.

This function should be overridden by derived classes.

Parameters
called_from_base

Reimplemented from ros2_canopen::node_interfaces::NodeCanopenDriver< NODETYPE >.

Reimplemented in ros2_canopen::node_interfaces::NodeCanopen402Driver< NODETYPE >.

◆ cleanup()

template<class NODETYPE >
void NodeCanopenBaseDriver::cleanup ( bool  called_from_base)
virtual

Cleanup the driver.

This function should be overridden by derived classes.

Parameters
called_from_base

Reimplemented from ros2_canopen::node_interfaces::NodeCanopenDriver< NODETYPE >.

◆ shutdown()

template<class NODETYPE >
void NodeCanopenBaseDriver::shutdown ( bool  called_from_base)
virtual

Shuts down the driver.

This function should be overridden by derived classes.

Parameters
called_from_base

Reimplemented from ros2_canopen::node_interfaces::NodeCanopenDriver< NODETYPE >.

◆ add_to_master()

template<class NODETYPE >
void NodeCanopenBaseDriver::add_to_master
virtual

◆ remove_from_master()

template<class NODETYPE >
void NodeCanopenBaseDriver::remove_from_master
virtual

Remove the driver from master.

Reimplemented from ros2_canopen::node_interfaces::NodeCanopenDriver< NODETYPE >.

◆ register_nmt_state_cb()

template<class NODETYPE >
void ros2_canopen::node_interfaces::NodeCanopenBaseDriver< NODETYPE >::register_nmt_state_cb ( std::function< void(canopen::NmtState, uint8_t)>  nmt_state_cb)
inline

Register a callback for NMT state change.

Parameters
nmt_state_cb

◆ register_rpdo_cb()

template<class NODETYPE >
void ros2_canopen::node_interfaces::NodeCanopenBaseDriver< NODETYPE >::register_rpdo_cb ( std::function< void(COData, uint8_t)>  rpdo_cb)
inline

Register a callback for RPDO.

Parameters
rpdo_cb

◆ register_emcy_cb()

template<class NODETYPE >
void ros2_canopen::node_interfaces::NodeCanopenBaseDriver< NODETYPE >::register_emcy_cb ( std::function< void(COEmcy, uint8_t)>  emcy_cb)
inline

Register a callback for EMCY.

Parameters
emcy_cb

Member Data Documentation

◆ nmt_state_publisher_thread_

template<class NODETYPE >
std::thread ros2_canopen::node_interfaces::NodeCanopenBaseDriver< NODETYPE >::nmt_state_publisher_thread_
protected

◆ rpdo_publisher_thread_

template<class NODETYPE >
std::thread ros2_canopen::node_interfaces::NodeCanopenBaseDriver< NODETYPE >::rpdo_publisher_thread_
protected

◆ emcy_publisher_thread_

template<class NODETYPE >
std::thread ros2_canopen::node_interfaces::NodeCanopenBaseDriver< NODETYPE >::emcy_publisher_thread_
protected

◆ driver_mutex_

template<class NODETYPE >
std::mutex ros2_canopen::node_interfaces::NodeCanopenBaseDriver< NODETYPE >::driver_mutex_
protected

◆ lely_driver_

template<class NODETYPE >
std::shared_ptr<ros2_canopen::LelyDriverBridge> ros2_canopen::node_interfaces::NodeCanopenBaseDriver< NODETYPE >::lely_driver_
protected

◆ period_ms_

template<class NODETYPE >
uint32_t ros2_canopen::node_interfaces::NodeCanopenBaseDriver< NODETYPE >::period_ms_
protected

◆ sdo_timeout_ms_

template<class NODETYPE >
int ros2_canopen::node_interfaces::NodeCanopenBaseDriver< NODETYPE >::sdo_timeout_ms_
protected

◆ polling_

template<class NODETYPE >
bool ros2_canopen::node_interfaces::NodeCanopenBaseDriver< NODETYPE >::polling_
protected

◆ nmt_state_cb_

template<class NODETYPE >
std::function<void(canopen::NmtState, uint8_t)> ros2_canopen::node_interfaces::NodeCanopenBaseDriver< NODETYPE >::nmt_state_cb_
protected

◆ rpdo_cb_

template<class NODETYPE >
std::function<void(COData, uint8_t)> ros2_canopen::node_interfaces::NodeCanopenBaseDriver< NODETYPE >::rpdo_cb_
protected

◆ emcy_cb_

template<class NODETYPE >
std::function<void(COEmcy, uint8_t)> ros2_canopen::node_interfaces::NodeCanopenBaseDriver< NODETYPE >::emcy_cb_
protected

◆ emcy_queue_

template<class NODETYPE >
std::shared_ptr<ros2_canopen::SafeQueue<ros2_canopen::COEmcy> > ros2_canopen::node_interfaces::NodeCanopenBaseDriver< NODETYPE >::emcy_queue_
protected

◆ rpdo_queue_

template<class NODETYPE >
std::shared_ptr<ros2_canopen::SafeQueue<ros2_canopen::COData> > ros2_canopen::node_interfaces::NodeCanopenBaseDriver< NODETYPE >::rpdo_queue_
protected

◆ poll_timer_

template<class NODETYPE >
rclcpp::TimerBase::SharedPtr ros2_canopen::node_interfaces::NodeCanopenBaseDriver< NODETYPE >::poll_timer_
protected

◆ diagnostic_enabled_

template<class NODETYPE >
std::atomic<bool> ros2_canopen::node_interfaces::NodeCanopenBaseDriver< NODETYPE >::diagnostic_enabled_
protected

◆ diagnostic_period_ms_

template<class NODETYPE >
uint32_t ros2_canopen::node_interfaces::NodeCanopenBaseDriver< NODETYPE >::diagnostic_period_ms_
protected

◆ diagnostic_updater_

template<class NODETYPE >
std::shared_ptr<diagnostic_updater::Updater> ros2_canopen::node_interfaces::NodeCanopenBaseDriver< NODETYPE >::diagnostic_updater_
protected

◆ diagnostic_collector_

template<class NODETYPE >
std::shared_ptr<DiagnosticsCollector> ros2_canopen::node_interfaces::NodeCanopenBaseDriver< NODETYPE >::diagnostic_collector_
protected

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