summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/jni/com_android_server_location_GnssLocationProvider.cpp3
-rw-r--r--services/core/jni/gnss/GnssMeasurementCallback.cpp38
-rw-r--r--services/core/jni/gnss/GnssMeasurementCallback.h11
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;
};