summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/jni/gnss/Gnss.cpp10
-rw-r--r--services/core/jni/gnss/Gnss.h15
2 files changed, 23 insertions, 2 deletions
diff --git a/services/core/jni/gnss/Gnss.cpp b/services/core/jni/gnss/Gnss.cpp
index f6459eaa444e..8934c3a6abde 100644
--- a/services/core/jni/gnss/Gnss.cpp
+++ b/services/core/jni/gnss/Gnss.cpp
@@ -170,7 +170,15 @@ jboolean GnssHal::isSupported() {
}
void GnssHal::linkToDeath() {
- // TODO: linkToDeath for AIDL HAL
+ if (gnssHalAidl != nullptr) {
+ gnssHalDeathRecipientAidl = new GnssDeathRecipientAidl();
+ status_t linked = IInterface::asBinder(gnssHalAidl)->linkToDeath(gnssHalDeathRecipientAidl);
+ if (linked != OK) {
+ ALOGE("Unable to link to GNSS AIDL HAL death notification");
+ } else {
+ ALOGD("Successfully linked to GNSS AIDL HAl death notification");
+ }
+ }
if (gnssHal != nullptr) {
gnssHalDeathRecipient = new GnssDeathRecipient();
diff --git a/services/core/jni/gnss/Gnss.h b/services/core/jni/gnss/Gnss.h
index c6743d62af45..458da8a6e514 100644
--- a/services/core/jni/gnss/Gnss.h
+++ b/services/core/jni/gnss/Gnss.h
@@ -28,6 +28,7 @@
#include <android/hardware/gnss/2.0/IGnss.h>
#include <android/hardware/gnss/2.1/IGnss.h>
#include <android/hardware/gnss/BnGnss.h>
+#include <binder/IBinder.h>
#include <log/log.h>
#include "AGnss.h"
@@ -50,13 +51,24 @@ namespace android::gnss {
struct GnssDeathRecipient : virtual public hardware::hidl_death_recipient {
// hidl_death_recipient interface
virtual void serviceDied(uint64_t cookie, const wp<hidl::base::V1_0::IBase>& who) override {
- ALOGE("IGNSS hidl service failed, trying to recover...");
+ ALOGE("GNSS HIDL service failed, trying to recover...");
+ onServiceDied();
+ }
+ static void onServiceDied() {
JNIEnv* env = android::AndroidRuntime::getJNIEnv();
env->CallVoidMethod(android::mCallbacksObj, method_reportGnssServiceDied);
}
};
+struct GnssDeathRecipientAidl : virtual public IBinder::DeathRecipient {
+ // IBinder::DeathRecipient implementation
+ virtual void binderDied(const wp<IBinder>& who) override {
+ ALOGE("GNSS AIDL service failed, trying to recover...");
+ GnssDeathRecipient::onServiceDied();
+ }
+};
+
class GnssHal {
public:
GnssHal();
@@ -109,6 +121,7 @@ public:
private:
sp<GnssDeathRecipient> gnssHalDeathRecipient = nullptr;
+ sp<GnssDeathRecipientAidl> gnssHalDeathRecipientAidl = nullptr;
sp<hardware::gnss::V1_0::IGnss> gnssHal = nullptr;
sp<hardware::gnss::V1_1::IGnss> gnssHal_V1_1 = nullptr;
sp<hardware::gnss::V2_0::IGnss> gnssHal_V2_0 = nullptr;