diff options
3 files changed, 44 insertions, 8 deletions
diff --git a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp index 11714dc821af..9fa23c277d46 100644 --- a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp +++ b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp @@ -730,8 +730,7 @@ static jboolean android_location_gnss_hal_GnssNative_start_measurement_collectio options.enableCorrVecOutputs = enableCorrVecOutputs; options.intervalMs = intervalMs; - return gnssMeasurementIface->setCallback(std::make_unique<gnss::GnssMeasurementCallback>( - mCallbacksObj), + return gnssMeasurementIface->setCallback(std::make_unique<gnss::GnssMeasurementCallback>(), options); } diff --git a/services/core/jni/gnss/GnssMeasurementCallback.cpp b/services/core/jni/gnss/GnssMeasurementCallback.cpp index 34ca559806c6..d37f3bd16ee8 100644 --- a/services/core/jni/gnss/GnssMeasurementCallback.cpp +++ b/services/core/jni/gnss/GnssMeasurementCallback.cpp @@ -73,6 +73,11 @@ jmethodID method_satellitePvtBuilderSetVelocityEcef; jmethodID method_satellitePvtBuilderSetClockInfo; jmethodID method_satellitePvtBuilderSetIonoDelayMeters; jmethodID method_satellitePvtBuilderSetTropoDelayMeters; +jmethodID method_satellitePvtBuilderSetTimeOfClock; +jmethodID method_satellitePvtBuilderSetTimeOfEphemeris; +jmethodID method_satellitePvtBuilderSetIssueOfDataClock; +jmethodID method_satellitePvtBuilderSetIssueOfDataEphemeris; +jmethodID method_satellitePvtBuilderSetEphemerisSource; jmethodID method_positionEcef; jmethodID method_velocityEcef; jmethodID method_clockInfo; @@ -166,6 +171,21 @@ void GnssMeasurement_class_init_once(JNIEnv* env, jclass& clazz) { method_satellitePvtBuilderSetTropoDelayMeters = env->GetMethodID(class_satellitePvtBuilder, "setTropoDelayMeters", "(D)Landroid/location/SatellitePvt$Builder;"); + method_satellitePvtBuilderSetTimeOfClock = + env->GetMethodID(class_satellitePvtBuilder, "setTimeOfClockSeconds", + "(J)Landroid/location/SatellitePvt$Builder;"); + method_satellitePvtBuilderSetTimeOfEphemeris = + env->GetMethodID(class_satellitePvtBuilder, "setTimeOfEphemerisSeconds", + "(J)Landroid/location/SatellitePvt$Builder;"); + method_satellitePvtBuilderSetIssueOfDataClock = + env->GetMethodID(class_satellitePvtBuilder, "setIssueOfDataClock", + "(I)Landroid/location/SatellitePvt$Builder;"); + method_satellitePvtBuilderSetIssueOfDataEphemeris = + env->GetMethodID(class_satellitePvtBuilder, "setIssueOfDataEphemeris", + "(I)Landroid/location/SatellitePvt$Builder;"); + method_satellitePvtBuilderSetEphemerisSource = + env->GetMethodID(class_satellitePvtBuilder, "setEphemerisSource", + "(I)Landroid/location/SatellitePvt$Builder;"); method_satellitePvtBuilderBuild = env->GetMethodID(class_satellitePvtBuilder, "build", "()Landroid/location/SatellitePvt;"); @@ -429,6 +449,24 @@ void GnssMeasurementCallbackAidl::translateSingleGnssMeasurement(JNIEnv* env, satellitePvt.tropoDelayMeters); } + if (this->getInterfaceVersion() >= 2) { + callObjectMethodIgnoringResult(env, satellitePvtBuilderObject, + method_satellitePvtBuilderSetTimeOfClock, + satellitePvt.timeOfClockSeconds); + callObjectMethodIgnoringResult(env, satellitePvtBuilderObject, + method_satellitePvtBuilderSetTimeOfEphemeris, + satellitePvt.timeOfEphemerisSeconds); + callObjectMethodIgnoringResult(env, satellitePvtBuilderObject, + method_satellitePvtBuilderSetIssueOfDataClock, + satellitePvt.issueOfDataClock); + callObjectMethodIgnoringResult(env, satellitePvtBuilderObject, + method_satellitePvtBuilderSetIssueOfDataEphemeris, + satellitePvt.issueOfDataEphemeris); + callObjectMethodIgnoringResult(env, satellitePvtBuilderObject, + method_satellitePvtBuilderSetEphemerisSource, + static_cast<int>(satellitePvt.ephemerisSource)); + } + jobject satellitePvtObject = env->CallObjectMethod(satellitePvtBuilderObject, method_satellitePvtBuilderBuild); env->CallVoidMethod(object.get(), method_gnssMeasurementsSetSatellitePvt, diff --git a/services/core/jni/gnss/GnssMeasurementCallback.h b/services/core/jni/gnss/GnssMeasurementCallback.h index 17af94939666..c8f1803800b6 100644 --- a/services/core/jni/gnss/GnssMeasurementCallback.h +++ b/services/core/jni/gnss/GnssMeasurementCallback.h @@ -52,7 +52,7 @@ void setMeasurementData(JNIEnv* env, jobject& callbacksObj, jobject clock, class GnssMeasurementCallbackAidl : public hardware::gnss::BnGnssMeasurementCallback { public: - GnssMeasurementCallbackAidl(jobject& callbacksObj) : mCallbacksObj(callbacksObj) {} + GnssMeasurementCallbackAidl() : mCallbacksObj(getCallbacksObj()) {} android::binder::Status gnssMeasurementCb(const hardware::gnss::GnssData& data) override; private: @@ -78,7 +78,7 @@ private: */ class GnssMeasurementCallbackHidl : public hardware::gnss::V2_1::IGnssMeasurementCallback { public: - GnssMeasurementCallbackHidl(jobject& callbacksObj) : mCallbacksObj(callbacksObj) {} + GnssMeasurementCallbackHidl() : mCallbacksObj(getCallbacksObj()) {} hardware::Return<void> gnssMeasurementCb_2_1( const hardware::gnss::V2_1::IGnssMeasurementCallback::GnssData& data) override; hardware::Return<void> gnssMeasurementCb_2_0( @@ -109,23 +109,22 @@ private: class GnssMeasurementCallback { public: - GnssMeasurementCallback(jobject& callbacksObj) : mCallbacksObj(callbacksObj) {} + GnssMeasurementCallback() {} sp<GnssMeasurementCallbackAidl> getAidl() { if (callbackAidl == nullptr) { - callbackAidl = sp<GnssMeasurementCallbackAidl>::make(mCallbacksObj); + callbackAidl = sp<GnssMeasurementCallbackAidl>::make(); } return callbackAidl; } sp<GnssMeasurementCallbackHidl> getHidl() { if (callbackHidl == nullptr) { - callbackHidl = sp<GnssMeasurementCallbackHidl>::make(mCallbacksObj); + callbackHidl = sp<GnssMeasurementCallbackHidl>::make(); } return callbackHidl; } private: - jobject& mCallbacksObj; sp<GnssMeasurementCallbackAidl> callbackAidl; sp<GnssMeasurementCallbackHidl> callbackHidl; }; |