Reland "Add IAGnssRil AIDL HAL (hardware/interfaces)"
Bug: 205185251
Bug: 182975915
Test: atest VtsHalGnssTargetTest
Change-Id: I7f8d0b367c68ba870d0a222aee4ee4b5b93cc936
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 0000000..73df195
--- /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 <name>-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 0000000..152b10a
--- /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 <name>-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 281c531..45f37d2 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 @@
@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 0000000..c506b04
--- /dev/null
+++ b/gnss/aidl/android/hardware/gnss/IAGnssRil.aidl
@@ -0,0 +1,166 @@
+/*
+ * 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. This is defined in
+ * UserPlane Location Protocol (Version 2.0.4).
+ */
+ @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 0000000..6fb093e
--- /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 e1d4670..d2fa07d 100644
--- a/gnss/aidl/android/hardware/gnss/IGnss.aidl
+++ b/gnss/aidl/android/hardware/gnss/IGnss.aidl
@@ -18,6 +18,7 @@
import android.hardware.gnss.GnssLocation;
import android.hardware.gnss.IAGnss;
+import android.hardware.gnss.IAGnssRil;
import android.hardware.gnss.IGnssAntennaInfo;
import android.hardware.gnss.IGnssBatching;
import android.hardware.gnss.IGnssCallback;
@@ -187,6 +188,13 @@
IAGnss getExtensionAGnss();
/**
+ * This method returns the IAGnssRil interface.
+ *
+ * @return The IAGnssRil interface.
+ */
+ IAGnssRil getExtensionAGnssRil();
+
+ /**
* This method returns the IGnssDebug interface.
*
* This method must return non-null.
diff --git a/gnss/aidl/default/AGnssRil.cpp b/gnss/aidl/default/AGnssRil.cpp
new file mode 100644
index 0000000..afe0039
--- /dev/null
+++ b/gnss/aidl/default/AGnssRil.cpp
@@ -0,0 +1,58 @@
+/*
+ * 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 <inttypes.h>
+#include <log/log.h>
+
+namespace aidl::android::hardware::gnss {
+
+std::shared_ptr<IAGnssRilCallback> AGnssRil::sCallback = nullptr;
+
+ndk::ScopedAStatus AGnssRil::setCallback(const std::shared_ptr<IAGnssRilCallback>& callback) {
+ ALOGD("AGnssRil::setCallback");
+ std::unique_lock<std::mutex> 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: %" PRId64
+ ", 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:%" PRId64
+ ", 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 0000000..7e429ee
--- /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 <aidl/android/hardware/gnss/BnAGnssRil.h>
+
+namespace aidl::android::hardware::gnss {
+
+struct AGnssRil : public BnAGnssRil {
+ public:
+ ndk::ScopedAStatus setCallback(const std::shared_ptr<IAGnssRilCallback>& 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<IAGnssRilCallback> sCallback;
+};
+
+} // namespace aidl::android::hardware::gnss
diff --git a/gnss/aidl/default/Android.bp b/gnss/aidl/default/Android.bp
index 0031dcf..0707aaa 100644
--- a/gnss/aidl/default/Android.bp
+++ b/gnss/aidl/default/Android.bp
@@ -55,6 +55,7 @@
"android.hardware.gnss-V2-ndk",
],
srcs: [
+ "AGnssRil.cpp",
"AGnss.cpp",
"Gnss.cpp",
"GnssAntennaInfo.cpp",
diff --git a/gnss/aidl/default/Gnss.cpp b/gnss/aidl/default/Gnss.cpp
index 2c6df99..5867fe7 100644
--- a/gnss/aidl/default/Gnss.cpp
+++ b/gnss/aidl/default/Gnss.cpp
@@ -20,6 +20,7 @@
#include <inttypes.h>
#include <log/log.h>
#include "AGnss.h"
+#include "AGnssRil.h"
#include "DeviceFileReader.h"
#include "GnssAntennaInfo.h"
#include "GnssBatching.h"
@@ -171,7 +172,7 @@
return ScopedAStatus::ok();
}
-ndk::ScopedAStatus Gnss::getExtensionAGnss(std::shared_ptr<IAGnss>* iAGnss) {
+ScopedAStatus Gnss::getExtensionAGnss(std::shared_ptr<IAGnss>* iAGnss) {
ALOGD("Gnss::getExtensionAGnss");
*iAGnss = SharedRefBase::make<AGnss>();
return ndk::ScopedAStatus::ok();
@@ -183,6 +184,12 @@
return ScopedAStatus::ok();
}
+ScopedAStatus Gnss::getExtensionAGnssRil(std::shared_ptr<IAGnssRil>* iAGnssRil) {
+ ALOGD("Gnss::getExtensionAGnssRil");
+ *iAGnssRil = SharedRefBase::make<AGnssRil>();
+ 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 b92f4fb..b1fdac4 100644
--- a/gnss/aidl/default/Gnss.h
+++ b/gnss/aidl/default/Gnss.h
@@ -17,6 +17,7 @@
#pragma once
#include <aidl/android/hardware/gnss/BnAGnss.h>
+#include <aidl/android/hardware/gnss/BnAGnssRil.h>
#include <aidl/android/hardware/gnss/BnGnss.h>
#include <aidl/android/hardware/gnss/BnGnssAntennaInfo.h>
#include <aidl/android/hardware/gnss/BnGnssBatching.h>
@@ -66,6 +67,7 @@
ndk::ScopedAStatus getExtensionGnssNavigationMessage(
std::shared_ptr<IGnssNavigationMessageInterface>* iGnssNavigationMessage) override;
ndk::ScopedAStatus getExtensionAGnss(std::shared_ptr<IAGnss>* iAGnss) override;
+ ndk::ScopedAStatus getExtensionAGnssRil(std::shared_ptr<IAGnssRil>* iAGnssRil) override;
ndk::ScopedAStatus getExtensionGnssDebug(std::shared_ptr<IGnssDebug>* iGnssDebug) override;
ndk::ScopedAStatus getExtensionGnssVisibilityControl(
std::shared_ptr<android::hardware::gnss::visibility_control::IGnssVisibilityControl>*
diff --git a/gnss/aidl/vts/AGnssRilCallbackAidl.cpp b/gnss/aidl/vts/AGnssRilCallbackAidl.cpp
new file mode 100644
index 0000000..4e4166d
--- /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 <log/log.h>
+
+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 0000000..74b34ee
--- /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 <android/hardware/gnss/BnAGnssRilCallback.h>
+
+/** 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 b23a646..9e4b1c5 100644
--- a/gnss/aidl/vts/Android.bp
+++ b/gnss/aidl/vts/Android.bp
@@ -31,6 +31,7 @@
"gnss_hal_test.cpp",
"gnss_hal_test_cases.cpp",
"AGnssCallbackAidl.cpp",
+ "AGnssRilCallbackAidl.cpp",
"GnssAntennaInfoCallbackAidl.cpp",
"GnssBatchingCallback.cpp",
"GnssCallbackAidl.cpp",
diff --git a/gnss/aidl/vts/gnss_hal_test_cases.cpp b/gnss/aidl/vts/gnss_hal_test_cases.cpp
index f5f0aa4..962d4bf 100644
--- a/gnss/aidl/vts/gnss_hal_test_cases.cpp
+++ b/gnss/aidl/vts/gnss_hal_test_cases.cpp
@@ -28,6 +28,7 @@
#include <android/hardware/gnss/visibility_control/IGnssVisibilityControl.h>
#include <cutils/properties.h>
#include "AGnssCallbackAidl.h"
+#include "AGnssRilCallbackAidl.h"
#include "GnssAntennaInfoCallbackAidl.h"
#include "GnssBatchingCallback.h"
#include "GnssGeofenceCallback.h"
@@ -45,6 +46,7 @@
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::IGnssAntennaInfo;
using android::hardware::gnss::IGnssAntennaInfoCallback;
@@ -862,6 +864,42 @@
}
/*
+ * 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> iAGnssRil;
+ auto status = aidl_gnss_hal_->getExtensionAGnssRil(&iAGnssRil);
+ ASSERT_TRUE(status.isOk());
+ ASSERT_TRUE(iAGnssRil != nullptr);
+
+ auto agnssRilCallback = sp<AGnssRilCallbackAidl>::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.
*/