From 08642f98a4080ade37a2ba643fdc74e31dd5811a Mon Sep 17 00:00:00 2001 From: Yu-Han Yang Date: Sat, 2 Mar 2019 14:22:14 -0800 Subject: Add VTS test for gnss.measurement_corrections@1.0 - also implemented default implementation Bug: 120529158 Fixes: 120529158 Test: tested on cuttlefish Change-Id: I9e63dc35284effff351eabedade05ed147d1ef17 --- gnss/1.1/vts/functional/Android.bp | 3 ++ gnss/2.0/default/Android.bp | 1 + gnss/2.0/default/Gnss.cpp | 7 ++- gnss/2.0/default/GnssMeasurementCorrections.cpp | 62 +++++++++++++++++++++++++ gnss/2.0/default/GnssMeasurementCorrections.h | 48 +++++++++++++++++++ gnss/2.0/vts/functional/gnss_hal_test_cases.cpp | 22 +++++++++ gnss/common/utils/vts/Android.bp | 1 + gnss/common/utils/vts/Utils.cpp | 48 +++++++++++++++++++ gnss/common/utils/vts/include/Utils.h | 3 ++ 9 files changed, 193 insertions(+), 2 deletions(-) create mode 100644 gnss/2.0/default/GnssMeasurementCorrections.cpp create mode 100644 gnss/2.0/default/GnssMeasurementCorrections.h (limited to 'gnss') diff --git a/gnss/1.1/vts/functional/Android.bp b/gnss/1.1/vts/functional/Android.bp index 147a470f8..cc34290fa 100644 --- a/gnss/1.1/vts/functional/Android.bp +++ b/gnss/1.1/vts/functional/Android.bp @@ -27,5 +27,8 @@ cc_test { "android.hardware.gnss@1.1", "android.hardware.gnss@common-vts-lib", ], + shared_libs: [ + "android.hardware.gnss.measurement_corrections@1.0", + ], test_suites: ["general-tests"], } diff --git a/gnss/2.0/default/Android.bp b/gnss/2.0/default/Android.bp index f327197f6..64187e24d 100644 --- a/gnss/2.0/default/Android.bp +++ b/gnss/2.0/default/Android.bp @@ -26,6 +26,7 @@ cc_binary { "AGnssRil.cpp", "Gnss.cpp", "GnssMeasurement.cpp", + "GnssMeasurementCorrections.cpp", "GnssVisibilityControl.cpp", "service.cpp" ], diff --git a/gnss/2.0/default/Gnss.cpp b/gnss/2.0/default/Gnss.cpp index 33edbd56e..ee6da5374 100644 --- a/gnss/2.0/default/Gnss.cpp +++ b/gnss/2.0/default/Gnss.cpp @@ -25,11 +25,14 @@ #include "AGnssRil.h" #include "GnssConfiguration.h" #include "GnssMeasurement.h" +#include "GnssMeasurementCorrections.h" #include "GnssVisibilityControl.h" #include "Utils.h" using ::android::hardware::Status; using ::android::hardware::gnss::common::Utils; +using ::android::hardware::gnss::measurement_corrections::V1_0::implementation:: + GnssMeasurementCorrections; using ::android::hardware::gnss::visibility_control::V1_0::implementation::GnssVisibilityControl; namespace android { @@ -248,8 +251,8 @@ Return> Gnss::getExtensionGnssMeasurement_2_0() { Return> Gnss::getExtensionMeasurementCorrections() { - // TODO(b/124012850): Implement function. - return sp{}; + ALOGD("Gnss::getExtensionMeasurementCorrections"); + return new GnssMeasurementCorrections(); } Return> Gnss::getExtensionVisibilityControl() { diff --git a/gnss/2.0/default/GnssMeasurementCorrections.cpp b/gnss/2.0/default/GnssMeasurementCorrections.cpp new file mode 100644 index 000000000..cbf34ba9c --- /dev/null +++ b/gnss/2.0/default/GnssMeasurementCorrections.cpp @@ -0,0 +1,62 @@ +/* + * 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 "GnssMeasurementCorrections" + +#include "GnssMeasurementCorrections.h" +#include + +namespace android { +namespace hardware { +namespace gnss { +namespace measurement_corrections { +namespace V1_0 { +namespace implementation { + +// Methods from V1_0::IMeasurementCorrections follow. +Return GnssMeasurementCorrections::setCorrections(const MeasurementCorrections& corrections) { + ALOGD("setCorrections"); + ALOGD("corrections = lat: %f, lng: %f, alt: %f, hUnc: %f, vUnc: %f, toa: %llu, " + "satCorrections.size: %d", + corrections.latitudeDegrees, corrections.longitudeDegrees, corrections.altitudeMeters, + corrections.horizontalPositionUncertaintyMeters, + corrections.verticalPositionUncertaintyMeters, + static_cast(corrections.toaGpsNanosecondsOfWeek), + static_cast(corrections.satCorrections.size())); + for (auto singleSatCorrection : corrections.satCorrections) { + ALOGD("singleSatCorrection = flags: %d, constellation: %d, svid: %d, cfHz: %f, probLos: %f," + " epl: %f, eplUnc: %f", + static_cast(singleSatCorrection.singleSatCorrectionFlags), + static_cast(singleSatCorrection.constellation), + static_cast(singleSatCorrection.svid), singleSatCorrection.carrierFrequencyHz, + singleSatCorrection.probSatIsLos, singleSatCorrection.excessPathLengthMeters, + singleSatCorrection.excessPathLengthUncertaintyMeters); + ALOGD("reflecting plane = lat: %f, lng: %f, alt: %f, azm: %f", + singleSatCorrection.reflectingPlane.latitudeDegrees, + singleSatCorrection.reflectingPlane.longitudeDegrees, + singleSatCorrection.reflectingPlane.altitudeMeters, + singleSatCorrection.reflectingPlane.azimuthDegrees); + } + + return true; +} + +} // namespace implementation +} // namespace V1_0 +} // namespace measurement_corrections +} // namespace gnss +} // namespace hardware +} // namespace android diff --git a/gnss/2.0/default/GnssMeasurementCorrections.h b/gnss/2.0/default/GnssMeasurementCorrections.h new file mode 100644 index 000000000..f758bc8a0 --- /dev/null +++ b/gnss/2.0/default/GnssMeasurementCorrections.h @@ -0,0 +1,48 @@ +/* + * 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 +#include +#include + +namespace android { +namespace hardware { +namespace gnss { +namespace measurement_corrections { +namespace V1_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 GnssMeasurementCorrections : public IMeasurementCorrections { + // Methods from V1_0::IMeasurementCorrections follow. + Return setCorrections(const MeasurementCorrections& corrections) override; +}; + +} // namespace implementation +} // namespace V1_0 +} // namespace measurement_corrections +} // namespace gnss +} // namespace hardware +} // namespace android 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 b135dba2c..3703ebaef 100644 --- a/gnss/2.0/vts/functional/gnss_hal_test_cases.cpp +++ b/gnss/2.0/vts/functional/gnss_hal_test_cases.cpp @@ -18,6 +18,7 @@ #include #include +#include "Utils.h" using android::hardware::hidl_string; using android::hardware::hidl_vec; @@ -32,6 +33,9 @@ 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 android::hardware::gnss::common::Utils; +using android::hardware::gnss::measurement_corrections::V1_0::IMeasurementCorrections; +using android::hardware::gnss::measurement_corrections::V1_0::MeasurementCorrections; using android::hardware::gnss::V1_0::IGnssNi; using android::hardware::gnss::V2_0::ElapsedRealtimeFlags; using android::hardware::gnss::visibility_control::V1_0::IGnssVisibilityControl; @@ -272,6 +276,24 @@ TEST_F(GnssHalTest, TestGnssVisibilityControlExtension) { EXPECT_TRUE(result); } +/* + * TestGnssMeasurementCorrections: + * Gets the GnssMeasurementCorrectionsExtension and verifies that it supports the + * gnss.measurement_corrections@1.0::IMeasurementCorrections interface by invoking a method. + */ +TEST_F(GnssHalTest, TestGnssMeasurementCorrections) { + // Verify IMeasurementCorrections is supported. + auto measurementCorrections = gnss_hal_->getExtensionMeasurementCorrections(); + ASSERT_TRUE(measurementCorrections.isOk()); + sp iMeasurementCorrections = measurementCorrections; + ASSERT_NE(iMeasurementCorrections, nullptr); + + // Set a mock MeasurementCorrections. + auto result = iMeasurementCorrections->setCorrections(Utils::getMockMeasurementCorrections()); + ASSERT_TRUE(result.isOk()); + EXPECT_TRUE(result); +} + /* * TestGnssDataElapsedRealtimeFlags: * Sets a GnssMeasurementCallback, waits for a GnssData object, and verifies the flags in member diff --git a/gnss/common/utils/vts/Android.bp b/gnss/common/utils/vts/Android.bp index 99d8cf918..198817197 100644 --- a/gnss/common/utils/vts/Android.bp +++ b/gnss/common/utils/vts/Android.bp @@ -29,6 +29,7 @@ cc_library_static { export_include_dirs: ["include"], shared_libs: [ "android.hardware.gnss@1.0", + "android.hardware.gnss.measurement_corrections@1.0", ], static_libs: [ "libgtest", diff --git a/gnss/common/utils/vts/Utils.cpp b/gnss/common/utils/vts/Utils.cpp index 24d68839a..51d3ea18d 100644 --- a/gnss/common/utils/vts/Utils.cpp +++ b/gnss/common/utils/vts/Utils.cpp @@ -22,6 +22,7 @@ namespace hardware { namespace gnss { namespace common { +using V1_0::GnssConstellationType; using V1_0::GnssLocationFlags; void Utils::checkLocation(const GnssLocation& location, bool check_speed, @@ -91,6 +92,53 @@ void Utils::checkLocation(const GnssLocation& location, bool check_speed, EXPECT_GT(location.timestamp, 1.48e12); } +const MeasurementCorrections Utils::getMockMeasurementCorrections() { + ReflectingPlane reflectingPlane = { + .latitudeDegrees = 37.4220039, + .longitudeDegrees = -122.0840991, + .altitudeMeters = 250.35, + .azimuthDegrees = 203.0, + }; + + SingleSatCorrection singleSatCorrection1 = { + .singleSatCorrectionFlags = GnssSingleSatCorrectionFlags::HAS_SAT_IS_LOS_PROBABILITY | + GnssSingleSatCorrectionFlags::HAS_EXCESS_PATH_LENGTH | + GnssSingleSatCorrectionFlags::HAS_EXCESS_PATH_LENGTH_UNC | + GnssSingleSatCorrectionFlags::HAS_REFLECTING_PLANE, + .constellation = GnssConstellationType::GPS, + .svid = 12, + .carrierFrequencyHz = 1.59975e+09, + .probSatIsLos = 0.50001, + .excessPathLengthMeters = 137.4802, + .excessPathLengthUncertaintyMeters = 25.5, + .reflectingPlane = reflectingPlane, + }; + SingleSatCorrection singleSatCorrection2 = { + .singleSatCorrectionFlags = GnssSingleSatCorrectionFlags::HAS_SAT_IS_LOS_PROBABILITY | + GnssSingleSatCorrectionFlags::HAS_EXCESS_PATH_LENGTH | + GnssSingleSatCorrectionFlags::HAS_EXCESS_PATH_LENGTH_UNC, + .constellation = GnssConstellationType::GPS, + .svid = 9, + .carrierFrequencyHz = 1.59975e+09, + .probSatIsLos = 0.873, + .excessPathLengthMeters = 26.294, + .excessPathLengthUncertaintyMeters = 10.0, + }; + + hidl_vec singleSatCorrections = {singleSatCorrection1, + singleSatCorrection2}; + MeasurementCorrections mockCorrections = { + .latitudeDegrees = 37.4219999, + .longitudeDegrees = -122.0840575, + .altitudeMeters = 30.60062531, + .horizontalPositionUncertaintyMeters = 9.23542, + .verticalPositionUncertaintyMeters = 15.02341, + .toaGpsNanosecondsOfWeek = 2935633453L, + .satCorrections = singleSatCorrections, + }; + return mockCorrections; +} + } // namespace common } // namespace gnss } // namespace hardware diff --git a/gnss/common/utils/vts/include/Utils.h b/gnss/common/utils/vts/include/Utils.h index f8eeff686..dce4c7b32 100644 --- a/gnss/common/utils/vts/include/Utils.h +++ b/gnss/common/utils/vts/include/Utils.h @@ -18,8 +18,10 @@ #define android_hardware_gnss_common_vts_Utils_H_ #include +#include using GnssLocation = ::android::hardware::gnss::V1_0::GnssLocation; +using namespace android::hardware::gnss::measurement_corrections::V1_0; namespace android { namespace hardware { @@ -29,6 +31,7 @@ namespace common { struct Utils { static void checkLocation(const GnssLocation& location, bool check_speed, bool check_more_accuracies); + static const MeasurementCorrections getMockMeasurementCorrections(); }; } // namespace common -- cgit v1.2.3