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

Commit 67ae4f5a authored by Yu-Han Yang's avatar Yu-Han Yang
Browse files

Add intervalMillis to GnssMeasurement JNI

Bug: 206670536
Test: atest GnssMeasurementRegistrationTest
Change-Id: I3691e8bd2052667c9ffc0e50a5da86e3f5b91bd9
parent 8cb6bedf
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -114,7 +114,8 @@ public final class GnssMeasurementsProvider extends
    protected boolean registerWithService(GnssMeasurementRequest request,
            Collection<GnssListenerRegistration> registrations) {
        if (mGnssNative.startMeasurementCollection(request.isFullTracking(),
                request.isCorrelationVectorOutputsEnabled())) {
                request.isCorrelationVectorOutputsEnabled(),
                request.getIntervalMillis())) {
            if (D) {
                Log.d(TAG, "starting gnss measurements (" + request + ")");
            }
+7 −5
Original line number Diff line number Diff line
@@ -735,9 +735,10 @@ public class GnssNative {
     * Starts measurement collection.
     */
    public boolean startMeasurementCollection(boolean enableFullTracking,
            boolean enableCorrVecOutputs) {
            boolean enableCorrVecOutputs, int intervalMillis) {
        Preconditions.checkState(mRegistered);
        return mGnssHal.startMeasurementCollection(enableFullTracking, enableCorrVecOutputs);
        return mGnssHal.startMeasurementCollection(enableFullTracking, enableCorrVecOutputs,
                intervalMillis);
    }

    /**
@@ -1310,8 +1311,9 @@ public class GnssNative {
        }

        protected boolean startMeasurementCollection(boolean enableFullTracking,
                boolean enableCorrVecOutputs) {
            return native_start_measurement_collection(enableFullTracking, enableCorrVecOutputs);
                boolean enableCorrVecOutputs, int intervalMillis) {
            return native_start_measurement_collection(enableFullTracking, enableCorrVecOutputs,
                    intervalMillis);
        }

        protected boolean stopMeasurementCollection() {
@@ -1475,7 +1477,7 @@ public class GnssNative {
    private static native boolean native_is_measurement_supported();

    private static native boolean native_start_measurement_collection(boolean enableFullTracking,
            boolean enableCorrVecOutputs);
            boolean enableCorrVecOutputs, int intervalMillis);

    private static native boolean native_stop_measurement_collection();

+8 −3
Original line number Diff line number Diff line
@@ -1806,15 +1806,20 @@ static jboolean android_location_gnss_hal_GnssNative_is_measurement_supported(JN
}

static jboolean android_location_gnss_hal_GnssNative_start_measurement_collection(
        JNIEnv* /* env */, jclass, jboolean enableFullTracking, jboolean enableCorrVecOutputs) {
        JNIEnv* /* env */, jclass, jboolean enableFullTracking, jboolean enableCorrVecOutputs,
        jint intervalMs) {
    if (gnssMeasurementIface == nullptr) {
        ALOGE("%s: IGnssMeasurement interface not available.", __func__);
        return JNI_FALSE;
    }
    hardware::gnss::IGnssMeasurementInterface::Options options;
    options.enableFullTracking = enableFullTracking;
    options.enableCorrVecOutputs = enableCorrVecOutputs;
    options.intervalMs = intervalMs;

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

static jboolean android_location_gnss_hal_GnssNative_stop_measurement_collection(JNIEnv* env,
@@ -2269,7 +2274,7 @@ static const JNINativeMethod sMeasurementMethods[] = {
        /* name, signature, funcPtr */
        {"native_is_measurement_supported", "()Z",
         reinterpret_cast<void*>(android_location_gnss_hal_GnssNative_is_measurement_supported)},
        {"native_start_measurement_collection", "(ZZ)Z",
        {"native_start_measurement_collection", "(ZZI)Z",
         reinterpret_cast<void*>(
                 android_location_gnss_hal_GnssNative_start_measurement_collection)},
        {"native_stop_measurement_collection", "()Z",
+36 −15
Original line number Diff line number Diff line
@@ -50,9 +50,15 @@ GnssMeasurement::GnssMeasurement(const sp<IGnssMeasurementInterface>& iGnssMeasu
      : mIGnssMeasurement(iGnssMeasurement) {}

jboolean GnssMeasurement::setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
                                      bool enableFullTracking, bool enableCorrVecOutputs) {
    auto status = mIGnssMeasurement->setCallback(callback->getAidl(), enableFullTracking,
                                                 enableCorrVecOutputs);
                                      const IGnssMeasurementInterface::Options& options) {
    if (mIGnssMeasurement->getInterfaceVersion() >= 2) {
        auto status = mIGnssMeasurement->setCallbackWithOptions(callback->getAidl(), options);
        if (checkAidlStatus(status, "IGnssMeasurement setCallbackWithOptions() failed.")) {
            return true;
        }
    }
    auto status = mIGnssMeasurement->setCallback(callback->getAidl(), options.enableFullTracking,
                                                 options.enableCorrVecOutputs);
    return checkAidlStatus(status, "IGnssMeasurement setCallback() failed.");
}

@@ -67,13 +73,16 @@ GnssMeasurement_V1_0::GnssMeasurement_V1_0(const sp<IGnssMeasurement_V1_0>& iGns
      : mIGnssMeasurement_V1_0(iGnssMeasurement) {}

jboolean GnssMeasurement_V1_0::setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
                                           bool enableFullTracking, bool enableCorrVecOutputs) {
    if (enableFullTracking == true) {
                                           const IGnssMeasurementInterface::Options& options) {
    if (options.enableFullTracking == true) {
        ALOGW("Full tracking mode is not supported in 1.0 GNSS HAL.");
    }
    if (enableCorrVecOutputs == true) {
    if (options.enableCorrVecOutputs == true) {
        ALOGW("Correlation vector output is not supported in 1.0 GNSS HAL.");
    }
    if (options.intervalMs > 1000) {
        ALOGW("Measurement interval is not supported in 1.0 GNSS HAL.");
    }
    auto status = mIGnssMeasurement_V1_0->setCallback(callback->getHidl());
    if (!checkHidlReturn(status, "IGnssMeasurement setCallback() failed.")) {
        return JNI_FALSE;
@@ -93,11 +102,15 @@ GnssMeasurement_V1_1::GnssMeasurement_V1_1(const sp<IGnssMeasurement_V1_1>& iGns
      : GnssMeasurement_V1_0{iGnssMeasurement}, mIGnssMeasurement_V1_1(iGnssMeasurement) {}

jboolean GnssMeasurement_V1_1::setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
                                           bool enableFullTracking, bool enableCorrVecOutputs) {
    if (enableCorrVecOutputs == true) {
                                           const IGnssMeasurementInterface::Options& options) {
    if (options.enableCorrVecOutputs == true) {
        ALOGW("Correlation vector output is not supported in 1.1 GNSS HAL.");
    }
    auto status = mIGnssMeasurement_V1_1->setCallback_1_1(callback->getHidl(), enableFullTracking);
    if (options.intervalMs > 1000) {
        ALOGW("Measurement interval is not supported in 1.0 GNSS HAL.");
    }
    auto status = mIGnssMeasurement_V1_1->setCallback_1_1(callback->getHidl(),
                                                          options.enableFullTracking);
    if (!checkHidlReturn(status, "IGnssMeasurement setCallback_V1_1() failed.")) {
        return JNI_FALSE;
    }
@@ -111,11 +124,15 @@ GnssMeasurement_V2_0::GnssMeasurement_V2_0(const sp<IGnssMeasurement_V2_0>& iGns
      : GnssMeasurement_V1_1{iGnssMeasurement}, mIGnssMeasurement_V2_0(iGnssMeasurement) {}

jboolean GnssMeasurement_V2_0::setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
                                           bool enableFullTracking, bool enableCorrVecOutputs) {
    if (enableCorrVecOutputs == true) {
                                           const IGnssMeasurementInterface::Options& options) {
    if (options.enableCorrVecOutputs == true) {
        ALOGW("Correlation vector output is not supported in 2.0 GNSS HAL.");
    }
    auto status = mIGnssMeasurement_V2_0->setCallback_2_0(callback->getHidl(), enableFullTracking);
    if (options.intervalMs > 1000) {
        ALOGW("Measurement interval is not supported in 1.0 GNSS HAL.");
    }
    auto status = mIGnssMeasurement_V2_0->setCallback_2_0(callback->getHidl(),
                                                          options.enableFullTracking);
    if (!checkHidlReturn(status, "IGnssMeasurement setCallback_2_0() failed.")) {
        return JNI_FALSE;
    }
@@ -129,11 +146,15 @@ GnssMeasurement_V2_1::GnssMeasurement_V2_1(const sp<IGnssMeasurement_V2_1>& iGns
      : GnssMeasurement_V2_0{iGnssMeasurement}, mIGnssMeasurement_V2_1(iGnssMeasurement) {}

jboolean GnssMeasurement_V2_1::setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
                                           bool enableFullTracking, bool enableCorrVecOutputs) {
    if (enableCorrVecOutputs == true) {
                                           const IGnssMeasurementInterface::Options& options) {
    if (options.enableCorrVecOutputs == true) {
        ALOGW("Correlation vector output is not supported in 2.1 GNSS HAL.");
    }
    auto status = mIGnssMeasurement_V2_1->setCallback_2_1(callback->getHidl(), enableFullTracking);
    if (options.intervalMs > 1000) {
        ALOGW("Measurement interval is not supported in 1.0 GNSS HAL.");
    }
    auto status = mIGnssMeasurement_V2_1->setCallback_2_1(callback->getHidl(),
                                                          options.enableFullTracking);
    if (!checkHidlReturn(status, "IGnssMeasurement setCallback_2_1() failed.")) {
        return JNI_FALSE;
    }
+18 −12
Original line number Diff line number Diff line
@@ -37,16 +37,18 @@ namespace android::gnss {
class GnssMeasurementInterface {
public:
    virtual ~GnssMeasurementInterface() {}
    virtual jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
                                 bool enableFullTracking, bool enableCorrVecOutputs) = 0;
    virtual jboolean setCallback(
            const std::unique_ptr<GnssMeasurementCallback>& callback,
            const android::hardware::gnss::IGnssMeasurementInterface::Options& options) = 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, bool enableCorrVecOutputs) override;
    jboolean setCallback(
            const std::unique_ptr<GnssMeasurementCallback>& callback,
            const android::hardware::gnss::IGnssMeasurementInterface::Options& options) override;
    jboolean close() override;

private:
@@ -57,8 +59,9 @@ class GnssMeasurement_V1_0 : public GnssMeasurementInterface {
public:
    GnssMeasurement_V1_0(
            const sp<android::hardware::gnss::V1_0::IGnssMeasurement>& iGnssMeasurement);
    jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
                         bool enableFullTracking, bool enableCorrVecOutputs) override;
    jboolean setCallback(
            const std::unique_ptr<GnssMeasurementCallback>& callback,
            const android::hardware::gnss::IGnssMeasurementInterface::Options& options) override;
    jboolean close() override;

private:
@@ -69,8 +72,9 @@ class GnssMeasurement_V1_1 : public GnssMeasurement_V1_0 {
public:
    GnssMeasurement_V1_1(
            const sp<android::hardware::gnss::V1_1::IGnssMeasurement>& iGnssMeasurement);
    jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
                         bool enableFullTracking, bool enableCorrVecOutputs) override;
    jboolean setCallback(
            const std::unique_ptr<GnssMeasurementCallback>& callback,
            const android::hardware::gnss::IGnssMeasurementInterface::Options& options) override;

private:
    const sp<android::hardware::gnss::V1_1::IGnssMeasurement> mIGnssMeasurement_V1_1;
@@ -80,8 +84,9 @@ class GnssMeasurement_V2_0 : public GnssMeasurement_V1_1 {
public:
    GnssMeasurement_V2_0(
            const sp<android::hardware::gnss::V2_0::IGnssMeasurement>& iGnssMeasurement);
    jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
                         bool enableFullTracking, bool enableCorrVecOutputs) override;
    jboolean setCallback(
            const std::unique_ptr<GnssMeasurementCallback>& callback,
            const android::hardware::gnss::IGnssMeasurementInterface::Options& options) override;

private:
    const sp<android::hardware::gnss::V2_0::IGnssMeasurement> mIGnssMeasurement_V2_0;
@@ -91,8 +96,9 @@ class GnssMeasurement_V2_1 : public GnssMeasurement_V2_0 {
public:
    GnssMeasurement_V2_1(
            const sp<android::hardware::gnss::V2_1::IGnssMeasurement>& iGnssMeasurement);
    jboolean setCallback(const std::unique_ptr<GnssMeasurementCallback>& callback,
                         bool enableFullTracking, bool enableCorrVecOutputs) override;
    jboolean setCallback(
            const std::unique_ptr<GnssMeasurementCallback>& callback,
            const android::hardware::gnss::IGnssMeasurementInterface::Options& options) override;

private:
    const sp<android::hardware::gnss::V2_1::IGnssMeasurement> mIGnssMeasurement_V2_1;
Loading