ros2_canopen  master
C++ ROS CANopen Library
node_canopen_proxy_driver.hpp
Go to the documentation of this file.
1 #ifndef NODE_CANOPEN_PROXY_DRIVER
2 #define NODE_CANOPEN_PROXY_DRIVER
3 
5 namespace ros2_canopen
6 {
7 namespace node_interfaces
8 {
9 
10 template <class NODETYPE>
12 {
13  static_assert(
14  std::is_base_of<rclcpp::Node, NODETYPE>::value ||
15  std::is_base_of<rclcpp_lifecycle::LifecycleNode, NODETYPE>::value,
16  "NODETYPE must derive from rclcpp::Node or rclcpp_lifecycle::LifecycleNode");
17 
18 protected:
19  rclcpp::Publisher<std_msgs::msg::String>::SharedPtr nmt_state_publisher;
20  rclcpp::Publisher<canopen_interfaces::msg::COData>::SharedPtr rpdo_publisher;
21  rclcpp::Subscription<canopen_interfaces::msg::COData>::SharedPtr tpdo_subscriber;
22  rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr nmt_state_reset_service;
23  rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr nmt_state_start_service;
24  rclcpp::Service<canopen_interfaces::srv::CORead>::SharedPtr sdo_read_service;
25  rclcpp::Service<canopen_interfaces::srv::COWrite>::SharedPtr sdo_write_service;
26 
27  std::mutex sdo_mtex;
28 
29  virtual void on_nmt(canopen::NmtState nmt_state) override;
30  virtual void on_rpdo(COData data) override;
31  virtual void on_tpdo(const canopen_interfaces::msg::COData::SharedPtr msg);
32 
33  void on_nmt_state_reset(
34  const std_srvs::srv::Trigger::Request::SharedPtr request,
35  std_srvs::srv::Trigger::Response::SharedPtr response);
36 
37  void on_nmt_state_start(
38  const std_srvs::srv::Trigger::Request::SharedPtr request,
39  std_srvs::srv::Trigger::Response::SharedPtr response);
40 
41  void on_sdo_read(
42  const canopen_interfaces::srv::CORead::Request::SharedPtr request,
43  canopen_interfaces::srv::CORead::Response::SharedPtr response);
44 
45  void on_sdo_write(
46  const canopen_interfaces::srv::COWrite::Request::SharedPtr request,
47  canopen_interfaces::srv::COWrite::Response::SharedPtr response);
48 
49 public:
50  NodeCanopenProxyDriver(NODETYPE * node);
51 
52  virtual void init(bool called_from_base) override;
53 
54  virtual bool reset_node_nmt_command();
55 
56  virtual bool start_node_nmt_command();
57 
58  virtual bool tpdo_transmit(COData & data);
59 
60  virtual bool sdo_write(COData & data);
61 
62  virtual bool sdo_read(COData & data);
63 };
64 } // namespace node_interfaces
65 } // namespace ros2_canopen
66 
67 #endif
Definition: node_canopen_base_driver.hpp:19
void init()
Initialise the driver.
Definition: node_canopen_driver.hpp:113
Definition: node_canopen_proxy_driver.hpp:12
void on_sdo_read(const canopen_interfaces::srv::CORead::Request::SharedPtr request, canopen_interfaces::srv::CORead::Response::SharedPtr response)
Definition: node_canopen_proxy_driver_impl.hpp:224
rclcpp::Subscription< canopen_interfaces::msg::COData >::SharedPtr tpdo_subscriber
Definition: node_canopen_proxy_driver.hpp:21
rclcpp::Publisher< canopen_interfaces::msg::COData >::SharedPtr rpdo_publisher
Definition: node_canopen_proxy_driver.hpp:20
virtual bool sdo_write(COData &data)
Definition: node_canopen_proxy_driver_impl.hpp:274
void on_nmt_state_reset(const std_srvs::srv::Trigger::Request::SharedPtr request, std_srvs::srv::Trigger::Response::SharedPtr response)
Definition: node_canopen_proxy_driver_impl.hpp:182
rclcpp::Service< canopen_interfaces::srv::CORead >::SharedPtr sdo_read_service
Definition: node_canopen_proxy_driver.hpp:24
rclcpp::Service< std_srvs::srv::Trigger >::SharedPtr nmt_state_start_service
Definition: node_canopen_proxy_driver.hpp:23
rclcpp::Service< canopen_interfaces::srv::COWrite >::SharedPtr sdo_write_service
Definition: node_canopen_proxy_driver.hpp:25
void on_sdo_write(const canopen_interfaces::srv::COWrite::Request::SharedPtr request, canopen_interfaces::srv::COWrite::Response::SharedPtr response)
Definition: node_canopen_proxy_driver_impl.hpp:265
void on_nmt_state_start(const std_srvs::srv::Trigger::Request::SharedPtr request, std_srvs::srv::Trigger::Response::SharedPtr response)
Definition: node_canopen_proxy_driver_impl.hpp:203
virtual void on_rpdo(COData data) override
Definition: node_canopen_proxy_driver_impl.hpp:166
NodeCanopenProxyDriver(NODETYPE *node)
Definition: node_canopen_proxy_driver_impl.hpp:10
virtual bool reset_node_nmt_command()
Definition: node_canopen_proxy_driver_impl.hpp:190
rclcpp::Publisher< std_msgs::msg::String >::SharedPtr nmt_state_publisher
Definition: node_canopen_proxy_driver.hpp:16
virtual void on_tpdo(const canopen_interfaces::msg::COData::SharedPtr msg)
Definition: node_canopen_proxy_driver_impl.hpp:141
virtual bool tpdo_transmit(COData &data)
Definition: node_canopen_proxy_driver_impl.hpp:151
virtual bool start_node_nmt_command()
Definition: node_canopen_proxy_driver_impl.hpp:211
virtual void on_nmt(canopen::NmtState nmt_state) override
Definition: node_canopen_proxy_driver_impl.hpp:98
virtual bool sdo_read(COData &data)
Definition: node_canopen_proxy_driver_impl.hpp:234
rclcpp::Service< std_srvs::srv::Trigger >::SharedPtr nmt_state_reset_service
Definition: node_canopen_proxy_driver.hpp:22
std::mutex sdo_mtex
Definition: node_canopen_proxy_driver.hpp:27
Definition: configuration_manager.hpp:28
Definition: exchange.hpp:26