Skip to content

Commit 098a446

Browse files
committed
Major refactor RMW
Signed-off-by: Pablo Garrido <pablogs9@gmail.com>
1 parent 716f2e2 commit 098a446

9 files changed

Lines changed: 41 additions & 104 deletions

File tree

rmw_microxrcedds_c/src/callbacks.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ void on_topic(
8282
.node_namespace = custom_subscription->owner_node->node_namespace,
8383
.topic_name = custom_subscription->topic->topic_name, .ucdr = ub,
8484
.size = length,
85-
.type_support.message_callbacks = custom_subscription->type_support_callbacks);
85+
.type_support.message_callbacks = custom_subscription->topic->type_support_callbacks);
8686
return;
8787
}
8888

rmw_microxrcedds_c/src/rmw_init.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,6 @@ rmw_init(
261261
rmw_uxrce_init_publisher_memory(&publisher_memory, custom_publishers, RMW_UXRCE_MAX_PUBLISHERS);
262262
rmw_uxrce_init_service_memory(&service_memory, custom_services, RMW_UXRCE_MAX_SERVICES);
263263
rmw_uxrce_init_client_memory(&client_memory, custom_clients, RMW_UXRCE_MAX_CLIENTS);
264-
rmw_uxrce_init_topic_memory(&topics_memory, custom_topics, RMW_UXRCE_MAX_TOPICS_INTERNAL);
265264
rmw_uxrce_init_init_options_impl_memory(
266265
&init_options_memory, custom_init_options,
267266
RMW_UXRCE_MAX_OPTIONS);

rmw_microxrcedds_c/src/rmw_microros_internal/rmw_microxrcedds_topic.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ rmw_uxrce_topic_t *
2929
create_topic(
3030
struct rmw_uxrce_node_t * custom_node,
3131
const char * topic_name,
32-
const message_type_support_callbacks_t * message_type_support_callbacks,
32+
const rosidl_message_type_support_t * type_support,
3333
const rmw_qos_profile_t * qos_policies);
3434

3535
rmw_ret_t destroy_topic(

rmw_microxrcedds_c/src/rmw_microros_internal/types.h

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -117,20 +117,20 @@ typedef struct rmw_init_options_impl_s rmw_uxrce_init_options_impl_t;
117117

118118
typedef struct rmw_uxrce_topic_t
119119
{
120-
rmw_uxrce_mempool_item_t mem;
121-
122120
uxrObjectId topic_id;
123-
const message_type_support_callbacks_t * message_type_support_callbacks;
124-
char topic_name[RMW_UXRCE_TOPIC_NAME_MAX_LENGTH];
125121

126-
struct rmw_uxrce_node_t * owner_node;
122+
union {
123+
const message_type_support_callbacks_t * msg;
124+
const service_type_support_callbacks_t * srv;
125+
} type_support_callbacks;
126+
127+
char topic_name[RMW_UXRCE_TOPIC_NAME_MAX_LENGTH];
127128
} rmw_uxrce_topic_t;
128129

129130
typedef struct rmw_uxrce_service_t
130131
{
131132
rmw_uxrce_mempool_item_t mem;
132133
uxrObjectId service_id;
133-
const service_type_support_callbacks_t * type_support_callbacks;
134134
uint16_t service_data_resquest;
135135

136136
rmw_qos_profile_t qos;
@@ -140,14 +140,13 @@ typedef struct rmw_uxrce_service_t
140140
struct rmw_uxrce_node_t * owner_node;
141141

142142
rmw_service_t rmw_service;
143-
char service_name[RMW_UXRCE_TOPIC_NAME_MAX_LENGTH];
143+
rmw_uxrce_topic_t topic;
144144
} rmw_uxrce_service_t;
145145

146146
typedef struct rmw_uxrce_client_t
147147
{
148148
rmw_uxrce_mempool_item_t mem;
149149
uxrObjectId client_id;
150-
const service_type_support_callbacks_t * type_support_callbacks;
151150
uint16_t client_data_request;
152151

153152
rmw_qos_profile_t qos;
@@ -157,7 +156,7 @@ typedef struct rmw_uxrce_client_t
157156
struct rmw_uxrce_node_t * owner_node;
158157

159158
rmw_client_t rmw_client;
160-
char service_name[RMW_UXRCE_TOPIC_NAME_MAX_LENGTH];
159+
rmw_uxrce_topic_t topic;
161160
} rmw_uxrce_client_t;
162161

163162
typedef struct rmw_uxrce_subscription_t
@@ -166,14 +165,12 @@ typedef struct rmw_uxrce_subscription_t
166165
uxrObjectId subscriber_id;
167166
uxrObjectId datareader_id;
168167

169-
const message_type_support_callbacks_t * type_support_callbacks;
170-
struct rmw_uxrce_topic_t * topic;
171-
172168
struct rmw_uxrce_node_t * owner_node;
173169
rmw_qos_profile_t qos;
174170
uxrStreamId stream_id;
175171

176172
rmw_subscription_t rmw_subscription;
173+
rmw_uxrce_topic_t topic;
177174
} rmw_uxrce_subscription_t;
178175

179176
typedef struct rmw_uxrce_publisher_t
@@ -182,20 +179,16 @@ typedef struct rmw_uxrce_publisher_t
182179
uxrObjectId publisher_id;
183180
uxrObjectId datawriter_id;
184181

185-
const message_type_support_callbacks_t * type_support_callbacks;
186-
187182
rmw_uros_continous_serialization_size cs_cb_size;
188183
rmw_uros_continous_serialization cs_cb_serialization;
189184

190-
struct rmw_uxrce_topic_t * topic;
191-
185+
struct rmw_uxrce_node_t * owner_node;
192186
rmw_qos_profile_t qos;
193187
uxrStreamId stream_id;
194188
int session_timeout;
195189

196-
struct rmw_uxrce_node_t * owner_node;
197-
198190
rmw_publisher_t rmw_publisher;
191+
rmw_uxrce_topic_t topic;
199192
} rmw_uxrce_publisher_t;
200193

201194
typedef struct rmw_uxrce_node_t
@@ -278,9 +271,6 @@ extern rmw_uxrce_service_t custom_services[RMW_UXRCE_MAX_SERVICES];
278271
extern rmw_uxrce_mempool_t client_memory;
279272
extern rmw_uxrce_client_t custom_clients[RMW_UXRCE_MAX_CLIENTS];
280273

281-
extern rmw_uxrce_mempool_t topics_memory;
282-
extern rmw_uxrce_topic_t custom_topics[RMW_UXRCE_MAX_TOPICS_INTERNAL];
283-
284274
extern rmw_uxrce_mempool_t static_buffer_memory;
285275
extern rmw_uxrce_static_input_buffer_t custom_static_buffers[RMW_UXRCE_MAX_HISTORY];
286276

rmw_microxrcedds_c/src/rmw_microxrcedds_topic.c

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,17 @@
1818

1919
#include <rmw/allocators.h>
2020

21+
#include <rosidl_typesupport_microxrcedds_c/identifier.h>
22+
#include <rosidl_typesupport_microxrcedds_c/message_type_support.h>
23+
2124
#include "./rmw_microros_internal/utils.h"
2225
#include "./rmw_microros_internal/error_handling_internal.h"
2326

2427
rmw_uxrce_topic_t *
2528
create_topic(
2629
struct rmw_uxrce_node_t * custom_node,
2730
const char * topic_name,
28-
const message_type_support_callbacks_t * message_type_support_callbacks,
31+
const rosidl_message_type_support_t * type_support,
2932
const rmw_qos_profile_t * qos_policies)
3033
{
3134
(void) qos_policies;
@@ -44,7 +47,25 @@ create_topic(
4447
custom_topic->owner_node = custom_node;
4548

4649
// Asociate to typesupport
47-
custom_topic->message_type_support_callbacks = message_type_support_callbacks;
50+
const rosidl_message_type_support_t * type_support_xrce = get_message_typesupport_handle(
51+
type_support, ROSIDL_TYPESUPPORT_MICROXRCEDDS_C__IDENTIFIER_VALUE);
52+
53+
if (NULL == type_support_xrce) {
54+
RMW_UROS_TRACE_MESSAGE("Undefined type support")
55+
rmw_uxrce_fini_topic_memory(custom_topic);
56+
custom_topic = NULL;
57+
goto fail;
58+
}
59+
60+
custom_topic->type_support_callbacks =
61+
(const message_type_support_callbacks_t *)type_support_xrce->data;
62+
63+
if (custom_topic->type_support_callbacks == NULL) {
64+
RMW_UROS_TRACE_MESSAGE("type support data is NULL")
65+
rmw_uxrce_fini_topic_memory(custom_topic);
66+
custom_topic = NULL;
67+
goto fail;
68+
}
4869

4970
// Generate topic id
5071
custom_topic->topic_id = uxr_object_id(custom_node->context->id_topic++, UXR_TOPIC_ID);

rmw_microxrcedds_c/src/rmw_publish.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ rmw_publish(
5050
ret = RMW_RET_ERROR;
5151
} else {
5252
rmw_uxrce_publisher_t * custom_publisher = (rmw_uxrce_publisher_t *)publisher->data;
53-
const message_type_support_callbacks_t * functions = custom_publisher->type_support_callbacks;
53+
const message_type_support_callbacks_t * functions = custom_publisher->topic->type_support_callbacks;
5454
uint32_t topic_length = functions->get_serialized_size(ros_message);
5555

5656
if (custom_publisher->cs_cb_size) {

rmw_microxrcedds_c/src/rmw_publisher.c

Lines changed: 3 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,9 @@
2020
#include <rmw/get_topic_endpoint_info.h>
2121
#endif // RMW_UXRCE_GRAPH
2222

23-
#ifdef HAVE_C_TYPESUPPORT
24-
#include <rosidl_typesupport_microxrcedds_c/identifier.h>
25-
#endif /* ifdef HAVE_C_TYPESUPPORT */
26-
#ifdef HAVE_CPP_TYPESUPPORT
27-
#include <rosidl_typesupport_microxrcedds_cpp/identifier.h>
28-
#endif /* ifdef HAVE_CPP_TYPESUPPORT */
29-
#include <rosidl_typesupport_microxrcedds_c/message_type_support.h>
30-
31-
#include <rmw/allocators.h>
3223
#include <rmw/rmw.h>
24+
#include <rmw/types.h>
25+
#include <rmw/allocators.h>
3326

3427
#include "./rmw_microros_internal/utils.h"
3528
#include "./rmw_microros_internal/rmw_microxrcedds_topic.h"
@@ -103,34 +96,10 @@ rmw_create_publisher(
10396
custom_publisher->cs_cb_size = NULL;
10497
custom_publisher->cs_cb_serialization = NULL;
10598

106-
const rosidl_message_type_support_t * type_support_xrce = NULL;
107-
#ifdef ROSIDL_TYPESUPPORT_MICROXRCEDDS_C__IDENTIFIER_VALUE
108-
type_support_xrce = get_message_typesupport_handle(
109-
type_support, ROSIDL_TYPESUPPORT_MICROXRCEDDS_C__IDENTIFIER_VALUE);
110-
#endif /* ifdef ROSIDL_TYPESUPPORT_MICROXRCEDDS_C__IDENTIFIER_VALUE */
111-
#ifdef ROSIDL_TYPESUPPORT_MICROXRCEDDS_CPP__IDENTIFIER_VALUE
112-
if (NULL == type_support_xrce) {
113-
type_support_xrce = get_message_typesupport_handle(
114-
type_support, ROSIDL_TYPESUPPORT_MICROXRCEDDS_CPP__IDENTIFIER_VALUE);
115-
}
116-
#endif /* ifdef ROSIDL_TYPESUPPORT_MICROXRCEDDS_CPP__IDENTIFIER_VALUE */
117-
if (NULL == type_support_xrce) {
118-
RMW_UROS_TRACE_MESSAGE("Undefined type support")
119-
goto fail;
120-
}
121-
122-
custom_publisher->type_support_callbacks =
123-
(const message_type_support_callbacks_t *)type_support_xrce->data;
124-
125-
if (custom_publisher->type_support_callbacks == NULL) {
126-
RMW_UROS_TRACE_MESSAGE("type support data is NULL")
127-
goto fail;
128-
}
129-
13099
// Create topic
131100
custom_publisher->topic = create_topic(
132101
custom_node, topic_name,
133-
custom_publisher->type_support_callbacks, qos_policies);
102+
type_support, qos_policies);
134103

135104
if (custom_publisher->topic == NULL) {
136105
RMW_UROS_TRACE_MESSAGE("Error creating topic")

rmw_microxrcedds_c/src/rmw_subscription.c

Lines changed: 1 addition & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,6 @@
1818
#include <rmw/get_topic_endpoint_info.h>
1919
#endif // RMW_UXRCE_GRAPH
2020

21-
#ifdef HAVE_C_TYPESUPPORT
22-
#include <rosidl_typesupport_microxrcedds_c/identifier.h>
23-
#endif /* ifdef HAVE_C_TYPESUPPORT */
24-
#ifdef HAVE_CPP_TYPESUPPORT
25-
#include <rosidl_typesupport_microxrcedds_cpp/identifier.h>
26-
#endif /* ifdef HAVE_CPP_TYPESUPPORT */
27-
2821
#include <rmw/rmw.h>
2922
#include <rmw/types.h>
3023
#include <rmw/allocators.h>
@@ -94,34 +87,10 @@ rmw_create_subscription(
9487
custom_subscription->owner_node = custom_node;
9588
custom_subscription->qos = *qos_policies;
9689

97-
const rosidl_message_type_support_t * type_support_xrce = NULL;
98-
#ifdef ROSIDL_TYPESUPPORT_MICROXRCEDDS_C__IDENTIFIER_VALUE
99-
type_support_xrce = get_message_typesupport_handle(
100-
type_support, ROSIDL_TYPESUPPORT_MICROXRCEDDS_C__IDENTIFIER_VALUE);
101-
#endif /* ifdef ROSIDL_TYPESUPPORT_MICROXRCEDDS_C__IDENTIFIER_VALUE */
102-
#ifdef ROSIDL_TYPESUPPORT_MICROXRCEDDS_CPP__IDENTIFIER_VALUE
103-
if (NULL == type_support_xrce) {
104-
type_support_xrce = get_message_typesupport_handle(
105-
type_support, ROSIDL_TYPESUPPORT_MICROXRCEDDS_CPP__IDENTIFIER_VALUE);
106-
}
107-
#endif /* ifdef ROSIDL_TYPESUPPORT_MICROXRCEDDS_CPP__IDENTIFIER_VALUE */
108-
if (NULL == type_support_xrce) {
109-
RMW_UROS_TRACE_MESSAGE("Undefined type support")
110-
goto fail;
111-
}
112-
113-
custom_subscription->type_support_callbacks =
114-
(const message_type_support_callbacks_t *)type_support_xrce->data;
115-
116-
if (custom_subscription->type_support_callbacks == NULL) {
117-
RMW_UROS_TRACE_MESSAGE("type support data is NULL")
118-
goto fail;
119-
}
120-
12190
// Create topic
12291
custom_subscription->topic = create_topic(
12392
custom_node, topic_name,
124-
custom_subscription->type_support_callbacks, qos_policies);
93+
type_support, qos_policies);
12594
if (custom_subscription->topic == NULL) {
12695
goto fail;
12796
}

rmw_microxrcedds_c/src/types.c

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,6 @@ rmw_uxrce_service_t custom_services[RMW_UXRCE_MAX_SERVICES];
5151
rmw_uxrce_mempool_t client_memory;
5252
rmw_uxrce_client_t custom_clients[RMW_UXRCE_MAX_CLIENTS];
5353

54-
rmw_uxrce_mempool_t topics_memory;
55-
rmw_uxrce_topic_t custom_topics[RMW_UXRCE_MAX_TOPICS_INTERNAL];
56-
5754
rmw_uxrce_mempool_t static_buffer_memory;
5855
rmw_uxrce_static_input_buffer_t custom_static_buffers[RMW_UXRCE_MAX_HISTORY];
5956

@@ -103,7 +100,6 @@ RMW_INIT_MEMORY(publisher)
103100
RMW_INIT_MEMORY(subscription)
104101
RMW_INIT_MEMORY(node)
105102
RMW_INIT_MEMORY(session)
106-
RMW_INIT_MEMORY(topic)
107103
RMW_INIT_MEMORY(static_input_buffer)
108104
RMW_INIT_MEMORY(init_options_impl)
109105
RMW_INIT_MEMORY(wait_set)
@@ -209,13 +205,6 @@ void rmw_uxrce_fini_client_memory(
209205
client = NULL;
210206
}
211207

212-
void rmw_uxrce_fini_topic_memory(
213-
rmw_uxrce_topic_t * topic)
214-
{
215-
put_memory(&topics_memory, &topic->mem);
216-
topic->owner_node = NULL;
217-
}
218-
219208
size_t rmw_uxrce_count_static_input_buffer_for_entity(
220209
void * entity)
221210
{

0 commit comments

Comments
 (0)