Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 186d372c authored by Marvin Ramin's avatar Marvin Ramin
Browse files

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
parent 104d2f92
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -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);
                }
            }
        }