aboutsummaryrefslogtreecommitdiff
path: root/src/modules/mavlink/mavlink_receiver.cpp
diff options
context:
space:
mode:
authorM.H.Kabir <mhkabir98@gmail.com>2015-01-11 12:59:30 +0530
committerMohammed Kabir <mhkabir98@gmail.com>2015-04-14 13:14:15 +0530
commit66e6938c6d979b1a955af7dbb3abb4d420d7c241 (patch)
tree0c39edb99b92e9146625fdd40628b717532641ba /src/modules/mavlink/mavlink_receiver.cpp
parent3c36a615692d746996e4d32a97e8e24285330913 (diff)
downloadpx4-firmware-66e6938c6d979b1a955af7dbb3abb4d420d7c241.tar.gz
px4-firmware-66e6938c6d979b1a955af7dbb3abb4d420d7c241.tar.bz2
px4-firmware-66e6938c6d979b1a955af7dbb3abb4d420d7c241.zip
timesync: Add uORB topic, general fixes
Diffstat (limited to 'src/modules/mavlink/mavlink_receiver.cpp')
-rw-r--r--src/modules/mavlink/mavlink_receiver.cpp24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/modules/mavlink/mavlink_receiver.cpp b/src/modules/mavlink/mavlink_receiver.cpp
index 3f9f7e139..faede15cb 100644
--- a/src/modules/mavlink/mavlink_receiver.cpp
+++ b/src/modules/mavlink/mavlink_receiver.cpp
@@ -121,6 +121,7 @@ MavlinkReceiver::MavlinkReceiver(Mavlink *parent) :
_rc_pub(-1),
_manual_pub(-1),
_land_detector_pub(-1),
+ _time_offset_pub(-1),
_control_mode_sub(orb_subscribe(ORB_ID(vehicle_control_mode))),
_hil_frames(0),
_old_timestamp(0),
@@ -729,8 +730,8 @@ MavlinkReceiver::handle_message_vision_position_estimate(mavlink_message_t *msg)
// Use the component ID to identify the vision sensor
vision_position.id = msg->compid;
- vision_position.timestamp_boot = to_hrt(pos.usec); // Synced time
- vision_position.timestamp_computer = pos.usec;
+ vision_position.timestamp_boot = hrt_absolute_time(); // Monotonic time
+ vision_position.timestamp_computer = sync_stamp(pos.usec); // Synced time
vision_position.x = pos.x;
vision_position.y = pos.y;
vision_position.z = pos.z;
@@ -1013,6 +1014,9 @@ MavlinkReceiver::handle_message_timesync(mavlink_message_t *msg)
mavlink_timesync_t tsync;
mavlink_msg_timesync_decode(msg, &tsync);
+ struct time_offset_s tsync_offset;
+ memset(&tsync_offset, 0, sizeof(tsync_offset));
+
uint64_t now_ns = hrt_absolute_time() * 1000LL ;
if (tsync.tc1 == 0) {
@@ -1039,6 +1043,15 @@ MavlinkReceiver::handle_message_timesync(mavlink_message_t *msg)
}
}
+ tsync_offset.offset_ns = _time_offset ;
+
+ if (_time_offset_pub < 0) {
+ _time_offset_pub = orb_advertise(ORB_ID(time_offset), &tsync_offset);
+
+ } else {
+ orb_publish(ORB_ID(time_offset), _time_offset_pub, &tsync_offset);
+ }
+
}
void
@@ -1522,9 +1535,12 @@ void MavlinkReceiver::print_status()
}
-uint64_t MavlinkReceiver::to_hrt(uint64_t usec)
+uint64_t MavlinkReceiver::sync_stamp(uint64_t usec)
{
- return usec - (_time_offset / 1000) ;
+ if(_time_offset > 0)
+ return usec - (_time_offset / 1000) ;
+ else
+ return hrt_absolute_time();
}