diff options
| author | Anil Admal <aadmal@google.com> | 2019-03-13 17:08:48 -0700 |
|---|---|---|
| committer | Anil Admal <aadmal@google.com> | 2019-03-20 14:21:54 -0700 |
| commit | 992cdabf3a4116b56e62f9ea6e7e1aa98131ea0a (patch) | |
| tree | c51f3f2c2496a211346851233b3f3c4b752c6f3b /gnss | |
| parent | b3e29358cf18e9dbd34f89ab59962299d862086f (diff) | |
| download | android_hardware_interfaces-992cdabf3a4116b56e62f9ea6e7e1aa98131ea0a.tar.gz android_hardware_interfaces-992cdabf3a4116b56e62f9ea6e7e1aa98131ea0a.tar.bz2 android_hardware_interfaces-992cdabf3a4116b56e62f9ea6e7e1aa98131ea0a.zip | |
Update GNSS Batching to use new GnssLocation with elapsed realtime (HAL)
The ElapsedRealTime field was added to the GnssLocation in
gnss@2.0 HAL to additionally report elapsed time since boot.
The IGnssBatchingCallback.hal@1.0 must be extended to use this
new version of GnssLocation so that the location reported in
gnssLocationBatchCb() method includes the ElapsedRealTime field.
Fixes: 128034260
Test: Tested the new GNSS Batching extension using default
implementation, VTS test, and cuttlefish.
Change-Id: I326655130782a04fbe168d4582462a123edd9ac2
Diffstat (limited to 'gnss')
| -rw-r--r-- | gnss/2.0/Android.bp | 2 | ||||
| -rw-r--r-- | gnss/2.0/IGnss.hal | 8 | ||||
| -rw-r--r-- | gnss/2.0/IGnssBatching.hal | 51 | ||||
| -rw-r--r-- | gnss/2.0/IGnssBatchingCallback.hal | 36 | ||||
| -rw-r--r-- | gnss/2.0/default/Android.bp | 1 | ||||
| -rw-r--r-- | gnss/2.0/default/Gnss.cpp | 5 | ||||
| -rw-r--r-- | gnss/2.0/default/Gnss.h | 1 | ||||
| -rw-r--r-- | gnss/2.0/default/GnssBatching.cpp | 70 | ||||
| -rw-r--r-- | gnss/2.0/default/GnssBatching.h | 57 | ||||
| -rw-r--r-- | gnss/2.0/default/GnssConfiguration.cpp | 15 | ||||
| -rw-r--r-- | gnss/2.0/vts/functional/gnss_hal_test.cpp | 2 | ||||
| -rw-r--r-- | gnss/2.0/vts/functional/gnss_hal_test_cases.cpp | 23 |
12 files changed, 261 insertions, 10 deletions
diff --git a/gnss/2.0/Android.bp b/gnss/2.0/Android.bp index 30dc55de5..6cfd3462f 100644 --- a/gnss/2.0/Android.bp +++ b/gnss/2.0/Android.bp @@ -12,6 +12,8 @@ hidl_interface { "IAGnssCallback.hal", "IAGnssRil.hal", "IGnss.hal", + "IGnssBatching.hal", + "IGnssBatchingCallback.hal", "IGnssCallback.hal", "IGnssConfiguration.hal", "IGnssDebug.hal", diff --git a/gnss/2.0/IGnss.hal b/gnss/2.0/IGnss.hal index ba757d73d..f19f8d056 100644 --- a/gnss/2.0/IGnss.hal +++ b/gnss/2.0/IGnss.hal @@ -27,6 +27,7 @@ import IGnssDebug; import IGnssMeasurement; import IAGnss; import IAGnssRil; +import IGnssBatching; /** * Represents the standard GNSS (Global Navigation Satellite System) interface. @@ -105,6 +106,13 @@ interface IGnss extends @1.1::IGnss { getExtensionVisibilityControl() generates (IGnssVisibilityControl visibilityControlIface); /** + * This method returns the IGnssBatching interface. + * + * @return batchingIface Handle to the IGnssBatching interface. + */ + getExtensionGnssBatching_2_0() generates (IGnssBatching batchingIface); + + /** * Injects current location from the best available location provider. * * Unlike injectLocation, this method may inject a recent GNSS location from the HAL diff --git a/gnss/2.0/IGnssBatching.hal b/gnss/2.0/IGnssBatching.hal new file mode 100644 index 000000000..961fa6954 --- /dev/null +++ b/gnss/2.0/IGnssBatching.hal @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.hardware.gnss@2.0; + +import @1.0::IGnssBatching; +import IGnssBatchingCallback; + +/** + * Extended interface for GNSS Batching support. + * + * If this interface is supported, this batching request must be able to run in + * parallel with, or without, non-batched location requested by the + * IGnss start() & stop() - i.e. both requests must be handled independently, + * and not interfere with each other. + * + * For example, if a 1Hz continuous output is underway on the IGnssCallback, + * due to an IGnss start() operation, + * and then a IGnssBatching start() is called for a location every 10 + * seconds, the newly added batching request must not disrupt the 1Hz + * continuous location output on the IGnssCallback. + * + * As with GNSS Location outputs, source of location must be GNSS satellite + * measurements, optionally using interial and baro sensors to improve + * relative motion filtering. No additional absolute positioning information, + * such as WiFi derived location, may be mixed with the GNSS information. + */ +interface IGnssBatching extends @1.0::IGnssBatching { + /** + * Opens the interface and provides the callback routines + * to the implementation of this interface. + * + * @param callback Callback interface for IGnssBatching. + * + * @return success Returns true on success. + */ + init_2_0(IGnssBatchingCallback callback) generates (bool success); +};
\ No newline at end of file diff --git a/gnss/2.0/IGnssBatchingCallback.hal b/gnss/2.0/IGnssBatchingCallback.hal new file mode 100644 index 000000000..4f8b4ecbb --- /dev/null +++ b/gnss/2.0/IGnssBatchingCallback.hal @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.hardware.gnss@2.0; + +/** The callback interface to report measurements from the HAL. */ +interface IGnssBatchingCallback { + /** + * Called when a batch of locations is output, by various means, including + * a flush request, as well as the buffer becoming full (if appropriate option + * is set.) + * + * All locations returned by this callback must be cleared from the hardware + * buffer, such the sequential calls of this callback do not return any + * redundant locations. (Same lat/lon, at a new time, is acceptable.) + * + * The GnssLocation struct in gnss@2.0 is extended to include elapsed realtime + * information. + * + * @param locations GNSS Location information from HAL. + */ + gnssLocationBatchCb(vec<GnssLocation> locations); +}; diff --git a/gnss/2.0/default/Android.bp b/gnss/2.0/default/Android.bp index 64187e24d..0fcd76495 100644 --- a/gnss/2.0/default/Android.bp +++ b/gnss/2.0/default/Android.bp @@ -25,6 +25,7 @@ cc_binary { "AGnss.cpp", "AGnssRil.cpp", "Gnss.cpp", + "GnssBatching.cpp", "GnssMeasurement.cpp", "GnssMeasurementCorrections.cpp", "GnssVisibilityControl.cpp", diff --git a/gnss/2.0/default/Gnss.cpp b/gnss/2.0/default/Gnss.cpp index bb89b8b42..75c238516 100644 --- a/gnss/2.0/default/Gnss.cpp +++ b/gnss/2.0/default/Gnss.cpp @@ -23,6 +23,7 @@ #include "AGnss.h" #include "AGnssRil.h" +#include "GnssBatching.h" #include "GnssConfiguration.h" #include "GnssMeasurement.h" #include "GnssMeasurementCorrections.h" @@ -265,6 +266,10 @@ Return<sp<visibility_control::V1_0::IGnssVisibilityControl>> Gnss::getExtensionV return new GnssVisibilityControl(); } +Return<sp<V2_0::IGnssBatching>> Gnss::getExtensionGnssBatching_2_0() { + return new GnssBatching(); +} + Return<bool> Gnss::setCallback_2_0(const sp<V2_0::IGnssCallback>& callback) { ALOGD("Gnss::setCallback_2_0"); if (callback == nullptr) { diff --git a/gnss/2.0/default/Gnss.h b/gnss/2.0/default/Gnss.h index a50012867..72f77976e 100644 --- a/gnss/2.0/default/Gnss.h +++ b/gnss/2.0/default/Gnss.h @@ -92,6 +92,7 @@ struct Gnss : public IGnss { getExtensionMeasurementCorrections() override; Return<sp<visibility_control::V1_0::IGnssVisibilityControl>> getExtensionVisibilityControl() override; + Return<sp<V2_0::IGnssBatching>> getExtensionGnssBatching_2_0() override; Return<bool> injectBestLocation_2_0(const V2_0::GnssLocation& location) override; private: diff --git a/gnss/2.0/default/GnssBatching.cpp b/gnss/2.0/default/GnssBatching.cpp new file mode 100644 index 000000000..d56cdfb33 --- /dev/null +++ b/gnss/2.0/default/GnssBatching.cpp @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "GnssBatching" + +#include "GnssBatching.h" + +namespace android { +namespace hardware { +namespace gnss { +namespace V2_0 { +namespace implementation { + +sp<V2_0::IGnssBatchingCallback> GnssBatching::sCallback = nullptr; + +// Methods from ::android::hardware::gnss::V1_0::IGnssBatching follow. +Return<bool> GnssBatching::init(const sp<V1_0::IGnssBatchingCallback>&) { + // TODO implement + return bool{}; +} + +Return<uint16_t> GnssBatching::getBatchSize() { + // TODO implement + return uint16_t{}; +} + +Return<bool> GnssBatching::start(const V1_0::IGnssBatching::Options&) { + // TODO implement + return bool{}; +} + +Return<void> GnssBatching::flush() { + // TODO implement + return Void(); +} + +Return<bool> GnssBatching::stop() { + // TODO implement + return bool{}; +} + +Return<void> GnssBatching::cleanup() { + // TODO implement + return Void(); +} + +// Methods from V2_0::IGnssBatching follow. +Return<bool> GnssBatching::init_2_0(const sp<V2_0::IGnssBatchingCallback>& callback) { + sCallback = callback; + return true; +} + +} // namespace implementation +} // namespace V2_0 +} // namespace gnss +} // namespace hardware +} // namespace android diff --git a/gnss/2.0/default/GnssBatching.h b/gnss/2.0/default/GnssBatching.h new file mode 100644 index 000000000..62ac58089 --- /dev/null +++ b/gnss/2.0/default/GnssBatching.h @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include <android/hardware/gnss/2.0/IGnssBatching.h> +#include <hidl/MQDescriptor.h> +#include <hidl/Status.h> + +namespace android { +namespace hardware { +namespace gnss { +namespace V2_0 { +namespace implementation { + +using ::android::sp; +using ::android::hardware::hidl_array; +using ::android::hardware::hidl_memory; +using ::android::hardware::hidl_string; +using ::android::hardware::hidl_vec; +using ::android::hardware::Return; +using ::android::hardware::Void; + +struct GnssBatching : public IGnssBatching { + // Methods from ::android::hardware::gnss::V1_0::IGnssBatching follow. + Return<bool> init(const sp<V1_0::IGnssBatchingCallback>& callback) override; + Return<uint16_t> getBatchSize() override; + Return<bool> start(const V1_0::IGnssBatching::Options& options) override; + Return<void> flush() override; + Return<bool> stop() override; + Return<void> cleanup() override; + + // Methods from V2_0::IGnssBatching follow. + Return<bool> init_2_0(const sp<V2_0::IGnssBatchingCallback>& callback) override; + + private: + static sp<IGnssBatchingCallback> sCallback; +}; + +} // namespace implementation +} // namespace V2_0 +} // namespace gnss +} // namespace hardware +} // namespace android diff --git a/gnss/2.0/default/GnssConfiguration.cpp b/gnss/2.0/default/GnssConfiguration.cpp index 4389dd28f..6bf1712af 100644 --- a/gnss/2.0/default/GnssConfiguration.cpp +++ b/gnss/2.0/default/GnssConfiguration.cpp @@ -33,13 +33,11 @@ Return<bool> GnssConfiguration::setSuplEs(bool enable) { } Return<bool> GnssConfiguration::setSuplVersion(uint32_t) { - // TODO implement - return bool{}; + return true; } Return<bool> GnssConfiguration::setSuplMode(hidl_bitfield<SuplMode>) { - // TODO implement - return bool{}; + return true; } Return<bool> GnssConfiguration::setGpsLock(hidl_bitfield<GpsLock> gpsLock) { @@ -49,18 +47,15 @@ Return<bool> GnssConfiguration::setGpsLock(hidl_bitfield<GpsLock> gpsLock) { } Return<bool> GnssConfiguration::setLppProfile(hidl_bitfield<LppProfile>) { - // TODO implement - return bool{}; + return true; } Return<bool> GnssConfiguration::setGlonassPositioningProtocol(hidl_bitfield<GlonassPosProtocol>) { - // TODO implement - return bool{}; + return true; } Return<bool> GnssConfiguration::setEmergencySuplPdn(bool) { - // TODO implement - return bool{}; + return true; } // Methods from ::android::hardware::gnss::V1_1::IGnssConfiguration follow. diff --git a/gnss/2.0/vts/functional/gnss_hal_test.cpp b/gnss/2.0/vts/functional/gnss_hal_test.cpp index b8c343753..da6092bb4 100644 --- a/gnss/2.0/vts/functional/gnss_hal_test.cpp +++ b/gnss/2.0/vts/functional/gnss_hal_test.cpp @@ -26,6 +26,7 @@ using ::android::hardware::gnss::common::Utils; GnssHalTest::GnssHalTest() : info_called_count_(0), capabilities_called_count_(0), + measurement_corrections_capabilities_called_count_(0), location_called_count_(0), name_called_count_(0), notify_count_(0) {} @@ -43,6 +44,7 @@ void GnssHalTest::TearDown() { // Reset counters info_called_count_ = 0; capabilities_called_count_ = 0; + measurement_corrections_capabilities_called_count_ = 0; location_called_count_ = 0; name_called_count_ = 0; measurement_called_count_ = 0; diff --git a/gnss/2.0/vts/functional/gnss_hal_test_cases.cpp b/gnss/2.0/vts/functional/gnss_hal_test_cases.cpp index 230c9799f..0682f84d5 100644 --- a/gnss/2.0/vts/functional/gnss_hal_test_cases.cpp +++ b/gnss/2.0/vts/functional/gnss_hal_test_cases.cpp @@ -32,6 +32,8 @@ using IAGnssRil_2_0 = android::hardware::gnss::V2_0::IAGnssRil; using IAGnss_2_0 = android::hardware::gnss::V2_0::IAGnss; using IAGnss_1_0 = android::hardware::gnss::V1_0::IAGnss; using IAGnssCallback_2_0 = android::hardware::gnss::V2_0::IAGnssCallback; +using IGnssBatching_V1_0 = android::hardware::gnss::V1_0::IGnssBatching; +using IGnssBatching_V2_0 = android::hardware::gnss::V2_0::IGnssBatching; using android::hardware::gnss::common::Utils; using android::hardware::gnss::measurement_corrections::V1_0::IMeasurementCorrections; @@ -326,6 +328,10 @@ TEST_F(GnssHalTest, TestGnssMeasurementCorrections) { return; } + sp<IMeasurementCorrectionsCallback> iMeasurementCorrectionsCallback = + new GnssMeasurementCorrectionsCallback(*this); + iMeasurementCorrections->setCallback(iMeasurementCorrectionsCallback); + const int kMeasurementCorrectionsCapabilitiesTimeoutSeconds = 5; waitForMeasurementCorrectionsCapabilities(kMeasurementCorrectionsCapabilitiesTimeoutSeconds); ASSERT_TRUE(measurement_corrections_capabilities_called_count_ > 0); @@ -395,3 +401,20 @@ TEST_F(GnssHalTest, TestInjectBestLocation_2_0) { gnss_hal_->injectBestLocation_2_0(last_location_); StopAndClearLocations(); } + +/* + * TestGnssBatchingExtension: + * Gets the GnssBatchingExtension and verifies that it supports either the @1.0::IGnssBatching + * or @2.0::IGnssBatching extension. + */ +TEST_F(GnssHalTest, TestGnssBatchingExtension) { + auto gnssBatching_V2_0 = gnss_hal_->getExtensionGnssBatching_2_0(); + ASSERT_TRUE(gnssBatching_V2_0.isOk()); + + auto gnssBatching_V1_0 = gnss_hal_->getExtensionGnssBatching(); + ASSERT_TRUE(gnssBatching_V1_0.isOk()); + + sp<IGnssBatching_V1_0> iGnssBatching_V1_0 = gnssBatching_V1_0; + sp<IGnssBatching_V2_0> iGnssBatching_V2_0 = gnssBatching_V2_0; + ASSERT_TRUE(iGnssBatching_V1_0 != nullptr || iGnssBatching_V2_0 != nullptr); +} |
