Loading services/core/java/com/android/server/location/gnss/hal/GnssNative.java +7 −1 Original line number Diff line number Diff line Loading @@ -377,6 +377,7 @@ public class GnssNative { private volatile boolean mItarSpeedLimitExceeded; private GnssCapabilities mCapabilities = new GnssCapabilities.Builder().build(); private @GnssCapabilities.TopHalCapabilityFlags int mTopFlags; private @Nullable GnssPowerStats mPowerStats = null; private int mHardwareYear = 0; private @Nullable String mHardwareModelName = null; Loading Loading @@ -490,6 +491,7 @@ public class GnssNative { private void initializeGnss(boolean restart) { Preconditions.checkState(mRegistered); mTopFlags = 0; mGnssHal.initOnce(GnssNative.this, restart); // gnss chipset appears to require an init/cleanup cycle on startup in order to properly Loading Loading @@ -1031,8 +1033,12 @@ public class GnssNative { @NativeEntryPoint void setTopHalCapabilities(@GnssCapabilities.TopHalCapabilityFlags int capabilities) { // Here the bits specified by 'capabilities' are turned on. It is handled differently from // sub hal because top hal capabilities could be set by HIDL HAL and/or AIDL HAL. Each of // them possesses a different set of capabilities. mTopFlags |= capabilities; GnssCapabilities oldCapabilities = mCapabilities; mCapabilities = oldCapabilities.withTopHalFlags(capabilities); mCapabilities = oldCapabilities.withTopHalFlags(mTopFlags); onCapabilitiesChanged(oldCapabilities, mCapabilities); } Loading services/core/jni/com_android_server_location_GnssLocationProvider.cpp +23 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ #include <android/hardware/gnss/2.1/IGnssMeasurement.h> #include <android/hardware/gnss/3.0/IGnssPsds.h> #include <android/hardware/gnss/BnGnss.h> #include <android/hardware/gnss/BnGnssCallback.h> #include <android/hardware/gnss/BnGnssMeasurementCallback.h> #include <android/hardware/gnss/BnGnssPowerIndicationCallback.h> #include <android/hardware/gnss/BnGnssPsdsCallback.h> Loading Loading @@ -223,6 +224,7 @@ using android::hardware::gnss::IGnssPowerIndication; using android::hardware::gnss::IGnssPowerIndicationCallback; using android::hardware::gnss::PsdsType; using IGnssAidl = android::hardware::gnss::IGnss; using IGnssCallbackAidl = android::hardware::gnss::IGnssCallback; using IGnssPsdsAidl = android::hardware::gnss::IGnssPsds; using IGnssPsdsCallbackAidl = android::hardware::gnss::IGnssPsdsCallback; using IGnssConfigurationAidl = android::hardware::gnss::IGnssConfiguration; Loading Loading @@ -711,6 +713,19 @@ Return<void> GnssCallback::gnssSetSystemInfoCb(const IGnssCallback_V2_0::GnssSys return Void(); } class GnssCallbackAidl : public android::hardware::gnss::BnGnssCallback { public: Status gnssSetCapabilitiesCb(const int capabilities) override; }; Status GnssCallbackAidl::gnssSetCapabilitiesCb(const int capabilities) { ALOGD("GnssCallbackAidl::%s: %du\n", __func__, capabilities); JNIEnv* env = getJniEnv(); env->CallVoidMethod(mCallbacksObj, method_setTopHalCapabilities, capabilities); checkAndClearExceptionFromCallback(env, __FUNCTION__); return Status::ok(); } /* * GnssPowerIndicationCallback class implements the callback methods for the IGnssPowerIndication * interface. Loading Loading @@ -1987,6 +2002,14 @@ static jboolean android_location_gnss_hal_GnssNative_init(JNIEnv* /* env */, jcl return JNI_FALSE; } sp<IGnssCallbackAidl> gnssCbIfaceAidl = new GnssCallbackAidl(); if (gnssHalAidl != nullptr) { auto status = gnssHalAidl->setCallback(gnssCbIfaceAidl); if (!checkAidlStatus(status, "IGnssAidl setCallback() failed.")) { return JNI_FALSE; } } // Set IGnssPsds or IGnssXtra callback. if (gnssPsdsAidlIface != nullptr) { sp<IGnssPsdsCallbackAidl> gnssPsdsCallbackAidl = new GnssPsdsCallbackAidl(); Loading Loading
services/core/java/com/android/server/location/gnss/hal/GnssNative.java +7 −1 Original line number Diff line number Diff line Loading @@ -377,6 +377,7 @@ public class GnssNative { private volatile boolean mItarSpeedLimitExceeded; private GnssCapabilities mCapabilities = new GnssCapabilities.Builder().build(); private @GnssCapabilities.TopHalCapabilityFlags int mTopFlags; private @Nullable GnssPowerStats mPowerStats = null; private int mHardwareYear = 0; private @Nullable String mHardwareModelName = null; Loading Loading @@ -490,6 +491,7 @@ public class GnssNative { private void initializeGnss(boolean restart) { Preconditions.checkState(mRegistered); mTopFlags = 0; mGnssHal.initOnce(GnssNative.this, restart); // gnss chipset appears to require an init/cleanup cycle on startup in order to properly Loading Loading @@ -1031,8 +1033,12 @@ public class GnssNative { @NativeEntryPoint void setTopHalCapabilities(@GnssCapabilities.TopHalCapabilityFlags int capabilities) { // Here the bits specified by 'capabilities' are turned on. It is handled differently from // sub hal because top hal capabilities could be set by HIDL HAL and/or AIDL HAL. Each of // them possesses a different set of capabilities. mTopFlags |= capabilities; GnssCapabilities oldCapabilities = mCapabilities; mCapabilities = oldCapabilities.withTopHalFlags(capabilities); mCapabilities = oldCapabilities.withTopHalFlags(mTopFlags); onCapabilitiesChanged(oldCapabilities, mCapabilities); } Loading
services/core/jni/com_android_server_location_GnssLocationProvider.cpp +23 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ #include <android/hardware/gnss/2.1/IGnssMeasurement.h> #include <android/hardware/gnss/3.0/IGnssPsds.h> #include <android/hardware/gnss/BnGnss.h> #include <android/hardware/gnss/BnGnssCallback.h> #include <android/hardware/gnss/BnGnssMeasurementCallback.h> #include <android/hardware/gnss/BnGnssPowerIndicationCallback.h> #include <android/hardware/gnss/BnGnssPsdsCallback.h> Loading Loading @@ -223,6 +224,7 @@ using android::hardware::gnss::IGnssPowerIndication; using android::hardware::gnss::IGnssPowerIndicationCallback; using android::hardware::gnss::PsdsType; using IGnssAidl = android::hardware::gnss::IGnss; using IGnssCallbackAidl = android::hardware::gnss::IGnssCallback; using IGnssPsdsAidl = android::hardware::gnss::IGnssPsds; using IGnssPsdsCallbackAidl = android::hardware::gnss::IGnssPsdsCallback; using IGnssConfigurationAidl = android::hardware::gnss::IGnssConfiguration; Loading Loading @@ -711,6 +713,19 @@ Return<void> GnssCallback::gnssSetSystemInfoCb(const IGnssCallback_V2_0::GnssSys return Void(); } class GnssCallbackAidl : public android::hardware::gnss::BnGnssCallback { public: Status gnssSetCapabilitiesCb(const int capabilities) override; }; Status GnssCallbackAidl::gnssSetCapabilitiesCb(const int capabilities) { ALOGD("GnssCallbackAidl::%s: %du\n", __func__, capabilities); JNIEnv* env = getJniEnv(); env->CallVoidMethod(mCallbacksObj, method_setTopHalCapabilities, capabilities); checkAndClearExceptionFromCallback(env, __FUNCTION__); return Status::ok(); } /* * GnssPowerIndicationCallback class implements the callback methods for the IGnssPowerIndication * interface. Loading Loading @@ -1987,6 +2002,14 @@ static jboolean android_location_gnss_hal_GnssNative_init(JNIEnv* /* env */, jcl return JNI_FALSE; } sp<IGnssCallbackAidl> gnssCbIfaceAidl = new GnssCallbackAidl(); if (gnssHalAidl != nullptr) { auto status = gnssHalAidl->setCallback(gnssCbIfaceAidl); if (!checkAidlStatus(status, "IGnssAidl setCallback() failed.")) { return JNI_FALSE; } } // Set IGnssPsds or IGnssXtra callback. if (gnssPsdsAidlIface != nullptr) { sp<IGnssPsdsCallbackAidl> gnssPsdsCallbackAidl = new GnssPsdsCallbackAidl(); Loading