mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-25 08:03:34 +08:00
microdds_client: set queue depth for incoming topics according to msg definition
Otherwise the FMU might miss publications from 2 different publishers at the same time.
This commit is contained in:
@@ -126,7 +126,10 @@ static void on_topic_update(uxrSession *session, uxrObjectId object_id, uint16_t
|
|||||||
bool RcvTopicsPubs::init(uxrSession *session, uxrStreamId reliable_out_stream_id, uxrStreamId reliable_in_stream_id, uxrStreamId best_effort_in_stream_id, uxrObjectId participant_id, const char *client_namespace)
|
bool RcvTopicsPubs::init(uxrSession *session, uxrStreamId reliable_out_stream_id, uxrStreamId reliable_in_stream_id, uxrStreamId best_effort_in_stream_id, uxrObjectId participant_id, const char *client_namespace)
|
||||||
{
|
{
|
||||||
@[ for idx, sub in enumerate(subscriptions)]@
|
@[ for idx, sub in enumerate(subscriptions)]@
|
||||||
create_data_reader(session, reliable_out_stream_id, best_effort_in_stream_id, participant_id, @(idx), client_namespace, "@(sub['topic_simple'])", "@(sub['dds_type'])");
|
{
|
||||||
|
uint16_t queue_depth = uORB::DefaultQueueSize<@(sub['simple_base_type'])_s>::value * 2; // use a bit larger queue size than internal
|
||||||
|
create_data_reader(session, reliable_out_stream_id, best_effort_in_stream_id, participant_id, @(idx), client_namespace, "@(sub['topic_simple'])", "@(sub['dds_type'])", queue_depth);
|
||||||
|
}
|
||||||
@[ end for]@
|
@[ end for]@
|
||||||
|
|
||||||
uxr_set_topic_callback(session, on_topic_update, this);
|
uxr_set_topic_callback(session, on_topic_update, this);
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ static bool create_data_writer(uxrSession *session, uxrStreamId reliable_out_str
|
|||||||
|
|
||||||
static bool create_data_reader(uxrSession *session, uxrStreamId reliable_out_stream_id, uxrStreamId input_stream_id,
|
static bool create_data_reader(uxrSession *session, uxrStreamId reliable_out_stream_id, uxrStreamId input_stream_id,
|
||||||
uxrObjectId participant_id, uint16_t index, const char *client_namespace, const char *topic_name_simple,
|
uxrObjectId participant_id, uint16_t index, const char *client_namespace, const char *topic_name_simple,
|
||||||
const char *type_name)
|
const char *type_name, uint16_t queue_depth)
|
||||||
{
|
{
|
||||||
// topic
|
// topic
|
||||||
char topic_name[TOPIC_NAME_SIZE];
|
char topic_name[TOPIC_NAME_SIZE];
|
||||||
@@ -115,7 +115,7 @@ static bool create_data_reader(uxrSession *session, uxrStreamId reliable_out_str
|
|||||||
.durability = UXR_DURABILITY_VOLATILE,
|
.durability = UXR_DURABILITY_VOLATILE,
|
||||||
.reliability = UXR_RELIABILITY_BEST_EFFORT,
|
.reliability = UXR_RELIABILITY_BEST_EFFORT,
|
||||||
.history = UXR_HISTORY_KEEP_LAST,
|
.history = UXR_HISTORY_KEEP_LAST,
|
||||||
.depth = 0,
|
.depth = queue_depth,
|
||||||
};
|
};
|
||||||
|
|
||||||
uint16_t datareader_req = uxr_buffer_create_datareader_bin(session, reliable_out_stream_id, datareader_id,
|
uint16_t datareader_req = uxr_buffer_create_datareader_bin(session, reliable_out_stream_id, datareader_id,
|
||||||
|
|||||||
Reference in New Issue
Block a user