From 6999a0f547365c3eaf51a54f061bd2d79debacf1 Mon Sep 17 00:00:00 2001 From: Yu-Han Yang Date: Thu, 14 Mar 2019 11:08:43 -0700 Subject: [PATCH] Add IRNSS to GnssConstellationType (HAL) Bug: 119270132 Test: atest VtsHalGnssV2_0TestTarget Change-Id: I3a5da40412a1e5dbe9410573ae2bc263643c585c --- current.txt | 9 +-- gnss/2.0/Android.bp | 1 + gnss/2.0/IGnss.hal | 8 +++ gnss/2.0/IGnssCallback.hal | 23 +++++++ gnss/2.0/IGnssDebug.hal | 66 +++++++++++++++++++ gnss/2.0/IGnssMeasurementCallback.hal | 13 +++- gnss/2.0/default/Gnss.cpp | 5 ++ gnss/2.0/default/Gnss.h | 1 + gnss/2.0/default/GnssMeasurement.cpp | 39 ++++++----- gnss/2.0/types.hal | 26 +++++++- gnss/2.0/vts/functional/gnss_hal_test.cpp | 32 +++++---- gnss/2.0/vts/functional/gnss_hal_test.h | 25 ++++--- .../vts/functional/gnss_hal_test_cases.cpp | 43 +++++++++--- 13 files changed, 232 insertions(+), 59 deletions(-) create mode 100644 gnss/2.0/IGnssDebug.hal diff --git a/current.txt b/current.txt index 0a9c0f96b1..9df0406431 100644 --- a/current.txt +++ b/current.txt @@ -464,12 +464,13 @@ f27baaa587bc3dd9b740cb6928ab812b9b7d105b5187663938aee578105f3c39 android.hardwar 7f460e795f5d1ed5e378935f98c6db4d39497de988aef1b4c2a4a07a6c400392 android.hardware.gnss@2.0::IAGnss 2e5ad983734069e84a760004b32da0d09e4170c05380abe27e6eb80e4aa70d5a android.hardware.gnss@2.0::IAGnssCallback 1f4ac068a88a72360280d94a7f6fd7c63813c1eea4891a0eb01394d3e7e775f2 android.hardware.gnss@2.0::IAGnssRil -6e2f9a44375a0ae0b49ca7d711cb88945189d398535078408269e1e85889061d android.hardware.gnss@2.0::IGnss -782dfc724272f279985de348c824197357941382f73c0083f0344d8ec594d2a8 android.hardware.gnss@2.0::IGnssCallback +63216fcb23eaf4d6f12ea0e99b8bfdb8e4e57c02f215d433cd30943d850f61a7 android.hardware.gnss@2.0::IGnss +b11a5e4a1602d3f408716b6fe2c578a79f060d571aad8e828f9a4426d161fbcf android.hardware.gnss@2.0::IGnssCallback ecc966c68bddbd95c8dae782b84204cf01c75734675e8769963f3b5106ec128b android.hardware.gnss@2.0::IGnssConfiguration +b670bae2ab8517336290532e364502b4db9120340d75474ccc8442b1b15d6ab7 android.hardware.gnss@2.0::IGnssDebug c67759f5d6387d273b66729180d03690e827f0b6b8d4e13ce2ff42d31b224065 android.hardware.gnss@2.0::IGnssMeasurement -3dd30a3ca77ef5ab109a55ba603ff816ae5019436886093dccf8fd6a068f85f1 android.hardware.gnss@2.0::IGnssMeasurementCallback -4bcd767dd05304b4722c6521c7ed8d4a05faf6022f228f2c088379c647871f7c android.hardware.gnss@2.0::types +15e09903748857f4beb5f485784606931fa5a6277cd070baa6d584df485b7948 android.hardware.gnss@2.0::IGnssMeasurementCallback +a49c973f21ddf41bc402de55d7c8dffacf4dce06b0bbca4f5ffd3b09a471317e android.hardware.gnss@2.0::types d4cc8d91930d5a1a62deb0d97d398510a115ce3ede2d2978738651b9d01b11c3 android.hardware.gnss.measurement_corrections@1.0::IMeasurementCorrections 3eec9763db9b101644f14175b77c9954047445a468e9c743fd402d472d4aa97e android.hardware.gnss.measurement_corrections@1.0::IMeasurementCorrectionsCallback 6ef12cd95df73f8f80c25eb035d98ca4594f9cee571fdabea838a0b6016dd908 android.hardware.gnss.measurement_corrections@1.0::types diff --git a/gnss/2.0/Android.bp b/gnss/2.0/Android.bp index c01ec55b99..30dc55de57 100644 --- a/gnss/2.0/Android.bp +++ b/gnss/2.0/Android.bp @@ -14,6 +14,7 @@ hidl_interface { "IGnss.hal", "IGnssCallback.hal", "IGnssConfiguration.hal", + "IGnssDebug.hal", "IGnssMeasurement.hal", "IGnssMeasurementCallback.hal", ], diff --git a/gnss/2.0/IGnss.hal b/gnss/2.0/IGnss.hal index 2c149b7a7b..ba757d73d6 100644 --- a/gnss/2.0/IGnss.hal +++ b/gnss/2.0/IGnss.hal @@ -23,6 +23,7 @@ import @1.1::IGnss; import GnssLocation; import IGnssCallback; import IGnssConfiguration; +import IGnssDebug; import IGnssMeasurement; import IAGnss; import IAGnssRil; @@ -54,6 +55,13 @@ interface IGnss extends @1.1::IGnss { */ getExtensionGnssConfiguration_2_0() generates (IGnssConfiguration gnssConfigurationIface); + /** + * This method returns the IGnssDebug interface. + * + * @return gnssDebugIface Handle to the IGnssDebug interface. + */ + getExtensionGnssDebug_2_0() generates (IGnssDebug gnssDebugIface); + /** * This method returns the IAGnss Interface. * diff --git a/gnss/2.0/IGnssCallback.hal b/gnss/2.0/IGnssCallback.hal index 4c31cf5208..a96fd6ce6e 100644 --- a/gnss/2.0/IGnssCallback.hal +++ b/gnss/2.0/IGnssCallback.hal @@ -19,6 +19,7 @@ package android.hardware.gnss@2.0; import @1.0::IGnssCallback; import @1.1::IGnssCallback; import GnssLocation; +import GnssConstellationType; /** * This interface is required for the HAL to communicate certain information @@ -94,4 +95,26 @@ interface IGnssCallback extends @1.1::IGnssCallback { * during-call to E911, or up to 5 minutes after end-of-call or text to E911). */ gnssRequestLocationCb_2_0(bool independentFromGnss, bool isUserEmergency); + + /** Extends a GnssSvInfo, replacing the GnssConstellationType. */ + struct GnssSvInfo { + /** + * GNSS satellite information for a single satellite and frequency. + * + * In this version of the HAL, the field 'constellation' in the v1_0 struct is deprecated, + * and is no longer used by the framework. The constellation type is instead reported in + * @2.0::IGnssCallback.GnssSvInfo.constellation. + */ + @1.0::IGnssCallback.GnssSvInfo v1_0; + + /** Defines the constellation of the given SV. */ + GnssConstellationType constellation; + }; + + /** + * Callback for the HAL to pass a vector of GnssSvInfo back to the client. + * + * @param svInfo SV status information from HAL. + */ + gnssSvStatusCb_2_0(vec svInfoList); }; diff --git a/gnss/2.0/IGnssDebug.hal b/gnss/2.0/IGnssDebug.hal new file mode 100644 index 0000000000..a3138ba6da --- /dev/null +++ b/gnss/2.0/IGnssDebug.hal @@ -0,0 +1,66 @@ +/* + * 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::IGnssDebug; + +/** Extended interface for DEBUG support. */ +interface IGnssDebug extends @1.0::IGnssDebug { + + /** Extending SatelliteData, replacing the GnssConstellationType. */ + struct SatelliteData { + /** + * GNSS Satellite info. + * + * In this version of the HAL, the field 'constellation' in the v1_0 struct is deprecated, + * and is no longer used by the framework. The constellation type is instead reported in + * @2.0::IGnssDebug.SatelliteData.constellation. + */ + @1.0::IGnssDebug.SatelliteData v1_0; + + /** Defines the constellation type of the given SV. */ + GnssConstellationType constellation; + }; + + /** + * Provides a set of debug information that is filled by the GNSS chipset when the method + * getDebugData() is invoked. + */ + struct DebugData { + /** Current best known position. */ + @1.0::IGnssDebug.PositionDebug position; + + /** Current best know time estimate. */ + @1.0::IGnssDebug.TimeDebug time; + + /** + * Provides a list of the available satellite data, for all + * satellites and constellations the device can track, + * including GnssConstellationType UNKNOWN. + */ + vec satelliteDataArray; + }; + + /** + * This methods requests position, time and satellite ephemeris debug information from the HAL. + * + * @return ret debugData information from GNSS Hal that contains the current best known + * position, best known time estimate and a complete list of constellations that the device can + * track. + */ + getDebugData_2_0() generates (DebugData debugData); +}; diff --git a/gnss/2.0/IGnssMeasurementCallback.hal b/gnss/2.0/IGnssMeasurementCallback.hal index d9751d35ac..e055f7aa45 100644 --- a/gnss/2.0/IGnssMeasurementCallback.hal +++ b/gnss/2.0/IGnssMeasurementCallback.hal @@ -19,6 +19,7 @@ package android.hardware.gnss@2.0; import @1.0::IGnssMeasurementCallback; import @1.1::IGnssMeasurementCallback; import ElapsedRealtime; +import GnssConstellationType; /** The callback interface to report measurements from the HAL. */ interface IGnssMeasurementCallback extends @1.1::IGnssMeasurementCallback { @@ -365,7 +366,8 @@ interface IGnssMeasurementCallback extends @1.1::IGnssMeasurementCallback { }; /** - * Extends a GNSS Measurement, adding a GnssMeasurementCodeType. + * Extends a GNSS Measurement, adding a GnssMeasurementCodeType, a GnssMeasurementState, and + * replacing the GnssConstellationType. */ struct GnssMeasurement { /** @@ -380,6 +382,10 @@ interface IGnssMeasurementCallback extends @1.1::IGnssMeasurementCallback { * In this version of the HAL, the field 'state' in the v1_1.v1_0 struct is deprecated, and * is no longer used by the framework. The satellite sync state is instead reported in * @2.0::IGnssMeasurementCallback.GnssMeasurement.state. + * + * In this version of the HAL, the field 'constellation' in the v1_1.v1_0 struct is + * deprecated, and is no longer used by the framework. The constellation type is instead + * reported in @2.0::IGnssMeasurementCallback.GnssMeasurement.constellation. */ @1.1::IGnssMeasurementCallback.GnssMeasurement v1_1; @@ -442,6 +448,11 @@ interface IGnssMeasurementCallback extends @1.1::IGnssMeasurementCallback { * This value is mandatory. */ bitfield state; + + /** + * The constellation type of the GNSS measurement. + */ + GnssConstellationType constellation; }; /** diff --git a/gnss/2.0/default/Gnss.cpp b/gnss/2.0/default/Gnss.cpp index 1dfdadbffb..bb89b8b423 100644 --- a/gnss/2.0/default/Gnss.cpp +++ b/gnss/2.0/default/Gnss.cpp @@ -236,6 +236,11 @@ Return> Gnss::getExtensionGnssConfiguration_2_0() { return new GnssConfiguration{}; } +Return> Gnss::getExtensionGnssDebug_2_0() { + // TODO(b/124012850): Implement function. + return sp{}; +} + Return> Gnss::getExtensionAGnss_2_0() { return new AGnss{}; } diff --git a/gnss/2.0/default/Gnss.h b/gnss/2.0/default/Gnss.h index f02ab0a21e..a500128670 100644 --- a/gnss/2.0/default/Gnss.h +++ b/gnss/2.0/default/Gnss.h @@ -83,6 +83,7 @@ struct Gnss : public IGnss { // Methods from V2_0::IGnss follow. Return> getExtensionGnssConfiguration_2_0() override; + Return> getExtensionGnssDebug_2_0() override; Return> getExtensionAGnss_2_0() override; Return> getExtensionAGnssRil_2_0() override; Return> getExtensionGnssMeasurement_2_0() override; diff --git a/gnss/2.0/default/GnssMeasurement.cpp b/gnss/2.0/default/GnssMeasurement.cpp index a62c2dd27e..93de89cdfb 100644 --- a/gnss/2.0/default/GnssMeasurement.cpp +++ b/gnss/2.0/default/GnssMeasurement.cpp @@ -26,7 +26,7 @@ namespace gnss { namespace V2_0 { namespace implementation { -using GnssConstellationType = V1_0::GnssConstellationType; +using GnssConstellationType = V2_0::GnssConstellationType; using GnssMeasurementFlags = V1_0::IGnssMeasurementCallback::GnssMeasurementFlags; using GnssMeasurementState = V2_0::IGnssMeasurementCallback::GnssMeasurementState; @@ -46,6 +46,7 @@ Return GnssMeasurement::setCallba } Return GnssMeasurement::close() { + ALOGD("close"); std::unique_lock lock(mMutex); stop(); sCallback = nullptr; @@ -62,6 +63,7 @@ Return GnssMeasurement::setCallba // Methods from V2_0::IGnssMeasurement follow. Return GnssMeasurement::setCallback_2_0( const sp& callback, bool) { + ALOGD("setCallback_2_0"); std::unique_lock lock(mMutex); sCallback = callback; @@ -75,6 +77,7 @@ Return GnssMeasurement::setCallba } void GnssMeasurement::start() { + ALOGD("start"); mIsActive = true; mThread = std::thread([this]() { while (mIsActive == true) { @@ -87,6 +90,7 @@ void GnssMeasurement::start() { } void GnssMeasurement::stop() { + ALOGD("stop"); mIsActive = false; if (mThread.joinable()) { mThread.join(); @@ -95,26 +99,27 @@ void GnssMeasurement::stop() { GnssData GnssMeasurement::getMockMeasurement() { V1_0::IGnssMeasurementCallback::GnssMeasurement measurement_1_0 = { - .flags = (uint32_t)GnssMeasurementFlags::HAS_CARRIER_FREQUENCY, - .svid = (int16_t)6, - .constellation = GnssConstellationType::GLONASS, - .timeOffsetNs = 0.0, - .receivedSvTimeInNs = 8195997131077, - .receivedSvTimeUncertaintyInNs = 15, - .cN0DbHz = 30.0, - .pseudorangeRateMps = -484.13739013671875, - .pseudorangeRateUncertaintyMps = 1.0379999876022339, - .accumulatedDeltaRangeState = (uint32_t) - V1_0::IGnssMeasurementCallback::GnssAccumulatedDeltaRangeState::ADR_STATE_UNKNOWN, - .accumulatedDeltaRangeM = 0.0, - .accumulatedDeltaRangeUncertaintyM = 0.0, - .carrierFrequencyHz = 1.59975e+09, - .multipathIndicator = - V1_0::IGnssMeasurementCallback::GnssMultipathIndicator::INDICATOR_UNKNOWN}; + .flags = (uint32_t)GnssMeasurementFlags::HAS_CARRIER_FREQUENCY, + .svid = (int16_t)6, + .constellation = V1_0::GnssConstellationType::UNKNOWN, + .timeOffsetNs = 0.0, + .receivedSvTimeInNs = 8195997131077, + .receivedSvTimeUncertaintyInNs = 15, + .cN0DbHz = 30.0, + .pseudorangeRateMps = -484.13739013671875, + .pseudorangeRateUncertaintyMps = 1.0379999876022339, + .accumulatedDeltaRangeState = (uint32_t)V1_0::IGnssMeasurementCallback:: + GnssAccumulatedDeltaRangeState::ADR_STATE_UNKNOWN, + .accumulatedDeltaRangeM = 0.0, + .accumulatedDeltaRangeUncertaintyM = 0.0, + .carrierFrequencyHz = 1.59975e+09, + .multipathIndicator = + V1_0::IGnssMeasurementCallback::GnssMultipathIndicator::INDICATOR_UNKNOWN}; V1_1::IGnssMeasurementCallback::GnssMeasurement measurement_1_1 = {.v1_0 = measurement_1_0}; V2_0::IGnssMeasurementCallback::GnssMeasurement measurement_2_0 = { .v1_1 = measurement_1_1, .codeType = "C", + .constellation = GnssConstellationType::GLONASS, .state = GnssMeasurementState::STATE_CODE_LOCK | GnssMeasurementState::STATE_BIT_SYNC | GnssMeasurementState::STATE_SUBFRAME_SYNC | GnssMeasurementState::STATE_TOW_DECODED | diff --git a/gnss/2.0/types.hal b/gnss/2.0/types.hal index 21b64f93d7..3865727e41 100644 --- a/gnss/2.0/types.hal +++ b/gnss/2.0/types.hal @@ -72,4 +72,28 @@ struct GnssLocation { * needs to be estimated by syncing the notion of time via PTP or some other mechanism. */ ElapsedRealtime elapsedRealtime; -}; \ No newline at end of file +}; + +/** + * GNSS constellation type + * + * This is to specify the navigation satellite system, for example, as listed in Section 3.5 in + * RINEX Version 3.04. + */ +enum GnssConstellationType : uint8_t { + UNKNOWN = 0, + /** Global Positioning System. */ + GPS = 1, + /** Satellite-Based Augmentation System. */ + SBAS = 2, + /** Global Navigation Satellite System. */ + GLONASS = 3, + /** Quasi-Zenith Satellite System. */ + QZSS = 4, + /** BeiDou Navigation Satellite System. */ + BEIDOU = 5, + /** Galileo Navigation Satellite System. */ + GALILEO = 6, + /** Indian Regional Navigation Satellite System. */ + IRNSS = 7, +}; diff --git a/gnss/2.0/vts/functional/gnss_hal_test.cpp b/gnss/2.0/vts/functional/gnss_hal_test.cpp index b2b62fcd29..b8c343753f 100644 --- a/gnss/2.0/vts/functional/gnss_hal_test.cpp +++ b/gnss/2.0/vts/functional/gnss_hal_test.cpp @@ -33,7 +33,7 @@ GnssHalTest::GnssHalTest() void GnssHalTest::SetUp() { gnss_hal_ = ::testing::VtsHalHidlTargetTestBase::getService( GnssHidlEnvironment::Instance()->getServiceName()); - list_gnss_sv_status_.clear(); + list_vec_gnss_sv_info_.clear(); ASSERT_NE(gnss_hal_, nullptr); SetUpGnssCallback(); @@ -59,7 +59,7 @@ void GnssHalTest::SetUpGnssCallback() { gnss_cb_ = new GnssCallback(*this); ASSERT_NE(gnss_cb_, nullptr); - auto result = gnss_hal_->setCallback_1_1(gnss_cb_); + auto result = gnss_hal_->setCallback_2_0(gnss_cb_); if (!result.isOk()) { ALOGE("result of failed setCallback %s", result.description().c_str()); } @@ -77,16 +77,6 @@ void GnssHalTest::SetUpGnssCallback() { EXPECT_EQ(capabilities_called_count_, 1); EXPECT_EQ(info_called_count_, 1); EXPECT_EQ(name_called_count_, 1); - - // Setup measurement corrections callback. - auto measurementCorrections = gnss_hal_->getExtensionMeasurementCorrections(); - ASSERT_TRUE(measurementCorrections.isOk()); - sp iMeasurementCorrections = measurementCorrections; - if (iMeasurementCorrections != nullptr) { - sp iMeasurementCorrectionsCallback = - new GnssMeasurementCorrectionsCallback(*this); - iMeasurementCorrections->setCallback(iMeasurementCorrectionsCallback); - } } void GnssHalTest::StopAndClearLocations() { @@ -193,11 +183,12 @@ std::cv_status GnssHalTest::waitForMeasurementCorrectionsCapabilities(int timeou status = cv_.wait_for(lock, std::chrono::seconds(timeout_seconds)); if (status == std::cv_status::timeout) return status; } + notify_count_--; return status; } Return GnssHalTest::GnssCallback::gnssSetSystemInfoCb( - const IGnssCallback::GnssSystemInfo& info) { + const IGnssCallback_1_0::GnssSystemInfo& info) { ALOGI("Info received, year %d", info.yearOfHw); parent_.info_called_count_++; parent_.last_info_ = info; @@ -248,10 +239,9 @@ Return GnssHalTest::GnssCallback::gnssLocationCbImpl(const GnssLocation_2_ return Void(); } -Return GnssHalTest::GnssCallback::gnssSvStatusCb( - const IGnssCallback::GnssSvStatus& svStatus) { - ALOGI("GnssSvStatus received"); - parent_.list_gnss_sv_status_.emplace_back(svStatus); +Return GnssHalTest::GnssCallback::gnssSvStatusCb(const IGnssCallback_1_0::GnssSvStatus&) { + ALOGI("gnssSvStatusCb"); + return Void(); } @@ -272,3 +262,11 @@ Return GnssHalTest::GnssMeasurementCorrectionsCallback::setCapabilitiesCb( parent_.notify(); return Void(); } + +Return GnssHalTest::GnssCallback::gnssSvStatusCb_2_0( + const hidl_vec& svInfoList) { + ALOGI("gnssSvStatusCb_2_0. Size = %d", (int)svInfoList.size()); + parent_.list_vec_gnss_sv_info_.emplace_back(svInfoList); + parent_.notify(); + return Void(); +} diff --git a/gnss/2.0/vts/functional/gnss_hal_test.h b/gnss/2.0/vts/functional/gnss_hal_test.h index 7354aeae34..737815f0c3 100644 --- a/gnss/2.0/vts/functional/gnss_hal_test.h +++ b/gnss/2.0/vts/functional/gnss_hal_test.h @@ -25,17 +25,20 @@ #include #include +using android::hardware::hidl_vec; using android::hardware::Return; using android::hardware::Void; using android::hardware::gnss::measurement_corrections::V1_0::IMeasurementCorrectionsCallback; using android::hardware::gnss::V1_0::GnssLocationFlags; using android::hardware::gnss::V2_0::IGnss; -using android::hardware::gnss::V2_0::IGnssCallback; using GnssLocation_1_0 = android::hardware::gnss::V1_0::GnssLocation; using GnssLocation_2_0 = android::hardware::gnss::V2_0::GnssLocation; +using IGnssCallback_1_0 = android::hardware::gnss::V1_0::IGnssCallback; +using IGnssCallback_2_0 = android::hardware::gnss::V2_0::IGnssCallback; + using IGnssMeasurementCallback_1_0 = android::hardware::gnss::V1_0::IGnssMeasurementCallback; using IGnssMeasurementCallback_1_1 = android::hardware::gnss::V1_1::IGnssMeasurementCallback; using IGnssMeasurementCallback_2_0 = android::hardware::gnss::V2_0::IGnssMeasurementCallback; @@ -77,8 +80,8 @@ class GnssHalTest : public ::testing::VtsHalHidlTargetTestBase { std::cv_status waitForMeasurementCorrectionsCapabilities(int timeout_seconds); /* Callback class for data & Event. */ - class GnssCallback : public IGnssCallback { - public: + class GnssCallback : public IGnssCallback_2_0 { + public: GnssHalTest& parent_; GnssCallback(GnssHalTest& parent) : parent_(parent){}; @@ -86,7 +89,7 @@ class GnssHalTest : public ::testing::VtsHalHidlTargetTestBase { virtual ~GnssCallback() = default; // Dummy callback handlers - Return gnssStatusCb(const IGnssCallback::GnssStatusValue /* status */) override { + Return gnssStatusCb(const IGnssCallback_1_0::GnssStatusValue /* status */) override { return Void(); } Return gnssNmeaCb(int64_t /* timestamp */, @@ -103,8 +106,8 @@ class GnssHalTest : public ::testing::VtsHalHidlTargetTestBase { Return gnssNameCb(const android::hardware::hidl_string& name) override; Return gnssLocationCb(const GnssLocation_1_0& location) override; Return gnssSetCapabilitesCb(uint32_t capabilities) override; - Return gnssSetSystemInfoCb(const IGnssCallback::GnssSystemInfo& info) override; - Return gnssSvStatusCb(const IGnssCallback::GnssSvStatus& svStatus) override; + Return gnssSetSystemInfoCb(const IGnssCallback_1_0::GnssSystemInfo& info) override; + Return gnssSvStatusCb(const IGnssCallback_1_0::GnssSvStatus& svStatus) override; // New in v2.0 Return gnssLocationCb_2_0(const GnssLocation_2_0& location) override; @@ -113,6 +116,8 @@ class GnssHalTest : public ::testing::VtsHalHidlTargetTestBase { return Void(); } Return gnssSetCapabilitiesCb_2_0(uint32_t capabilities) override; + Return gnssSvStatusCb_2_0( + const hidl_vec& svInfoList) override; private: Return gnssLocationCbImpl(const GnssLocation_2_0& location); @@ -198,7 +203,7 @@ class GnssHalTest : public ::testing::VtsHalHidlTargetTestBase { void SetPositionMode(const int min_interval_msec, const bool low_power_mode); sp gnss_hal_; // GNSS HAL to call into - sp gnss_cb_; // Primary callback interface + sp gnss_cb_; // Primary callback interface // TODO: make these variables thread-safe. /* Count of calls to set the following items, and the latest item (used by @@ -211,16 +216,16 @@ class GnssHalTest : public ::testing::VtsHalHidlTargetTestBase { int measurement_called_count_; int name_called_count_; - IGnssCallback::GnssSystemInfo last_info_; + IGnssCallback_1_0::GnssSystemInfo last_info_; uint32_t last_capabilities_; uint32_t last_measurement_corrections_capabilities_; GnssLocation_2_0 last_location_; IGnssMeasurementCallback_2_0::GnssData last_measurement_; android::hardware::hidl_string last_name_; - list list_gnss_sv_status_; + list> list_vec_gnss_sv_info_; - private: + private: std::mutex mtx_; std::condition_variable cv_; int notify_count_; 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 f3559c5788..230c9799f1 100644 --- a/gnss/2.0/vts/functional/gnss_hal_test_cases.cpp +++ b/gnss/2.0/vts/functional/gnss_hal_test_cases.cpp @@ -38,6 +38,7 @@ using android::hardware::gnss::measurement_corrections::V1_0::IMeasurementCorrec 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::V2_0::GnssConstellationType; using android::hardware::gnss::V2_0::IGnssCallback; using android::hardware::gnss::visibility_control::V1_0::IGnssVisibilityControl; @@ -163,10 +164,13 @@ TEST_F(GnssHalTest, TestAGnssRil_UpdateNetworkState_2_0) { } /* - * TestGnssMeasurementCodeType: - * Sets a GnssMeasurementCallback, waits for a measurement, and verifies the codeType is valid. + * TestGnssMeasurementFields: + * Sets a GnssMeasurementCallback, waits for a measurement, and verifies + * 1. codeType is valid, + * 2. constellation is valid. + * 3. state is valid. */ -TEST_F(GnssHalTest, TestGnssMeasurementCodeType) { +TEST_F(GnssHalTest, TestGnssMeasurementFields) { const int kFirstGnssMeasurementTimeoutSeconds = 10; auto gnssMeasurement = gnss_hal_->getExtensionGnssMeasurement_2_0(); @@ -189,7 +193,23 @@ TEST_F(GnssHalTest, TestGnssMeasurementCodeType) { EXPECT_EQ(measurement_called_count_, 1); ASSERT_TRUE(last_measurement_.measurements.size() > 0); for (auto measurement : last_measurement_.measurements) { + // Verify CodeType is valid. ASSERT_NE(measurement.codeType, ""); + + // Verify ConstellationType is valid. + ASSERT_TRUE(static_cast(measurement.constellation) >= + static_cast(GnssConstellationType::UNKNOWN) && + static_cast(measurement.constellation) <= + static_cast(GnssConstellationType::IRNSS)); + + // Verify State is valid. + ASSERT_TRUE( + static_cast(measurement.state) >= + static_cast(IGnssMeasurementCallback_2_0::GnssMeasurementState:: + STATE_UNKNOWN) && + static_cast(measurement.state) <= + static_cast(IGnssMeasurementCallback_2_0::GnssMeasurementState:: + STATE_2ND_CODE_LOCK)); } iGnssMeasurement->close(); @@ -272,6 +292,7 @@ TEST_F(GnssHalTest, TestGnssVisibilityControlExtension) { * capability flag is set. */ TEST_F(GnssHalTest, TestGnssMeasurementCorrectionsCapabilities) { + // Setup measurement corrections callback. auto measurementCorrections = gnss_hal_->getExtensionMeasurementCorrections(); ASSERT_TRUE(measurementCorrections.isOk()); sp iMeasurementCorrections = measurementCorrections; @@ -279,6 +300,10 @@ TEST_F(GnssHalTest, TestGnssMeasurementCorrectionsCapabilities) { return; } + sp iMeasurementCorrectionsCallback = + new GnssMeasurementCorrectionsCallback(*this); + iMeasurementCorrections->setCallback(iMeasurementCorrectionsCallback); + const int kMeasurementCorrectionsCapabilitiesTimeoutSeconds = 5; waitForMeasurementCorrectionsCapabilities(kMeasurementCorrectionsCapabilitiesTimeoutSeconds); ASSERT_TRUE(measurement_corrections_capabilities_called_count_ > 0); @@ -337,9 +362,9 @@ TEST_F(GnssHalTest, TestGnssDataElapsedRealtimeFlags) { wait(kFirstGnssMeasurementTimeoutSeconds); EXPECT_EQ(measurement_called_count_, 1); - ASSERT_TRUE((int)last_measurement_.elapsedRealtime.flags >= 0 && - (int)last_measurement_.elapsedRealtime.flags <= - (int)ElapsedRealtimeFlags::HAS_TIME_UNCERTAINTY_NS); + ASSERT_TRUE((int)last_measurement_.elapsedRealtime.flags <= + (int)(ElapsedRealtimeFlags::HAS_TIMESTAMP_NS | + ElapsedRealtimeFlags::HAS_TIME_UNCERTAINTY_NS)); // We expect a non-zero timestamp when set. if (last_measurement_.elapsedRealtime.flags & ElapsedRealtimeFlags::HAS_TIMESTAMP_NS) { @@ -352,9 +377,9 @@ TEST_F(GnssHalTest, TestGnssDataElapsedRealtimeFlags) { TEST_F(GnssHalTest, TestGnssLocationElapsedRealtime) { StartAndCheckFirstLocation(); - ASSERT_TRUE((int)last_location_.elapsedRealtime.flags >= 0 && - (int)last_location_.elapsedRealtime.flags <= - (int)ElapsedRealtimeFlags::HAS_TIME_UNCERTAINTY_NS); + ASSERT_TRUE((int)last_location_.elapsedRealtime.flags <= + (int)(ElapsedRealtimeFlags::HAS_TIMESTAMP_NS | + ElapsedRealtimeFlags::HAS_TIME_UNCERTAINTY_NS)); // We expect a non-zero timestamp when set. if (last_location_.elapsedRealtime.flags & ElapsedRealtimeFlags::HAS_TIMESTAMP_NS) {