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

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

Merge "Support GnssMeasurement AIDL in JNI"

parents 71a74159 fea938bd
Loading
Loading
Loading
Loading
+12 −2
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/BnGnssMeasurementCallback.h>
#include <android/hardware/gnss/BnGnssPowerIndicationCallback.h>
#include <android/hardware/gnss/BnGnssPsdsCallback.h>
#include <android/hardware/gnss/measurement_corrections/1.0/IMeasurementCorrections.h>
@@ -1754,7 +1755,15 @@ static void android_location_GnssNative_init_once(JNIEnv* env, jobject obj,
    // 1.1@IGnss can be paired {1.0, 1.1}@IGnssMeasurement
    // 1.0@IGnss is paired with 1.0@IGnssMeasurement
    gnssMeasurementIface = nullptr;
    if (gnssHal_V2_1 != nullptr) {
    if (gnssHalAidl != nullptr) {
        sp<hardware::gnss::IGnssMeasurementInterface> gnssMeasurement;
        auto status = gnssHalAidl->getExtensionGnssMeasurement(&gnssMeasurement);
        if (checkAidlStatus(status, "Unable to get a handle to GnssMeasurement AIDL interface.")) {
            gnssMeasurementIface =
                    std::make_unique<android::gnss::GnssMeasurement>(gnssMeasurement);
        }
    }
    if (gnssHal_V2_1 != nullptr && gnssMeasurementIface == nullptr) {
        auto gnssMeasurement = gnssHal_V2_1->getExtensionGnssMeasurement_2_1();
        if (checkHidlReturn(gnssMeasurement, "Unable to get a handle to GnssMeasurement_V2_1")) {
            gnssMeasurementIface =
@@ -2696,7 +2705,8 @@ static jboolean android_location_GnssMeasurementsProvider_start_measurement_coll
        return JNI_FALSE;
    }

    return gnssMeasurementIface->setCallback(sp<gnss::GnssMeasurementCallback>::make(mCallbacksObj),
    return gnssMeasurementIface->setCallback(std::make_unique<gnss::GnssMeasurementCallback>(
                                                     mCallbacksObj),
                                             enableFullTracking);
}

+25 −8
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@
using android::hardware::hidl_vec;
using android::hardware::Return;

using IGnssMeasurementInterface = android::hardware::gnss::IGnssMeasurementInterface;
using IGnssMeasurement_V1_0 = android::hardware::gnss::V1_0::IGnssMeasurement;
using IGnssMeasurement_V1_1 = android::hardware::gnss::V1_1::IGnssMeasurement;
using IGnssMeasurement_V2_0 = android::hardware::gnss::V2_0::IGnssMeasurement;
@@ -43,17 +44,33 @@ jboolean checkGnssMeasurementStatus(const IGnssMeasurement_V1_0::GnssMeasurement

namespace android::gnss {

// Implementation of GnssMeasurement

GnssMeasurement::GnssMeasurement(const sp<IGnssMeasurementInterface>& iGnssMeasurement)
      : mIGnssMeasurement(iGnssMeasurement) {}

jboolean GnssMeasurement::setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
                                      bool enableFullTracking) {
    auto status = mIGnssMeasurement->setCallback(callback->getAidl(), enableFullTracking);
    return checkAidlStatus(status, "IGnssMeasurement setCallback() failed.");
}

jboolean GnssMeasurement::close() {
    auto status = mIGnssMeasurement->close();
    return checkAidlStatus(status, "IGnssMeasurement close() failed.");
}

// Implementation of GnssMeasurement_V1_0

GnssMeasurement_V1_0::GnssMeasurement_V1_0(const sp<IGnssMeasurement_V1_0>& iGnssMeasurement)
      : mIGnssMeasurement_V1_0(iGnssMeasurement) {}

jboolean GnssMeasurement_V1_0::setCallback(const sp<GnssMeasurementCallback>& callback,
jboolean GnssMeasurement_V1_0::setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
                                           bool enableFullTracking) {
    if (enableFullTracking == true) {
        ALOGW("Full tracking is mode not supported in 1.0 GNSS HAL.");
    }
    auto status = mIGnssMeasurement_V1_0->setCallback(callback);
    auto status = mIGnssMeasurement_V1_0->setCallback(callback->getHidl());
    if (!checkHidlReturn(status, "IGnssMeasurement setCallback() failed.")) {
        return JNI_FALSE;
    }
@@ -71,9 +88,9 @@ jboolean GnssMeasurement_V1_0::close() {
GnssMeasurement_V1_1::GnssMeasurement_V1_1(const sp<IGnssMeasurement_V1_1>& iGnssMeasurement)
      : GnssMeasurement_V1_0{iGnssMeasurement}, mIGnssMeasurement_V1_1(iGnssMeasurement) {}

jboolean GnssMeasurement_V1_1::setCallback(const sp<GnssMeasurementCallback>& callback,
jboolean GnssMeasurement_V1_1::setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
                                           bool enableFullTracking) {
    auto status = mIGnssMeasurement_V1_1->setCallback_1_1(callback, enableFullTracking);
    auto status = mIGnssMeasurement_V1_1->setCallback_1_1(callback->getHidl(), enableFullTracking);
    if (!checkHidlReturn(status, "IGnssMeasurement setCallback_V1_1() failed.")) {
        return JNI_FALSE;
    }
@@ -86,9 +103,9 @@ jboolean GnssMeasurement_V1_1::setCallback(const sp<GnssMeasurementCallback>& ca
GnssMeasurement_V2_0::GnssMeasurement_V2_0(const sp<IGnssMeasurement_V2_0>& iGnssMeasurement)
      : GnssMeasurement_V1_1{iGnssMeasurement}, mIGnssMeasurement_V2_0(iGnssMeasurement) {}

jboolean GnssMeasurement_V2_0::setCallback(const sp<GnssMeasurementCallback>& callback,
jboolean GnssMeasurement_V2_0::setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
                                           bool enableFullTracking) {
    auto status = mIGnssMeasurement_V2_0->setCallback_2_0(callback, enableFullTracking);
    auto status = mIGnssMeasurement_V2_0->setCallback_2_0(callback->getHidl(), enableFullTracking);
    if (!checkHidlReturn(status, "IGnssMeasurement setCallback_2_0() failed.")) {
        return JNI_FALSE;
    }
@@ -101,9 +118,9 @@ jboolean GnssMeasurement_V2_0::setCallback(const sp<GnssMeasurementCallback>& ca
GnssMeasurement_V2_1::GnssMeasurement_V2_1(const sp<IGnssMeasurement_V2_1>& iGnssMeasurement)
      : GnssMeasurement_V2_0{iGnssMeasurement}, mIGnssMeasurement_V2_1(iGnssMeasurement) {}

jboolean GnssMeasurement_V2_1::setCallback(const sp<GnssMeasurementCallback>& callback,
jboolean GnssMeasurement_V2_1::setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
                                           bool enableFullTracking) {
    auto status = mIGnssMeasurement_V2_1->setCallback_2_1(callback, enableFullTracking);
    auto status = mIGnssMeasurement_V2_1->setCallback_2_1(callback->getHidl(), enableFullTracking);
    if (!checkHidlReturn(status, "IGnssMeasurement setCallback_2_1() failed.")) {
        return JNI_FALSE;
    }
+17 −5
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@
#include <android/hardware/gnss/1.1/IGnssMeasurement.h>
#include <android/hardware/gnss/2.0/IGnssMeasurement.h>
#include <android/hardware/gnss/2.1/IGnssMeasurement.h>
#include <android/hardware/gnss/BnGnssMeasurementInterface.h>
#include <log/log.h>
#include "GnssMeasurementCallback.h"
#include "jni.h"
@@ -36,16 +37,27 @@ namespace android::gnss {
class GnssMeasurementInterface {
public:
    virtual ~GnssMeasurementInterface() {}
    virtual jboolean setCallback(const sp<GnssMeasurementCallback>& callback,
    virtual jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
                                 bool enableFullTracking) = 0;
    virtual jboolean close() = 0;
};

class GnssMeasurement : public GnssMeasurementInterface {
public:
    GnssMeasurement(const sp<android::hardware::gnss::IGnssMeasurementInterface>& iGnssMeasurement);
    jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
                         bool enableFullTracking) override;
    jboolean close() override;

private:
    const sp<android::hardware::gnss::IGnssMeasurementInterface> mIGnssMeasurement;
};

class GnssMeasurement_V1_0 : public GnssMeasurementInterface {
public:
    GnssMeasurement_V1_0(
            const sp<android::hardware::gnss::V1_0::IGnssMeasurement>& iGnssMeasurement);
    jboolean setCallback(const sp<GnssMeasurementCallback>& callback,
    jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
                         bool enableFullTracking) override;
    jboolean close() override;

@@ -57,7 +69,7 @@ class GnssMeasurement_V1_1 : public GnssMeasurement_V1_0 {
public:
    GnssMeasurement_V1_1(
            const sp<android::hardware::gnss::V1_1::IGnssMeasurement>& iGnssMeasurement);
    jboolean setCallback(const sp<GnssMeasurementCallback>& callback,
    jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
                         bool enableFullTracking) override;

private:
@@ -68,7 +80,7 @@ class GnssMeasurement_V2_0 : public GnssMeasurement_V1_1 {
public:
    GnssMeasurement_V2_0(
            const sp<android::hardware::gnss::V2_0::IGnssMeasurement>& iGnssMeasurement);
    jboolean setCallback(const sp<GnssMeasurementCallback>& callback,
    jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
                         bool enableFullTracking) override;

private:
@@ -79,7 +91,7 @@ class GnssMeasurement_V2_1 : public GnssMeasurement_V2_0 {
public:
    GnssMeasurement_V2_1(
            const sp<android::hardware::gnss::V2_1::IGnssMeasurement>& iGnssMeasurement);
    jboolean setCallback(const sp<GnssMeasurementCallback>& callback,
    jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
                         bool enableFullTracking) override;

private: