From d2377447d5a38a4c815ef0634713a556aaedec75 Mon Sep 17 00:00:00 2001 From: Yu-Han Yang Date: Wed, 12 Oct 2022 23:54:51 +0000 Subject: [PATCH] Add gnssSetSignalTypeCapabilitiesCb() Bug: 253319784 Test: atest VtsHalGnssTargetTest Change-Id: Ib1485a2002bb3af01954698f490060da46331a5d --- .../compatibility_matrix.current.xml | 2 +- gnss/1.1/default/Android.bp | 2 +- gnss/1.1/vts/functional/Android.bp | 2 +- gnss/2.0/default/Android.bp | 2 +- gnss/2.0/vts/functional/Android.bp | 2 +- gnss/2.1/default/Android.bp | 2 +- gnss/2.1/vts/functional/Android.bp | 2 +- .../android/hardware/gnss/IGnssCallback.aidl | 1 + .../android/hardware/gnss/IGnssCallback.aidl | 15 +++++++++++++++ gnss/aidl/default/Android.bp | 2 +- gnss/aidl/default/Gnss.cpp | 16 +++++++++++++++- gnss/aidl/default/gnss-default.xml | 2 +- gnss/aidl/vts/Android.bp | 2 +- gnss/aidl/vts/GnssCallbackAidl.cpp | 15 +++++++++++++++ gnss/aidl/vts/GnssCallbackAidl.h | 7 +++++++ gnss/aidl/vts/gnss_hal_test.cpp | 9 +++++++++ gnss/common/utils/default/Android.bp | 2 +- gnss/common/utils/vts/Android.bp | 2 +- 18 files changed, 74 insertions(+), 13 deletions(-) diff --git a/compatibility_matrices/compatibility_matrix.current.xml b/compatibility_matrices/compatibility_matrix.current.xml index 6fca4f3a9c..312db70f64 100644 --- a/compatibility_matrices/compatibility_matrix.current.xml +++ b/compatibility_matrices/compatibility_matrix.current.xml @@ -238,7 +238,7 @@ android.hardware.gnss - 2 + 3 IGnss default diff --git a/gnss/1.1/default/Android.bp b/gnss/1.1/default/Android.bp index a73182edb6..300e8de3af 100644 --- a/gnss/1.1/default/Android.bp +++ b/gnss/1.1/default/Android.bp @@ -27,7 +27,7 @@ cc_binary { "android.hardware.gnss@2.0", "android.hardware.gnss@1.1", "android.hardware.gnss@1.0", - "android.hardware.gnss-V2-ndk", + "android.hardware.gnss-V3-ndk", ], static_libs: [ "android.hardware.gnss@common-default-lib", diff --git a/gnss/1.1/vts/functional/Android.bp b/gnss/1.1/vts/functional/Android.bp index f8fad94a34..2414cbc4aa 100644 --- a/gnss/1.1/vts/functional/Android.bp +++ b/gnss/1.1/vts/functional/Android.bp @@ -36,7 +36,7 @@ cc_test { "android.hardware.gnss@1.1", "android.hardware.gnss@2.0", "android.hardware.gnss@common-vts-lib", - "android.hardware.gnss-V2-cpp", + "android.hardware.gnss-V3-cpp", ], shared_libs: [ "android.hardware.gnss.measurement_corrections@1.0", diff --git a/gnss/2.0/default/Android.bp b/gnss/2.0/default/Android.bp index 769e8ae167..83bc2cc903 100644 --- a/gnss/2.0/default/Android.bp +++ b/gnss/2.0/default/Android.bp @@ -50,7 +50,7 @@ cc_binary { "android.hardware.gnss@2.0", "android.hardware.gnss@1.1", "android.hardware.gnss@1.0", - "android.hardware.gnss-V2-ndk", + "android.hardware.gnss-V3-ndk", ], static_libs: [ "android.hardware.gnss@common-default-lib", diff --git a/gnss/2.0/vts/functional/Android.bp b/gnss/2.0/vts/functional/Android.bp index 2042dd9f17..e8db8862d2 100644 --- a/gnss/2.0/vts/functional/Android.bp +++ b/gnss/2.0/vts/functional/Android.bp @@ -39,7 +39,7 @@ cc_test { "android.hardware.gnss@2.0", "android.hardware.gnss@2.1", "android.hardware.gnss@common-vts-lib", - "android.hardware.gnss-V2-cpp", + "android.hardware.gnss-V3-cpp", ], test_suites: [ "general-tests", diff --git a/gnss/2.1/default/Android.bp b/gnss/2.1/default/Android.bp index 2979f5c9b7..4a4ce544ae 100644 --- a/gnss/2.1/default/Android.bp +++ b/gnss/2.1/default/Android.bp @@ -44,7 +44,7 @@ cc_binary { "android.hardware.gnss@1.0", "android.hardware.gnss@1.1", "android.hardware.gnss@2.0", - "android.hardware.gnss-V2-ndk", + "android.hardware.gnss-V3-ndk", ], static_libs: [ "android.hardware.gnss@common-default-lib", diff --git a/gnss/2.1/vts/functional/Android.bp b/gnss/2.1/vts/functional/Android.bp index d7b6eebbe9..76f9d07964 100644 --- a/gnss/2.1/vts/functional/Android.bp +++ b/gnss/2.1/vts/functional/Android.bp @@ -40,7 +40,7 @@ cc_test { "android.hardware.gnss@2.0", "android.hardware.gnss@2.1", "android.hardware.gnss@common-vts-lib", - "android.hardware.gnss-V2-cpp", + "android.hardware.gnss-V3-cpp", ], shared_libs: [ "libvintf", diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/IGnssCallback.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/IGnssCallback.aidl index 48c88f5ffe..fd07a6e562 100644 --- a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/IGnssCallback.aidl +++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/IGnssCallback.aidl @@ -45,6 +45,7 @@ interface IGnssCallback { void gnssSetSystemInfoCb(in android.hardware.gnss.IGnssCallback.GnssSystemInfo info); void gnssRequestTimeCb(); void gnssRequestLocationCb(in boolean independentFromGnss, in boolean isUserEmergency); + void gnssSetSignalTypeCapabilitiesCb(in android.hardware.gnss.GnssSignalType[] gnssSignalTypes); const int CAPABILITY_SCHEDULING = 1; const int CAPABILITY_MSB = 2; const int CAPABILITY_MSA = 4; diff --git a/gnss/aidl/android/hardware/gnss/IGnssCallback.aidl b/gnss/aidl/android/hardware/gnss/IGnssCallback.aidl index 8633bea070..2b2592bf63 100644 --- a/gnss/aidl/android/hardware/gnss/IGnssCallback.aidl +++ b/gnss/aidl/android/hardware/gnss/IGnssCallback.aidl @@ -18,6 +18,7 @@ package android.hardware.gnss; import android.hardware.gnss.GnssConstellationType; import android.hardware.gnss.GnssLocation; +import android.hardware.gnss.GnssSignalType; import android.hardware.gnss.IGnssConfiguration; import android.hardware.gnss.IGnssPsds; @@ -308,4 +309,18 @@ interface IGnssCallback { * during-call to E911, or up to 5 minutes after end-of-call or text to E911). */ void gnssRequestLocationCb(in boolean independentFromGnss, in boolean isUserEmergency); + + /** + * Callback to inform the framework of the list of GnssSignalTypes the GNSS HAL implementation + * supports. + * + * These capabilities are static at runtime, i.e., they represent the signal types the + * GNSS implementation supports without considering the temporary disabled signal types such as + * the blocklisted satellites/constellations or the constellations disabled by regional + * restrictions. + * + * @param gnssSignalTypes a list of GnssSignalTypes specifying the constellations, carrier + * frequencies, and the code types the GNSS HAL implementation supports. + */ + void gnssSetSignalTypeCapabilitiesCb(in GnssSignalType[] gnssSignalTypes); } diff --git a/gnss/aidl/default/Android.bp b/gnss/aidl/default/Android.bp index c8ae6b263d..ca5a41f8e5 100644 --- a/gnss/aidl/default/Android.bp +++ b/gnss/aidl/default/Android.bp @@ -50,7 +50,7 @@ cc_binary { "android.hardware.gnss.measurement_corrections@1.1", "android.hardware.gnss.measurement_corrections@1.0", "android.hardware.gnss.visibility_control@1.0", - "android.hardware.gnss-V2-ndk", + "android.hardware.gnss-V3-ndk", ], srcs: [ "AGnssRil.cpp", diff --git a/gnss/aidl/default/Gnss.cpp b/gnss/aidl/default/Gnss.cpp index cf2c90d359..8a4d186131 100644 --- a/gnss/aidl/default/Gnss.cpp +++ b/gnss/aidl/default/Gnss.cpp @@ -74,7 +74,21 @@ ScopedAStatus Gnss::setCallback(const std::shared_ptr& callback) if (!status.isOk()) { ALOGE("%s: Unable to invoke callback.gnssSetSystemInfoCb", __func__); } - + GnssSignalType signalType1 = { + .constellation = GnssConstellationType::GPS, + .carrierFrequencyHz = 1.59975e+09, + .codeType = GnssSignalType::CODE_TYPE_C, + }; + GnssSignalType signalType2 = { + .constellation = GnssConstellationType::GLONASS, + .carrierFrequencyHz = 1.59975e+09, + .codeType = GnssSignalType::CODE_TYPE_C, + }; + status = sGnssCallback->gnssSetSignalTypeCapabilitiesCb( + std::vector({signalType1, signalType2})); + if (!status.isOk()) { + ALOGE("%s: Unable to invoke callback.gnssSetSignalTypeCapabilitiesCb", __func__); + } return ScopedAStatus::ok(); } diff --git a/gnss/aidl/default/gnss-default.xml b/gnss/aidl/default/gnss-default.xml index 7449310933..73b841e479 100644 --- a/gnss/aidl/default/gnss-default.xml +++ b/gnss/aidl/default/gnss-default.xml @@ -1,7 +1,7 @@ android.hardware.gnss - 2 + 3 IGnss default diff --git a/gnss/aidl/vts/Android.bp b/gnss/aidl/vts/Android.bp index f02a41e248..2a09a56866 100644 --- a/gnss/aidl/vts/Android.bp +++ b/gnss/aidl/vts/Android.bp @@ -51,7 +51,7 @@ cc_test { "libbinder", ], static_libs: [ - "android.hardware.gnss-V2-cpp", + "android.hardware.gnss-V3-cpp", "android.hardware.gnss@common-vts-lib", ], test_suites: [ diff --git a/gnss/aidl/vts/GnssCallbackAidl.cpp b/gnss/aidl/vts/GnssCallbackAidl.cpp index 2f6128b6d2..d3be41437a 100644 --- a/gnss/aidl/vts/GnssCallbackAidl.cpp +++ b/gnss/aidl/vts/GnssCallbackAidl.cpp @@ -23,6 +23,7 @@ using android::binder::Status; using android::hardware::gnss::GnssLocation; using GnssSvInfo = android::hardware::gnss::IGnssCallback::GnssSvInfo; using GnssSystemInfo = android::hardware::gnss::IGnssCallback::GnssSystemInfo; +using GnssSignalType = android::hardware::gnss::GnssSignalType; Status GnssCallbackAidl::gnssSetCapabilitiesCb(const int capabilities) { ALOGI("Capabilities received %#08x", capabilities); @@ -30,6 +31,20 @@ Status GnssCallbackAidl::gnssSetCapabilitiesCb(const int capabilities) { return Status::ok(); } +Status GnssCallbackAidl::gnssSetSignalTypeCapabilitiesCb( + const std::vector& signalTypes) { + ALOGI("SignalTypeCapabilities received"); + std::ostringstream ss; + for (auto& signalType : signalTypes) { + ss << "[constellation=" << (int)signalType.constellation + << ", carrierFrequencyHz=" << signalType.carrierFrequencyHz + << ", codeType=" << signalType.codeType << "], "; + } + ALOGI("%s", ss.str().c_str()); + signal_type_capabilities_cbq_.store(signalTypes); + return Status::ok(); +} + Status GnssCallbackAidl::gnssStatusCb(const GnssStatusValue /* status */) { ALOGI("gnssStatusCb"); return Status::ok(); diff --git a/gnss/aidl/vts/GnssCallbackAidl.h b/gnss/aidl/vts/GnssCallbackAidl.h index a9495ba3c2..06526d3d2d 100644 --- a/gnss/aidl/vts/GnssCallbackAidl.h +++ b/gnss/aidl/vts/GnssCallbackAidl.h @@ -25,6 +25,7 @@ class GnssCallbackAidl : public android::hardware::gnss::BnGnssCallback { public: GnssCallbackAidl() : capabilities_cbq_("capabilities"), + signal_type_capabilities_cbq_("signal_type_capabilities"), info_cbq_("system_info"), location_cbq_("location"), sv_info_list_cbq_("sv_info"), @@ -32,6 +33,8 @@ class GnssCallbackAidl : public android::hardware::gnss::BnGnssCallback { ~GnssCallbackAidl(){}; android::binder::Status gnssSetCapabilitiesCb(const int capabilities) override; + android::binder::Status gnssSetSignalTypeCapabilitiesCb( + const std::vector& signalTypes) override; android::binder::Status gnssStatusCb(const GnssStatusValue status) override; android::binder::Status gnssSvStatusCb(const std::vector& svInfoList) override; android::binder::Status gnssLocationCb( @@ -45,10 +48,14 @@ class GnssCallbackAidl : public android::hardware::gnss::BnGnssCallback { const bool isUserEmergency) override; int last_capabilities_; + std::vector last_signal_type_capabilities; android::hardware::gnss::IGnssCallback::GnssSystemInfo last_info_; android::hardware::gnss::GnssLocation last_location_; android::hardware::gnss::common::GnssCallbackEventQueue capabilities_cbq_; + android::hardware::gnss::common::GnssCallbackEventQueue< + std::vector> + signal_type_capabilities_cbq_; android::hardware::gnss::common::GnssCallbackEventQueue< android::hardware::gnss::IGnssCallback::GnssSystemInfo> info_cbq_; diff --git a/gnss/aidl/vts/gnss_hal_test.cpp b/gnss/aidl/vts/gnss_hal_test.cpp index 0e1218e40c..95e2a15f26 100644 --- a/gnss/aidl/vts/gnss_hal_test.cpp +++ b/gnss/aidl/vts/gnss_hal_test.cpp @@ -105,6 +105,15 @@ void GnssHalTest::SetUpGnssCallback() { EXPECT_TRUE(aidl_gnss_cb_->info_cbq_.retrieve(aidl_gnss_cb_->last_info_, TIMEOUT_SEC)); EXPECT_EQ(aidl_gnss_cb_->info_cbq_.calledCount(), 1); } + + /* + * SignalTypeCapabilities callback should trigger. + */ + if (aidl_gnss_hal_->getInterfaceVersion() >= 3) { + EXPECT_TRUE(aidl_gnss_cb_->signal_type_capabilities_cbq_.retrieve( + aidl_gnss_cb_->last_signal_type_capabilities, TIMEOUT_SEC)); + EXPECT_EQ(aidl_gnss_cb_->signal_type_capabilities_cbq_.calledCount(), 1); + } } void GnssHalTest::CheckLocation(const GnssLocation& location, bool check_speed) { diff --git a/gnss/common/utils/default/Android.bp b/gnss/common/utils/default/Android.bp index b896f04ddf..4cf17a66cd 100644 --- a/gnss/common/utils/default/Android.bp +++ b/gnss/common/utils/default/Android.bp @@ -57,6 +57,6 @@ cc_library_static { "android.hardware.gnss@2.1", "android.hardware.gnss.measurement_corrections@1.1", "android.hardware.gnss.measurement_corrections@1.0", - "android.hardware.gnss-V2-ndk", + "android.hardware.gnss-V3-ndk", ], } diff --git a/gnss/common/utils/vts/Android.bp b/gnss/common/utils/vts/Android.bp index f92e609f3c..b5325b2881 100644 --- a/gnss/common/utils/vts/Android.bp +++ b/gnss/common/utils/vts/Android.bp @@ -44,7 +44,7 @@ cc_library_static { "android.hardware.gnss@2.1", "android.hardware.gnss.measurement_corrections@1.0", "android.hardware.gnss.measurement_corrections@1.1", - "android.hardware.gnss-V2-cpp", + "android.hardware.gnss-V3-cpp", ], static_libs: [ "libgtest",