Skip to content

Commit 1c9da87

Browse files
committed
Implement inconsistent topic.
Note that this is not hooked up inside of CycloneDDS, so this will never fire currently. Signed-off-by: Chris Lalancette <clalancette@openrobotics.org>
1 parent c11d8cf commit 1c9da87

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

rmw_cyclonedds_cpp/src/rmw_node.cpp

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -515,6 +515,7 @@ MAKE_DDS_EVENT_CALLBACK_FN(requested_incompatible_qos, REQUESTED_INCOMPATIBLE_QO
515515
MAKE_DDS_EVENT_CALLBACK_FN(sample_lost, SAMPLE_LOST)
516516
MAKE_DDS_EVENT_CALLBACK_FN(offered_incompatible_qos, OFFERED_INCOMPATIBLE_QOS)
517517
MAKE_DDS_EVENT_CALLBACK_FN(liveliness_changed, LIVELINESS_CHANGED)
518+
MAKE_DDS_EVENT_CALLBACK_FN(inconsistent_topic, INCONSISTENT_TOPIC)
518519

519520
static void listener_set_event_callbacks(dds_listener_t * l, void * arg)
520521
{
@@ -525,6 +526,7 @@ static void listener_set_event_callbacks(dds_listener_t * l, void * arg)
525526
dds_lset_offered_deadline_missed_arg(l, on_offered_deadline_missed_fn, arg, false);
526527
dds_lset_offered_incompatible_qos_arg(l, on_offered_incompatible_qos_fn, arg, false);
527528
dds_lset_liveliness_changed_arg(l, on_liveliness_changed_fn, arg, false);
529+
dds_lset_inconsistent_topic_arg(l, on_inconsistent_topic_fn, arg, false);
528530
}
529531

530532
static bool get_readwrite_qos(dds_entity_t handle, rmw_qos_profile_t * rmw_qos_policies)
@@ -716,6 +718,24 @@ extern "C" rmw_ret_t rmw_event_set_callback(
716718
break;
717719
}
718720

721+
case RMW_EVENT_PUBLISHER_INCONSISTENT_TOPIC:
722+
{
723+
auto pub_event = static_cast<CddsPublisher *>(rmw_event->data);
724+
event_set_callback(
725+
pub_event, DDS_INCONSISTENT_TOPIC_STATUS_ID,
726+
callback, user_data);
727+
break;
728+
}
729+
730+
case RMW_EVENT_SUBSCRIPTION_INCONSISTENT_TOPIC:
731+
{
732+
auto sub_event = static_cast<CddsSubscription *>(rmw_event->data);
733+
event_set_callback(
734+
sub_event, DDS_INCONSISTENT_TOPIC_STATUS_ID,
735+
callback, user_data);
736+
break;
737+
}
738+
719739
case RMW_EVENT_INVALID:
720740
{
721741
return RMW_RET_INVALID_ARGUMENT;
@@ -3627,6 +3647,8 @@ static const std::unordered_map<rmw_event_type_t, uint32_t> mask_map{
36273647
{RMW_EVENT_REQUESTED_QOS_INCOMPATIBLE, DDS_REQUESTED_INCOMPATIBLE_QOS_STATUS},
36283648
{RMW_EVENT_OFFERED_QOS_INCOMPATIBLE, DDS_OFFERED_INCOMPATIBLE_QOS_STATUS},
36293649
{RMW_EVENT_MESSAGE_LOST, DDS_SAMPLE_LOST_STATUS},
3650+
{RMW_EVENT_PUBLISHER_INCONSISTENT_TOPIC, DDS_INCONSISTENT_TOPIC_STATUS},
3651+
{RMW_EVENT_SUBSCRIPTION_INCONSISTENT_TOPIC, DDS_INCONSISTENT_TOPIC_STATUS},
36303652
};
36313653

36323654
static bool is_event_supported(const rmw_event_type_t event_t)
@@ -3799,6 +3821,40 @@ extern "C" rmw_ret_t rmw_take_event(
37993821
}
38003822
}
38013823

3824+
case RMW_EVENT_PUBLISHER_INCONSISTENT_TOPIC: {
3825+
auto it = static_cast<rmw_inconsistent_topic_status_t *>(event_info);
3826+
auto pub = static_cast<CddsPublisher *>(event_handle->data);
3827+
3828+
const dds_entity_t topic = dds_get_topic(pub->enth);
3829+
dds_inconsistent_topic_status_t st;
3830+
if (dds_get_inconsistent_topic_status(topic, &st) < 0) {
3831+
*taken = false;
3832+
return RMW_RET_ERROR;
3833+
} else {
3834+
it->total_count = static_cast<int32_t>(st.total_count);
3835+
it->total_count_change = st.total_count_change;
3836+
*taken = true;
3837+
return RMW_RET_OK;
3838+
}
3839+
}
3840+
3841+
case RMW_EVENT_SUBSCRIPTION_INCONSISTENT_TOPIC: {
3842+
auto it = static_cast<rmw_inconsistent_topic_status_t *>(event_info);
3843+
auto sub = static_cast<CddsSubscription *>(event_handle->data);
3844+
3845+
const dds_entity_t topic = dds_get_topic(sub->enth);
3846+
dds_inconsistent_topic_status_t st;
3847+
if (dds_get_inconsistent_topic_status(topic, &st) < 0) {
3848+
*taken = false;
3849+
return RMW_RET_ERROR;
3850+
} else {
3851+
it->total_count = static_cast<int32_t>(st.total_count);
3852+
it->total_count_change = st.total_count_change;
3853+
*taken = true;
3854+
return RMW_RET_OK;
3855+
}
3856+
}
3857+
38023858
case RMW_EVENT_INVALID: {
38033859
break;
38043860
}

0 commit comments

Comments
 (0)