diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/IAGnssRil.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/IAGnssRil.aidl new file mode 100644 index 0000000000..73df1950bf --- /dev/null +++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/IAGnssRil.aidl @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2022 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. + */ +/////////////////////////////////////////////////////////////////////////////// +// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. // +/////////////////////////////////////////////////////////////////////////////// + +// This file is a snapshot of an AIDL file. Do not edit it manually. There are +// two cases: +// 1). this is a frozen version file - do not edit this in any case. +// 2). this is a 'current' file. If you make a backwards compatible change to +// the interface (from the latest frozen version), the build system will +// prompt you to update this file with `m -update-api`. +// +// You must not make a backward incompatible change to any AIDL file built +// with the aidl_interface module type with versions property set. The module +// type is used to build AIDL files in a way that they can be used across +// independently updatable components of the system. If a device is shipped +// with such a backward incompatible change, it has a high risk of breaking +// later when a module using the interface is updated, e.g., Mainline modules. + +package android.hardware.gnss; +@VintfStability +interface IAGnssRil { + void setCallback(in android.hardware.gnss.IAGnssRilCallback callback); + void setRefLocation(in android.hardware.gnss.IAGnssRil.AGnssRefLocation agnssReflocation); + void setSetId(in android.hardware.gnss.IAGnssRil.SetIDType type, in @utf8InCpp String setid); + void updateNetworkState(in android.hardware.gnss.IAGnssRil.NetworkAttributes attributes); + const int NETWORK_CAPABILITY_NOT_METERED = 1; + const int NETWORK_CAPABILITY_NOT_ROAMING = 2; + @Backing(type="int") @VintfStability + enum AGnssRefLocationType { + GSM_CELLID = 1, + UMTS_CELLID = 2, + LTE_CELLID = 4, + NR_CELLID = 8, + } + @Backing(type="int") @VintfStability + enum SetIDType { + NONE = 0, + IMSI = 1, + MSISDM = 2, + } + @VintfStability + parcelable AGnssRefLocationCellID { + android.hardware.gnss.IAGnssRil.AGnssRefLocationType type; + int mcc; + int mnc; + int lac; + long cid; + int tac; + int pcid; + int arfcn; + } + @VintfStability + parcelable AGnssRefLocation { + android.hardware.gnss.IAGnssRil.AGnssRefLocationType type; + android.hardware.gnss.IAGnssRil.AGnssRefLocationCellID cellID; + } + @VintfStability + parcelable NetworkAttributes { + long networkHandle; + boolean isConnected; + int capabilities; + @utf8InCpp String apn; + } +} diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/IAGnssRilCallback.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/IAGnssRilCallback.aidl new file mode 100644 index 0000000000..152b10aea0 --- /dev/null +++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/IAGnssRilCallback.aidl @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2022 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. + */ +/////////////////////////////////////////////////////////////////////////////// +// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. // +/////////////////////////////////////////////////////////////////////////////// + +// This file is a snapshot of an AIDL file. Do not edit it manually. There are +// two cases: +// 1). this is a frozen version file - do not edit this in any case. +// 2). this is a 'current' file. If you make a backwards compatible change to +// the interface (from the latest frozen version), the build system will +// prompt you to update this file with `m -update-api`. +// +// You must not make a backward incompatible change to any AIDL file built +// with the aidl_interface module type with versions property set. The module +// type is used to build AIDL files in a way that they can be used across +// independently updatable components of the system. If a device is shipped +// with such a backward incompatible change, it has a high risk of breaking +// later when a module using the interface is updated, e.g., Mainline modules. + +package android.hardware.gnss; +@VintfStability +interface IAGnssRilCallback { + void requestSetIdCb(in int setIdflag); + void requestRefLocCb(); +} diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/IGnss.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/IGnss.aidl index 1b4c5817ce..8e967444ef 100644 --- a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/IGnss.aidl +++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/IGnss.aidl @@ -44,6 +44,7 @@ interface IGnss { @nullable android.hardware.gnss.IGnssGeofence getExtensionGnssGeofence(); @nullable android.hardware.gnss.IGnssNavigationMessageInterface getExtensionGnssNavigationMessage(); android.hardware.gnss.IAGnss getExtensionAGnss(); + android.hardware.gnss.IAGnssRil getExtensionAGnssRil(); android.hardware.gnss.IGnssDebug getExtensionGnssDebug(); android.hardware.gnss.visibility_control.IGnssVisibilityControl getExtensionGnssVisibilityControl(); void start(); diff --git a/gnss/aidl/android/hardware/gnss/IAGnssRil.aidl b/gnss/aidl/android/hardware/gnss/IAGnssRil.aidl new file mode 100644 index 0000000000..b57c9bffb4 --- /dev/null +++ b/gnss/aidl/android/hardware/gnss/IAGnssRil.aidl @@ -0,0 +1,163 @@ +/* + * Copyright (C) 2022 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; + +import android.hardware.gnss.IAGnssRilCallback; +import android.hardware.gnss.IAGnssRilCallback.SetIDType; + +/** + * Extended interface for AGNSS RIL support. An Assisted GNSS Radio Interface + * Layer interface allows the GNSS chipset to request radio interface layer + * information from Android platform. Examples of such information are reference + * location, unique subscriber ID, phone number string and network availability changes. + */ +@VintfStability +interface IAGnssRil { + /** Network capability mode bitmask for not metered. */ + const int NETWORK_CAPABILITY_NOT_METERED = 0x01; + + /** Network capability mode bitmask for not roaming. */ + const int NETWORK_CAPABILITY_NOT_ROAMING = 0x02; + + /** AGNSS reference location type */ + @VintfStability + @Backing(type="int") + enum AGnssRefLocationType { + GSM_CELLID = 1, + UMTS_CELLID = 2, + LTE_CELLID = 4, + NR_CELLID = 8, + } + + /** SET ID type*/ + @VintfStability + @Backing(type="int") + enum SetIDType { + NONE = 0, + IMSI = 1, + MSISDM = 2, + } + + /** CellID for 2G, 3G ,LTE and NR used in AGNSS. */ + @VintfStability + parcelable AGnssRefLocationCellID { + AGnssRefLocationType type; + + /** Mobile Country Code. */ + int mcc; + + /** Mobile Network Code .*/ + int mnc; + + /** + * Location Area Code in 2G, 3G and LTE. In 3G lac is discarded. In LTE, + * lac is populated with tac, to ensure that we don't break old clients that + * might rely on the old (wrong) behavior. + */ + int lac; + + /** + * Cell id in 2G. Utran Cell id in 3G. Cell Global Id EUTRA in LTE. + * Cell Global Id NR in 5G. + */ + long cid; + + /** Tracking Area Code in LTE and NR. */ + int tac; + + /** Physical Cell id in LTE and NR (not used in 2G and 3G) */ + int pcid; + + /** Absolute Radio Frequency Channel Number in NR. */ + int arfcn; + } + + /** Represents ref locations */ + @VintfStability + parcelable AGnssRefLocation { + AGnssRefLocationType type; + + AGnssRefLocationCellID cellID; + } + + /** Represents network connection status and capabilities. */ + @VintfStability + parcelable NetworkAttributes { + /** Network handle of the network for use with the NDK API. */ + long networkHandle; + + /** + * True indicates that network connectivity exists and it is possible to + * establish connections and pass data. If false, only the networkHandle field + * is populated to indicate that this network has just disconnected. + */ + boolean isConnected; + + /** + * A bitfield of flags indicating the capabilities of this network. The bit masks are + * defined in NETWORK_CAPABILITY_*. + */ + int capabilities; + + /** + * Telephony preferred Access Point Name to use for carrier data connection when + * connected to a cellular network. Empty string, otherwise. + */ + @utf8InCpp String apn; + } + + /** + * Opens the AGNSS interface and provides the callback routines + * to the implementation of this interface. + * + * @param callback Interface for AGnssRil callbacks. + * + */ + void setCallback(in IAGnssRilCallback callback); + + /** + * Sets the reference location. + * + * @param agnssReflocation AGNSS reference location CellID. + * + */ + void setRefLocation(in AGnssRefLocation agnssReflocation); + + /** + * Sets the SET ID. + * + * @param type Must be populated with either IMSI or MSISDN or NONE. + * @param setid If type is IMSI then setid is populated with + * a string representing the unique Subscriber ID, for example, the IMSI for + * a GMS phone. If type is MSISDN, then setid must contain + * the phone number string for line 1. For example, the MSISDN for a GSM phone. + * If the type is NONE, then the string must be empty. + * + */ + void setSetId(in SetIDType type, in @utf8InCpp String setid); + + /** + * Notifies GNSS of network status changes. + * + * The framework calls this method to update the GNSS HAL implementation of network + * state changes. + * + * @param attributes Updated network attributes. + * + */ + void updateNetworkState(in NetworkAttributes attributes); +} diff --git a/gnss/aidl/android/hardware/gnss/IAGnssRilCallback.aidl b/gnss/aidl/android/hardware/gnss/IAGnssRilCallback.aidl new file mode 100644 index 0000000000..6fb093e165 --- /dev/null +++ b/gnss/aidl/android/hardware/gnss/IAGnssRilCallback.aidl @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2022 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; + +/** + * Callback for IAGnssRil interface. Used to request SET ID and + * Reference Location. + */ +@VintfStability +interface IAGnssRilCallback { + /** + * The Hal uses this API to request a SET ID. + * + * @param setIdflag A bitfield of IAGnssRil.SetIDType that is required by + * the HAL. The framework will inject an empty SET ID if the flag is NONE. + * + */ + void requestSetIdCb(in int setIdflag); + + /** + * The Hal uses this API to request a reference location. + */ + void requestRefLocCb(); +} diff --git a/gnss/aidl/android/hardware/gnss/IGnss.aidl b/gnss/aidl/android/hardware/gnss/IGnss.aidl index 4ddc6a6193..b6bd38a118 100644 --- a/gnss/aidl/android/hardware/gnss/IGnss.aidl +++ b/gnss/aidl/android/hardware/gnss/IGnss.aidl @@ -18,6 +18,7 @@ package android.hardware.gnss; import android.hardware.gnss.GnssLocation; import android.hardware.gnss.IAGnss; +import android.hardware.gnss.IAGnssRil; import android.hardware.gnss.IGnssBatching; import android.hardware.gnss.IGnssCallback; import android.hardware.gnss.IGnssConfiguration; @@ -185,6 +186,13 @@ interface IGnss { */ IAGnss getExtensionAGnss(); + /** + * This method returns the IAGnssRil interface. + * + * @return The IAGnssRil interface. + */ + IAGnssRil getExtensionAGnssRil(); + /** * This method returns the IGnssDebug interface. * diff --git a/gnss/aidl/default/AGnssRil.cpp b/gnss/aidl/default/AGnssRil.cpp new file mode 100644 index 0000000000..e6009bdcd9 --- /dev/null +++ b/gnss/aidl/default/AGnssRil.cpp @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2021 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 "AGnssRilAidl" + +#include "AGnssRil.h" +#include + +namespace aidl::android::hardware::gnss { + +std::shared_ptr AGnssRil::sCallback = nullptr; + +ndk::ScopedAStatus AGnssRil::setCallback(const std::shared_ptr& callback) { + ALOGD("AGnssRil::setCallback"); + std::unique_lock lock(mMutex); + sCallback = callback; + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus AGnssRil::setRefLocation(const AGnssRefLocation& agnssReflocation) { + const AGnssRefLocationCellID& cellInfo = agnssReflocation.cellID; + ALOGD("AGnssRil::setRefLocation: type: %s, mcc: %d, mnc: %d, lac: %d, cid: %ld, tac: %d, pcid: " + "%d, arfcn: %d", + toString(agnssReflocation.type).c_str(), cellInfo.mcc, cellInfo.mnc, cellInfo.lac, + cellInfo.cid, cellInfo.tac, cellInfo.pcid, cellInfo.arfcn); + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus AGnssRil::setSetId(SetIDType type, const std::string& setid) { + ALOGD("AGnssRil::setSetId: type:%s, setid: %s", toString(type).c_str(), setid.c_str()); + return ndk::ScopedAStatus::ok(); +} + +ndk::ScopedAStatus AGnssRil::updateNetworkState(const NetworkAttributes& attributes) { + ALOGD("AGnssRil::updateNetworkState: networkHandle: %ld, isConnected: %d, capabilities: %d, " + "apn: %s", + attributes.networkHandle, attributes.isConnected, attributes.capabilities, + attributes.apn.c_str()); + return ndk::ScopedAStatus::ok(); +} + +} // namespace aidl::android::hardware::gnss diff --git a/gnss/aidl/default/AGnssRil.h b/gnss/aidl/default/AGnssRil.h new file mode 100644 index 0000000000..7e429ee8f4 --- /dev/null +++ b/gnss/aidl/default/AGnssRil.h @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2021 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 + +namespace aidl::android::hardware::gnss { + +struct AGnssRil : public BnAGnssRil { + public: + ndk::ScopedAStatus setCallback(const std::shared_ptr& callback) override; + ndk::ScopedAStatus setRefLocation(const AGnssRefLocation& agnssReflocation) override; + ndk::ScopedAStatus setSetId(SetIDType type, const std::string& setid) override; + ndk::ScopedAStatus updateNetworkState(const NetworkAttributes& attributes) override; + + private: + // Synchronization lock for sCallback + mutable std::mutex mMutex; + // Guarded by mMutex + static std::shared_ptr sCallback; +}; + +} // namespace aidl::android::hardware::gnss diff --git a/gnss/aidl/default/Android.bp b/gnss/aidl/default/Android.bp index 29c26d16ec..5797e1c645 100644 --- a/gnss/aidl/default/Android.bp +++ b/gnss/aidl/default/Android.bp @@ -56,6 +56,7 @@ cc_binary { "android.hardware.gnss-V2-ndk", ], srcs: [ + "AGnssRil.cpp", "AGnss.cpp", "Gnss.cpp", "GnssBatching.cpp", diff --git a/gnss/aidl/default/Gnss.cpp b/gnss/aidl/default/Gnss.cpp index e296351d95..dba54a017d 100644 --- a/gnss/aidl/default/Gnss.cpp +++ b/gnss/aidl/default/Gnss.cpp @@ -20,6 +20,7 @@ #include #include #include "AGnss.h" +#include "AGnssRil.h" #include "GnssBatching.h" #include "GnssConfiguration.h" #include "GnssDebug.h" @@ -154,7 +155,7 @@ ScopedAStatus Gnss::close() { return ScopedAStatus::ok(); } -ndk::ScopedAStatus Gnss::getExtensionAGnss(std::shared_ptr* iAGnss) { +ScopedAStatus Gnss::getExtensionAGnss(std::shared_ptr* iAGnss) { ALOGD("Gnss::getExtensionAGnss"); *iAGnss = SharedRefBase::make(); return ndk::ScopedAStatus::ok(); @@ -166,6 +167,12 @@ ScopedAStatus Gnss::injectTime(int64_t timeMs, int64_t timeReferenceMs, int unce return ScopedAStatus::ok(); } +ScopedAStatus Gnss::getExtensionAGnssRil(std::shared_ptr* iAGnssRil) { + ALOGD("Gnss::getExtensionAGnssRil"); + *iAGnssRil = SharedRefBase::make(); + return ndk::ScopedAStatus::ok(); +} + ScopedAStatus Gnss::injectLocation(const GnssLocation& location) { ALOGD("injectLocation. lat:%lf, lng:%lf, acc:%f", location.latitudeDegrees, location.longitudeDegrees, location.horizontalAccuracyMeters); diff --git a/gnss/aidl/default/Gnss.h b/gnss/aidl/default/Gnss.h index 384c8629a2..731eaa3f36 100644 --- a/gnss/aidl/default/Gnss.h +++ b/gnss/aidl/default/Gnss.h @@ -17,6 +17,7 @@ #pragma once #include +#include #include #include #include @@ -65,6 +66,7 @@ class Gnss : public BnGnss { ndk::ScopedAStatus getExtensionGnssNavigationMessage( std::shared_ptr* iGnssNavigationMessage) override; ndk::ScopedAStatus getExtensionAGnss(std::shared_ptr* iAGnss) override; + ndk::ScopedAStatus getExtensionAGnssRil(std::shared_ptr* iAGnssRil) override; ndk::ScopedAStatus getExtensionGnssDebug(std::shared_ptr* iGnssDebug) override; ndk::ScopedAStatus getExtensionGnssVisibilityControl( std::shared_ptr* diff --git a/gnss/aidl/vts/AGnssRilCallbackAidl.cpp b/gnss/aidl/vts/AGnssRilCallbackAidl.cpp new file mode 100644 index 0000000000..4e4166d61d --- /dev/null +++ b/gnss/aidl/vts/AGnssRilCallbackAidl.cpp @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2022 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. + */ + +#include "AGnssRilCallbackAidl.h" +#include + +android::binder::Status AGnssRilCallbackAidl::requestSetIdCb(int setIdflag) { + ALOGI("requestSetIdCb setIdflag %d", setIdflag); + return android::binder::Status::ok(); +} + +android::binder::Status AGnssRilCallbackAidl::requestRefLocCb() { + ALOGI("requestRefLocCb"); + return android::binder::Status::ok(); +} diff --git a/gnss/aidl/vts/AGnssRilCallbackAidl.h b/gnss/aidl/vts/AGnssRilCallbackAidl.h new file mode 100644 index 0000000000..74b34eee94 --- /dev/null +++ b/gnss/aidl/vts/AGnssRilCallbackAidl.h @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2022 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 + +/** Implementation for IAGnssRilCallback. */ +class AGnssRilCallbackAidl : public android::hardware::gnss::BnAGnssRilCallback { + public: + AGnssRilCallbackAidl(){}; + ~AGnssRilCallbackAidl(){}; + android::binder::Status requestSetIdCb(int setIdflag) override; + android::binder::Status requestRefLocCb() override; +}; diff --git a/gnss/aidl/vts/Android.bp b/gnss/aidl/vts/Android.bp index d532fad357..c39803f970 100644 --- a/gnss/aidl/vts/Android.bp +++ b/gnss/aidl/vts/Android.bp @@ -31,6 +31,7 @@ cc_test { "gnss_hal_test.cpp", "gnss_hal_test_cases.cpp", "AGnssCallbackAidl.cpp", + "AGnssRilCallbackAidl.cpp", "GnssBatchingCallback.cpp", "GnssCallbackAidl.cpp", "GnssGeofenceCallback.cpp", diff --git a/gnss/aidl/vts/gnss_hal_test_cases.cpp b/gnss/aidl/vts/gnss_hal_test_cases.cpp index 9acef8bed0..6811b7b847 100644 --- a/gnss/aidl/vts/gnss_hal_test_cases.cpp +++ b/gnss/aidl/vts/gnss_hal_test_cases.cpp @@ -27,6 +27,7 @@ #include #include #include "AGnssCallbackAidl.h" +#include "AGnssRilCallbackAidl.h" #include "GnssBatchingCallback.h" #include "GnssGeofenceCallback.h" #include "GnssMeasurementCallbackAidl.h" @@ -43,6 +44,7 @@ using android::hardware::gnss::GnssData; using android::hardware::gnss::GnssMeasurement; using android::hardware::gnss::GnssPowerStats; using android::hardware::gnss::IAGnss; +using android::hardware::gnss::IAGnssRil; using android::hardware::gnss::IGnss; using android::hardware::gnss::IGnssBatching; using android::hardware::gnss::IGnssBatchingCallback; @@ -857,6 +859,42 @@ TEST_P(GnssHalTest, TestAGnssExtension) { ASSERT_TRUE(status.isOk()); } +/* + * TestAGnssRilExtension: + * 1. Gets the IAGnssRil extension. + * 2. Sets AGnssRilCallback. + * 3. Sets reference location. + */ +TEST_P(GnssHalTest, TestAGnssRilExtension) { + if (aidl_gnss_hal_->getInterfaceVersion() == 1) { + return; + } + sp iAGnssRil; + auto status = aidl_gnss_hal_->getExtensionAGnssRil(&iAGnssRil); + ASSERT_TRUE(status.isOk()); + ASSERT_TRUE(iAGnssRil != nullptr); + + auto agnssRilCallback = sp::make(); + status = iAGnssRil->setCallback(agnssRilCallback); + ASSERT_TRUE(status.isOk()); + + // Set RefLocation + IAGnssRil::AGnssRefLocationCellID agnssReflocationCellId; + agnssReflocationCellId.type = IAGnssRil::AGnssRefLocationType::LTE_CELLID; + agnssReflocationCellId.mcc = 466; + agnssReflocationCellId.mnc = 97; + agnssReflocationCellId.lac = 46697; + agnssReflocationCellId.cid = 59168142; + agnssReflocationCellId.pcid = 420; + agnssReflocationCellId.tac = 11460; + IAGnssRil::AGnssRefLocation agnssReflocation; + agnssReflocation.type = IAGnssRil::AGnssRefLocationType::LTE_CELLID; + agnssReflocation.cellID = agnssReflocationCellId; + + status = iAGnssRil->setRefLocation(agnssReflocation); + ASSERT_TRUE(status.isOk()); +} + /* * GnssDebugValuesSanityTest: * Ensures that GnssDebug values make sense.