Merge "Implement AIDL setCapabilitiesCb"

This commit is contained in:
TreeHugger Robot
2021-01-07 23:55:53 +00:00
committed by Android (Google) Code Review
2 changed files with 30 additions and 1 deletions

View File

@@ -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;
@@ -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
@@ -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);
}

View File

@@ -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>
@@ -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;
@@ -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.
@@ -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();