Skip to content

Commit

Permalink
Take and return new RMW_DURATION_INFINITE correctly
Browse files Browse the repository at this point in the history
Signed-off-by: Emerson Knapp <eknapp@amazon.com>
  • Loading branch information
Emerson Knapp committed Mar 11, 2021
1 parent b084f93 commit d5392bc
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 12 deletions.
14 changes: 7 additions & 7 deletions rmw_fastrtps_shared_cpp/include/rmw_fastrtps_shared_cpp/qos.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,10 @@ get_datawriter_qos(
const rmw_qos_profile_t & qos_policies,
eprosima::fastrtps::PublisherAttributes & pattr);

RMW_FASTRTPS_SHARED_CPP_PUBLIC
rmw_time_t
dds_duration_to_rmw(const eprosima::fastrtps::Duration_t & duration);

/*
* Converts the low-level QOS Policy; of type WriterQos or ReaderQos into rmw_qos_profile_t.
* Since WriterQos or ReaderQos does not have information about history and depth, these values are not set
Expand Down Expand Up @@ -89,11 +93,8 @@ dds_qos_to_rmw_qos(
break;
}

qos->deadline.sec = dds_qos.m_deadline.period.seconds;
qos->deadline.nsec = dds_qos.m_deadline.period.nanosec;

qos->lifespan.sec = dds_qos.m_lifespan.duration.seconds;
qos->lifespan.nsec = dds_qos.m_lifespan.duration.nanosec;
qos->deadline = dds_duration_to_rmw(dds_qos.m_deadline.period);
qos->lifespan = dds_duration_to_rmw(dds_qos.m_lifespan.duration);

switch (dds_qos.m_liveliness.kind) {
case eprosima::fastrtps::AUTOMATIC_LIVELINESS_QOS:
Expand All @@ -106,8 +107,7 @@ dds_qos_to_rmw_qos(
qos->liveliness = RMW_QOS_POLICY_LIVELINESS_UNKNOWN;
break;
}
qos->liveliness_lease_duration.sec = dds_qos.m_liveliness.lease_duration.seconds;
qos->liveliness_lease_duration.nsec = dds_qos.m_liveliness.lease_duration.nanosec;
qos->liveliness_lease_duration = dds_duration_to_rmw(dds_qos.m_liveliness.lease_duration);
}

template<typename AttributeT>
Expand Down
24 changes: 19 additions & 5 deletions rmw_fastrtps_shared_cpp/src/qos.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ static
eprosima::fastrtps::Duration_t
rmw_time_to_fastrtps(const rmw_time_t & time)
{
if (rmw_time_equal(time, RMW_DURATION_INFINITE)) {
return eprosima::fastrtps::rtps::c_RTPSTimeInfinite.to_duration_t();
}

rmw_time_t clamped_time = rmw_dds_common::clamp_rmw_time_to_dds_time(time);
return eprosima::fastrtps::Duration_t(
static_cast<int32_t>(clamped_time.sec),
Expand All @@ -34,9 +38,19 @@ rmw_time_to_fastrtps(const rmw_time_t & time)

static
bool
is_time_default(const rmw_time_t & time)
is_rmw_duration_unspecified(const rmw_time_t & time)
{
return rmw_time_equal(time, RMW_DURATION_UNSPECIFIED);
}

rmw_time_t
dds_duration_to_rmw(const eprosima::fastrtps::Duration_t & duration)
{
return time.sec == 0 && time.nsec == 0;
if (duration == eprosima::fastrtps::rtps::c_RTPSTimeInfinite) {
return RMW_DURATION_INFINITE;
}
rmw_time_t result = {(uint64_t)duration.seconds, (uint64_t)duration.nanosec};
return result;
}

template<typename DDSEntityQos>
Expand Down Expand Up @@ -101,11 +115,11 @@ bool fill_entity_qos_from_profile(
history_qos.depth = static_cast<int32_t>(qos_policies.depth);
}

if (!is_time_default(qos_policies.lifespan)) {
if (!is_rmw_duration_unspecified(qos_policies.lifespan)) {
entity_qos.m_lifespan.duration = rmw_time_to_fastrtps(qos_policies.lifespan);
}

if (!is_time_default(qos_policies.deadline)) {
if (!is_rmw_duration_unspecified(qos_policies.deadline)) {
entity_qos.m_deadline.period = rmw_time_to_fastrtps(qos_policies.deadline);
}

Expand All @@ -122,7 +136,7 @@ bool fill_entity_qos_from_profile(
RMW_SET_ERROR_MSG("Unknown QoS Liveliness policy");
return false;
}
if (!is_time_default(qos_policies.liveliness_lease_duration)) {
if (!is_rmw_duration_unspecified(qos_policies.liveliness_lease_duration)) {
entity_qos.m_liveliness.lease_duration =
rmw_time_to_fastrtps(qos_policies.liveliness_lease_duration);

Expand Down

0 comments on commit d5392bc

Please sign in to comment.