From 080fd2f360f5daa63ea1a0d4b990ca035ea39258 Mon Sep 17 00:00:00 2001 From: Yu-Han Yang Date: Wed, 20 Mar 2019 17:02:53 -0700 Subject: [PATCH] Fill elapsedRealtime fields in GnssClock Bug: 128713045 Test: tested on cuttlefish Change-Id: Ied4570ec58399709bf83f5212727702fecdd1a73 --- ...ndroid_server_location_GnssLocationProvider.cpp | 57 ++++++++++++++-------- 1 file changed, 37 insertions(+), 20 deletions(-) diff --git a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp index 65a7eec60f63..7df7ef3bae87 100644 --- a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp +++ b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp @@ -998,8 +998,9 @@ struct GnssMeasurementCallback : public IGnssMeasurementCallback_V2_0 { template size_t getMeasurementCount(const T& data); - jobject translateGnssClock( - JNIEnv* env, const IGnssMeasurementCallback_V1_0::GnssClock* clock); + template + void translateGnssClock(JavaObject& object, const T& data); + void setMeasurementData(JNIEnv* env, jobject clock, jobjectArray measurementArray); }; @@ -1025,12 +1026,12 @@ template void GnssMeasurementCallback::translateAndSetGnssData(const T& data) { JNIEnv* env = getJniEnv(); - jobject clock; - jobjectArray measurementArray; + JavaObject gnssClockJavaObject(env, "android/location/GnssClock"); + translateGnssClock(gnssClockJavaObject, data); + jobject clock = gnssClockJavaObject.get(); - clock = translateGnssClock(env, &data.clock); size_t count = getMeasurementCount(data); - measurementArray = translateAllGnssMeasurements(env, data.measurements.data(), count); + jobjectArray measurementArray = translateAllGnssMeasurements(env, data.measurements.data(), count); setMeasurementData(env, clock, measurementArray); env->DeleteLocalRef(clock); @@ -1124,43 +1125,59 @@ void GnssMeasurementCallback::translateSingleGnssMeasurement SET(ConstellationType, static_cast(measurement_V2_0->constellation)); } -jobject GnssMeasurementCallback::translateGnssClock( - JNIEnv* env, const IGnssMeasurementCallback_V1_0::GnssClock* clock) { - JavaObject object(env, "android/location/GnssClock"); +template +void GnssMeasurementCallback::translateGnssClock(JavaObject& object, const T& data) { + translateGnssClock(object, data.clock); +} - uint32_t flags = static_cast(clock->gnssClockFlags); +template<> +void GnssMeasurementCallback::translateGnssClock( + JavaObject& object, const IGnssMeasurementCallback_V1_0::GnssClock& clock) { + uint32_t flags = static_cast(clock.gnssClockFlags); if (flags & static_cast(GnssClockFlags::HAS_LEAP_SECOND)) { - SET(LeapSecond, static_cast(clock->leapSecond)); + SET(LeapSecond, static_cast(clock.leapSecond)); } if (flags & static_cast(GnssClockFlags::HAS_TIME_UNCERTAINTY)) { - SET(TimeUncertaintyNanos, clock->timeUncertaintyNs); + SET(TimeUncertaintyNanos, clock.timeUncertaintyNs); } if (flags & static_cast(GnssClockFlags::HAS_FULL_BIAS)) { - SET(FullBiasNanos, clock->fullBiasNs); + SET(FullBiasNanos, clock.fullBiasNs); } if (flags & static_cast(GnssClockFlags::HAS_BIAS)) { - SET(BiasNanos, clock->biasNs); + SET(BiasNanos, clock.biasNs); } if (flags & static_cast(GnssClockFlags::HAS_BIAS_UNCERTAINTY)) { - SET(BiasUncertaintyNanos, clock->biasUncertaintyNs); + SET(BiasUncertaintyNanos, clock.biasUncertaintyNs); } if (flags & static_cast(GnssClockFlags::HAS_DRIFT)) { - SET(DriftNanosPerSecond, clock->driftNsps); + SET(DriftNanosPerSecond, clock.driftNsps); } if (flags & static_cast(GnssClockFlags::HAS_DRIFT_UNCERTAINTY)) { - SET(DriftUncertaintyNanosPerSecond, clock->driftUncertaintyNsps); + SET(DriftUncertaintyNanosPerSecond, clock.driftUncertaintyNsps); } - SET(TimeNanos, clock->timeNs); - SET(HardwareClockDiscontinuityCount, clock->hwClockDiscontinuityCount); + SET(TimeNanos, clock.timeNs); + SET(HardwareClockDiscontinuityCount, clock.hwClockDiscontinuityCount); +} - return object.get(); +template<> +void GnssMeasurementCallback::translateGnssClock( + JavaObject& object, const IGnssMeasurementCallback_V2_0::GnssData& data) { + auto elapsedRealtime = data.elapsedRealtime; + uint16_t flags = static_cast(elapsedRealtime.flags); + if (flags & ElapsedRealtimeFlags::HAS_TIMESTAMP_NS) { + SET(ElapsedRealtimeNanos, static_cast(elapsedRealtime.timestampNs)); + } + if (flags & ElapsedRealtimeFlags::HAS_TIME_UNCERTAINTY_NS) { + SET(ElapsedRealtimeUncertaintyNanos, static_cast(elapsedRealtime.timeUncertaintyNs)); + } + translateGnssClock(object, data.clock); } template -- 2.11.0