33 {
35
36 pub_attr->topic.topicName = channel_name;
37 pub_attr->topic.topicDataType = "UnderlayMessage";
38 pub_attr->topic.topicKind = eprosima::fastrtps::rtps::NO_KEY;
39
40 switch (qos.history()) {
41 case QosHistoryPolicy::HISTORY_KEEP_LAST:
42 pub_attr->topic.historyQos.kind =
43 eprosima::fastrtps::KEEP_LAST_HISTORY_QOS;
44 break;
45 case QosHistoryPolicy::HISTORY_KEEP_ALL:
46 pub_attr->topic.historyQos.kind =
47 eprosima::fastrtps::KEEP_ALL_HISTORY_QOS;
48 break;
49 default:
50 break;
51 }
52
53 switch (qos.durability()) {
54 case QosDurabilityPolicy::DURABILITY_TRANSIENT_LOCAL:
55 pub_attr->qos.m_durability.kind =
56 eprosima::fastrtps::TRANSIENT_LOCAL_DURABILITY_QOS;
57 break;
58 case QosDurabilityPolicy::DURABILITY_VOLATILE:
59 pub_attr->qos.m_durability.kind =
60 eprosima::fastrtps::VOLATILE_DURABILITY_QOS;
61 break;
62 default:
63 break;
64 }
65
66 switch (qos.reliability()) {
67 case QosReliabilityPolicy::RELIABILITY_BEST_EFFORT:
68 pub_attr->qos.m_reliability.kind =
69 eprosima::fastrtps::BEST_EFFORT_RELIABILITY_QOS;
70 break;
71 case QosReliabilityPolicy::RELIABILITY_RELIABLE:
72 pub_attr->qos.m_reliability.kind =
73 eprosima::fastrtps::RELIABLE_RELIABILITY_QOS;
74 break;
75 default:
76 break;
77 }
78
80 pub_attr->topic.historyQos.depth = static_cast<int32_t>(qos.depth());
81 }
82
83
84 if (pub_attr->topic.historyQos.depth < 0) {
85 return false;
86 }
87
88
89
90 pub_attr->times.heartbeatPeriod.seconds = 1;
91 pub_attr->times.heartbeatPeriod.fraction(0);
92 if (qos.mps() != 0) {
93 uint64_t mps = qos.mps();
94
95
96 if (mps > 1024) {
97 mps = 1024;
98 } else if (mps < 64) {
99 mps = 64;
100 }
101
102 uint64_t fractions = (256ull << 32) / mps;
103 uint32_t fraction = fractions & 0xffffffff;
104 int32_t seconds = static_cast<int32_t>(fractions >> 32);
105
106 pub_attr->times.heartbeatPeriod.seconds = seconds;
107 pub_attr->times.heartbeatPeriod.fraction(fraction);
108 }
109
110 pub_attr->qos.m_publishMode.kind =
111 eprosima::fastrtps::ASYNCHRONOUS_PUBLISH_MODE;
112 pub_attr->historyMemoryPolicy =
113 eprosima::fastrtps::rtps::DYNAMIC_RESERVE_MEMORY_MODE;
114 pub_attr->topic.resourceLimitsQos.max_samples = 10000;
115
116 return true;
117}
static const uint32_t QOS_HISTORY_DEPTH_SYSTEM_DEFAULT
#define RETURN_VAL_IF_NULL(ptr, val)