From c8adf1f70e4a3ea9236fa30e156e03bfdf4a71db Mon Sep 17 00:00:00 2001 From: Nathalie Le Clair Date: Mon, 28 Feb 2022 18:03:58 +0100 Subject: 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 Merged-In: I99e1ca1d54a74682c0737deb2ad2163f7db5e0db --- .../java/com/android/server/hdmi/HdmiCecNetwork.java | 7 +++++-- .../src/com/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 180bcdbe7546..1234d7fa0832 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecNetwork.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecNetwork.java @@ -865,10 +865,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 c478c2343361..017039053222 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecNetworkTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecNetworkTest.java @@ -141,6 +141,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(); -- cgit v1.2.3-59-g8ed1b