1616
1717#include < rcl/error_handling.h>
1818#include < rcl/rcl.h>
19+ #include < rcl_action/action_client.h>
1920#include < rcl_action/rcl_action.h>
2021
2122#include < string>
@@ -241,6 +242,45 @@ Napi::Value ActionSendCancelRequest(const Napi::CallbackInfo& info) {
241242 return Napi::Number::New (env, static_cast <int32_t >(sequence_number));
242243}
243244
245+ #if ROS_VERSION >= 2505 // ROS2 >= Kilted
246+ Napi::Value ConfigureActionClientIntrospection (const Napi::CallbackInfo& info) {
247+ Napi::Env env = info.Env ();
248+ RclHandle* action_client_handle =
249+ RclHandle::Unwrap (info[0 ].As <Napi::Object>());
250+ rcl_action_client_t * action_client =
251+ reinterpret_cast <rcl_action_client_t *>(action_client_handle->ptr ());
252+ RclHandle* node_handle = RclHandle::Unwrap (info[1 ].As <Napi::Object>());
253+ rcl_node_t * node = reinterpret_cast <rcl_node_t *>(node_handle->ptr ());
254+ rcl_clock_t * clock = reinterpret_cast <rcl_clock_t *>(
255+ RclHandle::Unwrap (info[2 ].As <Napi::Object>())->ptr ());
256+
257+ std::string action_name = info[3 ].As <Napi::String>().Utf8Value ();
258+ std::string package_name = info[4 ].As <Napi::String>().Utf8Value ();
259+ const rosidl_action_type_support_t * ts =
260+ GetActionTypeSupport (package_name, action_name);
261+ rcl_ret_t ret = RCL_RET_ERROR;
262+ if (ts) {
263+ rcl_publisher_options_t publisher_ops = rcl_publisher_get_default_options ();
264+ auto qos_profile = GetQoSProfile (info[5 ]);
265+ if (qos_profile) {
266+ publisher_ops.qos = *qos_profile;
267+ }
268+ rcl_service_introspection_state_t state =
269+ static_cast <rcl_service_introspection_state_t >(
270+ info[6 ].As <Napi::Number>().Uint32Value ());
271+ ret = rcl_action_client_configure_action_introspection (
272+ action_client, node, clock, ts, publisher_ops, state);
273+ if (ret == RCL_RET_OK) {
274+ return env.Undefined ();
275+ }
276+ }
277+
278+ Napi::Error::New (env, " failed to configure action client introspection" )
279+ .ThrowAsJavaScriptException ();
280+ return env.Undefined ();
281+ }
282+ #endif // ROS_VERSION >= 2505
283+
244284Napi::Object InitActionClientBindings (Napi::Env env, Napi::Object exports) {
245285 exports.Set (" actionCreateClient" ,
246286 Napi::Function::New (env, ActionCreateClient));
@@ -256,6 +296,10 @@ Napi::Object InitActionClientBindings(Napi::Env env, Napi::Object exports) {
256296 exports.Set (" getNumEntities" , Napi::Function::New (env, GetNumEntities));
257297 exports.Set (" actionSendCancelRequest" ,
258298 Napi::Function::New (env, ActionSendCancelRequest));
299+ #if ROS_VERSION >= 2505 // ROS2 >= Kilted
300+ exports.Set (" configureActionClientIntrospection" ,
301+ Napi::Function::New (env, ConfigureActionClientIntrospection));
302+ #endif // ROS_VERSION >= 2505
259303 return exports;
260304}
261305
0 commit comments