diff options
author | Dante Russo <drusso@codeaurora.org> | 2019-05-01 12:40:40 -0700 |
---|---|---|
committer | Dante Russo <drusso@codeaurora.org> | 2019-05-01 12:40:40 -0700 |
commit | e7c30fa882af46d23f9eddf78fd66cd1bf89a65c (patch) | |
tree | e06d3979d97bd3d610c410f83174ae459cac42e5 /android/2.0/location_api/LocationUtil.cpp | |
parent | 0330e79d4a87db7e1ee358f0e87a49d34c8f3690 (diff) | |
download | gps-e7c30fa882af46d23f9eddf78fd66cd1bf89a65c.tar.gz |
GNSS HIDL 2.0 updates
Implement new GNSS HIDL 2.0 functions and callbacks
gnssRequestLocationCb_2_0, getExtensionGnssBatching_2_0,
getExtensionGnssDebug_2_0, getDebugData_2_0,
injectBestLocation_2_0, gnssSetCapabilitiesCb_2_0,
gnssLocationCb_2_0, gnssSvStatusCb_2_0, and
gnssMeasurementCb_2_0.
Fix VTS test failures from deprecated functions
setGpsLock, setSuplEs, V1:0::getExtensionAGnss, and
V1.0::getExtensionGnssNi
CRs-fixed: 2433957
Change-Id: Id10cb41c32d6c50144b0501eb2d2eaf9c9a9aaec
Diffstat (limited to 'android/2.0/location_api/LocationUtil.cpp')
-rw-r--r-- | android/2.0/location_api/LocationUtil.cpp | 95 |
1 files changed, 82 insertions, 13 deletions
diff --git a/android/2.0/location_api/LocationUtil.cpp b/android/2.0/location_api/LocationUtil.cpp index c921154..6bd5084 100644 --- a/android/2.0/location_api/LocationUtil.cpp +++ b/android/2.0/location_api/LocationUtil.cpp @@ -28,6 +28,8 @@ */ #include <LocationUtil.h> +#include <log_util.h> +#include <inttypes.h> namespace android { namespace hardware { @@ -35,13 +37,13 @@ namespace gnss { namespace V2_0 { namespace implementation { -using ::android::hardware::gnss::V1_0::GnssLocation; -using ::android::hardware::gnss::V1_0::GnssConstellationType; +using ::android::hardware::gnss::V2_0::GnssLocation; +using ::android::hardware::gnss::V2_0::GnssConstellationType; using ::android::hardware::gnss::V1_0::GnssLocationFlags; -void convertGnssLocation(Location& in, GnssLocation& out) +void convertGnssLocation(Location& in, V1_0::GnssLocation& out) { - memset(&out, 0, sizeof(GnssLocation)); + memset(&out, 0, sizeof(V1_0::GnssLocation)); if (in.flags & LOCATION_HAS_LAT_LONG_BIT) { out.gnssLocationFlags |= GnssLocationFlags::HAS_LAT_LONG; out.latitudeDegrees = in.latitude; @@ -79,7 +81,40 @@ void convertGnssLocation(Location& in, GnssLocation& out) out.timestamp = static_cast<V1_0::GnssUtcTime>(in.timestamp); } -void convertGnssLocation(const GnssLocation& in, Location& out) +void convertGnssLocation(Location& in, V2_0::GnssLocation& out) +{ + memset(&out, 0, sizeof(V2_0::GnssLocation)); + convertGnssLocation(in, out.v1_0); + + struct timespec sinceBootTime; + struct timespec currentTime; + if (0 == clock_gettime(CLOCK_BOOTTIME,&sinceBootTime) && + 0 == clock_gettime(CLOCK_REALTIME,¤tTime)) { + + int64_t sinceBootTimeNanos = sinceBootTime.tv_sec*1000000000 + sinceBootTime.tv_nsec; + int64_t currentTimeNanos = currentTime.tv_sec*1000000000 + currentTime.tv_nsec; + int64_t locationTimeNanos = in.timestamp*1000000; + LOC_LOGD("%s]: sinceBootTimeNanos:%" PRIi64 " currentTimeNanos:%" PRIi64 "" + " locationTimeNanos:%" PRIi64 "", + __FUNCTION__, sinceBootTimeNanos, currentTimeNanos, locationTimeNanos); + if (currentTimeNanos >= locationTimeNanos) { + int64_t ageTimeNanos = currentTimeNanos - locationTimeNanos; + 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("%s]: timestampNs:%" PRIi64 ")", + __FUNCTION__, out.elapsedRealtime.timestampNs); + } + } + } + +} + +void convertGnssLocation(const V1_0::GnssLocation& in, Location& out) { memset(&out, 0, sizeof(out)); if (in.gnssLocationFlags & GnssLocationFlags::HAS_LAT_LONG) { @@ -119,30 +154,64 @@ void convertGnssLocation(const GnssLocation& in, Location& out) out.timestamp = static_cast<uint64_t>(in.timestamp); } -void convertGnssConstellationType(GnssSvType& in, GnssConstellationType& out) +void convertGnssLocation(const V2_0::GnssLocation& in, Location& out) +{ + memset(&out, 0, sizeof(out)); + convertGnssLocation(in.v1_0, out); +} + +void convertGnssConstellationType(GnssSvType& in, V1_0::GnssConstellationType& out) +{ + switch(in) { + case GNSS_SV_TYPE_GPS: + out = V1_0::GnssConstellationType::GPS; + break; + case GNSS_SV_TYPE_SBAS: + out = V1_0::GnssConstellationType::SBAS; + break; + case GNSS_SV_TYPE_GLONASS: + out = V1_0::GnssConstellationType::GLONASS; + break; + case GNSS_SV_TYPE_QZSS: + out = V1_0::GnssConstellationType::QZSS; + break; + case GNSS_SV_TYPE_BEIDOU: + out = V1_0::GnssConstellationType::BEIDOU; + break; + case GNSS_SV_TYPE_GALILEO: + out = V1_0::GnssConstellationType::GALILEO; + break; + case GNSS_SV_TYPE_UNKNOWN: + default: + out = V1_0::GnssConstellationType::UNKNOWN; + break; + } +} + +void convertGnssConstellationType(GnssSvType& in, V2_0::GnssConstellationType& out) { switch(in) { case GNSS_SV_TYPE_GPS: - out = GnssConstellationType::GPS; + out = V2_0::GnssConstellationType::GPS; break; case GNSS_SV_TYPE_SBAS: - out = GnssConstellationType::SBAS; + out = V2_0::GnssConstellationType::SBAS; break; case GNSS_SV_TYPE_GLONASS: - out = GnssConstellationType::GLONASS; + out = V2_0::GnssConstellationType::GLONASS; break; case GNSS_SV_TYPE_QZSS: - out = GnssConstellationType::QZSS; + out = V2_0::GnssConstellationType::QZSS; break; case GNSS_SV_TYPE_BEIDOU: - out = GnssConstellationType::BEIDOU; + out = V2_0::GnssConstellationType::BEIDOU; break; case GNSS_SV_TYPE_GALILEO: - out = GnssConstellationType::GALILEO; + out = V2_0::GnssConstellationType::GALILEO; break; case GNSS_SV_TYPE_UNKNOWN: default: - out = GnssConstellationType::UNKNOWN; + out = V2_0::GnssConstellationType::UNKNOWN; break; } } |