diff --git a/built_packages b/built_packages
index d21ad7d57..9615965e3 100755
--- a/built_packages
+++ b/built_packages
@@ -13,7 +13,7 @@ https://github.com/micro-ROS/rosidl_typesupport.git 0e03d18809cb08215877ff856a91
https://github.com/micro-ROS/rcutils 500ee3fcb16bf6260453c75b50c3d7785d724443
https://github.com/micro-ROS/micro_ros_utilities c829971bd33ac1f14a94aa722476110b4b59eaf9
https://gitlab.com/micro-ROS/ros_tracing/ros2_tracing.git/ 07ae5aa5c456f887f2aa82896e207a3209309a50
-https://github.com/ros2/rclc 88cd65c27f6e45ea53c653231f59882bd0995bed
+https://github.com/ros2/rclc 2668550d040fe70906a37232c2a5f689970c2d8d
https://github.com/micro-ROS/micro_ros_msgs.git c8af6d4f246d1b324e6578ec967c8ddc1f4093d5
https://github.com/ros-controls/control_msgs 11fdcdf76434d8ca9047787d17add4e18f56e9d6
https://github.com/ros2/rcl_interfaces.git c5d0a20150533a6cb93d5dcbd6e27cea9300aa6e
diff --git a/src/cortex-m0plus/libmicroros.a b/src/cortex-m0plus/libmicroros.a
index 249cf7cc9..d37730f54 100755
Binary files a/src/cortex-m0plus/libmicroros.a and b/src/cortex-m0plus/libmicroros.a differ
diff --git a/src/cortex-m3/libmicroros.a b/src/cortex-m3/libmicroros.a
index 31a9a8017..189b65e18 100755
Binary files a/src/cortex-m3/libmicroros.a and b/src/cortex-m3/libmicroros.a differ
diff --git a/src/cortex-m7/fpv5-d16-softfp/libmicroros.a b/src/cortex-m7/fpv5-d16-softfp/libmicroros.a
index 8797b4e1c..b38e1bde5 100755
Binary files a/src/cortex-m7/fpv5-d16-softfp/libmicroros.a and b/src/cortex-m7/fpv5-d16-softfp/libmicroros.a differ
diff --git a/src/cortex-m7/fpv5-sp-d16-softfp/libmicroros.a b/src/cortex-m7/fpv5-sp-d16-softfp/libmicroros.a
index fc76b35e6..4b85d4da7 100755
Binary files a/src/cortex-m7/fpv5-sp-d16-softfp/libmicroros.a and b/src/cortex-m7/fpv5-sp-d16-softfp/libmicroros.a differ
diff --git a/src/imxrt1062/fpv5-d16-hard/libmicroros.a b/src/imxrt1062/fpv5-d16-hard/libmicroros.a
index 5213756a6..d9b9af9bf 100755
Binary files a/src/imxrt1062/fpv5-d16-hard/libmicroros.a and b/src/imxrt1062/fpv5-d16-hard/libmicroros.a differ
diff --git a/src/mk20dx256/libmicroros.a b/src/mk20dx256/libmicroros.a
index 258e9b5c1..64a128f16 100755
Binary files a/src/mk20dx256/libmicroros.a and b/src/mk20dx256/libmicroros.a differ
diff --git a/src/mk64fx512/fpv4-sp-d16-hard/libmicroros.a b/src/mk64fx512/fpv4-sp-d16-hard/libmicroros.a
index 3beda25c4..6b819813d 100755
Binary files a/src/mk64fx512/fpv4-sp-d16-hard/libmicroros.a and b/src/mk64fx512/fpv4-sp-d16-hard/libmicroros.a differ
diff --git a/src/rclc/client.h b/src/rclc/client.h
index a6393a9c6..c33b0d9b3 100755
--- a/src/rclc/client.h
+++ b/src/rclc/client.h
@@ -78,6 +78,34 @@ rclc_client_init_best_effort(
const rosidl_service_type_support_t * type_support,
const char * service_name);
+/**
+ * Creates an rcl client with defined QoS
+ *
+ * *
+ * Attribute | Adherence
+ * ------------------ | -------------
+ * Allocates Memory | Yes (in RCL)
+ * Thread-Safe | No
+ * Uses Atomics | No
+ * Lock-Free | Yes
+ *
+ * \param[inout] client pointer to zero_initialized rcl_client_t
+ * \param[in] node pointer to an initialized rcl node
+ * \param[in] type_support the message data type
+ * \param[in] service_name the name of service topic
+ * \param[in] qos_profile the qos of the topic
+ * \return `RCL_RET_OK` if successful
+ * \return `RCL_ERROR` (or other error code) if an error has occurred
+ */
+RCLC_PUBLIC
+rcl_ret_t
+rclc_client_init(
+ rcl_client_t * client,
+ const rcl_node_t * node,
+ const rosidl_service_type_support_t * type_support,
+ const char * service_name,
+ const rmw_qos_profile_t * qos_profile);
+
#if __cplusplus
}
#endif
diff --git a/src/rclc/executor.h b/src/rclc/executor.h
index 473d22284..033e1801a 100755
--- a/src/rclc/executor.h
+++ b/src/rclc/executor.h
@@ -568,6 +568,30 @@ rclc_executor_remove_guard_condition(
rclc_executor_t * executor,
const rcl_guard_condition_t * guard_condition);
+/**
+ * The executor prepare function prepare the waitset of the executor if
+ * it is invalid. Does nothing if a valid waitset is already prepared.
+ *
+ * Memory is dynamically allocated within rcl-layer, when DDS queue is accessed with rcl_wait_set_init()
+ *
+ *
+ * Attribute | Adherence
+ * ------------------ | -------------
+ * Allocates Memory | Yes
+ * Thread-Safe | No
+ * Uses Atomics | No
+ * Lock-Free | Yes
+ *
+ *
+ * \param [inout] executor pointer to initialized executor
+ * \return `RCL_RET_OK` if executor prepare operation was successful
+ * \return `RCL_RET_INVALID_ARGUMENT` if any parameter is a null pointer
+ * \return `RCL_RET_ERROR` if any other error occured
+ */
+RCLC_PUBLIC
+rcl_ret_t
+rclc_executor_prepare(
+ rclc_executor_t * executor);
/**
* The spin-some function checks one-time for new data from the DDS-queue.
diff --git a/src/rclc/publisher.h b/src/rclc/publisher.h
index 99617dbf3..35815a21c 100755
--- a/src/rclc/publisher.h
+++ b/src/rclc/publisher.h
@@ -80,6 +80,34 @@ rclc_publisher_init_best_effort(
const rosidl_message_type_support_t * type_support,
const char * topic_name);
+/**
+ * Creates an rcl publisher with defined QoS
+ *
+ * *
+ * Attribute | Adherence
+ * ------------------ | -------------
+ * Allocates Memory | Yes (in RCL)
+ * Thread-Safe | No
+ * Uses Atomics | No
+ * Lock-Free | Yes
+ *
+ * \param[inout] publisher a zero_initialized rcl_publisher_t
+ * \param[in] node the rcl node
+ * \param[in] type_support the message data type
+ * \param[in] topic_name the name of published topic
+ * \param[in] qos_profile the qos of the topic
+ * \return `RCL_RET_OK` if successful
+ * \return `RCL_ERROR` (or other error code) if an error has occurred
+ */
+RCLC_PUBLIC
+rcl_ret_t
+rclc_publisher_init(
+ rcl_publisher_t * publisher,
+ const rcl_node_t * node,
+ const rosidl_message_type_support_t * type_support,
+ const char * topic_name,
+ const rmw_qos_profile_t * qos_profile);
+
#if __cplusplus
}
#endif
diff --git a/src/rclc/service.h b/src/rclc/service.h
index d75fb5b00..c8376244c 100755
--- a/src/rclc/service.h
+++ b/src/rclc/service.h
@@ -78,6 +78,34 @@ rclc_service_init_best_effort(
const rosidl_service_type_support_t * type_support,
const char * service_name);
+/**
+ * Creates an rcl service with defined QoS
+ *
+ * *
+ * Attribute | Adherence
+ * ------------------ | -------------
+ * Allocates Memory | Yes (in RCL)
+ * Thread-Safe | No
+ * Uses Atomics | No
+ * Lock-Free | Yes
+ *
+ * \param[inout] service a zero_initialized rcl_service_t
+ * \param[in] node pointer to an initialized rcl node
+ * \param[in] type_support type of the request message
+ * \param[in] service_name the name of service topic
+ * \param[in] qos_profile the qos of the topic
+ * \return `RCL_RET_OK` if successful
+ * \return `RCL_ERROR` (or other error code) if an error has occurred
+ */
+RCLC_PUBLIC
+rcl_ret_t
+rclc_service_init(
+ rcl_service_t * service,
+ const rcl_node_t * node,
+ const rosidl_service_type_support_t * type_support,
+ const char * service_name,
+ const rmw_qos_profile_t * qos_profile);
+
#if __cplusplus
}
#endif
diff --git a/src/rclc/subscription.h b/src/rclc/subscription.h
index 79c2fde56..cfa5ab485 100755
--- a/src/rclc/subscription.h
+++ b/src/rclc/subscription.h
@@ -78,6 +78,35 @@ rclc_subscription_init_best_effort(
const rosidl_message_type_support_t * type_support,
const char * topic_name);
+
+/**
+ * Creates an rcl subscription with defined QoS
+ *
+ * *
+ * Attribute | Adherence
+ * ------------------ | -------------
+ * Allocates Memory | Yes (in RCL)
+ * Thread-Safe | No
+ * Uses Atomics | No
+ * Lock-Free | Yes
+ *
+ * \param[inout] subscription - a zero-initialized rcl_subscription_t
+ * \param[in] node the rcl node
+ * \param[in] type_support the message data type
+ * \param[in] topic_name the name of subscribed topic
+ * \param[in] qos_profile the qos of the topic
+ * \return `RCL_RET_OK` if successful
+ * \return `RCL_ERROR` (or other error code) if an error occurred
+ */
+RCLC_PUBLIC
+rcl_ret_t
+rclc_subscription_init(
+ rcl_subscription_t * subscription,
+ rcl_node_t * node,
+ const rosidl_message_type_support_t * type_support,
+ const char * topic_name,
+ const rmw_qos_profile_t * qos_profile);
+
#if __cplusplus
}
#endif