Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 77ff851a authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Implement AIDL setCapabilitiesCb"

parents 4eb327a0 e3b703f3
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -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);
    }

+23 −0
Original line number Diff line number Diff line
@@ -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();