summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/android/hardware/hdmi/HdmiPlaybackClient.java2
-rw-r--r--services/core/java/com/android/server/hdmi/ActiveSourceHandler.java4
-rw-r--r--services/core/java/com/android/server/hdmi/Constants.java2
-rw-r--r--services/core/java/com/android/server/hdmi/DevicePowerStatusAction.java14
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiCecController.java22
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java9
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiCecMessage.java61
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiCecMessageValidator.java9
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiConfig.java2
-rw-r--r--services/core/java/com/android/server/hdmi/OneTouchPlayAction.java13
-rw-r--r--services/core/java/com/android/server/hdmi/UnmodifiableSparseArray.java1
11 files changed, 41 insertions, 98 deletions
diff --git a/core/java/android/hardware/hdmi/HdmiPlaybackClient.java b/core/java/android/hardware/hdmi/HdmiPlaybackClient.java
index 74cdc4e..fbf1430 100644
--- a/core/java/android/hardware/hdmi/HdmiPlaybackClient.java
+++ b/core/java/android/hardware/hdmi/HdmiPlaybackClient.java
@@ -82,6 +82,7 @@ public final class HdmiPlaybackClient extends HdmiClient {
}
}
+ @Override
public int getDeviceType() {
return HdmiCecDeviceInfo.DEVICE_PLAYBACK;
}
@@ -93,7 +94,6 @@ public final class HdmiPlaybackClient extends HdmiClient {
* of the result
*/
public void queryDisplayStatus(DisplayStatusCallback callback) {
- // TODO: PendingResult.
try {
mService.queryDisplayStatus(getCallbackWrapper(callback));
} catch (RemoteException e) {
diff --git a/services/core/java/com/android/server/hdmi/ActiveSourceHandler.java b/services/core/java/com/android/server/hdmi/ActiveSourceHandler.java
index 0b9094f..8617952 100644
--- a/services/core/java/com/android/server/hdmi/ActiveSourceHandler.java
+++ b/services/core/java/com/android/server/hdmi/ActiveSourceHandler.java
@@ -101,10 +101,6 @@ final class ActiveSourceHandler {
return mSource.getDeviceInfo().getLogicalAddress();
}
- private final int getSourcePath() {
- return mSource.getDeviceInfo().getPhysicalAddress();
- }
-
private void invokeCallback(int result) {
if (mCallback == null) {
return;
diff --git a/services/core/java/com/android/server/hdmi/Constants.java b/services/core/java/com/android/server/hdmi/Constants.java
index 7552a6a..7b917e8 100644
--- a/services/core/java/com/android/server/hdmi/Constants.java
+++ b/services/core/java/com/android/server/hdmi/Constants.java
@@ -21,7 +21,7 @@ import android.hardware.hdmi.HdmiCecDeviceInfo;
/**
* Defines constants related to HDMI-CEC protocol internal implementation.
* If a constant will be used in the public api, it should be located in
- * {@link android.hardware.hdmi.HdmiCec}.
+ * {@link android.hardware.hdmi.HdmiControlManager}.
*/
final class Constants {
diff --git a/services/core/java/com/android/server/hdmi/DevicePowerStatusAction.java b/services/core/java/com/android/server/hdmi/DevicePowerStatusAction.java
index 1106810..c3c3fe1 100644
--- a/services/core/java/com/android/server/hdmi/DevicePowerStatusAction.java
+++ b/services/core/java/com/android/server/hdmi/DevicePowerStatusAction.java
@@ -17,19 +17,19 @@ package com.android.server.hdmi;
*/
import android.hardware.hdmi.HdmiControlManager;
+import android.hardware.hdmi.HdmiPlaybackClient;
+import android.hardware.hdmi.HdmiPlaybackClient.DisplayStatusCallback;
import android.hardware.hdmi.IHdmiControlCallback;
import android.os.RemoteException;
import android.util.Slog;
/**
- * Feature action that queries the power status of other device.
- *
- * This action is initiated via {@link HdmiControlManager#queryDisplayStatus()} from
- * the Android system working as playback device to get the power status of TV device.
- *
- * <p>Package-private, accessed by {@link HdmiControlService} only.
+ * Feature action that queries the power status of other device. This action is initiated via
+ * {@link HdmiPlaybackClient#queryDisplayStatus(DisplayStatusCallback)} from the Android system
+ * working as playback device to get the power status of TV device.
+ * <p>
+ * Package-private, accessed by {@link HdmiControlService} only.
*/
-
final class DevicePowerStatusAction extends FeatureAction {
private static final String TAG = "DevicePowerStatusAction";
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecController.java b/services/core/java/com/android/server/hdmi/HdmiCecController.java
index c33b35f..10e4b6e 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecController.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecController.java
@@ -65,16 +65,6 @@ final class HdmiCecController {
private static final byte[] EMPTY_BODY = EmptyArray.BYTE;
- // A message to pass cec send command to IO looper.
- private static final int MSG_SEND_CEC_COMMAND = 1;
- // A message to delegate logical allocation to IO looper.
- private static final int MSG_ALLOCATE_LOGICAL_ADDRESS = 2;
-
- // Message types to handle incoming message in main service looper.
- private final static int MSG_RECEIVE_CEC_COMMAND = 1;
- // A message to report allocated logical address to main control looper.
- private final static int MSG_REPORT_LOGICAL_ADDRESS = 2;
-
private static final int NUM_LOGICAL_ADDRESS = 16;
// Predicate for whether the given logical address is remote device's one or not.
@@ -196,7 +186,15 @@ final class HdmiCecController {
int curAddress = (startAddress + i) % NUM_LOGICAL_ADDRESS;
if (curAddress != Constants.ADDR_UNREGISTERED
&& deviceType == HdmiUtils.getTypeFromAddress(curAddress)) {
- if (!sendPollMessage(curAddress, curAddress, HdmiConfig.ADDRESS_ALLOCATION_RETRY)) {
+ int failedPollingCount = 0;
+ for (int j = 0; j < HdmiConfig.ADDRESS_ALLOCATION_RETRY; ++j) {
+ if (!sendPollMessage(curAddress, curAddress, 1)) {
+ failedPollingCount++;
+ }
+ }
+
+ // Pick logical address if failed ratio is more than a half of all retries.
+ if (failedPollingCount * 2 > HdmiConfig.ADDRESS_ALLOCATION_RETRY) {
logicalAddress = curAddress;
break;
}
@@ -206,7 +204,7 @@ final class HdmiCecController {
final int assignedAddress = logicalAddress;
if (callback != null) {
runOnServiceThread(new Runnable() {
- @Override
+ @Override
public void run() {
callback.onAllocated(deviceType, assignedAddress);
}
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
index aee764b..6bafbd3 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
@@ -812,12 +812,6 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
addAndStartAction(VolumeControlAction.ofMute(this, avr.getLogicalAddress(), mute));
}
- private boolean isSystemAudioOn() {
- synchronized (mLock) {
- return mSystemAudioActivated;
- }
- }
-
@Override
@ServiceThreadOnly
protected boolean handleInitiateArc(HdmiCecMessage message) {
@@ -965,7 +959,8 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
* Return a list of all {@link HdmiCecDeviceInfo}.
*
* <p>Declared as package-private. accessed by {@link HdmiControlService} only.
- * This is not thread-safe. For thread safety, call {@link #getSafeDeviceInfoList(boolean)}.
+ * This is not thread-safe. For thread safety, call {@link #getSafeExternalInputs} which
+ * does not include local device.
*/
@ServiceThreadOnly
List<HdmiCecDeviceInfo> getDeviceInfoList(boolean includelLocalDevice) {
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecMessage.java b/services/core/java/com/android/server/hdmi/HdmiCecMessage.java
index 970568a..26071e6 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecMessage.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecMessage.java
@@ -16,9 +16,6 @@
package com.android.server.hdmi;
-import android.os.Parcel;
-import android.os.Parcelable;
-
import libcore.util.EmptyArray;
import java.util.Arrays;
@@ -28,11 +25,10 @@ import java.util.Arrays;
* HDMI cable to communicate with one another. A message is defined by its
* source and destination address, command (or opcode), and optional parameters.
*/
-public final class HdmiCecMessage implements Parcelable {
-
+public final class HdmiCecMessage {
public static final byte[] EMPTY_PARAM = EmptyArray.BYTE;
- private static final int MAX_MESSAGE_LENGTH = 16;
+ private static final int MAX_MESSAGE_PARAM_LENGTH = 14;
private final int mSource;
private final int mDestination;
@@ -47,6 +43,12 @@ public final class HdmiCecMessage implements Parcelable {
mSource = source;
mDestination = destination;
mOpcode = opcode & 0xFF;
+
+ if (params.length > MAX_MESSAGE_PARAM_LENGTH) {
+ throw new IllegalArgumentException(
+ "Param length should be at most 13 but current param length is "
+ + params.length);
+ }
mParams = Arrays.copyOf(params, params.length);
}
@@ -91,53 +93,6 @@ public final class HdmiCecMessage implements Parcelable {
return mParams;
}
- /**
- * Describe the kinds of special objects contained in this Parcelable's
- * marshalled representation.
- */
- @Override
- public int describeContents() {
- return 0;
- }
-
- /**
- * Flatten this object in to a Parcel.
- *
- * @param dest The Parcel in which the object should be written.
- * @param flags Additional flags about how the object should be written.
- * May be 0 or {@link Parcelable#PARCELABLE_WRITE_RETURN_VALUE}.
- */
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- dest.writeInt(mSource);
- dest.writeInt(mDestination);
- dest.writeInt(mOpcode);
- dest.writeInt(mParams.length);
- dest.writeByteArray(mParams);
- }
-
- public static final Parcelable.Creator<HdmiCecMessage> CREATOR
- = new Parcelable.Creator<HdmiCecMessage>() {
- /**
- * Rebuild a HdmiCecMessage previously stored with writeToParcel().
- * @param p HdmiCecMessage object to read the Rating from
- * @return a new HdmiCecMessage created from the data in the parcel
- */
- @Override
- public HdmiCecMessage createFromParcel(Parcel p) {
- int source = p.readInt();
- int destination = p.readInt();
- int opcode = p.readInt();
- byte[] params = new byte[p.readInt()];
- p.readByteArray(params);
- return new HdmiCecMessage(source, destination, opcode, params);
- }
- @Override
- public HdmiCecMessage[] newArray(int size) {
- return new HdmiCecMessage[size];
- }
- };
-
@Override
public String toString() {
StringBuffer s = new StringBuffer();
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecMessageValidator.java b/services/core/java/com/android/server/hdmi/HdmiCecMessageValidator.java
index d491ac2..7e73b47 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecMessageValidator.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecMessageValidator.java
@@ -258,10 +258,11 @@ public final class HdmiCecMessageValidator {
}
/**
- * Check if the given type is valid. A valid type is one of the actual
- * logical device types defined in the standard ({@link #DEVICE_TV},
- * {@link #DEVICE_PLAYBACK}, {@link #DEVICE_TUNER}, {@link #DEVICE_RECORDER},
- * and {@link #DEVICE_AUDIO_SYSTEM}).
+ * Check if the given type is valid. A valid type is one of the actual logical device types
+ * defined in the standard ({@link HdmiCecDeviceInfo#DEVICE_TV},
+ * {@link HdmiCecDeviceInfo#DEVICE_PLAYBACK}, {@link HdmiCecDeviceInfo#DEVICE_TUNER},
+ * {@link HdmiCecDeviceInfo#DEVICE_RECORDER}, and
+ * {@link HdmiCecDeviceInfo#DEVICE_AUDIO_SYSTEM}).
*
* @param type device type
* @return true if the given type is valid
diff --git a/services/core/java/com/android/server/hdmi/HdmiConfig.java b/services/core/java/com/android/server/hdmi/HdmiConfig.java
index 0793107..c95c96d 100644
--- a/services/core/java/com/android/server/hdmi/HdmiConfig.java
+++ b/services/core/java/com/android/server/hdmi/HdmiConfig.java
@@ -34,7 +34,7 @@ final class HdmiConfig {
static final int DEVICE_POLLING_RETRY = 1;
// Number of retries for polling each device in periodic check (hotplug detection).
- static final int HOTPLUG_DETECTION_RETRY = 2;
+ static final int HOTPLUG_DETECTION_RETRY = 1;
// Number of retries for polling each device in address allocation mechanism.
static final int ADDRESS_ALLOCATION_RETRY = 3;
diff --git a/services/core/java/com/android/server/hdmi/OneTouchPlayAction.java b/services/core/java/com/android/server/hdmi/OneTouchPlayAction.java
index 6299b99..752cc37 100644
--- a/services/core/java/com/android/server/hdmi/OneTouchPlayAction.java
+++ b/services/core/java/com/android/server/hdmi/OneTouchPlayAction.java
@@ -17,18 +17,17 @@ package com.android.server.hdmi;
import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.IHdmiControlCallback;
+import android.hardware.hdmi.HdmiPlaybackClient.OneTouchPlayCallback;
import android.os.RemoteException;
import android.util.Slog;
/**
- * Feature action that performs one touch play against TV/Display device.
- *
- * This action is initiated via {@link HdmiControlManager#oneTouchPlay()} from
- * the Android system working as playback device to turn on the TV, and switch the input.
- *
- * <p>Package-private, accessed by {@link HdmiControlService} only.
+ * Feature action that performs one touch play against TV/Display device. This action is initiated
+ * via {@link android.hardware.hdmi.HdmiPlaybackClient#oneTouchPlay(OneTouchPlayCallback)} from the
+ * Android system working as playback device to turn on the TV, and switch the input.
+ * <p>
+ * Package-private, accessed by {@link HdmiControlService} only.
*/
-
final class OneTouchPlayAction extends FeatureAction {
private static final String TAG = "OneTouchPlayAction";
diff --git a/services/core/java/com/android/server/hdmi/UnmodifiableSparseArray.java b/services/core/java/com/android/server/hdmi/UnmodifiableSparseArray.java
index 5c0a360..7791797 100644
--- a/services/core/java/com/android/server/hdmi/UnmodifiableSparseArray.java
+++ b/services/core/java/com/android/server/hdmi/UnmodifiableSparseArray.java
@@ -59,4 +59,3 @@ final class UnmodifiableSparseArray<E> {
return mArray.toString();
}
}
-