OSDN Git Service

CEC: Add CEC device upon receiving <Report Physical Address>
authorJinsuk Kim <jinsukkim@google.com>
Thu, 29 Jan 2015 00:50:25 +0000 (09:50 +0900)
committerJinsuk Kim <jinsukkim@google.com>
Thu, 29 Jan 2015 02:20:53 +0000 (11:20 +0900)
Help devices be processed sooner when new device detection operation
takes longer than usual.

Bug: 19181472
Change-Id: I96c29081a9c7c9f73ebcd027ed9d18056dc89bf9

services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
services/core/java/com/android/server/hdmi/NewDeviceAction.java

index 43ef457..b4c6b02 100644 (file)
@@ -580,6 +580,12 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
         if (!isInDeviceList(address, path)) {
             handleNewDeviceAtTheTailOfActivePath(path);
         }
+
+        // Add the device ahead with default information to handle <Active Source>
+        // promptly, rather than waiting till the new device action is finished.
+        HdmiDeviceInfo deviceInfo = new HdmiDeviceInfo(address, path, getPortId(path), type,
+                Constants.UNKNOWN_VENDOR_ID, HdmiUtils.getDefaultDeviceName(address));
+        addCecDevice(deviceInfo);
         startNewDeviceAction(ActiveSource.of(address, path), type);
         return true;
     }
@@ -1465,7 +1471,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
      * @return true if exist; otherwise false
      */
     @ServiceThreadOnly
-    private boolean isInDeviceList(int logicalAddress, int physicalAddress) {
+    boolean isInDeviceList(int logicalAddress, int physicalAddress) {
         assertRunOnServiceThread();
         HdmiDeviceInfo device = getCecDeviceInfo(logicalAddress);
         if (device == null) {
index 3d64cc5..6753368 100644 (file)
@@ -163,6 +163,12 @@ final class NewDeviceAction extends HdmiCecFeatureAction {
     }
 
     private void addDeviceInfo() {
+        // The device should be in the device list with default information.
+        if (!tv().isInDeviceList(mDeviceLogicalAddress, mDevicePhysicalAddress)) {
+            Slog.w(TAG, String.format("Device not found (%02x, %04x)",
+                    mDeviceLogicalAddress, mDevicePhysicalAddress));
+            return;
+        }
         if (mDisplayName == null) {
             mDisplayName = HdmiUtils.getDefaultDeviceName(mDeviceLogicalAddress);
         }