ros2_canopen  master
C++ ROS CANopen Library
master_node.hpp
Go to the documentation of this file.
1 // Copyright 2022 Christoph Hellmann Santos
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 #ifndef MASTER_NODE_HPP_
15 #define MASTER_NODE_HPP_
16 
17 #include <rclcpp/rclcpp.hpp>
19 
20 namespace ros2_canopen
21 {
29 {
30 public:
38  virtual void init() = 0;
47  virtual void shutdown() = 0;
57  virtual std::shared_ptr<lely::canopen::AsyncMaster> get_master() = 0;
67  virtual std::shared_ptr<lely::ev::Executor> get_executor() = 0;
68 
78  virtual rclcpp::node_interfaces::NodeBaseInterface::SharedPtr get_node_base_interface() = 0;
79 
86  virtual bool is_lifecycle() = 0;
87 };
88 
97 class CanopenMaster : public CanopenMasterInterface, public rclcpp::Node
98 {
99 public:
100  std::shared_ptr<node_interfaces::NodeCanopenMasterInterface> node_canopen_master_;
101  explicit CanopenMaster(const rclcpp::NodeOptions & node_options = rclcpp::NodeOptions())
102  : rclcpp::Node("canopen_master", node_options)
103  {
104  // node_canopen_master_ =
105  // std::make_shared<node_interfaces::NodeCanopenMaster<rclcpp::Node>>(this);
106  }
118  virtual void init() override;
119 
128  virtual void shutdown() override;
129 
139  virtual std::shared_ptr<lely::canopen::AsyncMaster> get_master() override;
149  virtual std::shared_ptr<lely::ev::Executor> get_executor() override;
159  virtual rclcpp::node_interfaces::NodeBaseInterface::SharedPtr get_node_base_interface() override
160  {
161  return rclcpp::Node::get_node_base_interface();
162  }
168  virtual bool is_lifecycle() { return false; }
169 };
170 
171 class LifecycleCanopenMaster : public CanopenMasterInterface, public rclcpp_lifecycle::LifecycleNode
172 {
173 protected:
174  std::shared_ptr<node_interfaces::NodeCanopenMasterInterface> node_canopen_master_;
175 
176 public:
177  LifecycleCanopenMaster(const rclcpp::NodeOptions & node_options = rclcpp::NodeOptions())
178  : rclcpp_lifecycle::LifecycleNode("lifecycle_canopen_master", node_options)
179  {
181  std::make_shared<node_interfaces::NodeCanopenMaster<rclcpp_lifecycle::LifecycleNode>>(this);
182  }
194  virtual void init() override;
195 
204  virtual void shutdown() override;
214  virtual std::shared_ptr<lely::canopen::AsyncMaster> get_master() override;
224  virtual std::shared_ptr<lely::ev::Executor> get_executor() override;
234  rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_configure(
235  const rclcpp_lifecycle::State & state);
245  rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_activate(
246  const rclcpp_lifecycle::State & state);
256  rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_deactivate(
257  const rclcpp_lifecycle::State & state);
267  rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_cleanup(
268  const rclcpp_lifecycle::State & state);
278  rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_shutdown(
279  const rclcpp_lifecycle::State & state);
289  virtual rclcpp::node_interfaces::NodeBaseInterface::SharedPtr get_node_base_interface() override
290  {
291  return rclcpp_lifecycle::LifecycleNode::get_node_base_interface();
292  }
298  virtual bool is_lifecycle() { return true; }
299 };
300 
301 } // namespace ros2_canopen
302 
303 #endif
Canopen Master Interface.
Definition: master_node.hpp:29
virtual std::shared_ptr< lely::ev::Executor > get_executor()=0
Get the executor object.
virtual rclcpp::node_interfaces::NodeBaseInterface::SharedPtr get_node_base_interface()=0
Get the node base interface object.
virtual bool is_lifecycle()=0
Check whether the node is a lifecycle node.
virtual void shutdown()=0
Shutdown the driver.
virtual std::shared_ptr< lely::canopen::AsyncMaster > get_master()=0
Get the master object.
virtual void init()=0
Initialise the master.
Canopen Master.
Definition: master_node.hpp:98
std::shared_ptr< node_interfaces::NodeCanopenMasterInterface > node_canopen_master_
Definition: master_node.hpp:100
virtual std::shared_ptr< lely::ev::Executor > get_executor() override
Get the executor object.
CanopenMaster(const rclcpp::NodeOptions &node_options=rclcpp::NodeOptions())
Definition: master_node.hpp:101
virtual void init() override
Initialises the driver.
virtual rclcpp::node_interfaces::NodeBaseInterface::SharedPtr get_node_base_interface() override
Get the node base interface object.
Definition: master_node.hpp:159
virtual std::shared_ptr< lely::canopen::AsyncMaster > get_master() override
Get the master object.
virtual void shutdown() override
Shuts the master down.
virtual bool is_lifecycle()
Check whether the node is a lifecycle node.
Definition: master_node.hpp:168
Definition: master_node.hpp:172
virtual void shutdown() override
Shuts the master down.
virtual std::shared_ptr< lely::ev::Executor > get_executor() override
Get the executor object.
virtual rclcpp::node_interfaces::NodeBaseInterface::SharedPtr get_node_base_interface() override
Get the node base interface object.
Definition: master_node.hpp:289
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_shutdown(const rclcpp_lifecycle::State &state)
Shutdown Transition Callback.
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_activate(const rclcpp_lifecycle::State &state)
Activate Transition Callback.
virtual void init() override
Initialises the driver.
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_cleanup(const rclcpp_lifecycle::State &state)
Cleanup Transition Callback.
std::shared_ptr< node_interfaces::NodeCanopenMasterInterface > node_canopen_master_
Definition: master_node.hpp:174
LifecycleCanopenMaster(const rclcpp::NodeOptions &node_options=rclcpp::NodeOptions())
Definition: master_node.hpp:177
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_deactivate(const rclcpp_lifecycle::State &state)
Deactivet Transition Callback.
virtual bool is_lifecycle()
Check whether the node is a lifecycle node.
Definition: master_node.hpp:298
virtual std::shared_ptr< lely::canopen::AsyncMaster > get_master() override
Get the master object.
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_configure(const rclcpp_lifecycle::State &state)
Configure Transition Callback.
Definition: configuration_manager.hpp:28