microRTPS: timesync: apply offset atomically

This commit is contained in:
TSC21
2020-03-05 11:36:16 +00:00
committed by Nuno Marques
parent 170835f3f8
commit 441e6290eb
2 changed files with 8 additions and 1 deletions
+5
View File
@@ -122,6 +122,8 @@ void RtpsTopics::publish(uint8_t topic_ID, char data_buffer[], size_t len)
@[ if topic == 'Timesync']@ @[ if topic == 'Timesync']@
_timesync->processTimesyncMsg(&st); _timesync->processTimesyncMsg(&st);
@[ end if]@ @[ end if]@
// apply timestamp offset
_timesync->applyOffset(st.timestamp());
_@(topic)_pub.publish(&st); _@(topic)_pub.publish(&st);
} }
break; break;
@@ -156,6 +158,9 @@ bool RtpsTopics::getMsg(const uint8_t topic_ID, eprosima::fastcdr::Cdr &scdr)
@(topic) msg = _@(topic)_sub.getMsg(); @(topic) msg = _@(topic)_sub.getMsg();
@[ end if]@ @[ end if]@
@[ end if]@ @[ end if]@
// apply timestamp offset
_timesync->applyOffset(msg.timestamp());
msg.serialize(scdr); msg.serialize(scdr);
ret = true; ret = true;
_@(topic)_sub.unlockMsg(); _@(topic)_sub.unlockMsg();
+3 -1
View File
@@ -90,8 +90,10 @@ public:
px4_msgs::msg::Timesync newTimesyncMsg(); px4_msgs::msg::Timesync newTimesyncMsg();
inline void applyOffset(uint64_t &timestamp) { timestamp += _offset_ns.load(); }
private: private:
int64_t _offset_ns; std::atomic<int64_t> _offset_ns;
int64_t _skew_ns_per_sync; int64_t _skew_ns_per_sync;
int64_t _num_samples; int64_t _num_samples;