diff --git a/include/dds_datareader.h b/include/dds_datareader.h index 05832f8b58dceac1edfbe43d2d1e82e8dd22d275..b92f1f9b88bb8abb89f517b2793c719b40394444 100644 --- a/include/dds_datareader.h +++ b/include/dds_datareader.h @@ -233,6 +233,9 @@ DCPSDLL DDS_InstanceHandle_t DDS_DataReader_lookup_instance( DDS_DataReader* datareader, void* instance); +DCPSDLL DDS_ReturnCode_t DDS_DataReader_enable( + DDS_DataReader* datareader); + #ifdef __cplusplus } #endif diff --git a/include/dds_datawriter.h b/include/dds_datawriter.h index 3ab0605419c78cf3ee662d7841002cc21e3a6b3b..6a066c05a5170204b488b1b7d496cfe084cbe653 100644 --- a/include/dds_datawriter.h +++ b/include/dds_datawriter.h @@ -454,6 +454,20 @@ DCPSDLL DDS_ReturnCode_t DDS_DataWriter_dispose_w_timestamp( const DDS_InstanceHandle_t* handle, const DDS_Time_t* timestamp); +/** + * @fn DCPSDLL DDS_ReturnCode_t DDS_DataWriter_enable(DDS_DataWriter* writer); + * + * @brief 使能数据写者。 + * + * @param [in,out] writer 指向目标。 + * + * @return 可能的返回值如下: + * - #DDS_RETCODE_OK 使能成功; + * - #DDS_RETCODE_ERROR 未归类错误。 + */ +DCPSDLL DDS_ReturnCode_t DDS_DataWriter_enable( + DDS_DataWriter* writer); + #ifdef __cplusplus } #endif diff --git a/include/dds_topic.h b/include/dds_topic.h index 61b4bebd8b93ddfe56760b3f5e9a91fb0ce4be9c..19bd80f5e0f9aca1c1fb9585a666693bbdc11788 100644 --- a/include/dds_topic.h +++ b/include/dds_topic.h @@ -203,7 +203,7 @@ DCPSDLL DDS_ReturnCode_t DDS_Topic_set_qos_with_profile( /** - * @fn DDS_Topic* DDS_ContentFilterTopic_get_related_topic(DDS_ContentFilteredTopic* self); + * @fn DDS_Topic* DDS_ContentFilteredTopic_get_related_topic(DDS_ContentFilteredTopic* self); * * @brief 获取该基于内容过滤主题的基础主题,在使用 DDS_DomainParticipant_create_contentfilertopic 创建时指定。 * @@ -212,7 +212,19 @@ DCPSDLL DDS_ReturnCode_t DDS_Topic_set_qos_with_profile( * @return 指向该基于内容过滤的主题关联的基础主题。 */ - DCPSDLL DDS_Topic* DDS_ContentFilterTopic_get_related_topic( + DCPSDLL DDS_Topic* DDS_ContentFilteredTopic_get_related_topic( + DDS_ContentFilteredTopic* self); + +/** + * @fn const DDS_Char* DDS_ContentFilteredTopic_get_filter_expression(DDS_ContentFilteredTopic* self); + * + * @brief 获取该基于内容过滤主题的过滤表达式。 + * + * @param [in,out] self 指明目标。 + * + * @return 返回过滤表达式字符串。 + */ +DCPSDLL const DDS_Char* DDS_ContentFilteredTopic_get_filter_expression( DDS_ContentFilteredTopic* self); /** diff --git a/src/dds_datareader.cpp b/src/dds_datareader.cpp index d67c6f503e3da2017206ff1846f3e47e4c5a8bf4..3487c3eb0c972fab3264dfa913bd3d08852b7505 100644 --- a/src/dds_datareader.cpp +++ b/src/dds_datareader.cpp @@ -297,4 +297,10 @@ DCPSDLL DDS_ReturnCode_t DDS_DataReader_take_next_sample( // TODO: Implement read_instance, take_instance, read_next_instance, take_next_instance, read_next_instance_w_condition, take_next_instance_w_condition +DCPSDLL DDS_ReturnCode_t DDS_DataReader_enable( + DDS_DataReader* datareader) { + TRAVODDS::DataReader* cppReader = reinterpret_cast(datareader); + return cppReader->enable(); +} + } // extern "C" \ No newline at end of file diff --git a/src/dds_datawriter.cpp b/src/dds_datawriter.cpp index f3c8aa1481d1678d454ae61c17b31a0da368dbdd..8694551e3c8243dd84972e917c0ed252fd806d7c 100644 --- a/src/dds_datawriter.cpp +++ b/src/dds_datawriter.cpp @@ -290,4 +290,10 @@ DCPSDLL DDS_ReturnCode_t DDS_DataWriter_set_qos_with_profile( #endif +DCPSDLL DDS_ReturnCode_t DDS_DataWriter_enable( + DDS_DataWriter* writer) { + TRAVODDS::DataWriter* cppWriter = reinterpret_cast(writer); + return cppWriter->enable(); +} + } // extern "C" \ No newline at end of file diff --git a/src/dds_infrastructure.cpp b/src/dds_infrastructure.cpp index 8d480029c54d0681964665a841047aee3ecc475c..b3b3f834250c94f9d883f8e53f54c504a46682c9 100644 --- a/src/dds_infrastructure.cpp +++ b/src/dds_infrastructure.cpp @@ -56,13 +56,13 @@ void DDS_TopicQos_initialize(DDS_TopicQos* qos) { qos->durability_service.max_samples = DDS_LENGTH_UNLIMITED; qos->durability_service.max_instances = DDS_LENGTH_UNLIMITED; qos->durability_service.max_samples_per_instance = DDS_LENGTH_UNLIMITED; - qos->deadline.period.sec = 0; - qos->deadline.period.nanosec = 0; + qos->deadline.period.sec = 0x7fffffff; + qos->deadline.period.nanosec = 0xffffffff; qos->latency_budget.duration.sec = 0; qos->latency_budget.duration.nanosec = 0; qos->liveliness.kind = DDS_AUTOMATIC_LIVELINESS_QOS; - qos->liveliness.lease_duration.sec = 0; - qos->liveliness.lease_duration.nanosec = 0; + qos->liveliness.lease_duration.sec = 0x7fffffff; + qos->liveliness.lease_duration.nanosec = 0xffffffff; qos->reliability.kind = DDS_BEST_EFFORT_RELIABILITY_QOS; qos->reliability.max_blocking_time.sec = 0; qos->reliability.max_blocking_time.nanosec = 100 * 1000 * 1000; @@ -73,8 +73,8 @@ void DDS_TopicQos_initialize(DDS_TopicQos* qos) { qos->resource_limits.max_instances = DDS_LENGTH_UNLIMITED; qos->resource_limits.max_samples_per_instance = DDS_LENGTH_UNLIMITED; qos->transport_priority.value = 0; - qos->lifespan.duration.sec = 0; - qos->lifespan.duration.nanosec = 0; + qos->lifespan.duration.sec = 0x7fffffff; + qos->lifespan.duration.nanosec = 0xffffffff; qos->ownership.kind = DDS_SHARED_OWNERSHIP_QOS; } @@ -82,13 +82,13 @@ void DDS_DataWriterQos_initialize(DDS_DataWriterQos* qos) { qos->durability.kind = DDS_VOLATILE_DURABILITY_QOS; qos->durability_service.service_cleanup_delay.sec = 0; qos->durability_service.service_cleanup_delay.nanosec = 0; - qos->deadline.period.sec = 0; - qos->deadline.period.nanosec = 0; + qos->deadline.period.sec = 0x7fffffff; + qos->deadline.period.nanosec = 0xffffffff; qos->latency_budget.duration.sec = 0; qos->latency_budget.duration.nanosec = 0; qos->liveliness.kind = DDS_AUTOMATIC_LIVELINESS_QOS; - qos->liveliness.lease_duration.sec = 0; - qos->liveliness.lease_duration.nanosec = 0; + qos->liveliness.lease_duration.sec = 0x7fffffff; + qos->liveliness.lease_duration.nanosec = 0xffffffff; qos->reliability.kind = DDS_RELIABLE_RELIABILITY_QOS; qos->reliability.max_blocking_time.sec = 0; qos->reliability.max_blocking_time.nanosec = 100 * 1000 * 1000; @@ -99,8 +99,8 @@ void DDS_DataWriterQos_initialize(DDS_DataWriterQos* qos) { qos->resource_limits.max_instances = DDS_LENGTH_UNLIMITED; qos->resource_limits.max_samples_per_instance = DDS_LENGTH_UNLIMITED; qos->transport_priority.value = 0; - qos->lifespan.duration.sec = 0; - qos->lifespan.duration.nanosec = 0; + qos->lifespan.duration.sec = 0x7fffffff; + qos->lifespan.duration.nanosec = 0xffffffff; new(&qos->user_data.value)DDS_UCharSequence(); qos->ownership.kind = DDS_SHARED_OWNERSHIP_QOS; qos->ownership_strength.value = 0; @@ -109,13 +109,13 @@ void DDS_DataWriterQos_initialize(DDS_DataWriterQos* qos) { void DDS_DataReaderQos_initialize(DDS_DataReaderQos* qos) { qos->durability.kind = DDS_VOLATILE_DURABILITY_QOS; - qos->deadline.period.sec = 0; - qos->deadline.period.nanosec = 0; + qos->deadline.period.sec = 0x7fffffff; + qos->deadline.period.nanosec = 0xffffffff; qos->latency_budget.duration.sec = 0; qos->latency_budget.duration.nanosec = 0; qos->liveliness.kind = DDS_AUTOMATIC_LIVELINESS_QOS; - qos->liveliness.lease_duration.sec = 0; - qos->liveliness.lease_duration.nanosec = 0; + qos->liveliness.lease_duration.sec = 0x7fffffff; + qos->liveliness.lease_duration.nanosec = 0xffffffff; qos->reliability.kind = DDS_BEST_EFFORT_RELIABILITY_QOS; qos->reliability.max_blocking_time.sec = 0; qos->reliability.max_blocking_time.nanosec = 100 * 1000 * 1000; @@ -129,4 +129,8 @@ void DDS_DataReaderQos_initialize(DDS_DataReaderQos* qos) { qos->ownership.kind = DDS_SHARED_OWNERSHIP_QOS; qos->time_based_filter.minimum_separation.sec = 0; qos->time_based_filter.minimum_separation.nanosec = 0; + qos->reader_data_lifecycle.autopurge_nowriter_samples_delay.sec = 0x7fffffff; + qos->reader_data_lifecycle.autopurge_nowriter_samples_delay.nanosec = 0xffffffff; + qos->reader_data_lifecycle.autopurge_disposed_samples_delay.sec = 0x7fffffff; + qos->reader_data_lifecycle.autopurge_disposed_samples_delay.nanosec = 0xffffffff; } \ No newline at end of file diff --git a/src/dds_topic.cpp b/src/dds_topic.cpp index 60bbf87bd35108bd3e3b1f15b1ef78532440f881..68b29ae7c1403d64157526b6d9f8b15c8f52e03f 100644 --- a/src/dds_topic.cpp +++ b/src/dds_topic.cpp @@ -87,11 +87,16 @@ DCPSDLL DDS_ReturnCode_t DDS_Topic_set_qos_with_profile(DDS_Topic* self, const D } #endif /* _XML_INTERFACE_C */ -DCPSDLL DDS_Topic* DDS_ContentFilterTopic_get_related_topic(DDS_ContentFilteredTopic* self) { +DCPSDLL DDS_Topic* DDS_ContentFilteredTopic_get_related_topic(DDS_ContentFilteredTopic* self) { TRAVODDS::ContentFilteredTopic* cppContentFilteredTopic = reinterpret_cast(self); return reinterpret_cast(cppContentFilteredTopic->get_related_topic()); } +DCPSDLL const DDS_Char* DDS_ContentFilteredTopic_get_filter_expression(DDS_ContentFilteredTopic* self) { + TRAVODDS::ContentFilteredTopic* cppContentFilteredTopic = reinterpret_cast(self); + return cppContentFilteredTopic->get_filter_expression().c_str(); +} + DCPSDLL DDS_ReturnCode_t DDS_ContentFilteredTopic_get_expression_parameters(DDS_ContentFilteredTopic* self, DDS_CStringSequence* para) { TRAVODDS::ContentFilteredTopic* cppContentFilteredTopic = reinterpret_cast(self); TRAVODDS::StringSeq cppPara; diff --git a/src/dds_type_convert.h b/src/dds_type_convert.h index d8918321018081697d8c9dc6c41fb1dddce70b24..1be7f85e4579af3d81fe653df8f9f00707e11e3c 100644 --- a/src/dds_type_convert.h +++ b/src/dds_type_convert.h @@ -64,16 +64,12 @@ public: static void convert(const DDS_InstanceHandle_t& src, TRAVODDS::InstanceHandle_t& dst) { dst.isValid = src.valid; - if (src.valid) { - memcpy(dst.keyHash.value, src.value, sizeof(src.value)); - } + memcpy(dst.keyHash.value, src.value, sizeof(src.value)); } static void convert(const TRAVODDS::InstanceHandle_t& src, DDS_InstanceHandle_t& dst) { dst.valid = src.isValid; - if (src.isValid) { - memcpy(dst.value, src.keyHash.value, sizeof(src.keyHash.value)); - } + memcpy(dst.value, src.keyHash.value, sizeof(src.keyHash.value)); } static void convert(const DDS_InconsistentTopicStatus& src, TRAVODDS::InconsistentTopicStatus& dst); diff --git a/travodds-c_1.1.0.orig.tar.gz b/travodds-c_1.1.0.orig.tar.gz index c3338fbd809802bd6e8d67ae80a4c99fca69861d..3881d4617ed6bfb185f0a70e731f417eb3d4178a 100644 Binary files a/travodds-c_1.1.0.orig.tar.gz and b/travodds-c_1.1.0.orig.tar.gz differ