#pragma once #include "behaviortree_ros2/bt_service_node.hpp" #include "mg_msgs/srv/i2c.hpp" namespace mg { class I2cNode : public BT::RosServiceNode { public: I2cNode(const std::string& name, const BT::NodeConfig& conf, const BT::RosNodeParams& params) : BT::RosServiceNode(name, conf, params) { } static BT::PortsList providedPorts() { return providedBasicPorts({ BT::InputPort("Address", 42, {}), BT::InputPort("Data", 0, {}), BT::OutputPort("Result") }); } bool setRequest(typename Request::SharedPtr& req) override { req->addr = getInput("Address").value_or(42); req->data = getInput("Result").value_or(0); return true; } BT::NodeStatus onResponseReceived(const typename Response::SharedPtr& resp) override { setOutput("Result", resp->resp.front()); return BT::NodeStatus::SUCCESS; } }; }