@@ -26,14 +26,17 @@ namespace
2626{
2727
2828bool
29- is_time_default (const rmw_time_t & time)
29+ is_time_unspecified (const rmw_time_t & time)
3030{
31- return time. sec == 0 && time. nsec == 0 ;
31+ return rmw_time_equal ( time, RMW_DURATION_UNSPECIFIED) ;
3232}
3333
3434DDS_Duration_t
3535rmw_time_to_dds (const rmw_time_t & time)
3636{
37+ if (rmw_time_equal (time, RMW_DURATION_INFINITE)) {
38+ return DDS_DURATION_INFINITE;
39+ }
3740 DDS_Duration_t duration;
3841 duration.sec = static_cast <DDS_Long>(time.sec );
3942 duration.nanosec = static_cast <DDS_UnsignedLong>(time.nsec );
@@ -98,7 +101,7 @@ set_entity_qos_from_profile_generic(
98101
99102 // DDS_DeadlineQosPolicy has default value of DDS_DURATION_INFINITE
100103 // don't overwrite if default passed
101- if (!is_time_default (qos_profile.deadline )) {
104+ if (!is_time_unspecified (qos_profile.deadline )) {
102105 entity_qos.deadline .period = rmw_time_to_dds (qos_profile.deadline );
103106 }
104107
@@ -116,7 +119,7 @@ set_entity_qos_from_profile_generic(
116119 RMW_SET_ERROR_MSG (" Unknown QoS liveliness policy" );
117120 return false ;
118121 }
119- if (!is_time_default (qos_profile.liveliness_lease_duration )) {
122+ if (!is_time_unspecified (qos_profile.liveliness_lease_duration )) {
120123 entity_qos.liveliness .lease_duration = rmw_time_to_dds (qos_profile.liveliness_lease_duration );
121124 }
122125
@@ -151,7 +154,7 @@ set_entity_qos_from_profile(
151154 DDS::DataWriterQos & entity_qos)
152155{
153156 // Set any QoS settings that are specific to DataWriter, then call the shared version
154- if (!is_time_default (qos_profile.lifespan )) {
157+ if (!is_time_unspecified (qos_profile.lifespan )) {
155158 entity_qos.lifespan .duration = rmw_time_to_dds (qos_profile.lifespan );
156159 }
157160 return set_entity_qos_from_profile_generic (qos_profile, entity_qos);
@@ -327,8 +330,7 @@ dds_qos_lifespan_to_rmw_qos_lifespan(
327330 const AttributeT & dds_qos,
328331 rmw_qos_profile_t * qos)
329332{
330- qos->lifespan .sec = dds_qos.lifespan .duration .sec ;
331- qos->lifespan .nsec = dds_qos.lifespan .duration .nanosec ;
333+ qos->lifespan = dds_duration_to_rmw (dds_qos.lifespan .duration );
332334}
333335
334336template <>
@@ -381,6 +383,16 @@ void dds_qos_to_rmw_qos<DDS::DataReaderQos>(
381383 const DDS::DataReaderQos & dds_qos,
382384 rmw_qos_profile_t * qos);
383385
386+ rmw_time_t
387+ dds_duration_to_rmw (DDS_Duration_t duration)
388+ {
389+ if (DDS_Duration_is_infinite (&duration)) {
390+ return RMW_DURATION_INFINITE;
391+ }
392+ rmw_time_t result = {(uint64_t )duration.sec , duration.nanosec };
393+ return result;
394+ }
395+
384396template <typename AttributeT>
385397void
386398dds_remote_qos_to_rmw_qos (
@@ -414,8 +426,7 @@ dds_remote_qos_to_rmw_qos(
414426 break ;
415427 }
416428
417- qos->deadline .sec = dds_qos.deadline .period .sec ;
418- qos->deadline .nsec = dds_qos.deadline .period .nanosec ;
429+ qos->deadline = dds_duration_to_rmw (dds_qos.deadline .period );
419430
420431 dds_qos_lifespan_to_rmw_qos_lifespan (dds_qos, qos);
421432
@@ -430,8 +441,7 @@ dds_remote_qos_to_rmw_qos(
430441 qos->liveliness = RMW_QOS_POLICY_LIVELINESS_UNKNOWN;
431442 break ;
432443 }
433- qos->liveliness_lease_duration .sec = dds_qos.liveliness .lease_duration .sec ;
434- qos->liveliness_lease_duration .nsec = dds_qos.liveliness .lease_duration .nanosec ;
444+ qos->liveliness_lease_duration = dds_duration_to_rmw (dds_qos.liveliness .lease_duration );
435445}
436446
437447template
0 commit comments