From 1fcc70d5b1c1bc5530c17b5361ea824a71c67485 Mon Sep 17 00:00:00 2001 From: Mike Cailean Date: Tue, 10 Dec 2019 11:21:05 -0800 Subject: Populate elapsedRealtime for measurements CRs-fixed: 2590937 Change-Id: I17fb0e058009eb719aa7ca48c8eea65d67475617 --- android/2.0/location_api/MeasurementAPIClient.cpp | 36 +++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'android/2.0/location_api/MeasurementAPIClient.cpp') diff --git a/android/2.0/location_api/MeasurementAPIClient.cpp b/android/2.0/location_api/MeasurementAPIClient.cpp index dc972ec..b87e508 100644 --- a/android/2.0/location_api/MeasurementAPIClient.cpp +++ b/android/2.0/location_api/MeasurementAPIClient.cpp @@ -32,6 +32,7 @@ #include #include +#include #include "LocationUtil.h" #include "MeasurementAPIClient.h" @@ -414,6 +415,41 @@ static void convertGnssData_2_0(GnssMeasurementsNotification& in, out.measurements[i].state |= IGnssMeasurementCallback::GnssMeasurementState::STATE_2ND_CODE_LOCK; } convertGnssClock(in.clock, out.clock); + + const uint32_t UTC_TO_GPS_SECONDS = 315964800; + struct timespec currentTime; + int64_t sinceBootTimeNanos; + + if (getCurrentTime(currentTime, sinceBootTimeNanos) && + in.clock.flags & GNSS_MEASUREMENTS_CLOCK_FLAGS_LEAP_SECOND_BIT && + in.clock.flags & GNSS_MEASUREMENTS_CLOCK_FLAGS_FULL_BIAS_BIT && + in.clock.flags & GNSS_MEASUREMENTS_CLOCK_FLAGS_BIAS_BIT && + in.clock.flags & GNSS_MEASUREMENTS_CLOCK_FLAGS_BIAS_UNCERTAINTY_BIT) { + int64_t currentTimeNanos = currentTime.tv_sec * 1000000000 + currentTime.tv_nsec; + int64_t measTimeNanos = (int64_t)in.clock.timeNs - (int64_t)in.clock.fullBiasNs + - (int64_t)in.clock.biasNs - (int64_t)in.clock.leapSecond * 1000000000 + + (int64_t)UTC_TO_GPS_SECONDS * 1000000000; + + LOC_LOGd("sinceBootTimeNanos:%" PRIi64 " currentTimeNanos:%" PRIi64 "" + " measTimeNanos:%" PRIi64 "", + sinceBootTimeNanos, currentTimeNanos, measTimeNanos); + if (currentTimeNanos >= measTimeNanos) { + int64_t ageTimeNanos = currentTimeNanos - measTimeNanos; + LOC_LOGD("%s]: ageTimeNanos:%" PRIi64 ")", __FUNCTION__, ageTimeNanos); + if (ageTimeNanos >= 0 && ageTimeNanos <= sinceBootTimeNanos) { + out.elapsedRealtime.flags |= ElapsedRealtimeFlags::HAS_TIMESTAMP_NS; + out.elapsedRealtime.timestampNs = sinceBootTimeNanos - ageTimeNanos; + out.elapsedRealtime.flags |= ElapsedRealtimeFlags::HAS_TIME_UNCERTAINTY_NS; + // time uncertainty is 1 ms since it is calculated from utc time that is in ms + out.elapsedRealtime.timeUncertaintyNs = 1000000; + LOC_LOGd("timestampNs:%" PRIi64 ") timeUncertaintyNs:%" PRIi64 ")", + out.elapsedRealtime.timestampNs, + out.elapsedRealtime.timeUncertaintyNs); + } + } + } else { + LOC_LOGe("Failed to calculate elapsedRealtimeNanos timestamp"); + } } static void convertGnssMeasurementsCodeType(GnssMeasurementsCodeType& in, -- cgit v1.2.3