1515#include " rcl_logging_bindings.h"
1616
1717#include < rcl/error_handling.h>
18+ #include < rcl/logging.h>
19+ #include < rcl/logging_rosout.h>
1820#include < rcl/rcl.h>
1921#include < rcl_logging_interface/rcl_logging_interface.h>
2022
2123#include < string>
2224
2325#include " macros.h"
26+ #include " rcl_handle.h"
2427#include " rcl_utilities.h"
2528
2629namespace rclnodejs {
2730
31+ Napi::Value InitRosoutPublisherForNode (const Napi::CallbackInfo& info) {
32+ Napi::Env env = info.Env ();
33+ RclHandle* node_handle = RclHandle::Unwrap (info[0 ].As <Napi::Object>());
34+ rcl_node_t * node = reinterpret_cast <rcl_node_t *>(node_handle->ptr ());
35+
36+ if (rcl_logging_rosout_enabled ()) {
37+ rcl_ret_t ret = rcl_logging_rosout_init_publisher_for_node (node);
38+ if (ret != RCL_RET_OK ) {
39+ Napi::Error::New (env, rcl_get_error_string ().str )
40+ .ThrowAsJavaScriptException ();
41+ rcl_reset_error ();
42+ }
43+ }
44+ return env.Undefined ();
45+ }
46+
47+ Napi::Value FiniRosoutPublisherForNode (const Napi::CallbackInfo& info) {
48+ Napi::Env env = info.Env ();
49+ RclHandle* node_handle = RclHandle::Unwrap (info[0 ].As <Napi::Object>());
50+ rcl_node_t * node = reinterpret_cast <rcl_node_t *>(node_handle->ptr ());
51+
52+ if (rcl_logging_rosout_enabled ()) {
53+ rcl_ret_t ret = rcl_logging_rosout_fini_publisher_for_node (node);
54+ if (ret != RCL_RET_OK ) {
55+ Napi::Error::New (env, rcl_get_error_string ().str )
56+ .ThrowAsJavaScriptException ();
57+ rcl_reset_error ();
58+ }
59+ }
60+ return env.Undefined ();
61+ }
62+
2863Napi::Value setLoggerLevel (const Napi::CallbackInfo& info) {
2964 Napi::Env env = info.Env ();
3065
@@ -104,6 +139,41 @@ Napi::Value GetLoggingDirectory(const Napi::CallbackInfo& info) {
104139 return result;
105140}
106141
142+ #if ROS_VERSION > 2205
143+ Napi::Value AddRosoutSublogger (const Napi::CallbackInfo& info) {
144+ Napi::Env env = info.Env ();
145+ std::string logger_name = info[0 ].As <Napi::String>().Utf8Value ();
146+ std::string sublogger_name = info[1 ].As <Napi::String>().Utf8Value ();
147+
148+ rcl_ret_t ret = rcl_logging_rosout_add_sublogger (logger_name.c_str (),
149+ sublogger_name.c_str ());
150+ if (ret == RCL_RET_OK ) {
151+ return Napi::Boolean::New (env, true );
152+ } else if (ret == RCL_RET_NOT_FOUND ) {
153+ rcl_reset_error ();
154+ return Napi::Boolean::New (env, false );
155+ } else {
156+ Napi::Error::New (env, rcl_get_error_string ().str )
157+ .ThrowAsJavaScriptException ();
158+ rcl_reset_error ();
159+ return env.Undefined ();
160+ }
161+ }
162+
163+ Napi::Value RemoveRosoutSublogger (const Napi::CallbackInfo& info) {
164+ Napi::Env env = info.Env ();
165+ std::string logger_name = info[0 ].As <Napi::String>().Utf8Value ();
166+ std::string sublogger_name = info[1 ].As <Napi::String>().Utf8Value ();
167+
168+ rcl_ret_t ret = rcl_logging_rosout_remove_sublogger (logger_name.c_str (),
169+ sublogger_name.c_str ());
170+ if (ret != RCL_RET_OK ) {
171+ rcl_reset_error ();
172+ }
173+ return env.Undefined ();
174+ }
175+ #endif
176+
107177Napi::Object InitLoggingBindings (Napi::Env env, Napi::Object exports) {
108178 exports.Set (" setLoggerLevel" , Napi::Function::New (env, setLoggerLevel));
109179 exports.Set (" getLoggerEffectiveLevel" ,
@@ -112,6 +182,16 @@ Napi::Object InitLoggingBindings(Napi::Env env, Napi::Object exports) {
112182 exports.Set (" isEnableFor" , Napi::Function::New (env, IsEnableFor));
113183 exports.Set (" getLoggingDirectory" ,
114184 Napi::Function::New (env, GetLoggingDirectory));
185+ exports.Set (" initRosoutPublisherForNode" ,
186+ Napi::Function::New (env, InitRosoutPublisherForNode));
187+ exports.Set (" finiRosoutPublisherForNode" ,
188+ Napi::Function::New (env, FiniRosoutPublisherForNode));
189+ #if ROS_VERSION > 2205
190+ exports.Set (" addRosoutSublogger" ,
191+ Napi::Function::New (env, AddRosoutSublogger));
192+ exports.Set (" removeRosoutSublogger" ,
193+ Napi::Function::New (env, RemoveRosoutSublogger));
194+ #endif
115195 return exports;
116196}
117197
0 commit comments