|
2 | 2 | // SPDX-License-Identifier: BSD-3-Clause-Clear |
3 | 3 |
|
4 | 4 | #include "qrb_ros_benchmark/qrb_playback_node.hpp" |
| 5 | +#include "qrb_ros_benchmark/qrb_message_types.hpp" |
5 | 6 | #include "rclcpp_components/register_node_macro.hpp" |
6 | 7 |
|
7 | 8 | using std::placeholders::_1; |
@@ -52,31 +53,31 @@ void QrbPlaybackNode::create_playback_pubsub(const size_t index, const std::stri |
52 | 53 | { |
53 | 54 | RCLCPP_INFO(this->get_logger(), "Data format=\"%s\", index=%ld", format.c_str(), index); |
54 | 55 |
|
55 | | - // Create transport_type pubsub |
56 | | - if (format.compare("qrb_ros/transport/type/Image") == 0) { |
57 | | - pub_sub_types_[index] = PubSubType::QrbTransportType; |
58 | | - return create_message_pubsub<qrb_ros::transport::type::Image>(index, format); |
59 | | - } else if (format.compare("qrb_ros/transport/type/Imu") == 0) { |
60 | | - pub_sub_types_[index] = PubSubType::QrbTransportType; |
61 | | - return create_message_pubsub<qrb_ros::transport::type::Imu>(index, format); |
62 | | - } else if (format.compare("dmabuf_transport/type/Image") == 0) { |
63 | | - pub_sub_types_[index] = PubSubType::DmabufTransportType; |
64 | | - return create_message_pubsub<dmabuf_transport::type::Image>(index, format); |
65 | | - } else if (format.compare("dmabuf_transport/type/PointCloud2") == 0) { |
66 | | - pub_sub_types_[index] = PubSubType::DmabufTransportType; |
67 | | - return create_message_pubsub<dmabuf_transport::type::PointCloud2>(index, format); |
68 | | - } |
| 56 | + // Create transport_type pubsub using common macros |
| 57 | + #define CREATE_QRB_TRANSPORT_PUBSUB(format_str, msg_type) \ |
| 58 | + if (format.compare(format_str) == 0) { \ |
| 59 | + pub_sub_types_[index] = PubSubType::QrbTransportType; \ |
| 60 | + return create_message_pubsub<msg_type>(index, format); \ |
| 61 | + } |
| 62 | + |
| 63 | + FOR_EACH_QRB_TRANSPORT_TYPE(CREATE_QRB_TRANSPORT_PUBSUB) |
| 64 | + |
| 65 | + #define CREATE_DMABUF_TRANSPORT_PUBSUB(format_str, msg_type) \ |
| 66 | + if (format.compare(format_str) == 0) { \ |
| 67 | + pub_sub_types_[index] = PubSubType::DmabufTransportType; \ |
| 68 | + return create_message_pubsub<msg_type>(index, format); \ |
| 69 | + } |
| 70 | + |
| 71 | + FOR_EACH_DMABUF_TRANSPORT_TYPE(CREATE_DMABUF_TRANSPORT_PUBSUB) |
69 | 72 |
|
70 | 73 | // Create ros message type pubsub |
71 | 74 | #define CREATE_ROS_MESSAGE_PUBSUB(ROS_MESSAGE) \ |
72 | | - if (rosidl_generator_traits::name<ROS_MESSAGE>() == format) { \ |
73 | | - pub_sub_types_[index] = PubSubType::RosMessaageType; \ |
74 | | - return create_message_pubsub<ROS_MESSAGE>(index, format); \ |
75 | | - } \ |
76 | | - |
77 | | - CREATE_ROS_MESSAGE_PUBSUB(sensor_msgs::msg::Image) |
78 | | - CREATE_ROS_MESSAGE_PUBSUB(sensor_msgs::msg::CompressedImage) |
79 | | - CREATE_ROS_MESSAGE_PUBSUB(qrb_ros_tensor_list_msgs::msg::TensorList) |
| 75 | + if (rosidl_generator_traits::name<ROS_MESSAGE>() == format) { \ |
| 76 | + pub_sub_types_[index] = PubSubType::RosMessaageType; \ |
| 77 | + return create_message_pubsub<ROS_MESSAGE>(index, format); \ |
| 78 | + } |
| 79 | + |
| 80 | + FOR_EACH_ROS_MESSAGE_TYPE(CREATE_ROS_MESSAGE_PUBSUB) |
80 | 81 |
|
81 | 82 | // Create generic_type type pubsub |
82 | 83 | pub_sub_types_[index] = PubSubType::GenericType; |
@@ -260,31 +261,26 @@ bool QrbPlaybackNode::PublishMessage( |
260 | 261 | return false; |
261 | 262 | } |
262 | 263 |
|
263 | | - // Publish message<ROSMessageType> |
| 264 | + // Publish message<ROSMessageType> using common macros |
264 | 265 | std::string format = message_buffer_map_.at(pub_index)->message_format; |
265 | 266 | switch (pub_sub_types_[pub_index]) { |
266 | 267 | case PubSubType::QrbTransportType: |
267 | 268 | case PubSubType::DmabufTransportType: |
268 | | - if (format.compare("qrb_ros/transport/type/Image") == 0) { |
269 | | - return publish_message<qrb_ros::transport::type::Image>(pub_index, message_index, header); |
270 | | - } else if (format.compare("qrb_ros/transport/type/Imu") == 0) { |
271 | | - return publish_message<qrb_ros::transport::type::Imu>(pub_index, message_index, header); |
272 | | - } else if (format.compare("dmabuf_transport/type/Image") == 0) { |
273 | | - return publish_message<dmabuf_transport::type::Image>(pub_index, message_index, header); |
274 | | - } else if (format.compare("dmabuf_transport/type/PointCloud2") == 0) { |
275 | | - return publish_message<dmabuf_transport::type::PointCloud2>( |
276 | | - pub_index, message_index, header); |
277 | | - } |
| 269 | + #define PUBLISH_TRANSPORT_MESSAGE(format_str, msg_type) \ |
| 270 | + if (format.compare(format_str) == 0) { \ |
| 271 | + return publish_message<msg_type>(pub_index, message_index, header); \ |
| 272 | + } |
| 273 | + |
| 274 | + FOR_EACH_QRB_TRANSPORT_TYPE(PUBLISH_TRANSPORT_MESSAGE) |
| 275 | + FOR_EACH_DMABUF_TRANSPORT_TYPE(PUBLISH_TRANSPORT_MESSAGE) |
278 | 276 | break; |
279 | 277 | case PubSubType::RosMessaageType: |
280 | 278 | #define PUBLISH_ROS_MESSAGE(ROSMessageType) \ |
281 | | - if (rosidl_generator_traits::name<ROSMessageType>() == format) { \ |
282 | | - return publish_message<ROSMessageType>(pub_index, message_index, header); \ |
283 | | - } \ |
284 | | - |
285 | | - PUBLISH_ROS_MESSAGE(sensor_msgs::msg::Image) |
286 | | - PUBLISH_ROS_MESSAGE(sensor_msgs::msg::CompressedImage) |
287 | | - PUBLISH_ROS_MESSAGE(qrb_ros_tensor_list_msgs::msg::TensorList) |
| 279 | + if (rosidl_generator_traits::name<ROSMessageType>() == format) { \ |
| 280 | + return publish_message<ROSMessageType>(pub_index, message_index, header); \ |
| 281 | + } |
| 282 | + |
| 283 | + FOR_EACH_ROS_MESSAGE_TYPE(PUBLISH_ROS_MESSAGE) |
288 | 284 | break; |
289 | 285 | default: |
290 | 286 | return false; |
|
0 commit comments