From 69229e31fe1f079c57d0a81a3ef3b926d658ea49 Mon Sep 17 00:00:00 2001 From: Nathalie Le Clair Date: Mon, 28 Feb 2022 18:03:58 +0100 Subject: [PATCH] Assign local device portId 0 Before, the local device on a TV would be assigned an invalid portId, which was causing the local device to be removed from the HdmiCecNetwork in some instances. Bug: 213423171 Test: atest HdmiCecNetworkTest Change-Id: I99e1ca1d54a74682c0737deb2ad2163f7db5e0db --- .../com/android/server/hdmi/HdmiCecNetwork.java | 7 +++++-- .../android/server/hdmi/HdmiCecNetworkTest.java | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/hdmi/HdmiCecNetwork.java b/services/core/java/com/android/server/hdmi/HdmiCecNetwork.java index 90ff507d03476..3a0c0886e7080 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecNetwork.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecNetwork.java @@ -894,10 +894,13 @@ public class HdmiCecNetwork { * on the current device. */ int physicalAddressToPortId(int path) { + int physicalAddress = getPhysicalAddress(); + if (path == physicalAddress) { + // The local device isn't connected to any port; assign portId 0 + return Constants.CEC_SWITCH_HOME; + } int mask = 0xF000; int finalMask = 0xF000; - int physicalAddress; - physicalAddress = getPhysicalAddress(); int maskedAddress = physicalAddress; while (maskedAddress != 0) { diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecNetworkTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecNetworkTest.java index 2a8a5ed790677..e39e071269bac 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecNetworkTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecNetworkTest.java @@ -143,6 +143,22 @@ public class HdmiCecNetworkTest { Constants.INVALID_PORT_ID); } + @Test + public void physicalAddressToPort_localDevice_weAreSourceDevice() { + mNativeWrapper.setPhysicalAddress(0x2000); + mHdmiCecNetwork.initPortInfo(); + assertThat(mHdmiCecNetwork.physicalAddressToPortId(0x2000)) + .isEqualTo(Constants.CEC_SWITCH_HOME); + } + + @Test + public void physicalAddressToPort_localDevice_weAreTv() { + mNativeWrapper.setPhysicalAddress(0x0000); + mHdmiCecNetwork.initPortInfo(); + assertThat(mHdmiCecNetwork.physicalAddressToPortId(0x0000)) + .isEqualTo(Constants.CEC_SWITCH_HOME); + } + @Test public void localDevices_verifyOne_tv() { mHdmiCecNetwork.clearLocalDevices();