summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/location/gnss/GnssLocationProvider.java2
-rw-r--r--services/core/java/com/android/server/location/gnss/hal/GnssNative.java13
-rw-r--r--services/core/jni/com_android_server_location_GnssLocationProvider.cpp5
-rw-r--r--services/core/jni/gnss/GnssBatching.cpp15
-rw-r--r--services/core/jni/gnss/GnssBatching.h7
-rw-r--r--services/tests/mockingservicestests/src/com/android/server/location/gnss/hal/FakeGnssHal.java15
6 files changed, 38 insertions, 19 deletions
diff --git a/services/core/java/com/android/server/location/gnss/GnssLocationProvider.java b/services/core/java/com/android/server/location/gnss/GnssLocationProvider.java
index a8102f3aa33b..c02411ec4c1b 100644
--- a/services/core/java/com/android/server/location/gnss/GnssLocationProvider.java
+++ b/services/core/java/com/android/server/location/gnss/GnssLocationProvider.java
@@ -1147,7 +1147,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
if (DEBUG) {
Log.d(TAG, "startBatching " + mFixInterval + " " + batchLengthMs);
}
- if (mGnssNative.startBatch(MILLISECONDS.toNanos(mFixInterval), true)) {
+ if (mGnssNative.startBatch(MILLISECONDS.toNanos(mFixInterval), 0, true)) {
mBatchingStarted = true;
if (batchSize < getBatchSize()) {
diff --git a/services/core/java/com/android/server/location/gnss/hal/GnssNative.java b/services/core/java/com/android/server/location/gnss/hal/GnssNative.java
index 01b1394e6525..e072bf7dc1f7 100644
--- a/services/core/java/com/android/server/location/gnss/hal/GnssNative.java
+++ b/services/core/java/com/android/server/location/gnss/hal/GnssNative.java
@@ -817,9 +817,10 @@ public class GnssNative {
/**
* Start batching.
*/
- public boolean startBatch(long periodNanos, boolean wakeOnFifoFull) {
+ public boolean startBatch(long periodNanos, float minUpdateDistanceMeters,
+ boolean wakeOnFifoFull) {
Preconditions.checkState(mRegistered);
- return mGnssHal.startBatch(periodNanos, wakeOnFifoFull);
+ return mGnssHal.startBatch(periodNanos, minUpdateDistanceMeters, wakeOnFifoFull);
}
/**
@@ -1380,8 +1381,9 @@ public class GnssNative {
native_cleanup_batching();
}
- protected boolean startBatch(long periodNanos, boolean wakeOnFifoFull) {
- return native_start_batch(periodNanos, wakeOnFifoFull);
+ protected boolean startBatch(long periodNanos, float minUpdateDistanceMeters,
+ boolean wakeOnFifoFull) {
+ return native_start_batch(periodNanos, minUpdateDistanceMeters, wakeOnFifoFull);
}
protected void flushBatch() {
@@ -1539,7 +1541,8 @@ public class GnssNative {
private static native void native_cleanup_batching();
- private static native boolean native_start_batch(long periodNanos, boolean wakeOnFifoFull);
+ private static native boolean native_start_batch(long periodNanos,
+ float minUpdateDistanceMeters, boolean wakeOnFifoFull);
private static native void native_flush_batch();
diff --git a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
index 5d0023ecd53a..0da8f7ef0dea 100644
--- a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
+++ b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp
@@ -2273,11 +2273,12 @@ static void android_location_gnss_hal_GnssNative_cleanup_batching(JNIEnv*, jclas
}
static jboolean android_location_gnss_hal_GnssNative_start_batch(JNIEnv*, jclass, jlong periodNanos,
+ jfloat minUpdateDistanceMeters,
jboolean wakeOnFifoFull) {
if (gnssBatchingIface == nullptr) {
return JNI_FALSE; // batching not supported
}
- return gnssBatchingIface->start(periodNanos, wakeOnFifoFull);
+ return gnssBatchingIface->start(periodNanos, minUpdateDistanceMeters, wakeOnFifoFull);
}
static void android_location_gnss_hal_GnssNative_flush_batch(JNIEnv*, jclass) {
@@ -2367,7 +2368,7 @@ static const JNINativeMethod sBatchingMethods[] = {
/* name, signature, funcPtr */
{"native_get_batch_size", "()I",
reinterpret_cast<void*>(android_location_gnss_hal_GnssNative_get_batch_size)},
- {"native_start_batch", "(JZ)Z",
+ {"native_start_batch", "(JFZ)Z",
reinterpret_cast<void*>(android_location_gnss_hal_GnssNative_start_batch)},
{"native_flush_batch", "()V",
reinterpret_cast<void*>(android_location_gnss_hal_GnssNative_flush_batch)},
diff --git a/services/core/jni/gnss/GnssBatching.cpp b/services/core/jni/gnss/GnssBatching.cpp
index b66bf21381c7..7f936b9a510d 100644
--- a/services/core/jni/gnss/GnssBatching.cpp
+++ b/services/core/jni/gnss/GnssBatching.cpp
@@ -47,9 +47,12 @@ jint GnssBatching::getBatchSize() {
return size;
}
-jboolean GnssBatching::start(long periodNanos, bool wakeOnFifoFull) {
- int flags = (wakeOnFifoFull) ? IGnssBatching::WAKEUP_ON_FIFO_FULL : 0;
- auto status = mIGnssBatching->start(periodNanos, flags);
+jboolean GnssBatching::start(long periodNanos, float minUpdateDistanceMeters, bool wakeOnFifoFull) {
+ IGnssBatching::Options options;
+ options.flags = (wakeOnFifoFull) ? IGnssBatching::WAKEUP_ON_FIFO_FULL : 0;
+ options.periodNanos = periodNanos;
+ options.minDistanceMeters = minUpdateDistanceMeters;
+ auto status = mIGnssBatching->start(options);
return checkAidlStatus(status, "IGnssBatchingAidl start() failed.");
}
@@ -88,9 +91,13 @@ jint GnssBatching_V1_0::getBatchSize() {
return static_cast<jint>(result);
}
-jboolean GnssBatching_V1_0::start(long periodNanos, bool wakeOnFifoFull) {
+jboolean GnssBatching_V1_0::start(long periodNanos, float minUpdateDistanceMeters,
+ bool wakeOnFifoFull) {
IGnssBatching_V1_0::Options options;
options.periodNanos = periodNanos;
+ if (minUpdateDistanceMeters > 0) {
+ ALOGW("minUpdateDistanceMeters is not supported in 1.0 GNSS HAL.");
+ }
if (wakeOnFifoFull) {
options.flags = static_cast<uint8_t>(IGnssBatching_V1_0::Flag::WAKEUP_ON_FIFO_FULL);
} else {
diff --git a/services/core/jni/gnss/GnssBatching.h b/services/core/jni/gnss/GnssBatching.h
index a98ca9b0e492..eda02ce39551 100644
--- a/services/core/jni/gnss/GnssBatching.h
+++ b/services/core/jni/gnss/GnssBatching.h
@@ -38,7 +38,8 @@ public:
virtual ~GnssBatchingInterface() {}
virtual jboolean init(const std::unique_ptr<GnssBatchingCallback>& callback) = 0;
virtual jint getBatchSize() = 0;
- virtual jboolean start(long periodNanos, bool wakeupOnFifoFull) = 0;
+ virtual jboolean start(long periodNanos, float minUpdateDistanceMeters,
+ bool wakeupOnFifoFull) = 0;
virtual jboolean stop() = 0;
virtual jboolean flush() = 0;
virtual jboolean cleanup() = 0;
@@ -49,7 +50,7 @@ public:
GnssBatching(const sp<android::hardware::gnss::IGnssBatching>& iGnssBatching);
jboolean init(const std::unique_ptr<GnssBatchingCallback>& callback) override;
jint getBatchSize() override;
- jboolean start(long periodNanos, bool wakeupOnFifoFull) override;
+ jboolean start(long periodNanos, float minUpdateDistanceMeters, bool wakeupOnFifoFull) override;
jboolean stop() override;
jboolean flush() override;
jboolean cleanup() override;
@@ -63,7 +64,7 @@ public:
GnssBatching_V1_0(const sp<android::hardware::gnss::V1_0::IGnssBatching>& iGnssBatching);
jboolean init(const std::unique_ptr<GnssBatchingCallback>& callback) override;
jint getBatchSize() override;
- jboolean start(long periodNanos, bool wakeupOnFifoFull) override;
+ jboolean start(long periodNanos, float minUpdateDistanceMeters, bool wakeupOnFifoFull) override;
jboolean stop() override;
jboolean flush() override;
jboolean cleanup() override;
diff --git a/services/tests/mockingservicestests/src/com/android/server/location/gnss/hal/FakeGnssHal.java b/services/tests/mockingservicestests/src/com/android/server/location/gnss/hal/FakeGnssHal.java
index 93929b4cfee2..b7ab6f80167e 100644
--- a/services/tests/mockingservicestests/src/com/android/server/location/gnss/hal/FakeGnssHal.java
+++ b/services/tests/mockingservicestests/src/com/android/server/location/gnss/hal/FakeGnssHal.java
@@ -109,15 +109,19 @@ public final class FakeGnssHal extends GnssNative.GnssHal {
public static class GnssHalBatchingMode {
public final long PeriodNanos;
+ public final float MinUpdateDistanceMeters;
public final boolean WakeOnFifoFull;
GnssHalBatchingMode() {
PeriodNanos = 0;
+ MinUpdateDistanceMeters = 0.0f;
WakeOnFifoFull = false;
}
- public GnssHalBatchingMode(long periodNanos, boolean wakeOnFifoFull) {
+ public GnssHalBatchingMode(long periodNanos, float minUpdateDistanceMeters,
+ boolean wakeOnFifoFull) {
PeriodNanos = periodNanos;
+ MinUpdateDistanceMeters = minUpdateDistanceMeters;
WakeOnFifoFull = wakeOnFifoFull;
}
@@ -132,12 +136,13 @@ public final class FakeGnssHal extends GnssNative.GnssHal {
GnssHalBatchingMode that = (GnssHalBatchingMode) o;
return PeriodNanos == that.PeriodNanos
+ && MinUpdateDistanceMeters == that.MinUpdateDistanceMeters
&& WakeOnFifoFull == that.WakeOnFifoFull;
}
@Override
public int hashCode() {
- return Objects.hash(PeriodNanos, WakeOnFifoFull);
+ return Objects.hash(PeriodNanos, MinUpdateDistanceMeters, WakeOnFifoFull);
}
}
@@ -570,9 +575,11 @@ public final class FakeGnssHal extends GnssNative.GnssHal {
protected void cleanupBatching() {}
@Override
- protected boolean startBatch(long periodNanos, boolean wakeOnFifoFull) {
+ protected boolean startBatch(long periodNanos, float minUpdateDistanceMeters,
+ boolean wakeOnFifoFull) {
mState.mBatchingStarted = true;
- mState.mBatchingMode = new GnssHalBatchingMode(periodNanos, wakeOnFifoFull);
+ mState.mBatchingMode = new GnssHalBatchingMode(periodNanos, minUpdateDistanceMeters,
+ wakeOnFifoFull);
return true;
}