.. _program_listing_file__tmp_ws_src_micro_ros_diagnostics_micro_ros_diagnostic_updater_include_micro_ros_diagnostic_updater_micro_ros_diagnostic_updater.h: Program Listing for File micro_ros_diagnostic_updater.h ======================================================= |exhale_lsh| :ref:`Return to documentation for file ` (``/tmp/ws/src/micro_ros_diagnostics/micro_ros_diagnostic_updater/include/micro_ros_diagnostic_updater/micro_ros_diagnostic_updater.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp // Copyright (c) 2020 - for information on the respective copyright owner // see the NOTICE file and/or the repository // https://github.com/micro-ROS/micro_ros_diagnostics. // // 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. #ifndef MICRO_ROS_DIAGNOSTIC_UPDATER__MICRO_ROS_DIAGNOSTIC_UPDATER_H_ #define MICRO_ROS_DIAGNOSTIC_UPDATER__MICRO_ROS_DIAGNOSTIC_UPDATER_H_ #include #include #include #include #include #include #include "micro_ros_diagnostic_updater/config.h" typedef struct diagnostic_value_t { int8_t value_type; uint16_t key; bool bool_value; int32_t int_value; float double_value; int16_t value_id; int8_t level; bool value_has_changed; } diagnostic_value_t; typedef struct diagnostic_task_t { uint8_t number_of_values; diagnostic_value_t values[MICRO_ROS_DIAGNOSTIC_UPDATER_MAX_VALUES_PER_TASK]; int16_t hardware_id; int16_t updater_id; rcl_ret_t (* function)( diagnostic_value_t[MICRO_ROS_DIAGNOSTIC_UPDATER_MAX_VALUES_PER_TASK], uint8_t * number_of_values); } diagnostic_task_t; typedef struct diagnostic_updater_t { int16_t id; uint8_t num_tasks; diagnostic_task_t * tasks[MICRO_ROS_DIAGNOSTIC_UPDATER_MAX_TASKS_PER_UPDATER]; rcl_publisher_t diag_pub; micro_ros_diagnostic_msgs__msg__MicroROSDiagnosticStatus diag_status; rcl_subscription_t force_update_subscriber; bool force_update; std_msgs__msg__Empty empty_msg; } diagnostic_updater_t; void rclc_diagnostic_value_set_int( diagnostic_value_t * kv, int32_t value); void rclc_diagnostic_value_set_float( diagnostic_value_t * kv, float value); void rclc_diagnostic_value_set_bool( diagnostic_value_t * kv, bool value); void rclc_diagnostic_value_lookup( diagnostic_value_t * kv, int16_t value_id); void rclc_diagnostic_value_set_level( diagnostic_value_t * kv, int8_t level); rcl_ret_t rclc_diagnostic_task_init( diagnostic_task_t * task, int16_t hardware_id, int16_t updater_id, rcl_ret_t (* function)( diagnostic_value_t[MICRO_ROS_DIAGNOSTIC_UPDATER_MAX_VALUES_PER_TASK], uint8_t * number_of_values)); // Added to work with force update, it's very important to call spin // or spin_some before updater_update void force_update_callback(const void *, void * updater_ptr); rcl_ret_t rclc_diagnostic_updater_init( diagnostic_updater_t * updater, rcl_node_t * node, rclc_executor_t * executor); rcl_ret_t rclc_diagnostic_updater_fini( diagnostic_updater_t * updater, rcl_node_t * node, rclc_executor_t * executor); rcl_ret_t rclc_diagnostic_updater_add_task( diagnostic_updater_t * updater, diagnostic_task_t * task); rcl_ret_t rclc_diagnostic_call_task( diagnostic_task_t * task); rcl_ret_t rclc_diagnostic_updater_update( diagnostic_updater_t * updater); #endif // MICRO_ROS_DIAGNOSTIC_UPDATER__MICRO_ROS_DIAGNOSTIC_UPDATER_H_