From 3cc8bdf598dbf89a352dbdc7172b5f6f3a5c76ee Mon Sep 17 00:00:00 2001 From: thebyohazard Date: Mon, 13 Apr 2020 15:21:04 -0500 Subject: [PATCH] Add raise_error function to lifecycle nodeso a node can self-transition to errorProcessing Signed-off-by: thebyohazard --- .../rclcpp_lifecycle/lifecycle_node.hpp | 8 +++++++ rclcpp_lifecycle/src/lifecycle_node.cpp | 22 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/rclcpp_lifecycle/include/rclcpp_lifecycle/lifecycle_node.hpp b/rclcpp_lifecycle/include/rclcpp_lifecycle/lifecycle_node.hpp index 6b6c213fd5..0dfff0ad3e 100644 --- a/rclcpp_lifecycle/include/rclcpp_lifecycle/lifecycle_node.hpp +++ b/rclcpp_lifecycle/include/rclcpp_lifecycle/lifecycle_node.hpp @@ -613,6 +613,14 @@ class LifecycleNode : public node_interfaces::LifecycleNodeInterface, const State & deactivate(LifecycleNodeInterface::CallbackReturn & cb_return_code); + RCLCPP_LIFECYCLE_PUBLIC + const State & + raise_error(); + + RCLCPP_LIFECYCLE_PUBLIC + const State & + raise_error(LifecycleNodeInterface::CallbackReturn & cb_return_code); + RCLCPP_LIFECYCLE_PUBLIC const State & shutdown(); diff --git a/rclcpp_lifecycle/src/lifecycle_node.cpp b/rclcpp_lifecycle/src/lifecycle_node.cpp index 973ec04270..906f08d254 100644 --- a/rclcpp_lifecycle/src/lifecycle_node.cpp +++ b/rclcpp_lifecycle/src/lifecycle_node.cpp @@ -555,6 +555,28 @@ LifecycleNode::deactivate(LifecycleNodeInterface::CallbackReturn & cb_return_cod lifecycle_msgs::msg::Transition::TRANSITION_DEACTIVATE, cb_return_code); } +const State & +LifecycleNode::raise_error() +{ + if(get_current_state().id() == lifecycle_msgs::msg::State::PRIMARY_STATE_ACTIVE) + return impl_->trigger_transition( + lifecycle_msgs::msg::Transition::TRANSITION_ACTIVE_ERROR); + else + return impl_->trigger_transition( + lifecycle_msgs::msg::Transition::TRANSITION_INACTIVE_ERROR); +} + +const State & +LifecycleNode::raise_error(LifecycleNodeInterface::CallbackReturn & cb_return_code) +{ + if(get_current_state().id() == lifecycle_msgs::msg::State::PRIMARY_STATE_ACTIVE) + return impl_->trigger_transition( + lifecycle_msgs::msg::Transition::TRANSITION_ACTIVE_ERROR, cb_return_code); + else + return impl_->trigger_transition( + lifecycle_msgs::msg::Transition::TRANSITION_INACTIVE_ERROR, cb_return_code); +} + const State & LifecycleNode::shutdown() {