Loading gnss/1.1/vts/functional/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ cc_test { static_libs: [ "android.hardware.gnss@1.0", "android.hardware.gnss@1.1", "android.hardware.gnss@2.0", "android.hardware.gnss@common-vts-lib", ], shared_libs: [ Loading gnss/2.0/vts/functional/gnss_hal_test.cpp +43 −0 Original line number Diff line number Diff line Loading @@ -247,3 +247,46 @@ Return<void> GnssHalTest::GnssMeasurementCorrectionsCallback::setCapabilitiesCb( capabilities_cbq_.store(capabilities); return Void(); } GnssConstellationType_1_0 GnssHalTest::startLocationAndGetNonGpsConstellation() { const int kLocationsToAwait = 3; gnss_cb_->location_cbq_.reset(); StartAndCheckLocations(kLocationsToAwait); const int location_called_count = gnss_cb_->location_cbq_.calledCount(); // Tolerate 1 less sv status to handle edge cases in reporting. int sv_info_list_cbq_size = gnss_cb_->sv_info_list_cbq_.size(); EXPECT_GE(sv_info_list_cbq_size + 1, kLocationsToAwait); ALOGD("Observed %d GnssSvStatus, while awaiting %d Locations (%d received)", sv_info_list_cbq_size, kLocationsToAwait, location_called_count); // Find first non-GPS constellation to blacklist. Exclude IRNSS in GnssConstellationType_2_0 // as blacklisting of this constellation is not supported in gnss@2.0. const int kGnssSvStatusTimeout = 2; GnssConstellationType_1_0 constellation_to_blacklist = GnssConstellationType_1_0::UNKNOWN; for (int i = 0; i < sv_info_list_cbq_size; ++i) { hidl_vec<IGnssCallback_2_0::GnssSvInfo> sv_info_list; gnss_cb_->sv_info_list_cbq_.retrieve(sv_info_list, kGnssSvStatusTimeout); for (IGnssCallback_2_0::GnssSvInfo sv_info : sv_info_list) { if ((sv_info.v1_0.svFlag & IGnssCallback_2_0::GnssSvFlags::USED_IN_FIX) && (sv_info.constellation != GnssConstellationType_2_0::UNKNOWN) && (sv_info.constellation != GnssConstellationType_2_0::IRNSS) && (sv_info.constellation != GnssConstellationType_2_0::GPS)) { // found a non-GPS V1_0 constellation constellation_to_blacklist = Utils::mapConstellationType(sv_info.constellation); break; } } if (constellation_to_blacklist != GnssConstellationType_1_0::UNKNOWN) { break; } } if (constellation_to_blacklist == GnssConstellationType_1_0::UNKNOWN) { ALOGI("No non-GPS constellations found, constellation blacklist test less effective."); // Proceed functionally to blacklist something. constellation_to_blacklist = GnssConstellationType_1_0::GLONASS; } return constellation_to_blacklist; } gnss/2.0/vts/functional/gnss_hal_test.h +13 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,9 @@ using android::hardware::gnss::measurement_corrections::V1_0::IMeasurementCorrec using android::hardware::gnss::V1_0::GnssLocationFlags; using android::hardware::gnss::V2_0::IGnss; using GnssConstellationType_1_0 = android::hardware::gnss::V1_0::GnssConstellationType; using GnssConstellationType_2_0 = android::hardware::gnss::V2_0::GnssConstellationType; using GnssLocation_1_0 = android::hardware::gnss::V1_0::GnssLocation; using GnssLocation_2_0 = android::hardware::gnss::V2_0::GnssLocation; Loading Loading @@ -194,6 +197,16 @@ class GnssHalTest : public testing::TestWithParam<std::string> { */ void SetPositionMode(const int min_interval_msec, const bool low_power_mode); /* * startLocationAndGetNonGpsConstellation: * 1. Start location * 2. Find and return first non-GPS constellation * * Note that location is not stopped in this method. The client should call * StopAndClearLocations() after the call. */ GnssConstellationType_1_0 startLocationAndGetNonGpsConstellation(); sp<IGnss> gnss_hal_; // GNSS HAL to call into sp<GnssCallback> gnss_cb_; // Primary callback interface }; Loading gnss/2.0/vts/functional/gnss_hal_test_cases.cpp +77 −57 Original line number Diff line number Diff line Loading @@ -24,8 +24,6 @@ using android::hardware::hidl_string; using android::hardware::hidl_vec; using GnssConstellationType_2_0 = android::hardware::gnss::V2_0::GnssConstellationType; using GnssConstellationType_1_0 = android::hardware::gnss::V1_0::GnssConstellationType; using IGnssConfiguration_2_0 = android::hardware::gnss::V2_0::IGnssConfiguration; using IGnssConfiguration_1_1 = android::hardware::gnss::V1_1::IGnssConfiguration; using IAGnssRil_2_0 = android::hardware::gnss::V2_0::IAGnssRil; Loading Loading @@ -491,31 +489,6 @@ TEST_P(GnssHalTest, GetLocationLowPower) { StopAndClearLocations(); } /* * MapConstellationType: * Given a GnssConstellationType_2_0 type constellation, maps to its equivalent * GnssConstellationType_1_0 type constellation. For constellations that do not have * an equivalent value, maps to GnssConstellationType_1_0::UNKNOWN */ GnssConstellationType_1_0 MapConstellationType(GnssConstellationType_2_0 constellation) { switch (constellation) { case GnssConstellationType_2_0::GPS: return GnssConstellationType_1_0::GPS; case GnssConstellationType_2_0::SBAS: return GnssConstellationType_1_0::SBAS; case GnssConstellationType_2_0::GLONASS: return GnssConstellationType_1_0::GLONASS; case GnssConstellationType_2_0::QZSS: return GnssConstellationType_1_0::QZSS; case GnssConstellationType_2_0::BEIDOU: return GnssConstellationType_1_0::BEIDOU; case GnssConstellationType_2_0::GALILEO: return GnssConstellationType_1_0::GALILEO; default: return GnssConstellationType_1_0::UNKNOWN; } } /* * FindStrongFrequentNonGpsSource: * Loading Loading @@ -555,7 +528,7 @@ IGnssConfiguration_1_1::BlacklistedSource FindStrongFrequentNonGpsSource( (sv_info.constellation != GnssConstellationType_2_0::GPS)) { ComparableBlacklistedSource source; source.id.svid = sv_info.v1_0.svid; source.id.constellation = MapConstellationType(sv_info.constellation); source.id.constellation = Utils::mapConstellationType(sv_info.constellation); const auto& itSignal = mapSignals.find(source); if (itSignal == mapSignals.end()) { Loading Loading @@ -694,7 +667,7 @@ TEST_P(GnssHalTest, BlacklistIndividualSatellites) { hidl_vec<IGnssCallback_2_0::GnssSvInfo> sv_info_list; gnss_cb_->sv_info_list_cbq_.retrieve(sv_info_list, kGnssSvStatusTimeout); for (IGnssCallback_2_0::GnssSvInfo sv_info : sv_info_list) { auto constellation = MapConstellationType(sv_info.constellation); auto constellation = Utils::mapConstellationType(sv_info.constellation); EXPECT_FALSE((sv_info.v1_0.svid == source_to_blacklist.svid) && (constellation == source_to_blacklist.constellation) && (sv_info.v1_0.svFlag & IGnssCallback::GnssSvFlags::USED_IN_FIX)); Loading Loading @@ -736,7 +709,7 @@ TEST_P(GnssHalTest, BlacklistIndividualSatellites) { hidl_vec<IGnssCallback_2_0::GnssSvInfo> sv_info_list; gnss_cb_->sv_info_list_cbq_.retrieve(sv_info_list, kGnssSvStatusTimeout); for (IGnssCallback_2_0::GnssSvInfo sv_info : sv_info_list) { auto constellation = MapConstellationType(sv_info.constellation); auto constellation = Utils::mapConstellationType(sv_info.constellation); if ((sv_info.v1_0.svid == source_to_blacklist.svid) && (constellation == source_to_blacklist.constellation) && (sv_info.v1_0.svFlag & IGnssCallback::GnssSvFlags::USED_IN_FIX)) { Loading @@ -752,7 +725,7 @@ TEST_P(GnssHalTest, BlacklistIndividualSatellites) { } /* * BlacklistConstellation: * BlacklistConstellationWithLocationOff: * * 1) Turns on location, waits for 3 locations, ensuring they are valid, and checks corresponding * GnssStatus for any non-GPS constellations. Loading @@ -761,12 +734,11 @@ TEST_P(GnssHalTest, BlacklistIndividualSatellites) { * GnssStatus does not use any constellation but GPS. * 4a & b) Clean up by turning off location, and send in empty blacklist. */ TEST_P(GnssHalTest, BlacklistConstellation) { TEST_P(GnssHalTest, BlacklistConstellationWithLocationOff) { if (!IsGnssHalVersion_2_0()) { ALOGI("Test BlacklistConstellation skipped. GNSS HAL version is greater than 2.0."); return; } if (!(gnss_cb_->last_capabilities_ & IGnssCallback::Capabilities::SATELLITE_BLACKLIST)) { ALOGI("Test BlacklistConstellation skipped. SATELLITE_BLACKLIST capability not supported."); return; Loading @@ -774,43 +746,86 @@ TEST_P(GnssHalTest, BlacklistConstellation) { const int kLocationsToAwait = 3; // Find first non-GPS constellation to blacklist GnssConstellationType_1_0 constellation_to_blacklist = startLocationAndGetNonGpsConstellation(); // Turns off location StopAndClearLocations(); IGnssConfiguration_1_1::BlacklistedSource source_to_blacklist; source_to_blacklist.constellation = constellation_to_blacklist; source_to_blacklist.svid = 0; // documented wildcard for all satellites in this constellation auto gnss_configuration_hal_return = gnss_hal_->getExtensionGnssConfiguration_1_1(); ASSERT_TRUE(gnss_configuration_hal_return.isOk()); sp<IGnssConfiguration_1_1> gnss_configuration_hal = gnss_configuration_hal_return; ASSERT_NE(gnss_configuration_hal, nullptr); hidl_vec<IGnssConfiguration_1_1::BlacklistedSource> sources; sources.resize(1); sources[0] = source_to_blacklist; // setBlacklist when location is off. auto result = gnss_configuration_hal->setBlacklist(sources); ASSERT_TRUE(result.isOk()); EXPECT_TRUE(result); // retry and ensure constellation not used gnss_cb_->sv_info_list_cbq_.reset(); gnss_cb_->location_cbq_.reset(); StartAndCheckLocations(kLocationsToAwait); const int location_called_count = gnss_cb_->location_cbq_.calledCount(); // Tolerate 1 less sv status to handle edge cases in reporting. int sv_info_list_cbq_size = gnss_cb_->sv_info_list_cbq_.size(); EXPECT_GE(sv_info_list_cbq_size + 1, kLocationsToAwait); ALOGD("Observed %d GnssSvStatus, while awaiting %d Locations (%d received)", sv_info_list_cbq_size, kLocationsToAwait, location_called_count); // Find first non-GPS constellation to blacklist. Exclude IRNSS in GnssConstellationType_2_0 // as blacklisting of this constellation is not supported in gnss@2.0. ALOGD("Observed %d GnssSvStatus, while awaiting %d Locations", sv_info_list_cbq_size, kLocationsToAwait); const int kGnssSvStatusTimeout = 2; GnssConstellationType_1_0 constellation_to_blacklist = GnssConstellationType_1_0::UNKNOWN; for (int i = 0; i < sv_info_list_cbq_size; ++i) { hidl_vec<IGnssCallback_2_0::GnssSvInfo> sv_info_list; gnss_cb_->sv_info_list_cbq_.retrieve(sv_info_list, kGnssSvStatusTimeout); for (IGnssCallback_2_0::GnssSvInfo sv_info : sv_info_list) { if ((sv_info.v1_0.svFlag & IGnssCallback::GnssSvFlags::USED_IN_FIX) && (sv_info.constellation != GnssConstellationType_2_0::UNKNOWN) && (sv_info.constellation != GnssConstellationType_2_0::IRNSS) && (sv_info.constellation != GnssConstellationType_2_0::GPS)) { // found a non-GPS V1_0 constellation constellation_to_blacklist = MapConstellationType(sv_info.constellation); break; auto constellation = Utils::mapConstellationType(sv_info.constellation); EXPECT_FALSE((constellation == source_to_blacklist.constellation) && (sv_info.v1_0.svFlag & IGnssCallback::GnssSvFlags::USED_IN_FIX)); } } if (constellation_to_blacklist != GnssConstellationType_1_0::UNKNOWN) { break; // clean up StopAndClearLocations(); sources.resize(0); result = gnss_configuration_hal->setBlacklist(sources); ASSERT_TRUE(result.isOk()); EXPECT_TRUE(result); } /* * BlacklistConstellationWithLocationOn: * * 1) Turns on location, waits for 3 locations, ensuring they are valid, and checks corresponding * GnssStatus for any non-GPS constellations. * 2a & b) Blacklist first non-GPS constellations, and turns off location. * 3) Restart location, wait for 3 locations, ensuring they are valid, and checks corresponding * GnssStatus does not use any constellation but GPS. * 4a & b) Clean up by turning off location, and send in empty blacklist. */ TEST_P(GnssHalTest, BlacklistConstellationWithLocationOn) { if (!IsGnssHalVersion_2_0()) { ALOGI("Test BlacklistConstellation skipped. GNSS HAL version is greater than 2.0."); return; } if (constellation_to_blacklist == GnssConstellationType_1_0::UNKNOWN) { ALOGI("No non-GPS constellations found, constellation blacklist test less effective."); // Proceed functionally to blacklist something. constellation_to_blacklist = GnssConstellationType_1_0::GLONASS; if (!(gnss_cb_->last_capabilities_ & IGnssCallback::Capabilities::SATELLITE_BLACKLIST)) { ALOGI("Test BlacklistConstellation skipped. SATELLITE_BLACKLIST capability not supported."); return; } const int kLocationsToAwait = 3; // Find first non-GPS constellation to blacklist GnssConstellationType_1_0 constellation_to_blacklist = startLocationAndGetNonGpsConstellation(); IGnssConfiguration_1_1::BlacklistedSource source_to_blacklist; source_to_blacklist.constellation = constellation_to_blacklist; source_to_blacklist.svid = 0; // documented wildcard for all satellites in this constellation Loading @@ -824,10 +839,14 @@ TEST_P(GnssHalTest, BlacklistConstellation) { sources.resize(1); sources[0] = source_to_blacklist; // setBlacklist when location is on. auto result = gnss_configuration_hal->setBlacklist(sources); ASSERT_TRUE(result.isOk()); EXPECT_TRUE(result); // Turns off location StopAndClearLocations(); // retry and ensure constellation not used gnss_cb_->sv_info_list_cbq_.reset(); Loading @@ -835,15 +854,16 @@ TEST_P(GnssHalTest, BlacklistConstellation) { StartAndCheckLocations(kLocationsToAwait); // Tolerate 1 less sv status to handle edge cases in reporting. sv_info_list_cbq_size = gnss_cb_->sv_info_list_cbq_.size(); int sv_info_list_cbq_size = gnss_cb_->sv_info_list_cbq_.size(); EXPECT_GE(sv_info_list_cbq_size + 1, kLocationsToAwait); ALOGD("Observed %d GnssSvStatus, while awaiting %d Locations", sv_info_list_cbq_size, kLocationsToAwait); const int kGnssSvStatusTimeout = 2; for (int i = 0; i < sv_info_list_cbq_size; ++i) { hidl_vec<IGnssCallback_2_0::GnssSvInfo> sv_info_list; gnss_cb_->sv_info_list_cbq_.retrieve(sv_info_list, kGnssSvStatusTimeout); for (IGnssCallback_2_0::GnssSvInfo sv_info : sv_info_list) { auto constellation = MapConstellationType(sv_info.constellation); auto constellation = Utils::mapConstellationType(sv_info.constellation); EXPECT_FALSE((constellation == source_to_blacklist.constellation) && (sv_info.v1_0.svFlag & IGnssCallback::GnssSvFlags::USED_IN_FIX)); } Loading gnss/common/utils/vts/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ cc_library_static { export_include_dirs: ["include"], shared_libs: [ "android.hardware.gnss@1.0", "android.hardware.gnss@2.0", "android.hardware.gnss.measurement_corrections@1.0", "android.hardware.gnss.measurement_corrections@1.1", ], Loading Loading
gnss/1.1/vts/functional/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ cc_test { static_libs: [ "android.hardware.gnss@1.0", "android.hardware.gnss@1.1", "android.hardware.gnss@2.0", "android.hardware.gnss@common-vts-lib", ], shared_libs: [ Loading
gnss/2.0/vts/functional/gnss_hal_test.cpp +43 −0 Original line number Diff line number Diff line Loading @@ -247,3 +247,46 @@ Return<void> GnssHalTest::GnssMeasurementCorrectionsCallback::setCapabilitiesCb( capabilities_cbq_.store(capabilities); return Void(); } GnssConstellationType_1_0 GnssHalTest::startLocationAndGetNonGpsConstellation() { const int kLocationsToAwait = 3; gnss_cb_->location_cbq_.reset(); StartAndCheckLocations(kLocationsToAwait); const int location_called_count = gnss_cb_->location_cbq_.calledCount(); // Tolerate 1 less sv status to handle edge cases in reporting. int sv_info_list_cbq_size = gnss_cb_->sv_info_list_cbq_.size(); EXPECT_GE(sv_info_list_cbq_size + 1, kLocationsToAwait); ALOGD("Observed %d GnssSvStatus, while awaiting %d Locations (%d received)", sv_info_list_cbq_size, kLocationsToAwait, location_called_count); // Find first non-GPS constellation to blacklist. Exclude IRNSS in GnssConstellationType_2_0 // as blacklisting of this constellation is not supported in gnss@2.0. const int kGnssSvStatusTimeout = 2; GnssConstellationType_1_0 constellation_to_blacklist = GnssConstellationType_1_0::UNKNOWN; for (int i = 0; i < sv_info_list_cbq_size; ++i) { hidl_vec<IGnssCallback_2_0::GnssSvInfo> sv_info_list; gnss_cb_->sv_info_list_cbq_.retrieve(sv_info_list, kGnssSvStatusTimeout); for (IGnssCallback_2_0::GnssSvInfo sv_info : sv_info_list) { if ((sv_info.v1_0.svFlag & IGnssCallback_2_0::GnssSvFlags::USED_IN_FIX) && (sv_info.constellation != GnssConstellationType_2_0::UNKNOWN) && (sv_info.constellation != GnssConstellationType_2_0::IRNSS) && (sv_info.constellation != GnssConstellationType_2_0::GPS)) { // found a non-GPS V1_0 constellation constellation_to_blacklist = Utils::mapConstellationType(sv_info.constellation); break; } } if (constellation_to_blacklist != GnssConstellationType_1_0::UNKNOWN) { break; } } if (constellation_to_blacklist == GnssConstellationType_1_0::UNKNOWN) { ALOGI("No non-GPS constellations found, constellation blacklist test less effective."); // Proceed functionally to blacklist something. constellation_to_blacklist = GnssConstellationType_1_0::GLONASS; } return constellation_to_blacklist; }
gnss/2.0/vts/functional/gnss_hal_test.h +13 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,9 @@ using android::hardware::gnss::measurement_corrections::V1_0::IMeasurementCorrec using android::hardware::gnss::V1_0::GnssLocationFlags; using android::hardware::gnss::V2_0::IGnss; using GnssConstellationType_1_0 = android::hardware::gnss::V1_0::GnssConstellationType; using GnssConstellationType_2_0 = android::hardware::gnss::V2_0::GnssConstellationType; using GnssLocation_1_0 = android::hardware::gnss::V1_0::GnssLocation; using GnssLocation_2_0 = android::hardware::gnss::V2_0::GnssLocation; Loading Loading @@ -194,6 +197,16 @@ class GnssHalTest : public testing::TestWithParam<std::string> { */ void SetPositionMode(const int min_interval_msec, const bool low_power_mode); /* * startLocationAndGetNonGpsConstellation: * 1. Start location * 2. Find and return first non-GPS constellation * * Note that location is not stopped in this method. The client should call * StopAndClearLocations() after the call. */ GnssConstellationType_1_0 startLocationAndGetNonGpsConstellation(); sp<IGnss> gnss_hal_; // GNSS HAL to call into sp<GnssCallback> gnss_cb_; // Primary callback interface }; Loading
gnss/2.0/vts/functional/gnss_hal_test_cases.cpp +77 −57 Original line number Diff line number Diff line Loading @@ -24,8 +24,6 @@ using android::hardware::hidl_string; using android::hardware::hidl_vec; using GnssConstellationType_2_0 = android::hardware::gnss::V2_0::GnssConstellationType; using GnssConstellationType_1_0 = android::hardware::gnss::V1_0::GnssConstellationType; using IGnssConfiguration_2_0 = android::hardware::gnss::V2_0::IGnssConfiguration; using IGnssConfiguration_1_1 = android::hardware::gnss::V1_1::IGnssConfiguration; using IAGnssRil_2_0 = android::hardware::gnss::V2_0::IAGnssRil; Loading Loading @@ -491,31 +489,6 @@ TEST_P(GnssHalTest, GetLocationLowPower) { StopAndClearLocations(); } /* * MapConstellationType: * Given a GnssConstellationType_2_0 type constellation, maps to its equivalent * GnssConstellationType_1_0 type constellation. For constellations that do not have * an equivalent value, maps to GnssConstellationType_1_0::UNKNOWN */ GnssConstellationType_1_0 MapConstellationType(GnssConstellationType_2_0 constellation) { switch (constellation) { case GnssConstellationType_2_0::GPS: return GnssConstellationType_1_0::GPS; case GnssConstellationType_2_0::SBAS: return GnssConstellationType_1_0::SBAS; case GnssConstellationType_2_0::GLONASS: return GnssConstellationType_1_0::GLONASS; case GnssConstellationType_2_0::QZSS: return GnssConstellationType_1_0::QZSS; case GnssConstellationType_2_0::BEIDOU: return GnssConstellationType_1_0::BEIDOU; case GnssConstellationType_2_0::GALILEO: return GnssConstellationType_1_0::GALILEO; default: return GnssConstellationType_1_0::UNKNOWN; } } /* * FindStrongFrequentNonGpsSource: * Loading Loading @@ -555,7 +528,7 @@ IGnssConfiguration_1_1::BlacklistedSource FindStrongFrequentNonGpsSource( (sv_info.constellation != GnssConstellationType_2_0::GPS)) { ComparableBlacklistedSource source; source.id.svid = sv_info.v1_0.svid; source.id.constellation = MapConstellationType(sv_info.constellation); source.id.constellation = Utils::mapConstellationType(sv_info.constellation); const auto& itSignal = mapSignals.find(source); if (itSignal == mapSignals.end()) { Loading Loading @@ -694,7 +667,7 @@ TEST_P(GnssHalTest, BlacklistIndividualSatellites) { hidl_vec<IGnssCallback_2_0::GnssSvInfo> sv_info_list; gnss_cb_->sv_info_list_cbq_.retrieve(sv_info_list, kGnssSvStatusTimeout); for (IGnssCallback_2_0::GnssSvInfo sv_info : sv_info_list) { auto constellation = MapConstellationType(sv_info.constellation); auto constellation = Utils::mapConstellationType(sv_info.constellation); EXPECT_FALSE((sv_info.v1_0.svid == source_to_blacklist.svid) && (constellation == source_to_blacklist.constellation) && (sv_info.v1_0.svFlag & IGnssCallback::GnssSvFlags::USED_IN_FIX)); Loading Loading @@ -736,7 +709,7 @@ TEST_P(GnssHalTest, BlacklistIndividualSatellites) { hidl_vec<IGnssCallback_2_0::GnssSvInfo> sv_info_list; gnss_cb_->sv_info_list_cbq_.retrieve(sv_info_list, kGnssSvStatusTimeout); for (IGnssCallback_2_0::GnssSvInfo sv_info : sv_info_list) { auto constellation = MapConstellationType(sv_info.constellation); auto constellation = Utils::mapConstellationType(sv_info.constellation); if ((sv_info.v1_0.svid == source_to_blacklist.svid) && (constellation == source_to_blacklist.constellation) && (sv_info.v1_0.svFlag & IGnssCallback::GnssSvFlags::USED_IN_FIX)) { Loading @@ -752,7 +725,7 @@ TEST_P(GnssHalTest, BlacklistIndividualSatellites) { } /* * BlacklistConstellation: * BlacklistConstellationWithLocationOff: * * 1) Turns on location, waits for 3 locations, ensuring they are valid, and checks corresponding * GnssStatus for any non-GPS constellations. Loading @@ -761,12 +734,11 @@ TEST_P(GnssHalTest, BlacklistIndividualSatellites) { * GnssStatus does not use any constellation but GPS. * 4a & b) Clean up by turning off location, and send in empty blacklist. */ TEST_P(GnssHalTest, BlacklistConstellation) { TEST_P(GnssHalTest, BlacklistConstellationWithLocationOff) { if (!IsGnssHalVersion_2_0()) { ALOGI("Test BlacklistConstellation skipped. GNSS HAL version is greater than 2.0."); return; } if (!(gnss_cb_->last_capabilities_ & IGnssCallback::Capabilities::SATELLITE_BLACKLIST)) { ALOGI("Test BlacklistConstellation skipped. SATELLITE_BLACKLIST capability not supported."); return; Loading @@ -774,43 +746,86 @@ TEST_P(GnssHalTest, BlacklistConstellation) { const int kLocationsToAwait = 3; // Find first non-GPS constellation to blacklist GnssConstellationType_1_0 constellation_to_blacklist = startLocationAndGetNonGpsConstellation(); // Turns off location StopAndClearLocations(); IGnssConfiguration_1_1::BlacklistedSource source_to_blacklist; source_to_blacklist.constellation = constellation_to_blacklist; source_to_blacklist.svid = 0; // documented wildcard for all satellites in this constellation auto gnss_configuration_hal_return = gnss_hal_->getExtensionGnssConfiguration_1_1(); ASSERT_TRUE(gnss_configuration_hal_return.isOk()); sp<IGnssConfiguration_1_1> gnss_configuration_hal = gnss_configuration_hal_return; ASSERT_NE(gnss_configuration_hal, nullptr); hidl_vec<IGnssConfiguration_1_1::BlacklistedSource> sources; sources.resize(1); sources[0] = source_to_blacklist; // setBlacklist when location is off. auto result = gnss_configuration_hal->setBlacklist(sources); ASSERT_TRUE(result.isOk()); EXPECT_TRUE(result); // retry and ensure constellation not used gnss_cb_->sv_info_list_cbq_.reset(); gnss_cb_->location_cbq_.reset(); StartAndCheckLocations(kLocationsToAwait); const int location_called_count = gnss_cb_->location_cbq_.calledCount(); // Tolerate 1 less sv status to handle edge cases in reporting. int sv_info_list_cbq_size = gnss_cb_->sv_info_list_cbq_.size(); EXPECT_GE(sv_info_list_cbq_size + 1, kLocationsToAwait); ALOGD("Observed %d GnssSvStatus, while awaiting %d Locations (%d received)", sv_info_list_cbq_size, kLocationsToAwait, location_called_count); // Find first non-GPS constellation to blacklist. Exclude IRNSS in GnssConstellationType_2_0 // as blacklisting of this constellation is not supported in gnss@2.0. ALOGD("Observed %d GnssSvStatus, while awaiting %d Locations", sv_info_list_cbq_size, kLocationsToAwait); const int kGnssSvStatusTimeout = 2; GnssConstellationType_1_0 constellation_to_blacklist = GnssConstellationType_1_0::UNKNOWN; for (int i = 0; i < sv_info_list_cbq_size; ++i) { hidl_vec<IGnssCallback_2_0::GnssSvInfo> sv_info_list; gnss_cb_->sv_info_list_cbq_.retrieve(sv_info_list, kGnssSvStatusTimeout); for (IGnssCallback_2_0::GnssSvInfo sv_info : sv_info_list) { if ((sv_info.v1_0.svFlag & IGnssCallback::GnssSvFlags::USED_IN_FIX) && (sv_info.constellation != GnssConstellationType_2_0::UNKNOWN) && (sv_info.constellation != GnssConstellationType_2_0::IRNSS) && (sv_info.constellation != GnssConstellationType_2_0::GPS)) { // found a non-GPS V1_0 constellation constellation_to_blacklist = MapConstellationType(sv_info.constellation); break; auto constellation = Utils::mapConstellationType(sv_info.constellation); EXPECT_FALSE((constellation == source_to_blacklist.constellation) && (sv_info.v1_0.svFlag & IGnssCallback::GnssSvFlags::USED_IN_FIX)); } } if (constellation_to_blacklist != GnssConstellationType_1_0::UNKNOWN) { break; // clean up StopAndClearLocations(); sources.resize(0); result = gnss_configuration_hal->setBlacklist(sources); ASSERT_TRUE(result.isOk()); EXPECT_TRUE(result); } /* * BlacklistConstellationWithLocationOn: * * 1) Turns on location, waits for 3 locations, ensuring they are valid, and checks corresponding * GnssStatus for any non-GPS constellations. * 2a & b) Blacklist first non-GPS constellations, and turns off location. * 3) Restart location, wait for 3 locations, ensuring they are valid, and checks corresponding * GnssStatus does not use any constellation but GPS. * 4a & b) Clean up by turning off location, and send in empty blacklist. */ TEST_P(GnssHalTest, BlacklistConstellationWithLocationOn) { if (!IsGnssHalVersion_2_0()) { ALOGI("Test BlacklistConstellation skipped. GNSS HAL version is greater than 2.0."); return; } if (constellation_to_blacklist == GnssConstellationType_1_0::UNKNOWN) { ALOGI("No non-GPS constellations found, constellation blacklist test less effective."); // Proceed functionally to blacklist something. constellation_to_blacklist = GnssConstellationType_1_0::GLONASS; if (!(gnss_cb_->last_capabilities_ & IGnssCallback::Capabilities::SATELLITE_BLACKLIST)) { ALOGI("Test BlacklistConstellation skipped. SATELLITE_BLACKLIST capability not supported."); return; } const int kLocationsToAwait = 3; // Find first non-GPS constellation to blacklist GnssConstellationType_1_0 constellation_to_blacklist = startLocationAndGetNonGpsConstellation(); IGnssConfiguration_1_1::BlacklistedSource source_to_blacklist; source_to_blacklist.constellation = constellation_to_blacklist; source_to_blacklist.svid = 0; // documented wildcard for all satellites in this constellation Loading @@ -824,10 +839,14 @@ TEST_P(GnssHalTest, BlacklistConstellation) { sources.resize(1); sources[0] = source_to_blacklist; // setBlacklist when location is on. auto result = gnss_configuration_hal->setBlacklist(sources); ASSERT_TRUE(result.isOk()); EXPECT_TRUE(result); // Turns off location StopAndClearLocations(); // retry and ensure constellation not used gnss_cb_->sv_info_list_cbq_.reset(); Loading @@ -835,15 +854,16 @@ TEST_P(GnssHalTest, BlacklistConstellation) { StartAndCheckLocations(kLocationsToAwait); // Tolerate 1 less sv status to handle edge cases in reporting. sv_info_list_cbq_size = gnss_cb_->sv_info_list_cbq_.size(); int sv_info_list_cbq_size = gnss_cb_->sv_info_list_cbq_.size(); EXPECT_GE(sv_info_list_cbq_size + 1, kLocationsToAwait); ALOGD("Observed %d GnssSvStatus, while awaiting %d Locations", sv_info_list_cbq_size, kLocationsToAwait); const int kGnssSvStatusTimeout = 2; for (int i = 0; i < sv_info_list_cbq_size; ++i) { hidl_vec<IGnssCallback_2_0::GnssSvInfo> sv_info_list; gnss_cb_->sv_info_list_cbq_.retrieve(sv_info_list, kGnssSvStatusTimeout); for (IGnssCallback_2_0::GnssSvInfo sv_info : sv_info_list) { auto constellation = MapConstellationType(sv_info.constellation); auto constellation = Utils::mapConstellationType(sv_info.constellation); EXPECT_FALSE((constellation == source_to_blacklist.constellation) && (sv_info.v1_0.svFlag & IGnssCallback::GnssSvFlags::USED_IN_FIX)); } Loading
gnss/common/utils/vts/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ cc_library_static { export_include_dirs: ["include"], shared_libs: [ "android.hardware.gnss@1.0", "android.hardware.gnss@2.0", "android.hardware.gnss.measurement_corrections@1.0", "android.hardware.gnss.measurement_corrections@1.1", ], Loading