Add minDistance parameter to GnssBatching (hardware/interface)
Test: atest VtsHalGnssTargetTest
Bug: b/206670536
Change-Id: I982dd64d0cfe0f42c411e4df27d9fdd160c74d2e
diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/IGnssBatching.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/IGnssBatching.aidl
index 492edc3..e1beed3 100644
--- a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/IGnssBatching.aidl
+++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/IGnssBatching.aidl
@@ -36,9 +36,15 @@
interface IGnssBatching {
void init(in android.hardware.gnss.IGnssBatchingCallback callback);
int getBatchSize();
- void start(in long periodNanos, in int flags);
+ void start(in android.hardware.gnss.IGnssBatching.Options options);
void flush();
void stop();
void cleanup();
const int WAKEUP_ON_FIFO_FULL = 1;
+ @VintfStability
+ parcelable Options {
+ long periodNanos;
+ float minDistanceMeters;
+ int flags;
+ }
}
diff --git a/gnss/aidl/android/hardware/gnss/IGnssBatching.aidl b/gnss/aidl/android/hardware/gnss/IGnssBatching.aidl
index 0d48ee1..0d03a0f 100644
--- a/gnss/aidl/android/hardware/gnss/IGnssBatching.aidl
+++ b/gnss/aidl/android/hardware/gnss/IGnssBatching.aidl
@@ -46,6 +46,25 @@
*/
const int WAKEUP_ON_FIFO_FULL = 0x01;
+ /** Options specifying the batching request. */
+ @VintfStability
+ parcelable Options {
+ /** Time interval between samples in the location batch, in nanoseconds. */
+ long periodNanos;
+
+ /**
+ * The minimum distance in meters that the batching engine should
+ * accumulate before trying another GPS fix when in a challenging GPS environment.
+ *
+ * This is an optional field. If it is set as 0, the chipset can operate in an automatic
+ * mode.
+ */
+ float minDistanceMeters;
+
+ /** A bit field of Flags (WAKEUP_ON_FIFO_FULL) indicating the batching behavior. */
+ int flags;
+ }
+
/**
* Open the interface and provides the callback routines to the implementation of this
* interface.
@@ -83,10 +102,9 @@
* for using flushBatchedLocation to explicitly ask for the location as needed, to avoid it
* being dropped.
*
- * @param periodNanos Time interval between samples in the location batch, in nanoseconds
- * @param flags A bitfield of flags (WAKEUP_ON_FIFO_FULL) indicating the batching behavior
+ * @param options Options specifying the batching request.
*/
- void start(in long periodNanos, in int flags);
+ void start(in Options options);
/**
* Retrieve all batched locations currently stored.
diff --git a/gnss/aidl/default/GnssBatching.cpp b/gnss/aidl/default/GnssBatching.cpp
index b8be5e5..33e1fd5 100644
--- a/gnss/aidl/default/GnssBatching.cpp
+++ b/gnss/aidl/default/GnssBatching.cpp
@@ -52,17 +52,19 @@
return ndk::ScopedAStatus::ok();
}
-ndk::ScopedAStatus GnssBatching::start(int64_t periodNanos, int flags) {
- ALOGD("start: periodNanos=%" PRId64 ", flags=%d", periodNanos, flags);
+ndk::ScopedAStatus GnssBatching::start(const Options& options) {
+ ALOGD("start: periodNanos=%" PRId64 ", minDistanceMeters=%f, flags=%d", options.periodNanos,
+ options.minDistanceMeters, options.flags);
if (mIsActive) {
ALOGW("Gnss has started. Restarting...");
stop();
}
- mWakeUpOnFifoFull = (flags & IGnssBatching::WAKEUP_ON_FIFO_FULL) ? true : false;
// mMinIntervalMs is not smaller than 1 sec
- periodNanos = (periodNanos < 1e9) ? 1e9 : periodNanos;
+ long periodNanos = (options.periodNanos < 1e9) ? 1e9 : options.periodNanos;
mMinIntervalMs = periodNanos / 1e6;
+ mWakeUpOnFifoFull = (options.flags & IGnssBatching::WAKEUP_ON_FIFO_FULL) ? true : false;
+ mMinDistanceMeters = options.minDistanceMeters;
mIsActive = true;
mThread = std::thread([this]() {
diff --git a/gnss/aidl/default/GnssBatching.h b/gnss/aidl/default/GnssBatching.h
index 7cd6e85..6d1d809 100644
--- a/gnss/aidl/default/GnssBatching.h
+++ b/gnss/aidl/default/GnssBatching.h
@@ -28,7 +28,7 @@
~GnssBatching();
ndk::ScopedAStatus init(const std::shared_ptr<IGnssBatchingCallback>& callback) override;
ndk::ScopedAStatus getBatchSize(int* size) override;
- ndk::ScopedAStatus start(int64_t periodNanos, int flags) override;
+ ndk::ScopedAStatus start(const Options& options) override;
ndk::ScopedAStatus flush() override;
ndk::ScopedAStatus stop() override;
ndk::ScopedAStatus cleanup() override;
@@ -42,6 +42,7 @@
std::thread mThread;
std::atomic<bool> mIsActive;
std::atomic<long> mMinIntervalMs;
+ std::atomic<float> mMinDistanceMeters;
std::atomic<bool> mWakeUpOnFifoFull;
// Synchronization lock for sCallback
diff --git a/gnss/aidl/vts/gnss_hal_test_cases.cpp b/gnss/aidl/vts/gnss_hal_test_cases.cpp
index c5fea7a..1fa6825 100644
--- a/gnss/aidl/vts/gnss_hal_test_cases.cpp
+++ b/gnss/aidl/vts/gnss_hal_test_cases.cpp
@@ -813,6 +813,10 @@
* TestAllExtensions.
*/
TEST_P(GnssHalTest, TestAllExtensions) {
+ if (aidl_gnss_hal_->getInterfaceVersion() == 1) {
+ return;
+ }
+
sp<IGnssBatching> iGnssBatching;
auto status = aidl_gnss_hal_->getExtensionGnssBatching(&iGnssBatching);
if (status.isOk() && iGnssBatching != nullptr) {