diff options
Diffstat (limited to 'android/2.0/location_api/LocationUtil.cpp')
-rw-r--r-- | android/2.0/location_api/LocationUtil.cpp | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/android/2.0/location_api/LocationUtil.cpp b/android/2.0/location_api/LocationUtil.cpp index 8a30066..7e6810c 100644 --- a/android/2.0/location_api/LocationUtil.cpp +++ b/android/2.0/location_api/LocationUtil.cpp @@ -81,21 +81,16 @@ void convertGnssLocation(Location& in, V1_0::GnssLocation& out) out.timestamp = static_cast<V1_0::GnssUtcTime>(in.timestamp); } -void convertGnssLocation(Location& in, V2_0::GnssLocation& out) +bool getCurrentTime(struct timespec& currentTime, int64_t& sinceBootTimeNanos) { - memset(&out, 0, sizeof(V2_0::GnssLocation)); - convertGnssLocation(in, out.v1_0); - struct timespec sinceBootTime; - struct timespec currentTime; struct timespec sinceBootTimeTest; - int64_t sinceBootTimeNanos = 0; bool clockGetTimeSuccess = false; const uint32_t MAX_TIME_DELTA_VALUE_NANOS = 10000; const uint32_t MAX_GET_TIME_COUNT = 20; /* Attempt to get CLOCK_REALTIME and CLOCK_BOOTIME in succession without an interruption - or context switch (for up to MAX_GET_TIME_COUNT times) to avoid errors in the calculation */ - for (uint32_t i=0; i < MAX_GET_TIME_COUNT; i++) { + or context switch (for up to MAX_GET_TIME_COUNT times) to avoid errors in the calculation */ + for (uint32_t i = 0; i < MAX_GET_TIME_COUNT; i++) { if (clock_gettime(CLOCK_BOOTTIME, &sinceBootTime) != 0) { break; }; @@ -105,24 +100,34 @@ void convertGnssLocation(Location& in, V2_0::GnssLocation& out) if (clock_gettime(CLOCK_BOOTTIME, &sinceBootTimeTest) != 0) { break; }; - sinceBootTimeNanos = sinceBootTime.tv_sec*1000000000 + sinceBootTime.tv_nsec; + sinceBootTimeNanos = sinceBootTime.tv_sec * 1000000000 + sinceBootTime.tv_nsec; int64_t sinceBootTimeTestNanos = - sinceBootTimeTest.tv_sec*1000000000 + sinceBootTimeTest.tv_nsec; + sinceBootTimeTest.tv_sec * 1000000000 + sinceBootTimeTest.tv_nsec; int64_t sinceBootTimeDeltaNanos = sinceBootTimeTestNanos - sinceBootTimeNanos; /* sinceBootTime and sinceBootTimeTest should have a close value if there was no - interruption or context switch between clock_gettime for CLOCK_BOOTIME and - clock_gettime for CLOCK_REALTIME */ + interruption or context switch between clock_gettime for CLOCK_BOOTIME and + clock_gettime for CLOCK_REALTIME */ if (sinceBootTimeDeltaNanos < MAX_TIME_DELTA_VALUE_NANOS) { clockGetTimeSuccess = true; break; } else { - LOC_LOGD("%s]: Delta:%" PRIi64 "ns time too large, retry number #%u...", - __FUNCTION__, sinceBootTimeDeltaNanos, i+1); + LOC_LOGd("Delta:%" PRIi64 "ns time too large, retry number #%u...", + sinceBootTimeDeltaNanos, i + 1); } } + return clockGetTimeSuccess; +} + +void convertGnssLocation(Location& in, V2_0::GnssLocation& out) +{ + memset(&out, 0, sizeof(V2_0::GnssLocation)); + convertGnssLocation(in, out.v1_0); + + struct timespec currentTime; + int64_t sinceBootTimeNanos; - if (clockGetTimeSuccess) { + if (getCurrentTime(currentTime, sinceBootTimeNanos)) { int64_t currentTimeNanos = currentTime.tv_sec*1000000000 + currentTime.tv_nsec; int64_t locationTimeNanos = in.timestamp*1000000; LOC_LOGD("%s]: sinceBootTimeNanos:%" PRIi64 " currentTimeNanos:%" PRIi64 "" @@ -142,8 +147,7 @@ void convertGnssLocation(Location& in, V2_0::GnssLocation& out) } } } else { - LOC_LOGE("%s]: Failed to calculate elapsedRealtimeNanos timestamp after %u tries", - __FUNCTION__, MAX_GET_TIME_COUNT); + LOC_LOGe("Failed to calculate elapsedRealtimeNanos timestamp"); } } |