.. _program_listing_file__tmp_ws_src_micro_ros_diagnostics_micro_ros_diagnostic_bridge_include_micro_ros_diagnostic_bridge_micro_ros_diagnostic_bridge.hpp: Program Listing for File micro_ros_diagnostic_bridge.hpp ======================================================== |exhale_lsh| :ref:`Return to documentation for file ` (``/tmp/ws/src/micro_ros_diagnostics/micro_ros_diagnostic_bridge/include/micro_ros_diagnostic_bridge/micro_ros_diagnostic_bridge.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp // Copyright (c) 2021 - for information on the respective copyright owner // see the NOTICE file and/or the repository https://github.com/microros/system_modes // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #pragma once #include #include #include #include #include #include #include "rclcpp/rclcpp.hpp" #include "diagnostic_msgs/msg/diagnostic_array.hpp" #include "micro_ros_diagnostic_msgs/msg/micro_ros_diagnostic_status.hpp" static const char UROS_DIAGNOSTICS_BRIDGE_TOPIC_IN[] = "diagnostics_uros"; static const char UROS_DIAGNOSTICS_BRIDGE_TOPIC_OUT[] = "diagnostics"; namespace uros_diagnostic_msg = micro_ros_diagnostic_msgs::msg; namespace diagnostic_msg = diagnostic_msgs::msg; constexpr int UNIQUE_POLYNOM = 4567; struct MicroROSDiagnosticUpdater { std::string name; std::string description; }; struct MicroROSDiagnosticKey { int updater_id; int key_id; bool operator<(const MicroROSDiagnosticKey & rhs) const { return (updater_id * UNIQUE_POLYNOM + key_id) < (rhs.updater_id * UNIQUE_POLYNOM + rhs.key_id); } }; struct MicroROSDiagnosticValue { MicroROSDiagnosticKey task; int value_id; bool operator<(const MicroROSDiagnosticValue & rhs) const { return (task.updater_id * UNIQUE_POLYNOM * UNIQUE_POLYNOM + task.key_id * UNIQUE_POLYNOM + value_id) < (rhs.task.updater_id * UNIQUE_POLYNOM * UNIQUE_POLYNOM + rhs.task.key_id * UNIQUE_POLYNOM + rhs.value_id); } }; typedef std::map HardwareMap; typedef std::map UpdaterMap; typedef std::map KeyMap; typedef std::map ValueMap; class MicroROSDiagnosticBridge : public rclcpp::Node { public: explicit MicroROSDiagnosticBridge(const std::string & path = ""); std::string lookup_hardware( int hardware_id); const MicroROSDiagnosticUpdater lookup_updater( int updater_id); std::string lookup_key( int updater_id, int key); std::string lookup_value( int updater_id, int key, int value_id); private: void read_lookup_table(const std::string & path); rclcpp::Logger logger_; rclcpp::Subscription::SharedPtr uros_diagnostics_sub_; rclcpp::Publisher::SharedPtr ros2_diagnostics_pub_; HardwareMap hardware_map_; UpdaterMap updater_map_; KeyMap key_map_; ValueMap value_map_; };