From a78d019dcf7a9a14b29f1ea3870ef89d8750f83e Mon Sep 17 00:00:00 2001 From: "Hannah.Hsu" Date: Wed, 2 Sep 2020 15:44:22 +0800 Subject: [PATCH] Fix TV didn't initiate ARC sometimes. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Root Cause: 1. Some AVRs would send several times and wait for TV's response with . TV would only send in current flow, thus AVR couldn't be re-initiated, even TV send . 2. System might not start to initiate ARC after several times hot-plug. Solution: 1. Send everytime when setArcStatus(false). 2. Re-initiate ARC when ARC is plugged in. Verified pass with Denon AVR-X3600H. Bug:  168087640 Change-Id: I8a5adf8b9d1e378dfc0984113c7db60b1630a46c --- .../java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java | 5 +++-- .../android/server/hdmi/SetArcTransmissionStateAction.java | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java index 2c0ddaf35182d..b749031ae5d8f 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java @@ -1569,10 +1569,11 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { // When the device is not unplugged but reawaken from standby, we check if the System // Audio Control Feature is enabled or not then decide if turning SAM on/off accordingly. if (getAvrDeviceInfo() != null && portId == getAvrDeviceInfo().getPortId()) { + HdmiLogger.debug("Port ID:%d, 5v=%b", portId, connected); if (!connected) { setSystemAudioMode(false); - } else if (mSystemAudioControlFeatureEnabled != mService.isSystemAudioActivated()){ - setSystemAudioMode(mSystemAudioControlFeatureEnabled); + } else { + onNewAvrAdded(getAvrDeviceInfo()); } } diff --git a/services/core/java/com/android/server/hdmi/SetArcTransmissionStateAction.java b/services/core/java/com/android/server/hdmi/SetArcTransmissionStateAction.java index 6633789ffc066..db93ad0617ff3 100644 --- a/services/core/java/com/android/server/hdmi/SetArcTransmissionStateAction.java +++ b/services/core/java/com/android/server/hdmi/SetArcTransmissionStateAction.java @@ -102,12 +102,12 @@ final class SetArcTransmissionStateAction extends HdmiCecFeatureAction { } private void setArcStatus(boolean enabled) { - boolean wasEnabled = tv().setArcStatus(enabled); - Slog.i(TAG, "Change arc status [old:" + wasEnabled + ", new:" + enabled + "]"); + tv().setArcStatus(enabled); + Slog.i(TAG, "Change arc status to " + enabled); // If enabled before and set to "disabled" and send to // av reciever. - if (!enabled && wasEnabled) { + if (!enabled) { sendCommand(HdmiCecMessageBuilder.buildReportArcTerminated(getSourceAddress(), mAvrAddress)); }