77#include <stdint.h>
88#include "shared-bindings/rclcpy/Node.h"
99#include "shared-bindings/rclcpy/Publisher.h"
10+ #include "shared-bindings/util.h"
1011#include "py/objproperty.h"
1112#include "py/objtype.h"
1213#include "py/runtime.h"
@@ -30,8 +31,22 @@ static mp_obj_t rclcpy_node_make_new(const mp_obj_type_t *type, size_t n_args, s
3031 return (mp_obj_t )self ;
3132}
3233
34+ static mp_obj_t rclcpy_node_obj_deinit (mp_obj_t self_in ) {
35+ rclcpy_node_obj_t * self = MP_OBJ_TO_PTR (self_in );
36+ common_hal_rclcpy_node_deinit (self );
37+ return mp_const_none ;
38+ }
39+ MP_DEFINE_CONST_FUN_OBJ_1 (rclcpy_node_deinit_obj , rclcpy_node_obj_deinit );
40+
41+ static void check_for_deinit (rclcpy_node_obj_t * self ) {
42+ if (common_hal_rclcpy_node_deinited (self )) {
43+ raise_deinited_error ();
44+ }
45+ }
46+
3347static mp_obj_t rclcpy_node_create_publisher (mp_obj_t self_in , mp_obj_t topic ) {
3448 rclcpy_node_obj_t * self = MP_OBJ_TO_PTR (self_in );
49+ check_for_deinit (self );
3550 const char * topic_name = mp_obj_str_get_str (topic );
3651
3752 rclcpy_publisher_obj_t * publisher = mp_obj_malloc_with_finaliser (rclcpy_publisher_obj_t , & rclcpy_publisher_type );
@@ -41,24 +56,24 @@ static mp_obj_t rclcpy_node_create_publisher(mp_obj_t self_in, mp_obj_t topic) {
4156static MP_DEFINE_CONST_FUN_OBJ_2 (rclcpy_node_create_publisher_obj , rclcpy_node_create_publisher ) ;
4257
4358static mp_obj_t rclcpy_node_get_name (mp_obj_t self_in ) {
44- // TODO: probably a good idea
45- // check_for_deinit(self);
4659 rclcpy_node_obj_t * self = MP_OBJ_TO_PTR (self_in );
60+ check_for_deinit (self );
4761 const char * name_str = common_hal_rclcpy_node_get_name (self );
4862 return mp_obj_new_str (name_str ,strlen (name_str ));
4963}
5064static MP_DEFINE_CONST_FUN_OBJ_1 (rclcpy_node_get_name_obj , rclcpy_node_get_name ) ;
5165
5266static mp_obj_t rclcpy_node_get_namespace (mp_obj_t self_in ) {
53- // TODO: probably a good idea
54- // check_for_deinit(self);
5567 rclcpy_node_obj_t * self = MP_OBJ_TO_PTR (self_in );
68+ check_for_deinit (self );
5669 const char * namespace_str = common_hal_rclcpy_node_get_namespace (self );
5770 return mp_obj_new_str (namespace_str ,strlen (namespace_str ));
5871}
5972static MP_DEFINE_CONST_FUN_OBJ_1 (rclcpy_node_get_namespace_obj , rclcpy_node_get_namespace ) ;
6073
6174static const mp_rom_map_elem_t rclcpy_node_locals_dict_table [] = {
75+ { MP_ROM_QSTR (MP_QSTR_deinit ), MP_ROM_PTR (& rclcpy_node_deinit_obj ) },
76+ { MP_ROM_QSTR (MP_QSTR___del__ ), MP_ROM_PTR (& rclcpy_node_deinit_obj ) },
6277 { MP_ROM_QSTR (MP_QSTR_create_publisher ), MP_ROM_PTR (& rclcpy_node_create_publisher_obj ) },
6378 { MP_ROM_QSTR (MP_QSTR_get_name ), MP_ROM_PTR (& rclcpy_node_get_name_obj ) },
6479 { MP_ROM_QSTR (MP_QSTR_get_namespace ), MP_ROM_PTR (& rclcpy_node_get_namespace_obj ) },
@@ -73,21 +88,3 @@ MP_DEFINE_CONST_OBJ_TYPE(
7388 make_new , rclcpy_node_make_new ,
7489 locals_dict , & rclcpy_node_locals_dict
7590);
76-
77- // Examples:
78-
79- // MP_DEFINE_CONST_OBJ_TYPE(
80- // rtc_rtc_type,
81- // MP_QSTR_RTC,
82- // MP_TYPE_FLAG_HAS_SPECIAL_ACCESSORS,
83- // make_new, rtc_rtc_make_new,
84- // locals_dict, &rtc_rtc_locals_dict
85- // );
86-
87- // MP_DEFINE_CONST_OBJ_TYPE(
88- // socketpool_socket_type,
89- // MP_QSTR_Socket,
90- // MP_TYPE_FLAG_HAS_SPECIAL_ACCESSORS,
91- // locals_dict, &socketpool_socket_locals_dict,
92- // protocol, &socket_stream_p
93- // );
0 commit comments