diff --git a/cmake/common/px4_base.cmake b/cmake/common/px4_base.cmake index 10c696f388..0c3771ce74 100644 --- a/cmake/common/px4_base.cmake +++ b/cmake/common/px4_base.cmake @@ -454,7 +454,7 @@ function(px4_add_common_flags) set(visibility_flags -fvisibility=hidden - -include visibility.h + -include ${PX4_SOURCE_DIR}/src/include/visibility.h ) set(added_c_flags diff --git a/msg/templates/uorb_microcdr/microRTPS_client.cpp.template b/msg/templates/uorb_microcdr/microRTPS_client.cpp.template index 2801a7bcee..f2e98543c0 100644 --- a/msg/templates/uorb_microcdr/microRTPS_client.cpp.template +++ b/msg/templates/uorb_microcdr/microRTPS_client.cpp.template @@ -61,7 +61,7 @@ recv_topics = [s.short_name for idx, s in enumerate(spec) if scope[idx] == MsgSc #include #include -#include +#include #include #include @@ -90,13 +90,10 @@ void* send(void* /*unused*/) orb_set_interval(fds[@(idx)], _options.update_time_ms); @[end for]@ - // microBuffer to serialized using the user defined buffer - struct microBuffer microBufferWriter; + // MicroBuffer to serialized using the user defined buffer + MicroBuffer MicroBufferWriter; header_length=transport_node->get_header_length(); - initStaticAlignedBuffer(&data_buffer[header_length], BUFFER_SIZE-header_length, µBufferWriter); - // microCDR structs for managing the microBuffer - struct microCDR microCDRWriter; - initMicroCDR(µCDRWriter, µBufferWriter); + init_micro_buffer(&MicroBufferWriter, (uint8_t*)&data_buffer[header_length], BUFFER_SIZE - header_length); struct timespec begin; px4_clock_gettime(CLOCK_REALTIME, &begin); @@ -113,7 +110,7 @@ void* send(void* /*unused*/) // copy raw data into local buffer if (orb_copy(ORB_ID(@(topic)), fds[@(idx)], &data) == 0) { /* payload is shifted by header length to make room for header*/ - serialize_@(topic)(&data, &data_buffer[header_length], &length, µCDRWriter); + serialize_@(topic)(&MicroBufferWriter, &data, &data_buffer[header_length], &length); if (0 < (read = transport_node->write((char)@(message_id(topic)), data_buffer, length))) { @@ -167,12 +164,9 @@ void micrortps_start_topics(struct timespec &begin, int &total_read, uint32_t &r orb_advert_t @(topic)_pub = nullptr; @[end for]@ - // microBuffer to deserialized using the user defined buffer - struct microBuffer microBufferReader; - initDeserializedAlignedBuffer(data_buffer, BUFFER_SIZE, µBufferReader); - // microCDR structs for managing the microBuffer - struct microCDR microCDRReader; - initMicroCDR(µCDRReader, µBufferReader); + // MicroBuffer to deserialized using the user defined buffer + MicroBuffer MicroBufferReader; + init_micro_buffer(&MicroBufferReader, (uint8_t*)data_buffer, BUFFER_SIZE); @[end if]@ px4_clock_gettime(CLOCK_REALTIME, &begin); @@ -195,7 +189,7 @@ void micrortps_start_topics(struct timespec &begin, int &total_read, uint32_t &r @[for topic in recv_topics]@ case @(message_id(topic)): { - deserialize_@(topic)(&@(topic)_data, data_buffer, µCDRReader); + deserialize_@(topic)(&MicroBufferReader, &@(topic)_data, data_buffer); if (!@(topic)_pub) { @(topic)_pub = orb_advertise(ORB_ID(@(topic)), &@(topic)_data); } else { diff --git a/msg/templates/uorb_microcdr/msg.cpp.template b/msg/templates/uorb_microcdr/msg.cpp.template index 6b43203726..60fd383aa4 100644 --- a/msg/templates/uorb_microcdr/msg.cpp.template +++ b/msg/templates/uorb_microcdr/msg.cpp.template @@ -61,7 +61,7 @@ topic_name = spec.short_name }@ #include -#include +#include #include #include @@ -98,9 +98,9 @@ def add_serialize_functions(fields, scope_name): if (not field.is_header): if (field.is_builtin): if (not field.is_array): - print(" serialize"+str(get_serialization_type_name(field.type))+"(input->"+scope_name+str(field.name)+", microCDRWriter);") + print(" serialize_" + str(get_serialization_type_name(field.type)) + "(microCDRWriter, input->" + scope_name+str(field.name) + ");") else: - print(" serialize"+str(get_serialization_type_name(field.base_type))+"Array(input->"+scope_name+str(field.name)+", "+str(field.array_len)+", microCDRWriter);") + print(" serialize_array_" + str(get_serialization_type_name(field.base_type)) + "(microCDRWriter, input->" + scope_name+str(field.name) + ", " + str(field.array_len) + ");") else: name = field.name children_fields = get_children_fields(field.base_type, search_path) @@ -116,10 +116,9 @@ def add_deserialize_functions(fields, scope_name): if (not field.is_header): if (field.is_builtin): if (not field.is_array): - print(" deserialize"+str(get_serialization_type_name(field.type))+"(&output->"+scope_name+str(field.name)+", microCDRReader);") + print(" deserialize_" + str(get_serialization_type_name(field.type)) + "(microCDRReader, &output->" + scope_name+str(field.name) + ");") else: - for i in range(field.array_len): - print(" deserialize"+str(get_serialization_type_name(field.base_type))+"(&output->"+scope_name+str(field.name)+ str('[%d]' %i) +", microCDRReader);") + print(" deserialize_array_" + str(get_serialization_type_name(field.base_type)) + "(microCDRReader, output->" + scope_name+str(field.name) + ", " + str(field.array_len) + ");") else: name = field.name children_fields = get_children_fields(field.base_type, search_path) @@ -141,24 +140,25 @@ def add_code_to_deserialize(): add_deserialize_functions(sorted_fields, "") }@ -void serialize_@(topic_name)(const struct @(uorb_struct) *input, char *output, uint32_t *length, struct microCDR *microCDRWriter) +void serialize_@(topic_name)(MicroBuffer *microCDRWriter, const struct @(uorb_struct) *input, char *output, uint32_t *length) { - if (nullptr == input || nullptr == output || nullptr == length || nullptr == microCDRWriter) return; + if (nullptr == microCDRWriter || nullptr == input || nullptr == output || nullptr == length) + return; - resetStaticMicroCDRForSerialize(microCDRWriter); + reset_micro_buffer(microCDRWriter); - serializeUnsignedLong(input->timestamp, microCDRWriter); + serialize_uint64_t(microCDRWriter, input->timestamp); @add_code_to_serialize() - - (*length) = microCDRWriter->m_microBuffer->m_serializedBuffer; + (*length) = micro_buffer_length(microCDRWriter); } -void deserialize_@(topic_name)(struct @(uorb_struct) *output, char *input, struct microCDR *microCDRReader) +void deserialize_@(topic_name)(MicroBuffer *microCDRReader, struct @(uorb_struct) *output, const char *input) { - if (nullptr == output || nullptr == input || nullptr == microCDRReader) return; + if (nullptr == microCDRReader || nullptr == output || nullptr == input) + return; - resetStaticMicroCDRForDeserialize(microCDRReader); + reset_micro_buffer(microCDRReader); - deserializeUnsignedLong(&output->timestamp, microCDRReader); + deserialize_uint64_t(microCDRReader, &output->timestamp); @add_code_to_deserialize() -} \ No newline at end of file +} diff --git a/msg/templates/uorb_microcdr/msg.h.template b/msg/templates/uorb_microcdr/msg.h.template index ec05f4ead0..6f2235d237 100644 --- a/msg/templates/uorb_microcdr/msg.h.template +++ b/msg/templates/uorb_microcdr/msg.h.template @@ -68,8 +68,7 @@ topic_name = spec.short_name #include #include -struct microCDR; +struct MicroBuffer; - -void serialize_@(topic_name)(const struct @(uorb_struct) *input, char *output, uint32_t *length, struct microCDR *microCDRWriter); -void deserialize_@(topic_name)(struct @(uorb_struct) *output, char *input, struct microCDR *microCDRReader); +void serialize_@(topic_name)(MicroBuffer *microCDRWriter, const struct @(uorb_struct) *input, char *output, uint32_t *length); +void deserialize_@(topic_name)(MicroBuffer *microCDRReader, struct @(uorb_struct) *output, const char *input); diff --git a/msg/templates/uorb_microcdr/uORBTopics.cpp.template b/msg/templates/uorb_microcdr/uORBTopics.cpp.template index bc245b5f54..8f4c671f97 100644 --- a/msg/templates/uorb_microcdr/uORBTopics.cpp.template +++ b/msg/templates/uorb_microcdr/uORBTopics.cpp.template @@ -43,4 +43,4 @@ * ****************************************************************************/ -#include \ No newline at end of file +#include diff --git a/msg/templates/urtps/Publisher.cpp.template b/msg/templates/urtps/Publisher.cpp.template index 4a5fb589a4..4b9dec4100 100644 --- a/msg/templates/urtps/Publisher.cpp.template +++ b/msg/templates/urtps/Publisher.cpp.template @@ -92,7 +92,7 @@ bool @(topic)_Publisher::init() PublisherAttributes Wparam; Wparam.topic.topicKind = NO_KEY; Wparam.topic.topicDataType = myType.getName(); //This type MUST be registered - Wparam.topic.topicName = "@(topic)"; + Wparam.topic.topicName = "@(topic)_PubSubTopic"; mp_publisher = Domain::createPublisher(mp_participant, Wparam, (PublisherListener*) &m_listener); if(mp_publisher == nullptr) return false; @@ -100,7 +100,7 @@ bool @(topic)_Publisher::init() return true; } -void @(topic)_Publisher::PubListener::onPublicationMatched(Publisher* pub,MatchingInfo& info) +void @(topic)_Publisher::PubListener::onPublicationMatched(Publisher* pub, MatchingInfo& info) { if (info.status == MATCHED_MATCHING) { diff --git a/msg/templates/urtps/Subscriber.cpp.template b/msg/templates/urtps/Subscriber.cpp.template index bb6f5f1523..9bdeb52c08 100644 --- a/msg/templates/urtps/Subscriber.cpp.template +++ b/msg/templates/urtps/Subscriber.cpp.template @@ -90,14 +90,14 @@ bool @(topic)_Subscriber::init() SubscriberAttributes Rparam; Rparam.topic.topicKind = NO_KEY; Rparam.topic.topicDataType = myType.getName(); //Must be registered before the creation of the subscriber - Rparam.topic.topicName = "@(topic)"; + Rparam.topic.topicName = "@(topic)_PubSubTopic"; mp_subscriber = Domain::createSubscriber(mp_participant, Rparam, (SubscriberListener*) &m_listener); if(mp_subscriber == nullptr) return false; return true; } -void @(topic)_Subscriber::SubListener::onSubscriptionMatched(Subscriber* sub,MatchingInfo& info) +void @(topic)_Subscriber::SubListener::onSubscriptionMatched(Subscriber* sub, MatchingInfo& info) { if (info.status == MATCHED_MATCHING) { diff --git a/msg/tools/px_generate_uorb_topic_helper.py b/msg/tools/px_generate_uorb_topic_helper.py index 2c0a4c7996..02d46523f3 100644 --- a/msg/tools/px_generate_uorb_topic_helper.py +++ b/msg/tools/px_generate_uorb_topic_helper.py @@ -24,18 +24,18 @@ type_map = { } type_serialize_map = { - 'int8': 'SignedChar', - 'int16': 'Short', - 'int32': 'Int', - 'int64': 'Long', - 'uint8': 'UnsignedChar', - 'uint16': 'UnsignedShort', - 'uint32': 'UnsignedInt', - 'uint64': 'UnsignedLong', - 'float32': 'Float', - 'float64': 'Double', - 'bool': 'Bool', - 'char': 'Char', + 'int8': 'char', + 'int16': 'int16_t', + 'int32': 'int32_t', + 'int64': 'int64_t', + 'uint8': 'uint8_t', + 'uint16': 'uint16_t', + 'uint32': 'uint32_t', + 'uint64': 'uint64_t', + 'float32': 'float', + 'float64': 'double', + 'bool': 'bool', + 'char': 'char', } type_idl_map = { diff --git a/src/modules/micrortps_bridge/CMakeLists.txt b/src/modules/micrortps_bridge/CMakeLists.txt index 367b51c2f5..580656d19f 100644 --- a/src/modules/micrortps_bridge/CMakeLists.txt +++ b/src/modules/micrortps_bridge/CMakeLists.txt @@ -61,6 +61,9 @@ endif() if (GENERATE_RTPS_BRIDGE) + # temporarily set to OFF + option(CHECK_ENDIANNESS OFF) + add_subdirectory(micrortps_client) ############################################################################### @@ -132,15 +135,16 @@ if (GENERATE_RTPS_BRIDGE) add_dependencies(uorb_msgs_microcdr uorb_headers_microcdr_gen git_micro_cdr - lib__micro-CDR + microcdr ) - target_link_libraries(uorb_msgs_microcdr PRIVATE lib__micro-CDR) - # microCDR target_include_directories(uorb_msgs_microcdr PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/micro-CDR/include + ${CMAKE_CURRENT_BINARY_DIR}/micro-CDR/include ${CMAKE_CURRENT_BINARY_DIR}/micro-CDR/include/microcdr ) + + target_link_libraries(uorb_msgs_microcdr PRIVATE microcdr) endif() diff --git a/src/modules/micrortps_bridge/micro-CDR b/src/modules/micrortps_bridge/micro-CDR index 50776f4ab7..890b118196 160000 --- a/src/modules/micrortps_bridge/micro-CDR +++ b/src/modules/micrortps_bridge/micro-CDR @@ -1 +1 @@ -Subproject commit 50776f4ab7895e47af535a6d6e7ec697ddf443f3 +Subproject commit 890b118196a253540bc175096fa53d7733005d7b diff --git a/src/modules/micrortps_bridge/micrortps_client/CMakeLists.txt b/src/modules/micrortps_bridge/micrortps_client/CMakeLists.txt index aa0273ed1e..50769604f3 100644 --- a/src/modules/micrortps_bridge/micrortps_client/CMakeLists.txt +++ b/src/modules/micrortps_bridge/micrortps_client/CMakeLists.txt @@ -100,4 +100,4 @@ if (NOT "${config_rtps_send_topics}" STREQUAL "" OR NOT "${config_rtps_receive_t topic_bridge_files ) target_link_libraries(modules__micrortps_bridge__micrortps_client PRIVATE uorb_msgs_microcdr) -endif() \ No newline at end of file +endif() diff --git a/src/modules/micrortps_bridge/micrortps_client/microRTPS_client.h b/src/modules/micrortps_bridge/micrortps_client/microRTPS_client.h index 3416ac4e69..c036343b8c 100644 --- a/src/modules/micrortps_bridge/micrortps_client/microRTPS_client.h +++ b/src/modules/micrortps_bridge/micrortps_client/microRTPS_client.h @@ -40,7 +40,7 @@ #include #include -#include +#include #include #include #include