From 4b4b940c69d22304eb0734ed2432fc70ebadd462 Mon Sep 17 00:00:00 2001 From: Jinsuk Kim Date: Tue, 2 Sep 2014 10:30:10 +0900 Subject: [PATCH] CEC: Fixes bugs in routing control 1) HdmiControlService#inInDeviceList was passed the parameters in a wrong order. Fixed here. Turned the method to private as well. 2) Passed path not port to Routing control when handling active path removal to update the active path correctly. 3) adb dumpsys hdmi_control outputs the status of the connected CEC devices for debugging. Bug: 17344892 Bug: 17346869 Change-Id: I289d980a2534a6159b12286dd43f159e1b4134d4 --- .../server/hdmi/HdmiCecLocalDeviceTv.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java index 1ab80694b9ec5..7ae2198c8d0d3 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java @@ -281,7 +281,6 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { return; } setPrevPortId(getActivePortId()); - int portId = mService.pathToPortId(path); setActivePath(path); // TODO: Handle PAP/PIP case. // Show OSD port change banner @@ -289,7 +288,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { ActiveSource activeSource = getActiveSource(); HdmiDeviceInfo info = getCecDeviceInfo(activeSource.logicalAddress); if (info == null) { - info = new HdmiDeviceInfo(Constants.ADDR_INVALID, path, portId, + info = new HdmiDeviceInfo(Constants.ADDR_INVALID, path, getActivePortId(), HdmiDeviceInfo.DEVICE_RESERVED, 0, null); } mService.invokeInputChangeListener(info); @@ -470,7 +469,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { return true; } - if (!isInDeviceList(path, address)) { + if (!isInDeviceList(address, path)) { handleNewDeviceAtTheTailOfActivePath(path); } startNewDeviceAction(ActiveSource.of(address, path)); @@ -1055,9 +1054,9 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { * does not include local device. */ @ServiceThreadOnly - List getDeviceInfoList(boolean includelLocalDevice) { + List getDeviceInfoList(boolean includeLocalDevice) { assertRunOnServiceThread(); - if (includelLocalDevice) { + if (includeLocalDevice) { return HdmiUtils.sparseArrayToList(mDeviceInfos); } else { ArrayList infoList = new ArrayList<>(); @@ -1243,7 +1242,8 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { int newPath = mService.portIdToPath(getActivePortId()); mService.sendCecCommand(HdmiCecMessageBuilder.buildRoutingChange( mAddress, getActivePath(), newPath)); - addAndStartAction(new RoutingControlAction(this, getActivePortId(), true, null)); + mActiveSource.invalidate(); + addAndStartAction(new RoutingControlAction(this, getActivePath(), true, null)); } } @@ -1306,7 +1306,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { * @return true if exist; otherwise false */ @ServiceThreadOnly - boolean isInDeviceList(int logicalAddress, int physicalAddress) { + private boolean isInDeviceList(int logicalAddress, int physicalAddress) { assertRunOnServiceThread(); HdmiDeviceInfo device = getCecDeviceInfo(logicalAddress); if (device == null) { @@ -1622,5 +1622,11 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { pw.println("mAutoDeviceOff: " + mAutoDeviceOff); pw.println("mAutoWakeup: " + mAutoWakeup); pw.println("mSkipRoutingControl: " + mSkipRoutingControl); + pw.println("CEC devices:"); + pw.increaseIndent(); + for (HdmiDeviceInfo info : mSafeAllDeviceInfos) { + pw.println(info); + } + pw.decreaseIndent(); } }