Reconnect CEC HAL callback

When the HAL service crashes, reconnect to the HAL with retries and
ensure that the callback is reconnected as well.

Bug: 167649125
Test: make; flash; kill cec hal process and ensure CEC messages are
still sent and received afterwards

Change-Id: I5686f5dcf50c8f8bf67533596c39ac697f1e7263
This commit is contained in:
Marvin Ramin
2020-09-09 10:56:28 +02:00
parent 104d2f92b3
commit 186d372cba

View File

@@ -16,6 +16,8 @@
package com.android.server.hdmi;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.hardware.hdmi.HdmiPortInfo;
import android.hardware.tv.cec.V1_0.CecMessage;
import android.hardware.tv.cec.V1_0.HotplugEvent;
@@ -712,6 +714,7 @@ final class HdmiCecController {
private IHdmiCec mHdmiCec;
private final Object mLock = new Object();
private int mPhysicalAddress = INVALID_PHYSICAL_ADDRESS;
@Nullable private HdmiCecCallback mCallback;
@Override
public String nativeInit() {
@@ -720,7 +723,7 @@ final class HdmiCecController {
boolean connectToHal() {
try {
mHdmiCec = IHdmiCec.getService();
mHdmiCec = IHdmiCec.getService(true);
try {
mHdmiCec.linkToDeath(this, HDMI_CEC_HAL_DEATH_COOKIE);
} catch (RemoteException e) {
@@ -734,7 +737,8 @@ final class HdmiCecController {
}
@Override
public void setCallback(HdmiCecCallback callback) {
public void setCallback(@NonNull HdmiCecCallback callback) {
mCallback = callback;
try {
mHdmiCec.setCallback(callback);
} catch (RemoteException e) {
@@ -874,6 +878,10 @@ final class HdmiCecController {
if (cookie == HDMI_CEC_HAL_DEATH_COOKIE) {
HdmiLogger.error(TAG, "Service died cokkie : " + cookie + "; reconnecting");
connectToHal();
// Reconnect the callback
if (mCallback != null) {
setCallback(mCallback);
}
}
}