summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/hardware/hdmi/HdmiCec.java333
-rw-r--r--core/java/android/hardware/hdmi/HdmiCecDeviceInfo.java44
-rw-r--r--core/java/android/hardware/hdmi/HdmiCecMessage.aidl19
-rw-r--r--core/java/android/hardware/hdmi/HdmiControlManager.java18
-rw-r--r--core/java/android/hardware/hdmi/HdmiPlaybackClient.java12
-rw-r--r--core/java/android/hardware/hdmi/HdmiTvClient.java49
-rw-r--r--services/core/java/com/android/server/hdmi/ActiveSourceHandler.java9
-rw-r--r--services/core/java/com/android/server/hdmi/Constants.java200
-rw-r--r--services/core/java/com/android/server/hdmi/DeviceDiscoveryAction.java28
-rw-r--r--services/core/java/com/android/server/hdmi/DevicePowerStatusAction.java6
-rw-r--r--services/core/java/com/android/server/hdmi/DeviceSelectAction.java17
-rw-r--r--services/core/java/com/android/server/hdmi/FeatureAction.java1
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiCecController.java55
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java66
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java19
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java37
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiCecMessage.java (renamed from core/java/android/hardware/hdmi/HdmiCecMessage.java)24
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiCecMessageBuilder.java68
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiCecMessageCache.java14
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiConstants.java98
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiControlService.java88
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiUtils.java99
-rw-r--r--services/core/java/com/android/server/hdmi/HotplugDetectionAction.java17
-rw-r--r--services/core/java/com/android/server/hdmi/NewDeviceAction.java28
-rw-r--r--services/core/java/com/android/server/hdmi/OneTouchPlayAction.java10
-rw-r--r--services/core/java/com/android/server/hdmi/RequestArcAction.java10
-rw-r--r--services/core/java/com/android/server/hdmi/RequestArcInitiationAction.java4
-rw-r--r--services/core/java/com/android/server/hdmi/RequestArcTerminationAction.java4
-rw-r--r--services/core/java/com/android/server/hdmi/RoutingControlAction.java17
-rw-r--r--services/core/java/com/android/server/hdmi/SendKeyAction.java3
-rw-r--r--services/core/java/com/android/server/hdmi/SetArcTransmissionStateAction.java12
-rw-r--r--services/core/java/com/android/server/hdmi/SystemAudioAction.java16
-rw-r--r--services/core/java/com/android/server/hdmi/SystemAudioActionFromAvr.java11
-rw-r--r--services/core/java/com/android/server/hdmi/SystemAudioActionFromTv.java4
-rw-r--r--services/core/java/com/android/server/hdmi/SystemAudioAutoInitiationAction.java7
-rw-r--r--services/core/java/com/android/server/hdmi/SystemAudioStatusAction.java13
-rw-r--r--services/core/java/com/android/server/hdmi/VendorSpecificAction.java2
-rw-r--r--services/core/java/com/android/server/hdmi/VolumeControlAction.java8
38 files changed, 679 insertions, 791 deletions
diff --git a/core/java/android/hardware/hdmi/HdmiCec.java b/core/java/android/hardware/hdmi/HdmiCec.java
deleted file mode 100644
index d71a4118ac4e..000000000000
--- a/core/java/android/hardware/hdmi/HdmiCec.java
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.hdmi;
-
-import android.annotation.SystemApi;
-
-/**
- * Defines constants and utility methods related to HDMI-CEC protocol.
- *
- * @hide
- */
-@SystemApi
-public final class HdmiCec {
-
- /** TV device type. */
- public static final int DEVICE_TV = 0;
-
- /** Recording device type. */
- public static final int DEVICE_RECORDER = 1;
-
- /** Device type reserved for future usage. */
- public static final int DEVICE_RESERVED = 2;
-
- /** Tuner device type. */
- public static final int DEVICE_TUNER = 3;
-
- /** Playback device type. */
- public static final int DEVICE_PLAYBACK = 4;
-
- /** Audio system device type. */
- public static final int DEVICE_AUDIO_SYSTEM = 5;
-
- // Value indicating the device is not an active source.
- public static final int DEVICE_INACTIVE = -1;
-
- /** Logical address for TV */
- public static final int ADDR_TV = 0;
-
- /** Logical address for recorder 1 */
- public static final int ADDR_RECORDER_1 = 1;
-
- /** Logical address for recorder 2 */
- public static final int ADDR_RECORDER_2 = 2;
-
- /** Logical address for tuner 1 */
- public static final int ADDR_TUNER_1 = 3;
-
- /** Logical address for playback 1 */
- public static final int ADDR_PLAYBACK_1 = 4;
-
- /** Logical address for audio system */
- public static final int ADDR_AUDIO_SYSTEM = 5;
-
- /** Logical address for tuner 2 */
- public static final int ADDR_TUNER_2 = 6;
-
- /** Logical address for tuner 3 */
- public static final int ADDR_TUNER_3 = 7;
-
- /** Logical address for playback 2 */
- public static final int ADDR_PLAYBACK_2 = 8;
-
- /** Logical address for recorder 3 */
- public static final int ADDR_RECORDER_3 = 9;
-
- /** Logical address for tuner 4 */
- public static final int ADDR_TUNER_4 = 10;
-
- /** Logical address for playback 3 */
- public static final int ADDR_PLAYBACK_3 = 11;
-
- /** Logical address reserved for future usage */
- public static final int ADDR_RESERVED_1 = 12;
-
- /** Logical address reserved for future usage */
- public static final int ADDR_RESERVED_2 = 13;
-
- /** Logical address for TV other than the one assigned with {@link #ADDR_TV} */
- public static final int ADDR_SPECIFIC_USE = 14;
-
- /** Logical address for devices to which address cannot be allocated */
- public static final int ADDR_UNREGISTERED = 15;
-
- /** Logical address used in the destination address field for broadcast messages */
- public static final int ADDR_BROADCAST = 15;
-
- /** Logical address used to indicate it is not initialized or invalid. */
- public static final int ADDR_INVALID = -1;
-
- /** Logical address used to indicate the source comes from internal device. */
- public static final int ADDR_INTERNAL = 0xFFFF;
-
- public static final int MESSAGE_FEATURE_ABORT = 0x00;
- public static final int MESSAGE_IMAGE_VIEW_ON = 0x04;
- public static final int MESSAGE_TUNER_STEP_INCREMENT = 0x05;
- public static final int MESSAGE_TUNER_STEP_DECREMENT = 0x06;
- public static final int MESSAGE_TUNER_DEVICE_STATUS = 0x07;
- public static final int MESSAGE_GIVE_TUNER_DEVICE_STATUS = 0x08;
- public static final int MESSAGE_RECORD_ON = 0x09;
- public static final int MESSAGE_RECORD_STATUS = 0x0A;
- public static final int MESSAGE_RECORD_OFF = 0x0B;
- public static final int MESSAGE_TEXT_VIEW_ON = 0x0D;
- public static final int MESSAGE_RECORD_TV_SCREEN = 0x0F;
- public static final int MESSAGE_GIVE_DECK_STATUS = 0x1A;
- public static final int MESSAGE_DECK_STATUS = 0x1B;
- public static final int MESSAGE_SET_MENU_LANGUAGE = 0x32;
- public static final int MESSAGE_CLEAR_ANALOG_TIMER = 0x33;
- public static final int MESSAGE_SET_ANALOG_TIMER = 0x34;
- public static final int MESSAGE_TIMER_STATUS = 0x35;
- public static final int MESSAGE_STANDBY = 0x36;
- public static final int MESSAGE_PLAY = 0x41;
- public static final int MESSAGE_DECK_CONTROL = 0x42;
- public static final int MESSAGE_TIMER_CLEARED_STATUS = 0x043;
- public static final int MESSAGE_USER_CONTROL_PRESSED = 0x44;
- public static final int MESSAGE_USER_CONTROL_RELEASED = 0x45;
- public static final int MESSAGE_GIVE_OSD_NAME = 0x46;
- public static final int MESSAGE_SET_OSD_NAME = 0x47;
- public static final int MESSAGE_SET_OSD_STRING = 0x64;
- public static final int MESSAGE_SET_TIMER_PROGRAM_TITLE = 0x67;
- public static final int MESSAGE_SYSTEM_AUDIO_MODE_REQUEST = 0x70;
- public static final int MESSAGE_GIVE_AUDIO_STATUS = 0x71;
- public static final int MESSAGE_SET_SYSTEM_AUDIO_MODE = 0x72;
- public static final int MESSAGE_REPORT_AUDIO_STATUS = 0x7A;
- public static final int MESSAGE_GIVE_SYSTEM_AUDIO_MODE_STATUS = 0x7D;
- public static final int MESSAGE_SYSTEM_AUDIO_MODE_STATUS = 0x7E;
- public static final int MESSAGE_ROUTING_CHANGE = 0x80;
- public static final int MESSAGE_ROUTING_INFORMATION = 0x81;
- public static final int MESSAGE_ACTIVE_SOURCE = 0x82;
- public static final int MESSAGE_GIVE_PHYSICAL_ADDRESS = 0x83;
- public static final int MESSAGE_REPORT_PHYSICAL_ADDRESS = 0x84;
- public static final int MESSAGE_REQUEST_ACTIVE_SOURCE = 0x85;
- public static final int MESSAGE_SET_STREAM_PATH = 0x86;
- public static final int MESSAGE_DEVICE_VENDOR_ID = 0x87;
- public static final int MESSAGE_VENDOR_COMMAND = 0x89;
- public static final int MESSAGE_VENDOR_REMOTE_BUTTON_DOWN = 0x8A;
- public static final int MESSAGE_VENDOR_REMOTE_BUTTON_UP = 0x8B;
- public static final int MESSAGE_GIVE_DEVICE_VENDOR_ID = 0x8C;
- public static final int MESSAGE_MENU_REQUEST = 0x8D;
- public static final int MESSAGE_MENU_STATUS = 0x8E;
- public static final int MESSAGE_GIVE_DEVICE_POWER_STATUS = 0x8F;
- public static final int MESSAGE_REPORT_POWER_STATUS = 0x90;
- public static final int MESSAGE_GET_MENU_LANGUAGE = 0x91;
- public static final int MESSAGE_SELECT_ANALOG_SERVICE = 0x92;
- public static final int MESSAGE_SELECT_DIGITAL_SERVICE = 0x93;
- public static final int MESSAGE_SET_DIGITAL_TIMER = 0x97;
- public static final int MESSAGE_CLEAR_DIGITAL_TIMER = 0x99;
- public static final int MESSAGE_SET_AUDIO_RATE = 0x9A;
- public static final int MESSAGE_INACTIVE_SOURCE = 0x9D;
- public static final int MESSAGE_CEC_VERSION = 0x9E;
- public static final int MESSAGE_GET_CEC_VERSION = 0x9F;
- public static final int MESSAGE_VENDOR_COMMAND_WITH_ID = 0xA0;
- public static final int MESSAGE_CLEAR_EXTERNAL_TIMER = 0xA1;
- public static final int MESSAGE_SET_EXTERNAL_TIMER = 0xA2;
- public static final int MESSAGE_INITIATE_ARC = 0xC0;
- public static final int MESSAGE_REPORT_ARC_INITIATED = 0xC1;
- public static final int MESSAGE_REPORT_ARC_TERMINATED = 0xC2;
- public static final int MESSAGE_REQUEST_ARC_INITIATION = 0xC3;
- public static final int MESSAGE_REQUEST_ARC_TERMINATION = 0xC4;
- public static final int MESSAGE_TERMINATE_ARC = 0xC5;
- public static final int MESSAGE_ABORT = 0xFF;
-
- public static final int UNKNOWN_VENDOR_ID = 0xFFFFFF;
-
- public static final int POWER_STATUS_UNKNOWN = -1;
- public static final int POWER_STATUS_ON = 0;
- public static final int POWER_STATUS_STANDBY = 1;
- public static final int POWER_STATUS_TRANSIENT_TO_ON = 2;
- public static final int POWER_STATUS_TRANSIENT_TO_STANDBY = 3;
-
- public static final int RESULT_SUCCESS = 0;
- public static final int RESULT_TIMEOUT = 1;
- public static final int RESULT_SOURCE_NOT_AVAILABLE = 2;
- public static final int RESULT_TARGET_NOT_AVAILABLE = 3;
- public static final int RESULT_ALREADY_IN_PROGRESS = 4;
- public static final int RESULT_EXCEPTION = 5;
- public static final int RESULT_INCORRECT_MODE = 6;
-
- // Definitions used for setOption(). These should be in sync with the definition
- // in hardware/libhardware/include/hardware/{hdmi_cec.h,mhl.h}.
-
- /**
- * TV gets turned on by incoming <Text/Image View On>. {@code ENABLED} by default.
- * If set to {@code DISABLED}, TV won't turn on automatically.
- */
- public static final int OPTION_CEC_AUTO_WAKEUP = 1;
-
- /**
- * If set to {@code DISABLED}, all CEC commands are discarded.
- *
- * <p> This option is for internal use only, not supposed to be used by other components.
- * @hide
- */
- public static final int OPTION_CEC_ENABLE = 2;
-
- /**
- * If set to {@code DISABLED}, system service yields control of CEC to sub-microcontroller.
- * If {@code ENABLED}, it take the control back.
- *
- * <p> This option is for internal use only, not supposed to be used by other components.
- * @hide
- */
- public static final int OPTION_CEC_SERVICE_CONTROL = 3;
-
- /**
- * Put other devices to standby when TV goes to standby. {@code ENABLED} by default.
- * If set to {@code DISABLED}, TV doesn't send &lt;Standby&gt; to other devices.
- */
- public static final int OPTION_CEC_AUTO_DEVICE_OFF = 4;
-
- /** If set to {@code DISABLED}, TV does not switch ports when mobile device is connected. */
- public static final int OPTION_MHL_INPUT_SWITCHING = 101;
-
- /** If set to {@code ENABLED}, TV disables power charging for mobile device. */
- public static final int OPTION_MHL_POWER_CHARGE = 102;
-
- /**
- * If set to {@code DISABLED}, all MHL commands are discarded.
- *
- * <p> This option is for internal use only, not supposed to be used by other components.
- * @hide
- */
- public static final int OPTION_MHL_ENABLE = 103;
-
- public static final int DISABLED = 0;
- public static final int ENABLED = 1;
-
- private static final int[] ADDRESS_TO_TYPE = {
- DEVICE_TV, // ADDR_TV
- DEVICE_RECORDER, // ADDR_RECORDER_1
- DEVICE_RECORDER, // ADDR_RECORDER_2
- DEVICE_TUNER, // ADDR_TUNER_1
- DEVICE_PLAYBACK, // ADDR_PLAYBACK_1
- DEVICE_AUDIO_SYSTEM, // ADDR_AUDIO_SYSTEM
- DEVICE_TUNER, // ADDR_TUNER_2
- DEVICE_TUNER, // ADDR_TUNER_3
- DEVICE_PLAYBACK, // ADDR_PLAYBACK_2
- DEVICE_RECORDER, // ADDR_RECORDER_3
- DEVICE_TUNER, // ADDR_TUNER_4
- DEVICE_PLAYBACK, // ADDR_PLAYBACK_3
- DEVICE_RESERVED,
- DEVICE_RESERVED,
- DEVICE_TV, // ADDR_SPECIFIC_USE
- };
-
- private static final String[] DEFAULT_NAMES = {
- "TV",
- "Recorder_1",
- "Recorder_2",
- "Tuner_1",
- "Playback_1",
- "AudioSystem",
- "Tuner_2",
- "Tuner_3",
- "Playback_2",
- "Recorder_3",
- "Tuner_4",
- "Playback_3",
- "Reserved_1",
- "Reserved_2",
- "Secondary_TV",
- };
-
- private HdmiCec() { } // Prevents instantiation.
-
- /**
- * 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}).
- *
- * @param type device type
- * @return true if the given type is valid
- */
- public static boolean isValidType(int type) {
- return (DEVICE_TV <= type && type <= DEVICE_AUDIO_SYSTEM)
- && type != DEVICE_RESERVED;
- }
-
- /**
- * Check if the given logical address is valid. A logical address is valid
- * if it is one allocated for an actual device which allows communication
- * with other logical devices.
- *
- * @param address logical address
- * @return true if the given address is valid
- */
- public static boolean isValidAddress(int address) {
- return (ADDR_TV <= address && address <= ADDR_SPECIFIC_USE);
- }
-
- /**
- * Return the device type for the given logical address.
- *
- * @param address logical address
- * @return device type for the given logical address; DEVICE_INACTIVE
- * if the address is not valid.
- */
- public static int getTypeFromAddress(int address) {
- if (isValidAddress(address)) {
- return ADDRESS_TO_TYPE[address];
- }
- return DEVICE_INACTIVE;
- }
-
- /**
- * Return the default device name for a logical address. This is the name
- * by which the logical device is known to others until a name is
- * set explicitly using HdmiCecService.setOsdName.
- *
- * @param address logical address
- * @return default device name; empty string if the address is not valid
- */
- public static String getDefaultDeviceName(int address) {
- if (isValidAddress(address)) {
- return DEFAULT_NAMES[address];
- }
- return "";
- }
-}
diff --git a/core/java/android/hardware/hdmi/HdmiCecDeviceInfo.java b/core/java/android/hardware/hdmi/HdmiCecDeviceInfo.java
index e1bb7800489b..e44f0417221f 100644
--- a/core/java/android/hardware/hdmi/HdmiCecDeviceInfo.java
+++ b/core/java/android/hardware/hdmi/HdmiCecDeviceInfo.java
@@ -29,6 +29,28 @@ import android.os.Parcelable;
*/
@SystemApi
public final class HdmiCecDeviceInfo implements Parcelable {
+
+ /** TV device type. */
+ public static final int DEVICE_TV = 0;
+
+ /** Recording device type. */
+ public static final int DEVICE_RECORDER = 1;
+
+ /** Device type reserved for future usage. */
+ public static final int DEVICE_RESERVED = 2;
+
+ /** Tuner device type. */
+ public static final int DEVICE_TUNER = 3;
+
+ /** Playback device type. */
+ public static final int DEVICE_PLAYBACK = 4;
+
+ /** Audio system device type. */
+ public static final int DEVICE_AUDIO_SYSTEM = 5;
+
+ // Value indicating the device is not an active source.
+ public static final int DEVICE_INACTIVE = -1;
+
// Logical address, phsical address, device type, vendor id and display name
// are immutable value.
private final int mLogicalAddress;
@@ -37,7 +59,6 @@ public final class HdmiCecDeviceInfo implements Parcelable {
private final int mVendorId;
private final String mDisplayName;
-
/**
* A helper class to deserialize {@link HdmiCecDeviceInfo} for a parcel.
*/
@@ -63,11 +84,10 @@ public final class HdmiCecDeviceInfo implements Parcelable {
/**
* Constructor.
*
- * @param logicalAddress logical address of HDMI-Cec device.
- * For more details, refer {@link HdmiCec}
- * @param physicalAddress physical address of HDMI-Cec device
- * @param deviceType type of device. For more details, refer {@link HdmiCec}
- * @param vendorId vendor id of device. It's used for vendor specific command
+ * @param logicalAddress logical address of HDMI-CEC device
+ * @param physicalAddress physical address of HDMI-CEC device
+ * @param deviceType type of device
+ * @param vendorId vendor id of device. Used for vendor specific command.
* @param displayName name of device
* @hide
*/
@@ -81,9 +101,7 @@ public final class HdmiCecDeviceInfo implements Parcelable {
}
/**
- * Return the logical address of the device. It can have 0-15 values.
- * For more details, refer constants between {@link HdmiCec#ADDR_TV}
- * and {@link HdmiCec#ADDR_UNREGISTERED}.
+ * Return the logical address of the device.
*/
public int getLogicalAddress() {
return mLogicalAddress;
@@ -98,7 +116,7 @@ public final class HdmiCecDeviceInfo implements Parcelable {
/**
* Return type of the device. For more details, refer constants between
- * {@link HdmiCec#DEVICE_TV} and {@link HdmiCec#DEVICE_INACTIVE}.
+ * {@link DEVICE_TV} and {@link DEVICE_INACTIVE}.
*/
public int getDeviceType() {
return mDeviceType;
@@ -108,9 +126,9 @@ public final class HdmiCecDeviceInfo implements Parcelable {
* Return {@code true} if the device is of a type that can be an input source.
*/
public boolean isSourceType() {
- return mDeviceType == HdmiCec.DEVICE_PLAYBACK
- || mDeviceType == HdmiCec.DEVICE_RECORDER
- || mDeviceType == HdmiCec.DEVICE_TUNER;
+ return mDeviceType == DEVICE_PLAYBACK
+ || mDeviceType == DEVICE_RECORDER
+ || mDeviceType == DEVICE_TUNER;
}
/**
diff --git a/core/java/android/hardware/hdmi/HdmiCecMessage.aidl b/core/java/android/hardware/hdmi/HdmiCecMessage.aidl
deleted file mode 100644
index 6687ba448993..000000000000
--- a/core/java/android/hardware/hdmi/HdmiCecMessage.aidl
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.hardware.hdmi;
-
-parcelable HdmiCecMessage;
diff --git a/core/java/android/hardware/hdmi/HdmiControlManager.java b/core/java/android/hardware/hdmi/HdmiControlManager.java
index f15fa000f599..52ba39810c98 100644
--- a/core/java/android/hardware/hdmi/HdmiControlManager.java
+++ b/core/java/android/hardware/hdmi/HdmiControlManager.java
@@ -36,6 +36,20 @@ import android.os.RemoteException;
public final class HdmiControlManager {
@Nullable private final IHdmiControlService mService;
+ public static final int POWER_STATUS_UNKNOWN = -1;
+ public static final int POWER_STATUS_ON = 0;
+ public static final int POWER_STATUS_STANDBY = 1;
+ public static final int POWER_STATUS_TRANSIENT_TO_ON = 2;
+ public static final int POWER_STATUS_TRANSIENT_TO_STANDBY = 3;
+
+ public static final int RESULT_SUCCESS = 0;
+ public static final int RESULT_TIMEOUT = 1;
+ public static final int RESULT_SOURCE_NOT_AVAILABLE = 2;
+ public static final int RESULT_TARGET_NOT_AVAILABLE = 3;
+ public static final int RESULT_ALREADY_IN_PROGRESS = 4;
+ public static final int RESULT_EXCEPTION = 5;
+ public static final int RESULT_INCORRECT_MODE = 6;
+
// True if we have a logical device of type playback hosted in the system.
private final boolean mHasPlaybackDevice;
// True if we have a logical device of type TV hosted in the system.
@@ -57,8 +71,8 @@ public final class HdmiControlManager {
// Do nothing.
}
}
- mHasTvDevice = hasDeviceType(types, HdmiCec.DEVICE_TV);
- mHasPlaybackDevice = hasDeviceType(types, HdmiCec.DEVICE_PLAYBACK);
+ mHasTvDevice = hasDeviceType(types, HdmiCecDeviceInfo.DEVICE_TV);
+ mHasPlaybackDevice = hasDeviceType(types, HdmiCecDeviceInfo.DEVICE_PLAYBACK);
}
private static boolean hasDeviceType(int[] types, int type) {
diff --git a/core/java/android/hardware/hdmi/HdmiPlaybackClient.java b/core/java/android/hardware/hdmi/HdmiPlaybackClient.java
index 2e49a3841f6b..d7e9a9ae9be4 100644
--- a/core/java/android/hardware/hdmi/HdmiPlaybackClient.java
+++ b/core/java/android/hardware/hdmi/HdmiPlaybackClient.java
@@ -42,7 +42,7 @@ public final class HdmiPlaybackClient {
/**
* Called when the result of the feature one touch play is returned.
*
- * @param result the result of the operation. {@link HdmiCec#RESULT_SUCCESS}
+ * @param result the result of the operation. {@link HdmiControlManager#RESULT_SUCCESS}
* if successful.
*/
public void onComplete(int result);
@@ -56,11 +56,11 @@ public final class HdmiPlaybackClient {
* Called when display device status is reported.
*
* @param status display device status
- * @see {@link HdmiCec#POWER_STATUS_ON}
- * @see {@link HdmiCec#POWER_STATUS_STANDBY}
- * @see {@link HdmiCec#POWER_STATUS_TRANSIENT_TO_ON}
- * @see {@link HdmiCec#POWER_STATUS_TRANSIENT_TO_STANDBY}
- * @see {@link HdmiCec#POWER_STATUS_UNKNOWN}
+ * @see {@link HdmiControlManager#POWER_STATUS_ON}
+ * @see {@link HdmiControlManager#POWER_STATUS_STANDBY}
+ * @see {@link HdmiControlManager#POWER_STATUS_TRANSIENT_TO_ON}
+ * @see {@link HdmiControlManager#POWER_STATUS_TRANSIENT_TO_STANDBY}
+ * @see {@link HdmiControlManager#POWER_STATUS_UNKNOWN}
*/
public void onComplete(int status);
}
diff --git a/core/java/android/hardware/hdmi/HdmiTvClient.java b/core/java/android/hardware/hdmi/HdmiTvClient.java
index f46be454cebf..6f65efcd2675 100644
--- a/core/java/android/hardware/hdmi/HdmiTvClient.java
+++ b/core/java/android/hardware/hdmi/HdmiTvClient.java
@@ -30,6 +30,55 @@ import android.util.Log;
public final class HdmiTvClient {
private static final String TAG = "HdmiTvClient";
+ // Definitions used for setOption(). These should be in sync with the definition
+ // in hardware/libhardware/include/hardware/{hdmi_cec.h,mhl.h}.
+
+ /**
+ * TV gets turned on by incoming &lt;Text/Image View On&gt;. {@code ENABLED} by default.
+ * If set to {@code DISABLED}, TV won't turn on automatically.
+ */
+ public static final int OPTION_CEC_AUTO_WAKEUP = 1;
+
+ /**
+ * If set to {@code DISABLED}, all CEC commands are discarded.
+ *
+ * <p> This option is for internal use only, not supposed to be used by other components.
+ * @hide
+ */
+ public static final int OPTION_CEC_ENABLE = 2;
+
+ /**
+ * If set to {@code DISABLED}, system service yields control of CEC to sub-microcontroller.
+ * If {@code ENABLED}, it take the control back.
+ *
+ * <p> This option is for internal use only, not supposed to be used by other components.
+ * @hide
+ */
+ public static final int OPTION_CEC_SERVICE_CONTROL = 3;
+
+ /**
+ * Put other devices to standby when TV goes to standby. {@code ENABLED} by default.
+ * If set to {@code DISABLED}, TV doesn't send &lt;Standby&gt; to other devices.
+ */
+ public static final int OPTION_CEC_AUTO_DEVICE_OFF = 4;
+
+ /** If set to {@code DISABLED}, TV does not switch ports when mobile device is connected. */
+ public static final int OPTION_MHL_INPUT_SWITCHING = 101;
+
+ /** If set to {@code ENABLED}, TV disables power charging for mobile device. */
+ public static final int OPTION_MHL_POWER_CHARGE = 102;
+
+ /**
+ * If set to {@code DISABLED}, all MHL commands are discarded.
+ *
+ * <p> This option is for internal use only, not supposed to be used by other components.
+ * @hide
+ */
+ public static final int OPTION_MHL_ENABLE = 103;
+
+ public static final int DISABLED = 0;
+ public static final int ENABLED = 1;
+
private final IHdmiControlService mService;
HdmiTvClient(IHdmiControlService service) {
diff --git a/services/core/java/com/android/server/hdmi/ActiveSourceHandler.java b/services/core/java/com/android/server/hdmi/ActiveSourceHandler.java
index dcf43a38a4f5..2c8c1c1e426c 100644
--- a/services/core/java/com/android/server/hdmi/ActiveSourceHandler.java
+++ b/services/core/java/com/android/server/hdmi/ActiveSourceHandler.java
@@ -18,9 +18,8 @@ package com.android.server.hdmi;
import android.annotation.Nullable;
import android.hardware.hdmi.IHdmiControlCallback;
-import android.hardware.hdmi.HdmiCec;
import android.hardware.hdmi.HdmiCecDeviceInfo;
-import android.hardware.hdmi.HdmiCecMessage;
+import android.hardware.hdmi.HdmiControlManager;
import android.os.RemoteException;
import android.util.Slog;
@@ -62,7 +61,7 @@ final class ActiveSourceHandler {
// Seq #17
HdmiCecLocalDeviceTv tv = mSource;
if (getSourcePath() == activePath && tv.getActiveSource() == getSourceAddress()) {
- invokeCallback(HdmiCec.RESULT_SUCCESS);
+ invokeCallback(HdmiControlManager.RESULT_SUCCESS);
return;
}
HdmiCecDeviceInfo device = mService.getDeviceInfo(activeAddress);
@@ -77,7 +76,7 @@ final class ActiveSourceHandler {
if (currentActive != activeAddress && currentPath != activePath) {
tv.updateActivePortId(mService.pathToPortId(activePath));
}
- invokeCallback(HdmiCec.RESULT_SUCCESS);
+ invokeCallback(HdmiControlManager.RESULT_SUCCESS);
} else {
// TV is in a mode that should keep its current source/input from
// being changed for its operation. Reclaim the active source
@@ -87,7 +86,7 @@ final class ActiveSourceHandler {
HdmiCecMessageBuilder.buildActiveSource(currentActive, currentPath);
mService.sendCecCommand(activeSource);
tv.updateActiveSource(currentActive, currentPath);
- invokeCallback(HdmiCec.RESULT_SUCCESS);
+ invokeCallback(HdmiControlManager.RESULT_SUCCESS);
} else {
HdmiCecMessage routingChange = HdmiCecMessageBuilder.buildRoutingChange(
getSourceAddress(), activePath, currentPath);
diff --git a/services/core/java/com/android/server/hdmi/Constants.java b/services/core/java/com/android/server/hdmi/Constants.java
new file mode 100644
index 000000000000..4da781f01fa9
--- /dev/null
+++ b/services/core/java/com/android/server/hdmi/Constants.java
@@ -0,0 +1,200 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.hdmi;
+
+/**
+ * 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}.
+ */
+final class Constants {
+
+ /** Logical address for TV */
+ public static final int ADDR_TV = 0;
+
+ /** Logical address for recorder 1 */
+ public static final int ADDR_RECORDER_1 = 1;
+
+ /** Logical address for recorder 2 */
+ public static final int ADDR_RECORDER_2 = 2;
+
+ /** Logical address for tuner 1 */
+ public static final int ADDR_TUNER_1 = 3;
+
+ /** Logical address for playback 1 */
+ public static final int ADDR_PLAYBACK_1 = 4;
+
+ /** Logical address for audio system */
+ public static final int ADDR_AUDIO_SYSTEM = 5;
+
+ /** Logical address for tuner 2 */
+ public static final int ADDR_TUNER_2 = 6;
+
+ /** Logical address for tuner 3 */
+ public static final int ADDR_TUNER_3 = 7;
+
+ /** Logical address for playback 2 */
+ public static final int ADDR_PLAYBACK_2 = 8;
+
+ /** Logical address for recorder 3 */
+ public static final int ADDR_RECORDER_3 = 9;
+
+ /** Logical address for tuner 4 */
+ public static final int ADDR_TUNER_4 = 10;
+
+ /** Logical address for playback 3 */
+ public static final int ADDR_PLAYBACK_3 = 11;
+
+ /** Logical address reserved for future usage */
+ public static final int ADDR_RESERVED_1 = 12;
+
+ /** Logical address reserved for future usage */
+ public static final int ADDR_RESERVED_2 = 13;
+
+ /** Logical address for TV other than the one assigned with {@link #ADDR_TV} */
+ public static final int ADDR_SPECIFIC_USE = 14;
+
+ /** Logical address for devices to which address cannot be allocated */
+ public static final int ADDR_UNREGISTERED = 15;
+
+ /** Logical address used in the destination address field for broadcast messages */
+ public static final int ADDR_BROADCAST = 15;
+
+ /** Logical address used to indicate it is not initialized or invalid. */
+ public static final int ADDR_INVALID = -1;
+
+ /** Logical address used to indicate the source comes from internal device. */
+ public static final int ADDR_INTERNAL = 0xFFFF;
+
+ static final int MESSAGE_FEATURE_ABORT = 0x00;
+ static final int MESSAGE_IMAGE_VIEW_ON = 0x04;
+ static final int MESSAGE_TUNER_STEP_INCREMENT = 0x05;
+ static final int MESSAGE_TUNER_STEP_DECREMENT = 0x06;
+ static final int MESSAGE_TUNER_DEVICE_STATUS = 0x07;
+ static final int MESSAGE_GIVE_TUNER_DEVICE_STATUS = 0x08;
+ static final int MESSAGE_RECORD_ON = 0x09;
+ static final int MESSAGE_RECORD_STATUS = 0x0A;
+ static final int MESSAGE_RECORD_OFF = 0x0B;
+ static final int MESSAGE_TEXT_VIEW_ON = 0x0D;
+ static final int MESSAGE_RECORD_TV_SCREEN = 0x0F;
+ static final int MESSAGE_GIVE_DECK_STATUS = 0x1A;
+ static final int MESSAGE_DECK_STATUS = 0x1B;
+ static final int MESSAGE_SET_MENU_LANGUAGE = 0x32;
+ static final int MESSAGE_CLEAR_ANALOG_TIMER = 0x33;
+ static final int MESSAGE_SET_ANALOG_TIMER = 0x34;
+ static final int MESSAGE_TIMER_STATUS = 0x35;
+ static final int MESSAGE_STANDBY = 0x36;
+ static final int MESSAGE_PLAY = 0x41;
+ static final int MESSAGE_DECK_CONTROL = 0x42;
+ static final int MESSAGE_TIMER_CLEARED_STATUS = 0x043;
+ static final int MESSAGE_USER_CONTROL_PRESSED = 0x44;
+ static final int MESSAGE_USER_CONTROL_RELEASED = 0x45;
+ static final int MESSAGE_GIVE_OSD_NAME = 0x46;
+ static final int MESSAGE_SET_OSD_NAME = 0x47;
+ static final int MESSAGE_SET_OSD_STRING = 0x64;
+ static final int MESSAGE_SET_TIMER_PROGRAM_TITLE = 0x67;
+ static final int MESSAGE_SYSTEM_AUDIO_MODE_REQUEST = 0x70;
+ static final int MESSAGE_GIVE_AUDIO_STATUS = 0x71;
+ static final int MESSAGE_SET_SYSTEM_AUDIO_MODE = 0x72;
+ static final int MESSAGE_REPORT_AUDIO_STATUS = 0x7A;
+ static final int MESSAGE_GIVE_SYSTEM_AUDIO_MODE_STATUS = 0x7D;
+ static final int MESSAGE_SYSTEM_AUDIO_MODE_STATUS = 0x7E;
+ static final int MESSAGE_ROUTING_CHANGE = 0x80;
+ static final int MESSAGE_ROUTING_INFORMATION = 0x81;
+ static final int MESSAGE_ACTIVE_SOURCE = 0x82;
+ static final int MESSAGE_GIVE_PHYSICAL_ADDRESS = 0x83;
+ static final int MESSAGE_REPORT_PHYSICAL_ADDRESS = 0x84;
+ static final int MESSAGE_REQUEST_ACTIVE_SOURCE = 0x85;
+ static final int MESSAGE_SET_STREAM_PATH = 0x86;
+ static final int MESSAGE_DEVICE_VENDOR_ID = 0x87;
+ static final int MESSAGE_VENDOR_COMMAND = 0x89;
+ static final int MESSAGE_VENDOR_REMOTE_BUTTON_DOWN = 0x8A;
+ static final int MESSAGE_VENDOR_REMOTE_BUTTON_UP = 0x8B;
+ static final int MESSAGE_GIVE_DEVICE_VENDOR_ID = 0x8C;
+ static final int MESSAGE_MENU_REQUEST = 0x8D;
+ static final int MESSAGE_MENU_STATUS = 0x8E;
+ static final int MESSAGE_GIVE_DEVICE_POWER_STATUS = 0x8F;
+ static final int MESSAGE_REPORT_POWER_STATUS = 0x90;
+ static final int MESSAGE_GET_MENU_LANGUAGE = 0x91;
+ static final int MESSAGE_SELECT_ANALOG_SERVICE = 0x92;
+ static final int MESSAGE_SELECT_DIGITAL_SERVICE = 0x93;
+ static final int MESSAGE_SET_DIGITAL_TIMER = 0x97;
+ static final int MESSAGE_CLEAR_DIGITAL_TIMER = 0x99;
+ static final int MESSAGE_SET_AUDIO_RATE = 0x9A;
+ static final int MESSAGE_INACTIVE_SOURCE = 0x9D;
+ static final int MESSAGE_CEC_VERSION = 0x9E;
+ static final int MESSAGE_GET_CEC_VERSION = 0x9F;
+ static final int MESSAGE_VENDOR_COMMAND_WITH_ID = 0xA0;
+ static final int MESSAGE_CLEAR_EXTERNAL_TIMER = 0xA1;
+ static final int MESSAGE_SET_EXTERNAL_TIMER = 0xA2;
+ static final int MESSAGE_INITIATE_ARC = 0xC0;
+ static final int MESSAGE_REPORT_ARC_INITIATED = 0xC1;
+ static final int MESSAGE_REPORT_ARC_TERMINATED = 0xC2;
+ static final int MESSAGE_REQUEST_ARC_INITIATION = 0xC3;
+ static final int MESSAGE_REQUEST_ARC_TERMINATION = 0xC4;
+ static final int MESSAGE_TERMINATE_ARC = 0xC5;
+ static final int MESSAGE_ABORT = 0xFF;
+
+ static final int UNKNOWN_VENDOR_ID = 0xFFFFFF;
+
+ // Constants related to operands of HDMI CEC commands.
+ // Refer to CEC Table 29 in HDMI Spec v1.4b.
+ // [Abort Reason]
+ static final int ABORT_UNRECOGNIZED_MODE = 0;
+ static final int ABORT_NOT_IN_CORRECT_MODE = 1;
+ static final int ABORT_CANNOT_PROVIDE_SOURCE = 2;
+ static final int ABORT_INVALID_OPERAND = 3;
+ static final int ABORT_REFUSED = 4;
+ static final int ABORT_UNABLE_TO_DETERMINE = 5;
+
+ // [Audio Status]
+ static final int SYSTEM_AUDIO_STATUS_OFF = 0;
+ static final int SYSTEM_AUDIO_STATUS_ON = 1;
+
+ // Bit mask used to get the routing path of the top level device.
+ // When &'d with the path 1.2.2.0 (0x1220), for instance, gives 1.0.0.0.
+ static final int ROUTING_PATH_TOP_MASK = 0xF000;
+
+ static final int INVALID_PORT_ID = -1;
+ static final int INVALID_PHYSICAL_ADDRESS = 0xFFFF;
+
+ // Send result codes.
+ static final int SEND_RESULT_SUCCESS = 0;
+ static final int SEND_RESULT_NAK = -1;
+ static final int SEND_RESULT_FAILURE = -2;
+
+ // Strategy for device polling.
+ // Should use "OR(|) operation of POLL_STRATEGY_XXX and POLL_ITERATION_XXX.
+ static final int POLL_STRATEGY_MASK = 0x3; // first and second bit.
+ static final int POLL_STRATEGY_REMOTES_DEVICES = 0x1;
+ static final int POLL_STRATEGY_SYSTEM_AUDIO = 0x2;
+
+ static final int POLL_ITERATION_STRATEGY_MASK = 0x30000; // first and second bit.
+ static final int POLL_ITERATION_IN_ORDER = 0x10000;
+ static final int POLL_ITERATION_REVERSE_ORDER = 0x20000;
+
+ static final int UNKNOWN_VOLUME = -1;
+
+ // IRT(Initiator Repetition Time) in millisecond as recommended in the standard.
+ // Outgoing UCP commands, when in 'Press and Hold' mode, should be this much apart
+ // from the adjacent one so as not to place unnecessarily heavy load on the CEC line.
+ // TODO: This value might need tweaking per product basis. Consider putting it
+ // in config.xml to allow customization.
+ static final int IRT_MS = 300;
+
+ private Constants() { /* cannot be instantiated */ }
+}
diff --git a/services/core/java/com/android/server/hdmi/DeviceDiscoveryAction.java b/services/core/java/com/android/server/hdmi/DeviceDiscoveryAction.java
index 7e3eb1dc205c..657740603cae 100644
--- a/services/core/java/com/android/server/hdmi/DeviceDiscoveryAction.java
+++ b/services/core/java/com/android/server/hdmi/DeviceDiscoveryAction.java
@@ -16,9 +16,7 @@
package com.android.server.hdmi;
-import android.hardware.hdmi.HdmiCec;
import android.hardware.hdmi.HdmiCecDeviceInfo;
-import android.hardware.hdmi.HdmiCecMessage;
import android.util.Slog;
import com.android.internal.util.Preconditions;
@@ -72,10 +70,10 @@ final class DeviceDiscoveryAction extends FeatureAction {
private static final class DeviceInfo {
private final int mLogicalAddress;
- private int mPhysicalAddress = HdmiConstants.INVALID_PHYSICAL_ADDRESS;
- private int mVendorId = HdmiCec.UNKNOWN_VENDOR_ID;
+ private int mPhysicalAddress = Constants.INVALID_PHYSICAL_ADDRESS;
+ private int mVendorId = Constants.UNKNOWN_VENDOR_ID;
private String mDisplayName = "";
- private int mDeviceType = HdmiCec.DEVICE_INACTIVE;
+ private int mDeviceType = HdmiCecDeviceInfo.DEVICE_INACTIVE;
private DeviceInfo(int logicalAddress) {
mLogicalAddress = logicalAddress;
@@ -119,8 +117,8 @@ final class DeviceDiscoveryAction extends FeatureAction {
allocateDevices(ackedAddress);
startPhysicalAddressStage();
}
- }, HdmiConstants.POLL_ITERATION_REVERSE_ORDER
- | HdmiConstants.POLL_STRATEGY_REMOTES_DEVICES, DEVICE_POLLING_RETRY);
+ }, Constants.POLL_ITERATION_REVERSE_ORDER
+ | Constants.POLL_STRATEGY_REMOTES_DEVICES, DEVICE_POLLING_RETRY);
return true;
}
@@ -140,7 +138,7 @@ final class DeviceDiscoveryAction extends FeatureAction {
}
private boolean verifyValidLogicalAddress(int address) {
- return address >= HdmiCec.ADDR_TV && address < HdmiCec.ADDR_UNREGISTERED;
+ return address >= Constants.ADDR_TV && address < Constants.ADDR_UNREGISTERED;
}
private void queryPhysicalAddress(int address) {
@@ -152,7 +150,7 @@ final class DeviceDiscoveryAction extends FeatureAction {
mActionTimer.clearTimerMessage();
// Check cache first and send request if not exist.
- if (mayProcessMessageIfCached(address, HdmiCec.MESSAGE_REPORT_PHYSICAL_ADDRESS)) {
+ if (mayProcessMessageIfCached(address, Constants.MESSAGE_REPORT_PHYSICAL_ADDRESS)) {
return;
}
sendCommand(HdmiCecMessageBuilder.buildGivePhysicalAddress(getSourceAddress(), address));
@@ -175,7 +173,7 @@ final class DeviceDiscoveryAction extends FeatureAction {
mActionTimer.clearTimerMessage();
- if (mayProcessMessageIfCached(address, HdmiCec.MESSAGE_SET_OSD_NAME)) {
+ if (mayProcessMessageIfCached(address, Constants.MESSAGE_SET_OSD_NAME)) {
return;
}
sendCommand(HdmiCecMessageBuilder.buildGiveOsdNameCommand(getSourceAddress(), address));
@@ -199,7 +197,7 @@ final class DeviceDiscoveryAction extends FeatureAction {
mActionTimer.clearTimerMessage();
- if (mayProcessMessageIfCached(address, HdmiCec.MESSAGE_DEVICE_VENDOR_ID)) {
+ if (mayProcessMessageIfCached(address, Constants.MESSAGE_DEVICE_VENDOR_ID)) {
return;
}
sendCommand(
@@ -220,19 +218,19 @@ final class DeviceDiscoveryAction extends FeatureAction {
boolean processCommand(HdmiCecMessage cmd) {
switch (mState) {
case STATE_WAITING_FOR_PHYSICAL_ADDRESS:
- if (cmd.getOpcode() == HdmiCec.MESSAGE_REPORT_PHYSICAL_ADDRESS) {
+ if (cmd.getOpcode() == Constants.MESSAGE_REPORT_PHYSICAL_ADDRESS) {
handleReportPhysicalAddress(cmd);
return true;
}
return false;
case STATE_WAITING_FOR_OSD_NAME:
- if (cmd.getOpcode() == HdmiCec.MESSAGE_SET_OSD_NAME) {
+ if (cmd.getOpcode() == Constants.MESSAGE_SET_OSD_NAME) {
handleSetOsdName(cmd);
return true;
}
return false;
case STATE_WAITING_FOR_VENDOR_ID:
- if (cmd.getOpcode() == HdmiCec.MESSAGE_DEVICE_VENDOR_ID) {
+ if (cmd.getOpcode() == Constants.MESSAGE_DEVICE_VENDOR_ID) {
handleVendorId(cmd);
return true;
}
@@ -285,7 +283,7 @@ final class DeviceDiscoveryAction extends FeatureAction {
} catch (UnsupportedEncodingException e) {
Slog.w(TAG, "Failed to decode display name: " + cmd.toString());
// If failed to get display name, use the default name of device.
- displayName = HdmiCec.getDefaultDeviceName(current.mLogicalAddress);
+ displayName = HdmiUtils.getDefaultDeviceName(current.mLogicalAddress);
}
current.mDisplayName = displayName;
increaseProcessedDeviceCount();
diff --git a/services/core/java/com/android/server/hdmi/DevicePowerStatusAction.java b/services/core/java/com/android/server/hdmi/DevicePowerStatusAction.java
index 51df473b6c75..87c8d924b3fc 100644
--- a/services/core/java/com/android/server/hdmi/DevicePowerStatusAction.java
+++ b/services/core/java/com/android/server/hdmi/DevicePowerStatusAction.java
@@ -16,8 +16,6 @@ package com.android.server.hdmi;
* limitations under the License.
*/
-import android.hardware.hdmi.HdmiCec;
-import android.hardware.hdmi.HdmiCecMessage;
import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.IHdmiControlCallback;
import android.os.RemoteException;
@@ -75,7 +73,7 @@ final class DevicePowerStatusAction extends FeatureAction {
if (mState != STATE_WAITING_FOR_REPORT_POWER_STATUS) {
return false;
}
- if (cmd.getOpcode() == HdmiCec.MESSAGE_REPORT_POWER_STATUS) {
+ if (cmd.getOpcode() == Constants.MESSAGE_REPORT_POWER_STATUS) {
int status = cmd.getParams()[0];
invokeCallback(status);
finish();
@@ -91,7 +89,7 @@ final class DevicePowerStatusAction extends FeatureAction {
}
if (state == STATE_WAITING_FOR_REPORT_POWER_STATUS) {
// Got no response from TV. Report status 'unknown'.
- invokeCallback(HdmiCec.POWER_STATUS_UNKNOWN);
+ invokeCallback(HdmiControlManager.POWER_STATUS_UNKNOWN);
finish();
}
}
diff --git a/services/core/java/com/android/server/hdmi/DeviceSelectAction.java b/services/core/java/com/android/server/hdmi/DeviceSelectAction.java
index 18bba374c3f7..01a5a090a1ee 100644
--- a/services/core/java/com/android/server/hdmi/DeviceSelectAction.java
+++ b/services/core/java/com/android/server/hdmi/DeviceSelectAction.java
@@ -16,9 +16,8 @@
package com.android.server.hdmi;
-import android.hardware.hdmi.HdmiCec;
import android.hardware.hdmi.HdmiCecDeviceInfo;
-import android.hardware.hdmi.HdmiCecMessage;
+import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.HdmiTvClient;
import android.hardware.hdmi.IHdmiControlCallback;
import android.os.RemoteException;
@@ -108,12 +107,12 @@ final class DeviceSelectAction extends FeatureAction {
switch (mState) {
case STATE_WAIT_FOR_REPORT_POWER_STATUS:
- if (opcode == HdmiCec.MESSAGE_REPORT_POWER_STATUS && params.length == 1) {
+ if (opcode == Constants.MESSAGE_REPORT_POWER_STATUS && params.length == 1) {
return handleReportPowerStatus(params[0]);
}
return false;
case STATE_WAIT_FOR_ACTIVE_SOURCE:
- if (opcode == HdmiCec.MESSAGE_ACTIVE_SOURCE && params.length == 2) {
+ if (opcode == Constants.MESSAGE_ACTIVE_SOURCE && params.length == 2) {
int activePath = HdmiUtils.twoBytesToInt(params);
ActiveSourceHandler
.create((HdmiCecLocalDeviceTv) localDevice(), mCallback)
@@ -133,10 +132,10 @@ final class DeviceSelectAction extends FeatureAction {
// If in 'Standby' or 'Transit to standby', remove the banner
// and stop this action. Otherwise, send <Set Stream Path>
switch (powerStatus) {
- case HdmiCec.POWER_STATUS_ON:
+ case HdmiControlManager.POWER_STATUS_ON:
sendSetStreamPath();
return true;
- case HdmiCec.POWER_STATUS_TRANSIENT_TO_STANDBY:
+ case HdmiControlManager.POWER_STATUS_TRANSIENT_TO_STANDBY:
if (mPowerStatusCounter < 4) {
mState = STATE_WAIT_FOR_DEVICE_TO_TRANSIT_TO_STANDBY;
addTimer(mState, TIMEOUT_TRANSIT_TO_STANDBY_MS);
@@ -144,14 +143,14 @@ final class DeviceSelectAction extends FeatureAction {
sendSetStreamPath();
}
return true;
- case HdmiCec.POWER_STATUS_STANDBY:
+ case HdmiControlManager.POWER_STATUS_STANDBY:
if (mPowerStatusCounter == 0) {
turnOnDevice();
} else {
sendSetStreamPath();
}
return true;
- case HdmiCec.POWER_STATUS_TRANSIENT_TO_ON:
+ case HdmiControlManager.POWER_STATUS_TRANSIENT_TO_ON:
if (mPowerStatusCounter < LOOP_COUNTER_MAX) {
mState = STATE_WAIT_FOR_DEVICE_POWER_ON;
addTimer(mState, TIMEOUT_POWER_ON_MS);
@@ -197,7 +196,7 @@ final class DeviceSelectAction extends FeatureAction {
case STATE_WAIT_FOR_ACTIVE_SOURCE:
// TODO: Remove the banner
// Display banner "Communication failed. Please check your cable or connection"
- invokeCallback(HdmiCec.RESULT_TIMEOUT);
+ invokeCallback(HdmiControlManager.RESULT_TIMEOUT);
finish();
break;
}
diff --git a/services/core/java/com/android/server/hdmi/FeatureAction.java b/services/core/java/com/android/server/hdmi/FeatureAction.java
index 3595f79d2931..f8ebed292a58 100644
--- a/services/core/java/com/android/server/hdmi/FeatureAction.java
+++ b/services/core/java/com/android/server/hdmi/FeatureAction.java
@@ -15,7 +15,6 @@
*/
package com.android.server.hdmi;
-import android.hardware.hdmi.HdmiCecMessage;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecController.java b/services/core/java/com/android/server/hdmi/HdmiCecController.java
index 7dfea6aa1950..c86067388e5b 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecController.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecController.java
@@ -16,8 +16,6 @@
package com.android.server.hdmi;
-import android.hardware.hdmi.HdmiCec;
-import android.hardware.hdmi.HdmiCecMessage;
import android.hardware.hdmi.HdmiPortInfo;
import android.os.Handler;
import android.os.Looper;
@@ -59,7 +57,7 @@ final class HdmiCecController {
*
* @param deviceType requested device type to allocate logical address
* @param logicalAddress allocated logical address. If it is
- * {@link HdmiCec#ADDR_UNREGISTERED}, it means that
+ * {@link Constants.ADDR_UNREGISTERED}, it means that
* it failed to allocate logical address for the given device type
*/
void onAllocated(int deviceType, int logicalAddress);
@@ -93,7 +91,7 @@ final class HdmiCecController {
private final Predicate<Integer> mSystemAudioAddressPredicate = new Predicate<Integer>() {
@Override
public boolean apply(Integer address) {
- return HdmiCec.getTypeFromAddress(address) == HdmiCec.ADDR_AUDIO_SYSTEM;
+ return HdmiUtils.getTypeFromAddress(address) == Constants.ADDR_AUDIO_SYSTEM;
}
};
@@ -160,7 +158,7 @@ final class HdmiCecController {
*
* @param deviceType type of device to used to determine logical address
* @param preferredAddress a logical address preferred to be allocated.
- * If sets {@link HdmiCec#ADDR_UNREGISTERED}, scans
+ * If sets {@link Constants.ADDR_UNREGISTERED}, scans
* the smallest logical address matched with the given device type.
* Otherwise, scan address will start from {@code preferredAddress}
* @param callback callback interface to report allocated logical address to caller
@@ -185,21 +183,21 @@ final class HdmiCecController {
int startAddress = preferredAddress;
// If preferred address is "unregistered", start address will be the smallest
// address matched with the given device type.
- if (preferredAddress == HdmiCec.ADDR_UNREGISTERED) {
+ if (preferredAddress == Constants.ADDR_UNREGISTERED) {
for (int i = 0; i < NUM_LOGICAL_ADDRESS; ++i) {
- if (deviceType == HdmiCec.getTypeFromAddress(i)) {
+ if (deviceType == HdmiUtils.getTypeFromAddress(i)) {
startAddress = i;
break;
}
}
}
- int logicalAddress = HdmiCec.ADDR_UNREGISTERED;
+ int logicalAddress = Constants.ADDR_UNREGISTERED;
// Iterates all possible addresses which has the same device type.
for (int i = 0; i < NUM_LOGICAL_ADDRESS; ++i) {
int curAddress = (startAddress + i) % NUM_LOGICAL_ADDRESS;
- if (curAddress != HdmiCec.ADDR_UNREGISTERED
- && deviceType == HdmiCec.getTypeFromAddress(curAddress)) {
+ if (curAddress != Constants.ADDR_UNREGISTERED
+ && deviceType == HdmiUtils.getTypeFromAddress(curAddress)) {
if (!sendPollMessage(curAddress, curAddress,
RETRY_COUNT_FOR_LOGICAL_ADDRESS_ALLOCATION)) {
logicalAddress = curAddress;
@@ -255,7 +253,7 @@ final class HdmiCecController {
@ServiceThreadOnly
int addLogicalAddress(int newLogicalAddress) {
assertRunOnServiceThread();
- if (HdmiCec.isValidAddress(newLogicalAddress)) {
+ if (HdmiUtils.isValidAddress(newLogicalAddress)) {
return nativeAddLogicalAddress(mNativePtr, newLogicalAddress);
} else {
return -1;
@@ -315,13 +313,10 @@ final class HdmiCecController {
}
/**
- * Pass a option to CEC HAL.
+ * Set an option to CEC HAL.
*
- * @param flag a key of option. For more details, look at
- * {@link HdmiConstants#FLAG_HDMI_OPTION_WAKEUP} to
- * {@link HdmiConstants#FLAG_HDMI_OPTION_SYSTEM_CEC_CONTROL}.
- * @param value a value of option. Actual value varies from flag to flag. For more
- * details, look at description of flags.
+ * @param flag key of option
+ * @param value value of option
*/
@ServiceThreadOnly
void setOption(int flag, int value) {
@@ -385,31 +380,31 @@ final class HdmiCecController {
}
private List<Integer> pickPollCandidates(int pickStrategy) {
- int strategy = pickStrategy & HdmiConstants.POLL_STRATEGY_MASK;
+ int strategy = pickStrategy & Constants.POLL_STRATEGY_MASK;
Predicate<Integer> pickPredicate = null;
switch (strategy) {
- case HdmiConstants.POLL_STRATEGY_SYSTEM_AUDIO:
+ case Constants.POLL_STRATEGY_SYSTEM_AUDIO:
pickPredicate = mSystemAudioAddressPredicate;
break;
- case HdmiConstants.POLL_STRATEGY_REMOTES_DEVICES:
+ case Constants.POLL_STRATEGY_REMOTES_DEVICES:
default: // The default is POLL_STRATEGY_REMOTES_DEVICES.
pickPredicate = mRemoteDeviceAddressPredicate;
break;
}
- int iterationStrategy = pickStrategy & HdmiConstants.POLL_ITERATION_STRATEGY_MASK;
+ int iterationStrategy = pickStrategy & Constants.POLL_ITERATION_STRATEGY_MASK;
ArrayList<Integer> pollingCandidates = new ArrayList<>();
switch (iterationStrategy) {
- case HdmiConstants.POLL_ITERATION_IN_ORDER:
- for (int i = HdmiCec.ADDR_TV; i <= HdmiCec.ADDR_SPECIFIC_USE; ++i) {
+ case Constants.POLL_ITERATION_IN_ORDER:
+ for (int i = Constants.ADDR_TV; i <= Constants.ADDR_SPECIFIC_USE; ++i) {
if (pickPredicate.apply(i)) {
pollingCandidates.add(i);
}
}
break;
- case HdmiConstants.POLL_ITERATION_REVERSE_ORDER:
+ case Constants.POLL_ITERATION_REVERSE_ORDER:
default: // The default is reverse order.
- for (int i = HdmiCec.ADDR_SPECIFIC_USE; i >= HdmiCec.ADDR_TV; --i) {
+ for (int i = Constants.ADDR_SPECIFIC_USE; i >= Constants.ADDR_TV; --i) {
if (pickPredicate.apply(i)) {
pollingCandidates.add(i);
}
@@ -465,7 +460,7 @@ final class HdmiCecController {
// new logical address for the device because no device uses
// it as logical address of the device.
if (nativeSendCecCommand(mNativePtr, sourceAddress, destinationAddress, EMPTY_BODY)
- == HdmiConstants.SEND_RESULT_SUCCESS) {
+ == Constants.SEND_RESULT_SUCCESS) {
return true;
}
}
@@ -497,7 +492,7 @@ final class HdmiCecController {
private boolean isAcceptableAddress(int address) {
// Can access command targeting devices available in local device or broadcast command.
- if (address == HdmiCec.ADDR_BROADCAST) {
+ if (address == Constants.ADDR_BROADCAST) {
return true;
}
return isAllocatedLocalDeviceAddress(address);
@@ -511,12 +506,12 @@ final class HdmiCecController {
return;
}
- if (message.getDestination() != HdmiCec.ADDR_BROADCAST) {
+ if (message.getDestination() != Constants.ADDR_BROADCAST) {
int sourceAddress = message.getDestination();
// Reply <Feature Abort> to initiator (source) for all requests.
HdmiCecMessage cecMessage = HdmiCecMessageBuilder.buildFeatureAbortCommand(
sourceAddress, message.getSource(), message.getOpcode(),
- HdmiConstants.ABORT_REFUSED);
+ Constants.ABORT_REFUSED);
sendCommand(cecMessage);
}
}
@@ -537,7 +532,7 @@ final class HdmiCecController {
byte[] body = buildBody(cecMessage.getOpcode(), cecMessage.getParams());
final int error = nativeSendCecCommand(mNativePtr, cecMessage.getSource(),
cecMessage.getDestination(), body);
- if (error != HdmiConstants.SEND_RESULT_SUCCESS) {
+ if (error != Constants.SEND_RESULT_SUCCESS) {
Slog.w(TAG, "Failed to send " + cecMessage);
}
if (callback != null) {
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java
index d6d6006bbff9..e87db50bd587 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java
@@ -16,9 +16,7 @@
package com.android.server.hdmi;
-import android.hardware.hdmi.HdmiCec;
import android.hardware.hdmi.HdmiCecDeviceInfo;
-import android.hardware.hdmi.HdmiCecMessage;
import android.os.Looper;
import android.util.Slog;
@@ -63,16 +61,16 @@ abstract class HdmiCecLocalDevice {
protected HdmiCecLocalDevice(HdmiControlService service, int deviceType) {
mService = service;
mDeviceType = deviceType;
- mAddress = HdmiCec.ADDR_UNREGISTERED;
+ mAddress = Constants.ADDR_UNREGISTERED;
mLock = service.getServiceLock();
}
// Factory method that returns HdmiCecLocalDevice of corresponding type.
static HdmiCecLocalDevice create(HdmiControlService service, int deviceType) {
switch (deviceType) {
- case HdmiCec.DEVICE_TV:
+ case HdmiCecDeviceInfo.DEVICE_TV:
return new HdmiCecLocalDeviceTv(service);
- case HdmiCec.DEVICE_PLAYBACK:
+ case HdmiCecDeviceInfo.DEVICE_PLAYBACK:
return new HdmiCecLocalDevicePlayback(service);
default:
return null;
@@ -82,7 +80,7 @@ abstract class HdmiCecLocalDevice {
@ServiceThreadOnly
void init() {
assertRunOnServiceThread();
- mPreferredAddress = HdmiCec.ADDR_UNREGISTERED;
+ mPreferredAddress = Constants.ADDR_UNREGISTERED;
// TODO: load preferred address from permanent storage.
}
@@ -101,7 +99,7 @@ abstract class HdmiCecLocalDevice {
final boolean dispatchMessage(HdmiCecMessage message) {
assertRunOnServiceThread();
int dest = message.getDestination();
- if (dest != mAddress && dest != HdmiCec.ADDR_BROADCAST) {
+ if (dest != mAddress && dest != Constants.ADDR_BROADCAST) {
return false;
}
// Cache incoming message. Note that it caches only white-listed one.
@@ -116,47 +114,47 @@ abstract class HdmiCecLocalDevice {
return true;
}
switch (message.getOpcode()) {
- case HdmiCec.MESSAGE_ACTIVE_SOURCE:
+ case Constants.MESSAGE_ACTIVE_SOURCE:
return handleActiveSource(message);
- case HdmiCec.MESSAGE_INACTIVE_SOURCE:
+ case Constants.MESSAGE_INACTIVE_SOURCE:
return handleInactiveSource(message);
- case HdmiCec.MESSAGE_REQUEST_ACTIVE_SOURCE:
+ case Constants.MESSAGE_REQUEST_ACTIVE_SOURCE:
return handleRequestActiveSource(message);
- case HdmiCec.MESSAGE_GET_MENU_LANGUAGE:
+ case Constants.MESSAGE_GET_MENU_LANGUAGE:
return handleGetMenuLanguage(message);
- case HdmiCec.MESSAGE_GIVE_PHYSICAL_ADDRESS:
+ case Constants.MESSAGE_GIVE_PHYSICAL_ADDRESS:
return handleGivePhysicalAddress();
- case HdmiCec.MESSAGE_GIVE_OSD_NAME:
+ case Constants.MESSAGE_GIVE_OSD_NAME:
return handleGiveOsdName(message);
- case HdmiCec.MESSAGE_GIVE_DEVICE_VENDOR_ID:
+ case Constants.MESSAGE_GIVE_DEVICE_VENDOR_ID:
return handleGiveDeviceVendorId();
- case HdmiCec.MESSAGE_GET_CEC_VERSION:
+ case Constants.MESSAGE_GET_CEC_VERSION:
return handleGetCecVersion(message);
- case HdmiCec.MESSAGE_REPORT_PHYSICAL_ADDRESS:
+ case Constants.MESSAGE_REPORT_PHYSICAL_ADDRESS:
return handleReportPhysicalAddress(message);
- case HdmiCec.MESSAGE_ROUTING_CHANGE:
+ case Constants.MESSAGE_ROUTING_CHANGE:
return handleRoutingChange(message);
- case HdmiCec.MESSAGE_INITIATE_ARC:
+ case Constants.MESSAGE_INITIATE_ARC:
return handleInitiateArc(message);
- case HdmiCec.MESSAGE_TERMINATE_ARC:
+ case Constants.MESSAGE_TERMINATE_ARC:
return handleTerminateArc(message);
- case HdmiCec.MESSAGE_SET_SYSTEM_AUDIO_MODE:
+ case Constants.MESSAGE_SET_SYSTEM_AUDIO_MODE:
return handleSetSystemAudioMode(message);
- case HdmiCec.MESSAGE_SYSTEM_AUDIO_MODE_STATUS:
+ case Constants.MESSAGE_SYSTEM_AUDIO_MODE_STATUS:
return handleSystemAudioModeStatus(message);
- case HdmiCec.MESSAGE_REPORT_AUDIO_STATUS:
+ case Constants.MESSAGE_REPORT_AUDIO_STATUS:
return handleReportAudioStatus(message);
- case HdmiCec.MESSAGE_STANDBY:
+ case Constants.MESSAGE_STANDBY:
return handleStandby(message);
- case HdmiCec.MESSAGE_TEXT_VIEW_ON:
+ case Constants.MESSAGE_TEXT_VIEW_ON:
return handleTextViewOn(message);
- case HdmiCec.MESSAGE_IMAGE_VIEW_ON:
+ case Constants.MESSAGE_IMAGE_VIEW_ON:
return handleImageViewOn(message);
- case HdmiCec.MESSAGE_USER_CONTROL_PRESSED:
+ case Constants.MESSAGE_USER_CONTROL_PRESSED:
return handleUserControlPressed(message);
- case HdmiCec.MESSAGE_SET_STREAM_PATH:
+ case Constants.MESSAGE_SET_STREAM_PATH:
return handleSetStreamPath(message);
- case HdmiCec.MESSAGE_GIVE_DEVICE_POWER_STATUS:
+ case Constants.MESSAGE_GIVE_DEVICE_POWER_STATUS:
return handleGiveDevicePowerStatus(message);
default:
return false;
@@ -226,8 +224,8 @@ abstract class HdmiCecLocalDevice {
Slog.w(TAG, "Only TV can handle <Get Menu Language>:" + message.toString());
mService.sendCecCommand(
HdmiCecMessageBuilder.buildFeatureAbortCommand(mAddress,
- message.getSource(), HdmiCec.MESSAGE_GET_MENU_LANGUAGE,
- HdmiConstants.ABORT_UNRECOGNIZED_MODE));
+ message.getSource(), Constants.MESSAGE_GET_MENU_LANGUAGE,
+ Constants.ABORT_UNRECOGNIZED_MODE));
return true;
}
@@ -305,7 +303,8 @@ abstract class HdmiCecLocalDevice {
private static boolean isPowerOnOrToggleCommand(HdmiCecMessage message) {
byte[] params = message.getParams();
- return message.getOpcode() == HdmiCec.MESSAGE_USER_CONTROL_PRESSED && params.length == 1
+ return message.getOpcode() == Constants.MESSAGE_USER_CONTROL_PRESSED
+ && params.length == 1
&& (params[0] == HdmiCecKeycode.CEC_KEYCODE_POWER
|| params[0] == HdmiCecKeycode.CEC_KEYCODE_POWER_ON_FUNCTION
|| params[0] == HdmiCecKeycode.CEC_KEYCODE_POWER_TOGGLE_FUNCTION);
@@ -313,7 +312,8 @@ abstract class HdmiCecLocalDevice {
private static boolean isPowerOffOrToggleCommand(HdmiCecMessage message) {
byte[] params = message.getParams();
- return message.getOpcode() == HdmiCec.MESSAGE_USER_CONTROL_PRESSED && params.length == 1
+ return message.getOpcode() == Constants.MESSAGE_USER_CONTROL_PRESSED
+ && params.length == 1
&& (params[0] == HdmiCecKeycode.CEC_KEYCODE_POWER
|| params[0] == HdmiCecKeycode.CEC_KEYCODE_POWER_OFF_FUNCTION
|| params[0] == HdmiCecKeycode.CEC_KEYCODE_POWER_TOGGLE_FUNCTION);
@@ -367,7 +367,7 @@ abstract class HdmiCecLocalDevice {
@ServiceThreadOnly
void clearAddress() {
assertRunOnServiceThread();
- mAddress = HdmiCec.ADDR_UNREGISTERED;
+ mAddress = Constants.ADDR_UNREGISTERED;
}
@ServiceThreadOnly
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java
index a631172447f1..7ab2e8c081df 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevicePlayback.java
@@ -16,8 +16,8 @@
package com.android.server.hdmi;
-import android.hardware.hdmi.HdmiCec;
-import android.hardware.hdmi.HdmiCecMessage;
+import android.hardware.hdmi.HdmiCecDeviceInfo;
+import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.IHdmiControlCallback;
import android.os.RemoteException;
import android.util.Slog;
@@ -33,7 +33,7 @@ final class HdmiCecLocalDevicePlayback extends HdmiCecLocalDevice {
private boolean mIsActiveSource = false;
HdmiCecLocalDevicePlayback(HdmiControlService service) {
- super(service, HdmiCec.DEVICE_PLAYBACK);
+ super(service, HdmiCecDeviceInfo.DEVICE_PLAYBACK);
}
@Override
@@ -49,16 +49,17 @@ final class HdmiCecLocalDevicePlayback extends HdmiCecLocalDevice {
assertRunOnServiceThread();
if (hasAction(OneTouchPlayAction.class)) {
Slog.w(TAG, "oneTouchPlay already in progress");
- invokeCallback(callback, HdmiCec.RESULT_ALREADY_IN_PROGRESS);
+ invokeCallback(callback, HdmiControlManager.RESULT_ALREADY_IN_PROGRESS);
return;
}
// TODO: Consider the case of multiple TV sets. For now we always direct the command
// to the primary one.
- OneTouchPlayAction action = OneTouchPlayAction.create(this, HdmiCec.ADDR_TV, callback);
+ OneTouchPlayAction action = OneTouchPlayAction.create(this, Constants.ADDR_TV,
+ callback);
if (action == null) {
Slog.w(TAG, "Cannot initiate oneTouchPlay");
- invokeCallback(callback, HdmiCec.RESULT_EXCEPTION);
+ invokeCallback(callback, HdmiControlManager.RESULT_EXCEPTION);
return;
}
addAndStartAction(action);
@@ -69,14 +70,14 @@ final class HdmiCecLocalDevicePlayback extends HdmiCecLocalDevice {
assertRunOnServiceThread();
if (hasAction(DevicePowerStatusAction.class)) {
Slog.w(TAG, "queryDisplayStatus already in progress");
- invokeCallback(callback, HdmiCec.RESULT_ALREADY_IN_PROGRESS);
+ invokeCallback(callback, HdmiControlManager.RESULT_ALREADY_IN_PROGRESS);
return;
}
DevicePowerStatusAction action = DevicePowerStatusAction.create(this,
- HdmiCec.ADDR_TV, callback);
+ Constants.ADDR_TV, callback);
if (action == null) {
Slog.w(TAG, "Cannot initiate queryDisplayStatus");
- invokeCallback(callback, HdmiCec.RESULT_EXCEPTION);
+ invokeCallback(callback, HdmiControlManager.RESULT_EXCEPTION);
return;
}
addAndStartAction(action);
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
index 1b88aea0d3c2..45ee89fc339c 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
@@ -16,9 +16,8 @@
package com.android.server.hdmi;
-import android.hardware.hdmi.HdmiCec;
import android.hardware.hdmi.HdmiCecDeviceInfo;
-import android.hardware.hdmi.HdmiCecMessage;
+import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.IHdmiControlCallback;
import android.media.AudioSystem;
import android.os.IBinder;
@@ -57,12 +56,12 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
// be able to switch to it upon receiving <Inactive Source> from currently active source.
// This remains valid only when the active source was switched via one touch play operation
// (either by TV or source device). Manual port switching invalidates this value to
- // HdmiConstants.PORT_INVALID, for which case <Inactive Source> does not do anything.
+ // Constants.PORT_INVALID, for which case <Inactive Source> does not do anything.
@GuardedBy("mLock")
private int mPrevPortId;
@GuardedBy("mLock")
- private int mSystemAudioVolume = HdmiConstants.UNKNOWN_VOLUME;
+ private int mSystemAudioVolume = Constants.UNKNOWN_VOLUME;
@GuardedBy("mLock")
private boolean mSystemAudioMute = false;
@@ -83,8 +82,8 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
private boolean mAutoDeviceOff;
HdmiCecLocalDeviceTv(HdmiControlService service) {
- super(service, HdmiCec.DEVICE_TV);
- mPrevPortId = HdmiConstants.INVALID_PORT_ID;
+ super(service, HdmiCecDeviceInfo.DEVICE_TV);
+ mPrevPortId = Constants.INVALID_PORT_ID;
// TODO: load system audio mode and set it to mSystemAudioMode.
}
@@ -111,13 +110,13 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
@ServiceThreadOnly
void deviceSelect(int targetAddress, IHdmiControlCallback callback) {
assertRunOnServiceThread();
- if (targetAddress == HdmiCec.ADDR_INTERNAL) {
+ if (targetAddress == Constants.ADDR_INTERNAL) {
handleSelectInternalSource(callback);
return;
}
HdmiCecDeviceInfo targetDevice = getDeviceInfo(targetAddress);
if (targetDevice == null) {
- invokeCallback(callback, HdmiCec.RESULT_TARGET_NOT_AVAILABLE);
+ invokeCallback(callback, HdmiControlManager.RESULT_TARGET_NOT_AVAILABLE);
return;
}
removeAction(DeviceSelectAction.class);
@@ -194,7 +193,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
assertRunOnServiceThread();
// Seq #20
if (!mService.isControlEnabled() || portId == getActivePortId()) {
- invokeCallback(callback, HdmiCec.RESULT_INCORRECT_MODE);
+ invokeCallback(callback, HdmiControlManager.RESULT_INCORRECT_MODE);
return;
}
// TODO: Make sure this call does not stem from <Active Source> message reception.
@@ -279,7 +278,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
return true;
}
int portId = getPrevPortId();
- if (portId != HdmiConstants.INVALID_PORT_ID) {
+ if (portId != Constants.INVALID_PORT_ID) {
// TODO: Do this only if TV is not showing multiview like PIP/PAP.
HdmiCecDeviceInfo inactiveSource = getDeviceInfo(message.getSource());
@@ -293,7 +292,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
setActivePortId(portId);
doManualPortSwitching(portId, null);
- setPrevPortId(HdmiConstants.INVALID_PORT_ID);
+ setPrevPortId(Constants.INVALID_PORT_ID);
}
return true;
}
@@ -426,7 +425,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
// For now, simply reply with <Feature Abort> and mark it consumed by returning true.
mService.sendCecCommand(HdmiCecMessageBuilder.buildFeatureAbortCommand(
message.getDestination(), message.getSource(), message.getOpcode(),
- HdmiConstants.ABORT_REFUSED));
+ Constants.ABORT_REFUSED));
return true;
}
@@ -516,7 +515,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
assertRunOnServiceThread();
HdmiCecDeviceInfo avr = getAvrDeviceInfo();
if (avr == null) {
- invokeCallback(callback, HdmiCec.RESULT_SOURCE_NOT_AVAILABLE);
+ invokeCallback(callback, HdmiControlManager.RESULT_SOURCE_NOT_AVAILABLE);
return;
}
@@ -737,8 +736,8 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
}
private boolean isMessageForSystemAudio(HdmiCecMessage message) {
- if (message.getSource() != HdmiCec.ADDR_AUDIO_SYSTEM
- || message.getDestination() != HdmiCec.ADDR_TV
+ if (message.getSource() != Constants.ADDR_AUDIO_SYSTEM
+ || message.getDestination() != Constants.ADDR_TV
|| getAvrDeviceInfo() == null) {
Slog.w(TAG, "Skip abnormal CecMessage: " + message);
return false;
@@ -865,7 +864,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
@ServiceThreadOnly
HdmiCecDeviceInfo getAvrDeviceInfo() {
assertRunOnServiceThread();
- return getDeviceInfo(HdmiCec.ADDR_AUDIO_SYSTEM);
+ return getDeviceInfo(Constants.ADDR_AUDIO_SYSTEM);
}
/**
@@ -889,7 +888,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
}
HdmiCecDeviceInfo getSafeAvrDeviceInfo() {
- return getSafeDeviceInfo(HdmiCec.ADDR_AUDIO_SYSTEM);
+ return getSafeDeviceInfo(Constants.ADDR_AUDIO_SYSTEM);
}
/**
@@ -958,7 +957,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
void launchRoutingControl(boolean routingForBootup) {
assertRunOnServiceThread();
// Seq #24
- if (getActivePortId() != HdmiConstants.INVALID_PORT_ID) {
+ if (getActivePortId() != Constants.INVALID_PORT_ID) {
if (!routingForBootup && !isProhibitMode()) {
removeAction(RoutingControlAction.class);
int newPath = mService.portIdToPath(getActivePortId());
@@ -1058,7 +1057,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
}
if (!initiatedByCec) {
mService.sendCecCommand(HdmiCecMessageBuilder.buildStandby(
- mAddress, HdmiCec.ADDR_BROADCAST));
+ mAddress, Constants.ADDR_BROADCAST));
}
}
diff --git a/core/java/android/hardware/hdmi/HdmiCecMessage.java b/services/core/java/com/android/server/hdmi/HdmiCecMessage.java
index ac16ad854be4..c0ff81df0e7e 100644
--- a/core/java/android/hardware/hdmi/HdmiCecMessage.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecMessage.java
@@ -14,9 +14,8 @@
* limitations under the License.
*/
-package android.hardware.hdmi;
+package com.android.server.hdmi;
-import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
@@ -28,10 +27,7 @@ import java.util.Arrays;
* A class to encapsulate HDMI-CEC message used for the devices connected via
* HDMI cable to communicate with one another. A message is defined by its
* source and destination address, command (or opcode), and optional parameters.
- *
- * @hide
*/
-@SystemApi
public final class HdmiCecMessage implements Parcelable {
public static final byte[] EMPTY_PARAM = EmptyArray.BYTE;
@@ -158,23 +154,23 @@ public final class HdmiCecMessage implements Parcelable {
private static String opcodeToString(int opcode) {
switch (opcode) {
- case HdmiCec.MESSAGE_FEATURE_ABORT:
+ case Constants.MESSAGE_FEATURE_ABORT:
return "Feature Abort";
- case HdmiCec.MESSAGE_CEC_VERSION:
+ case Constants.MESSAGE_CEC_VERSION:
return "CEC Version";
- case HdmiCec.MESSAGE_REQUEST_ARC_INITIATION:
+ case Constants.MESSAGE_REQUEST_ARC_INITIATION:
return "Request ARC Initiation";
- case HdmiCec.MESSAGE_REQUEST_ARC_TERMINATION:
+ case Constants.MESSAGE_REQUEST_ARC_TERMINATION:
return "Request ARC Termination";
- case HdmiCec.MESSAGE_REPORT_ARC_INITIATED:
+ case Constants.MESSAGE_REPORT_ARC_INITIATED:
return "Report ARC Initiated";
- case HdmiCec.MESSAGE_REPORT_ARC_TERMINATED:
+ case Constants.MESSAGE_REPORT_ARC_TERMINATED:
return "Report ARC Terminated";
- case HdmiCec.MESSAGE_TEXT_VIEW_ON:
+ case Constants.MESSAGE_TEXT_VIEW_ON:
return "Text View On";
- case HdmiCec.MESSAGE_ACTIVE_SOURCE:
+ case Constants.MESSAGE_ACTIVE_SOURCE:
return "Active Source";
- case HdmiCec.MESSAGE_GIVE_DEVICE_POWER_STATUS:
+ case Constants.MESSAGE_GIVE_DEVICE_POWER_STATUS:
return "Give Device Power Status";
default:
return String.format("Opcode: %02X", opcode);
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecMessageBuilder.java b/services/core/java/com/android/server/hdmi/HdmiCecMessageBuilder.java
index b1ea1349be3b..fe35b24dbabf 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecMessageBuilder.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecMessageBuilder.java
@@ -16,9 +16,6 @@
package com.android.server.hdmi;
-import android.hardware.hdmi.HdmiCec;
-import android.hardware.hdmi.HdmiCecMessage;
-
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
@@ -60,7 +57,7 @@ public class HdmiCecMessageBuilder {
(byte) originalOpcode,
(byte) reason,
};
- return buildCommand(src, dest, HdmiCec.MESSAGE_FEATURE_ABORT, params);
+ return buildCommand(src, dest, Constants.MESSAGE_FEATURE_ABORT, params);
}
/**
@@ -71,7 +68,7 @@ public class HdmiCecMessageBuilder {
* @return newly created {@link HdmiCecMessage}
*/
static HdmiCecMessage buildGivePhysicalAddress(int src, int dest) {
- return buildCommand(src, dest, HdmiCec.MESSAGE_GIVE_PHYSICAL_ADDRESS);
+ return buildCommand(src, dest, Constants.MESSAGE_GIVE_PHYSICAL_ADDRESS);
}
/**
@@ -82,7 +79,7 @@ public class HdmiCecMessageBuilder {
* @return newly created {@link HdmiCecMessage}
*/
static HdmiCecMessage buildGiveOsdNameCommand(int src, int dest) {
- return buildCommand(src, dest, HdmiCec.MESSAGE_GIVE_OSD_NAME);
+ return buildCommand(src, dest, Constants.MESSAGE_GIVE_OSD_NAME);
}
/**
@@ -93,7 +90,7 @@ public class HdmiCecMessageBuilder {
* @return newly created {@link HdmiCecMessage}
*/
static HdmiCecMessage buildGiveDeviceVendorIdCommand(int src, int dest) {
- return buildCommand(src, dest, HdmiCec.MESSAGE_GIVE_DEVICE_VENDOR_ID);
+ return buildCommand(src, dest, Constants.MESSAGE_GIVE_DEVICE_VENDOR_ID);
}
/**
@@ -118,8 +115,8 @@ public class HdmiCecMessageBuilder {
(byte) normalized.charAt(2),
};
// <Set Menu Language> is broadcast message.
- return buildCommand(src, HdmiCec.ADDR_BROADCAST, HdmiCec.MESSAGE_SET_MENU_LANGUAGE,
- params);
+ return buildCommand(src, Constants.ADDR_BROADCAST,
+ Constants.MESSAGE_SET_MENU_LANGUAGE, params);
}
/**
@@ -138,7 +135,7 @@ public class HdmiCecMessageBuilder {
} catch (UnsupportedEncodingException e) {
return null;
}
- return buildCommand(src, dest, HdmiCec.MESSAGE_SET_OSD_NAME, params);
+ return buildCommand(src, dest, Constants.MESSAGE_SET_OSD_NAME, params);
}
/**
@@ -161,8 +158,8 @@ public class HdmiCecMessageBuilder {
(byte) deviceType
};
// <Report Physical Address> is broadcast message.
- return buildCommand(src, HdmiCec.ADDR_BROADCAST, HdmiCec.MESSAGE_REPORT_PHYSICAL_ADDRESS,
- params);
+ return buildCommand(src, Constants.ADDR_BROADCAST,
+ Constants.MESSAGE_REPORT_PHYSICAL_ADDRESS, params);
}
/**
@@ -182,8 +179,8 @@ public class HdmiCecMessageBuilder {
(byte) (vendorId & 0xFF)
};
// <Device Vendor Id> is broadcast message.
- return buildCommand(src, HdmiCec.ADDR_BROADCAST, HdmiCec.MESSAGE_DEVICE_VENDOR_ID,
- params);
+ return buildCommand(src, Constants.ADDR_BROADCAST,
+ Constants.MESSAGE_DEVICE_VENDOR_ID, params);
}
/**
@@ -199,7 +196,7 @@ public class HdmiCecMessageBuilder {
byte[] params = new byte[] {
(byte) version
};
- return buildCommand(src, dest, HdmiCec.MESSAGE_CEC_VERSION, params);
+ return buildCommand(src, dest, Constants.MESSAGE_CEC_VERSION, params);
}
/**
@@ -210,7 +207,7 @@ public class HdmiCecMessageBuilder {
* @return newly created {@link HdmiCecMessage}
*/
static HdmiCecMessage buildRequestArcInitiation(int src, int dest) {
- return buildCommand(src, dest, HdmiCec.MESSAGE_REQUEST_ARC_INITIATION);
+ return buildCommand(src, dest, Constants.MESSAGE_REQUEST_ARC_INITIATION);
}
/**
@@ -221,7 +218,7 @@ public class HdmiCecMessageBuilder {
* @return newly created {@link HdmiCecMessage}
*/
static HdmiCecMessage buildRequestArcTermination(int src, int dest) {
- return buildCommand(src, dest, HdmiCec.MESSAGE_REQUEST_ARC_TERMINATION);
+ return buildCommand(src, dest, Constants.MESSAGE_REQUEST_ARC_TERMINATION);
}
/**
@@ -232,7 +229,7 @@ public class HdmiCecMessageBuilder {
* @return newly created {@link HdmiCecMessage}
*/
static HdmiCecMessage buildReportArcInitiated(int src, int dest) {
- return buildCommand(src, dest, HdmiCec.MESSAGE_REPORT_ARC_INITIATED);
+ return buildCommand(src, dest, Constants.MESSAGE_REPORT_ARC_INITIATED);
}
/**
@@ -243,7 +240,7 @@ public class HdmiCecMessageBuilder {
* @return newly created {@link HdmiCecMessage}
*/
static HdmiCecMessage buildReportArcTerminated(int src, int dest) {
- return buildCommand(src, dest, HdmiCec.MESSAGE_REPORT_ARC_TERMINATED);
+ return buildCommand(src, dest, Constants.MESSAGE_REPORT_ARC_TERMINATED);
}
/**
@@ -254,7 +251,7 @@ public class HdmiCecMessageBuilder {
* @return newly created {@link HdmiCecMessage}
*/
static HdmiCecMessage buildTextViewOn(int src, int dest) {
- return buildCommand(src, dest, HdmiCec.MESSAGE_TEXT_VIEW_ON);
+ return buildCommand(src, dest, Constants.MESSAGE_TEXT_VIEW_ON);
}
/**
@@ -265,7 +262,7 @@ public class HdmiCecMessageBuilder {
* @return newly created {@link HdmiCecMessage}
*/
static HdmiCecMessage buildActiveSource(int src, int physicalAddress) {
- return buildCommand(src, HdmiCec.ADDR_BROADCAST, HdmiCec.MESSAGE_ACTIVE_SOURCE,
+ return buildCommand(src, Constants.ADDR_BROADCAST, Constants.MESSAGE_ACTIVE_SOURCE,
physicalAddressToParam(physicalAddress));
}
@@ -277,8 +274,8 @@ public class HdmiCecMessageBuilder {
* @return newly created {@link HdmiCecMessage}
*/
static HdmiCecMessage buildInactiveSource(int src, int physicalAddress) {
- return buildCommand(src, HdmiCec.ADDR_BROADCAST, HdmiCec.MESSAGE_INACTIVE_SOURCE,
- physicalAddressToParam(physicalAddress));
+ return buildCommand(src, Constants.ADDR_BROADCAST,
+ Constants.MESSAGE_INACTIVE_SOURCE, physicalAddressToParam(physicalAddress));
}
/**
@@ -291,8 +288,8 @@ public class HdmiCecMessageBuilder {
* @return newly created {@link HdmiCecMessage}
*/
static HdmiCecMessage buildSetStreamPath(int src, int streamPath) {
- return buildCommand(src, HdmiCec.ADDR_BROADCAST, HdmiCec.MESSAGE_SET_STREAM_PATH,
- physicalAddressToParam(streamPath));
+ return buildCommand(src, Constants.ADDR_BROADCAST,
+ Constants.MESSAGE_SET_STREAM_PATH, physicalAddressToParam(streamPath));
}
/**
@@ -310,7 +307,8 @@ public class HdmiCecMessageBuilder {
(byte) ((oldPath >> 8) & 0xFF), (byte) (oldPath & 0xFF),
(byte) ((newPath >> 8) & 0xFF), (byte) (newPath & 0xFF)
};
- return buildCommand(src, HdmiCec.ADDR_BROADCAST, HdmiCec.MESSAGE_ROUTING_CHANGE, param);
+ return buildCommand(src, Constants.ADDR_BROADCAST, Constants.MESSAGE_ROUTING_CHANGE,
+ param);
}
/**
@@ -321,7 +319,7 @@ public class HdmiCecMessageBuilder {
* @return newly created {@link HdmiCecMessage}
*/
static HdmiCecMessage buildGiveDevicePowerStatus(int src, int dest) {
- return buildCommand(src, dest, HdmiCec.MESSAGE_GIVE_DEVICE_POWER_STATUS);
+ return buildCommand(src, dest, Constants.MESSAGE_GIVE_DEVICE_POWER_STATUS);
}
/**
@@ -336,7 +334,7 @@ public class HdmiCecMessageBuilder {
byte[] param = new byte[] {
(byte) (powerStatus)
};
- return buildCommand(src, dest, HdmiCec.MESSAGE_REPORT_POWER_STATUS, param);
+ return buildCommand(src, dest, Constants.MESSAGE_REPORT_POWER_STATUS, param);
}
/**
@@ -351,10 +349,10 @@ public class HdmiCecMessageBuilder {
static HdmiCecMessage buildSystemAudioModeRequest(int src, int avr, int avrPhysicalAddress,
boolean enableSystemAudio) {
if (enableSystemAudio) {
- return buildCommand(src, avr, HdmiCec.MESSAGE_SYSTEM_AUDIO_MODE_REQUEST,
+ return buildCommand(src, avr, Constants.MESSAGE_SYSTEM_AUDIO_MODE_REQUEST,
physicalAddressToParam(avrPhysicalAddress));
} else {
- return buildCommand(src, avr, HdmiCec.MESSAGE_SYSTEM_AUDIO_MODE_REQUEST);
+ return buildCommand(src, avr, Constants.MESSAGE_SYSTEM_AUDIO_MODE_REQUEST);
}
}
@@ -366,7 +364,7 @@ public class HdmiCecMessageBuilder {
* @return newly created {@link HdmiCecMessage}
*/
static HdmiCecMessage buildGiveAudioStatus(int src, int dest) {
- return buildCommand(src, dest, HdmiCec.MESSAGE_GIVE_AUDIO_STATUS);
+ return buildCommand(src, dest, Constants.MESSAGE_GIVE_AUDIO_STATUS);
}
/**
@@ -390,7 +388,7 @@ public class HdmiCecMessageBuilder {
* @return newly created {@link HdmiCecMessage}
*/
static HdmiCecMessage buildUserControlPressed(int src, int dest, byte[] commandParam) {
- return buildCommand(src, dest, HdmiCec.MESSAGE_USER_CONTROL_PRESSED, commandParam);
+ return buildCommand(src, dest, Constants.MESSAGE_USER_CONTROL_PRESSED, commandParam);
}
/**
@@ -401,7 +399,7 @@ public class HdmiCecMessageBuilder {
* @return newly created {@link HdmiCecMessage}
*/
static HdmiCecMessage buildUserControlReleased(int src, int dest) {
- return buildCommand(src, dest, HdmiCec.MESSAGE_USER_CONTROL_RELEASED);
+ return buildCommand(src, dest, Constants.MESSAGE_USER_CONTROL_RELEASED);
}
/**
@@ -412,7 +410,7 @@ public class HdmiCecMessageBuilder {
* @return newly created {@link HdmiCecMessage}
*/
static HdmiCecMessage buildGiveSystemAudioModeStatus(int src, int dest) {
- return buildCommand(src, dest, HdmiCec.MESSAGE_GIVE_SYSTEM_AUDIO_MODE_STATUS);
+ return buildCommand(src, dest, Constants.MESSAGE_GIVE_SYSTEM_AUDIO_MODE_STATUS);
}
/**
@@ -423,7 +421,7 @@ public class HdmiCecMessageBuilder {
* @return newly created {@link HdmiCecMessage}
*/
public static HdmiCecMessage buildStandby(int src, int dest) {
- return buildCommand(src, dest, HdmiCec.MESSAGE_STANDBY);
+ return buildCommand(src, dest, Constants.MESSAGE_STANDBY);
}
/***** Please ADD new buildXXX() methods above. ******/
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecMessageCache.java b/services/core/java/com/android/server/hdmi/HdmiCecMessageCache.java
index abda656be896..fb4460f4540d 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecMessageCache.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecMessageCache.java
@@ -16,8 +16,6 @@
package com.android.server.hdmi;
-import android.hardware.hdmi.HdmiCec;
-import android.hardware.hdmi.HdmiCecMessage;
import android.util.FastImmutableArraySet;
import android.util.SparseArray;
@@ -29,12 +27,12 @@ import android.util.SparseArray;
* to clean up messages come from the device.
*/
final class HdmiCecMessageCache {
- private static final FastImmutableArraySet<Integer> CACHEABLE_OPCODES = new FastImmutableArraySet<>(
- new Integer[] {
- HdmiCec.MESSAGE_SET_OSD_NAME,
- HdmiCec.MESSAGE_REPORT_PHYSICAL_ADDRESS,
- HdmiCec.MESSAGE_DEVICE_VENDOR_ID,
- HdmiCec.MESSAGE_CEC_VERSION,
+ private static final FastImmutableArraySet<Integer> CACHEABLE_OPCODES =
+ new FastImmutableArraySet<>(new Integer[] {
+ Constants.MESSAGE_SET_OSD_NAME,
+ Constants.MESSAGE_REPORT_PHYSICAL_ADDRESS,
+ Constants.MESSAGE_DEVICE_VENDOR_ID,
+ Constants.MESSAGE_CEC_VERSION,
});
// It's like [Source Logical Address, [Opcode, HdmiCecMessage]].
diff --git a/services/core/java/com/android/server/hdmi/HdmiConstants.java b/services/core/java/com/android/server/hdmi/HdmiConstants.java
deleted file mode 100644
index 3f9e517de5d3..000000000000
--- a/services/core/java/com/android/server/hdmi/HdmiConstants.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.hdmi;
-
-/**
- * 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}.
- */
-final class HdmiConstants {
-
- // Constants related to operands of HDMI CEC commands.
- // Refer to CEC Table 29 in HDMI Spec v1.4b.
- // [Abort Reason]
- static final int ABORT_UNRECOGNIZED_MODE = 0;
- static final int ABORT_NOT_IN_CORRECT_MODE = 1;
- static final int ABORT_CANNOT_PROVIDE_SOURCE = 2;
- static final int ABORT_INVALID_OPERAND = 3;
- static final int ABORT_REFUSED = 4;
- static final int ABORT_UNABLE_TO_DETERMINE = 5;
-
- // [Audio Status]
- static final int SYSTEM_AUDIO_STATUS_OFF = 0;
- static final int SYSTEM_AUDIO_STATUS_ON = 1;
-
- // Bit mask used to get the routing path of the top level device.
- // When &'d with the path 1.2.2.0 (0x1220), for instance, gives 1.0.0.0.
- static final int ROUTING_PATH_TOP_MASK = 0xF000;
-
- // Flags used for setOption to CEC HAL.
- /**
- * When set to false, HAL does not wake up the system upon receiving
- * <Image View On> or <Text View On>. Used when user changes the TV
- * settings to disable the auto TV on functionality.
- * True by default.
- */
- static final int FLAG_HDMI_OPTION_WAKEUP = 1;
- /**
- * When set to false, all the CEC commands are discarded. Used when
- * user changes the TV settings to disable CEC functionality.
- * True by default.
- */
- static final int FLAG_HDMI_OPTION_ENABLE_CEC = 2;
- /**
- * Setting this flag to false means Android system will stop handling
- * CEC service and yield the control over to the microprocessor that is
- * powered on through the standby mode. When set to true, the system
- * will gain the control over, hence telling the microprocessor to stop
- * handling the cec commands. This is called when system goes
- * in and out of standby mode to notify the microprocessor that it should
- * start/stop handling CEC commands on behalf of the system.
- * False by default.
- */
- static final int FLAG_HDMI_OPTION_SYSTEM_CEC_CONTROL = 3;
-
- static final int INVALID_PORT_ID = -1;
- static final int INVALID_PHYSICAL_ADDRESS = 0xFFFF;
-
- // Send result codes.
- static final int SEND_RESULT_SUCCESS = 0;
- static final int SEND_RESULT_NAK = -1;
- static final int SEND_RESULT_FAILURE = -2;
-
- // Strategy for device polling.
- // Should use "OR(|) operation of POLL_STRATEGY_XXX and POLL_ITERATION_XXX.
- static final int POLL_STRATEGY_MASK = 0x3; // first and second bit.
- static final int POLL_STRATEGY_REMOTES_DEVICES = 0x1;
- static final int POLL_STRATEGY_SYSTEM_AUDIO = 0x2;
-
- static final int POLL_ITERATION_STRATEGY_MASK = 0x30000; // first and second bit.
- static final int POLL_ITERATION_IN_ORDER = 0x10000;
- static final int POLL_ITERATION_REVERSE_ORDER = 0x20000;
-
- static final int UNKNOWN_VOLUME = -1;
-
- // IRT(Initiator Repetition Time) in millisecond as recommended in the standard.
- // Outgoing UCP commands, when in 'Press and Hold' mode, should be this much apart
- // from the adjacent one so as not to place unnecessarily heavy load on the CEC line.
- // TODO: This value might need tweaking per product basis. Consider putting it
- // in config.xml to allow customization.
- static final int IRT_MS = 300;
-
- private HdmiConstants() { /* cannot be instantiated */ }
-}
diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java
index 1fdb3ece8136..f927cb677510 100644
--- a/services/core/java/com/android/server/hdmi/HdmiControlService.java
+++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java
@@ -21,11 +21,11 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
-import android.hardware.hdmi.HdmiCec;
import android.hardware.hdmi.HdmiCecDeviceInfo;
-import android.hardware.hdmi.HdmiCecMessage;
+import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.HdmiHotplugEvent;
import android.hardware.hdmi.HdmiPortInfo;
+import android.hardware.hdmi.HdmiTvClient;
import android.hardware.hdmi.IHdmiControlCallback;
import android.hardware.hdmi.IHdmiControlService;
import android.hardware.hdmi.IHdmiDeviceEventListener;
@@ -181,7 +181,7 @@ public final class HdmiControlService extends SystemService {
private final PowerStateReceiver mPowerStateReceiver = new PowerStateReceiver();
@ServiceThreadOnly
- private int mPowerStatus = HdmiCec.POWER_STATUS_STANDBY;
+ private int mPowerStatus = HdmiControlManager.POWER_STATUS_STANDBY;
@ServiceThreadOnly
private boolean mStandbyMessageReceived = false;
@@ -195,11 +195,12 @@ public final class HdmiControlService extends SystemService {
@Override
public void onStart() {
mIoThread.start();
- mPowerStatus = HdmiCec.POWER_STATUS_TRANSIENT_TO_ON;
+ mPowerStatus = HdmiControlManager.POWER_STATUS_TRANSIENT_TO_ON;
mCecController = HdmiCecController.create(this);
if (mCecController != null) {
- mCecController.setOption(HdmiCec.OPTION_CEC_SERVICE_CONTROL, HdmiCec.DISABLED);
+ mCecController.setOption(HdmiTvClient.OPTION_CEC_SERVICE_CONTROL,
+ HdmiTvClient.DISABLED);
initializeLocalDevices(mLocalDevices);
} else {
Slog.i(TAG, "Device does not support HDMI-CEC.");
@@ -241,7 +242,7 @@ public final class HdmiControlService extends SystemService {
localDevice.getPreferredAddress(), new AllocateAddressCallback() {
@Override
public void onAllocated(int deviceType, int logicalAddress) {
- if (logicalAddress == HdmiCec.ADDR_UNREGISTERED) {
+ if (logicalAddress == Constants.ADDR_UNREGISTERED) {
Slog.e(TAG, "Failed to allocate address:[device_type:" + deviceType + "]");
} else {
HdmiCecDeviceInfo deviceInfo = createDeviceInfo(logicalAddress, deviceType);
@@ -254,8 +255,8 @@ public final class HdmiControlService extends SystemService {
// Address allocation completed for all devices. Notify each device.
if (deviceTypes.size() == finished.size()) {
- if (mPowerStatus == HdmiCec.POWER_STATUS_TRANSIENT_TO_ON) {
- mPowerStatus = HdmiCec.POWER_STATUS_ON;
+ if (mPowerStatus == HdmiControlManager.POWER_STATUS_TRANSIENT_TO_ON) {
+ mPowerStatus = HdmiControlManager.POWER_STATUS_ON;
}
notifyAddressAllocated(devices);
}
@@ -344,7 +345,7 @@ public final class HdmiControlService extends SystemService {
HdmiPortInfo portInfo = getPortInfo(portId);
if (portInfo == null) {
Slog.e(TAG, "Cannot find the port info: " + portId);
- return HdmiConstants.INVALID_PHYSICAL_ADDRESS;
+ return Constants.INVALID_PHYSICAL_ADDRESS;
}
return portInfo.getAddress();
}
@@ -356,13 +357,13 @@ public final class HdmiControlService extends SystemService {
* 0x1000 (1.0.0.0) which is the topmost path of the given routing path.
*/
int pathToPortId(int path) {
- int portAddress = path & HdmiConstants.ROUTING_PATH_TOP_MASK;
+ int portAddress = path & Constants.ROUTING_PATH_TOP_MASK;
for (HdmiPortInfo info : mPortInfo) {
if (portAddress == info.getAddress()) {
return info.getId();
}
}
- return HdmiConstants.INVALID_PORT_ID;
+ return Constants.INVALID_PORT_ID;
}
/**
@@ -475,12 +476,12 @@ public final class HdmiControlService extends SystemService {
assertRunOnServiceThread();
for (HdmiCecLocalDevice device : mCecController.getLocalDeviceList()) {
if (device.dispatchMessage(message)
- && message.getDestination() != HdmiCec.ADDR_BROADCAST) {
+ && message.getDestination() != Constants.ADDR_BROADCAST) {
return true;
}
}
- if (message.getDestination() != HdmiCec.ADDR_BROADCAST) {
+ if (message.getDestination() != Constants.ADDR_BROADCAST) {
Slog.w(TAG, "Unhandled cec command:" + message);
}
return false;
@@ -520,11 +521,11 @@ public final class HdmiControlService extends SystemService {
}
private int checkPollStrategy(int pickStrategy) {
- int strategy = pickStrategy & HdmiConstants.POLL_STRATEGY_MASK;
+ int strategy = pickStrategy & Constants.POLL_STRATEGY_MASK;
if (strategy == 0) {
throw new IllegalArgumentException("Invalid poll strategy:" + pickStrategy);
}
- int iterationStrategy = pickStrategy & HdmiConstants.POLL_ITERATION_STRATEGY_MASK;
+ int iterationStrategy = pickStrategy & Constants.POLL_ITERATION_STRATEGY_MASK;
if (iterationStrategy == 0) {
throw new IllegalArgumentException("Invalid iteration strategy:" + pickStrategy);
}
@@ -632,7 +633,7 @@ public final class HdmiControlService extends SystemService {
HdmiCecLocalDeviceTv tv = tv();
if (tv == null) {
Slog.w(TAG, "Local tv device not available");
- invokeCallback(callback, HdmiCec.RESULT_SOURCE_NOT_AVAILABLE);
+ invokeCallback(callback, HdmiControlManager.RESULT_SOURCE_NOT_AVAILABLE);
return;
}
tv.deviceSelect(logicalAddress, callback);
@@ -649,7 +650,7 @@ public final class HdmiControlService extends SystemService {
HdmiCecLocalDeviceTv tv = tv();
if (tv == null) {
Slog.w(TAG, "Local tv device not available");
- invokeCallback(callback, HdmiCec.RESULT_SOURCE_NOT_AVAILABLE);
+ invokeCallback(callback, HdmiControlManager.RESULT_SOURCE_NOT_AVAILABLE);
return;
}
tv.doManualPortSwitching(portId, callback);
@@ -765,7 +766,7 @@ public final class HdmiControlService extends SystemService {
HdmiCecLocalDeviceTv tv = tv();
if (tv == null) {
Slog.w(TAG, "Local tv device not available");
- invokeCallback(callback, HdmiCec.RESULT_SOURCE_NOT_AVAILABLE);
+ invokeCallback(callback, HdmiControlManager.RESULT_SOURCE_NOT_AVAILABLE);
return;
}
tv.changeSystemAudioMode(enabled, callback);
@@ -823,10 +824,10 @@ public final class HdmiControlService extends SystemService {
if (tv == null) {
return;
}
- int value = enabled ? HdmiCec.ENABLED : HdmiCec.DISABLED;
- mCecController.setOption(HdmiCec.OPTION_CEC_ENABLE, value);
+ int value = enabled ? HdmiTvClient.ENABLED : HdmiTvClient.DISABLED;
+ mCecController.setOption(HdmiTvClient.OPTION_CEC_ENABLE, value);
if (mMhlController != null) {
- mMhlController.setOption(HdmiCec.OPTION_MHL_ENABLE, value);
+ mMhlController.setOption(HdmiTvClient.OPTION_MHL_ENABLE, value);
}
tv.launchRoutingControl(false);
}
@@ -888,15 +889,15 @@ public final class HdmiControlService extends SystemService {
return;
}
switch (key) {
- case HdmiCec.OPTION_CEC_AUTO_WAKEUP:
+ case HdmiTvClient.OPTION_CEC_AUTO_WAKEUP:
mCecController.setOption(key, value);
break;
- case HdmiCec.OPTION_CEC_AUTO_DEVICE_OFF:
+ case HdmiTvClient.OPTION_CEC_AUTO_DEVICE_OFF:
// No need to pass this option to HAL.
- tv().setAutoDeviceOff(value == HdmiCec.ENABLED);
+ tv().setAutoDeviceOff(value == HdmiTvClient.ENABLED);
break;
- case HdmiCec.OPTION_MHL_INPUT_SWITCHING: // Fall through
- case HdmiCec.OPTION_MHL_POWER_CHARGE:
+ case HdmiTvClient.OPTION_MHL_INPUT_SWITCHING: // Fall through
+ case HdmiTvClient.OPTION_MHL_POWER_CHARGE:
if (mMhlController != null) {
mMhlController.setOption(key, value);
}
@@ -924,7 +925,7 @@ public final class HdmiControlService extends SystemService {
HdmiCecLocalDevicePlayback source = playback();
if (source == null) {
Slog.w(TAG, "Local playback device not available");
- invokeCallback(callback, HdmiCec.RESULT_SOURCE_NOT_AVAILABLE);
+ invokeCallback(callback, HdmiControlManager.RESULT_SOURCE_NOT_AVAILABLE);
return;
}
source.oneTouchPlay(callback);
@@ -936,7 +937,7 @@ public final class HdmiControlService extends SystemService {
HdmiCecLocalDevicePlayback source = playback();
if (source == null) {
Slog.w(TAG, "Local playback device not available");
- invokeCallback(callback, HdmiCec.RESULT_SOURCE_NOT_AVAILABLE);
+ invokeCallback(callback, HdmiControlManager.RESULT_SOURCE_NOT_AVAILABLE);
return;
}
source.queryDisplayStatus(callback);
@@ -1095,16 +1096,17 @@ public final class HdmiControlService extends SystemService {
}
private static boolean hasSameTopPort(int path1, int path2) {
- return (path1 & HdmiConstants.ROUTING_PATH_TOP_MASK)
- == (path2 & HdmiConstants.ROUTING_PATH_TOP_MASK);
+ return (path1 & Constants.ROUTING_PATH_TOP_MASK)
+ == (path2 & Constants.ROUTING_PATH_TOP_MASK);
}
private HdmiCecLocalDeviceTv tv() {
- return (HdmiCecLocalDeviceTv) mCecController.getLocalDevice(HdmiCec.DEVICE_TV);
+ return (HdmiCecLocalDeviceTv) mCecController.getLocalDevice(HdmiCecDeviceInfo.DEVICE_TV);
}
private HdmiCecLocalDevicePlayback playback() {
- return (HdmiCecLocalDevicePlayback) mCecController.getLocalDevice(HdmiCec.DEVICE_PLAYBACK);
+ return (HdmiCecLocalDevicePlayback)
+ mCecController.getLocalDevice(HdmiCecDeviceInfo.DEVICE_PLAYBACK);
}
AudioManager getAudioManager() {
@@ -1122,17 +1124,17 @@ public final class HdmiControlService extends SystemService {
}
boolean isPowerOnOrTransient() {
- return mPowerStatus == HdmiCec.POWER_STATUS_ON
- || mPowerStatus == HdmiCec.POWER_STATUS_TRANSIENT_TO_ON;
+ return mPowerStatus == HdmiControlManager.POWER_STATUS_ON
+ || mPowerStatus == HdmiControlManager.POWER_STATUS_TRANSIENT_TO_ON;
}
boolean isPowerStandbyOrTransient() {
- return mPowerStatus == HdmiCec.POWER_STATUS_STANDBY
- || mPowerStatus == HdmiCec.POWER_STATUS_TRANSIENT_TO_STANDBY;
+ return mPowerStatus == HdmiControlManager.POWER_STATUS_STANDBY
+ || mPowerStatus == HdmiControlManager.POWER_STATUS_TRANSIENT_TO_STANDBY;
}
boolean isPowerStandby() {
- return mPowerStatus == HdmiCec.POWER_STATUS_STANDBY;
+ return mPowerStatus == HdmiControlManager.POWER_STATUS_STANDBY;
}
@ServiceThreadOnly
@@ -1157,9 +1159,9 @@ public final class HdmiControlService extends SystemService {
@ServiceThreadOnly
private void onWakeUp() {
assertRunOnServiceThread();
- mPowerStatus = HdmiCec.POWER_STATUS_TRANSIENT_TO_ON;
+ mPowerStatus = HdmiControlManager.POWER_STATUS_TRANSIENT_TO_ON;
if (mCecController != null) {
- mCecController.setOption(HdmiCec.OPTION_CEC_SERVICE_CONTROL, HdmiCec.ENABLED);
+ mCecController.setOption(HdmiTvClient.OPTION_CEC_SERVICE_CONTROL, HdmiTvClient.ENABLED);
initializeLocalDevices(mLocalDevices);
} else {
Slog.i(TAG, "Device does not support HDMI-CEC.");
@@ -1170,7 +1172,7 @@ public final class HdmiControlService extends SystemService {
@ServiceThreadOnly
private void onStandby() {
assertRunOnServiceThread();
- mPowerStatus = HdmiCec.POWER_STATUS_TRANSIENT_TO_STANDBY;
+ mPowerStatus = HdmiControlManager.POWER_STATUS_TRANSIENT_TO_STANDBY;
for (HdmiCecLocalDevice device : mCecController.getLocalDeviceList()) {
device.onTransitionToStandby(mStandbyMessageReceived);
}
@@ -1184,15 +1186,15 @@ public final class HdmiControlService extends SystemService {
@ServiceThreadOnly
void onPendingActionsCleared() {
assertRunOnServiceThread();
- if (mPowerStatus != HdmiCec.POWER_STATUS_TRANSIENT_TO_STANDBY) {
+ if (mPowerStatus != HdmiControlManager.POWER_STATUS_TRANSIENT_TO_STANDBY) {
return;
}
- mPowerStatus = HdmiCec.POWER_STATUS_STANDBY;
+ mPowerStatus = HdmiControlManager.POWER_STATUS_STANDBY;
for (HdmiCecLocalDevice device : mCecController.getLocalDeviceList()) {
device.onStandBy(mStandbyMessageReceived);
}
mStandbyMessageReceived = false;
- mCecController.setOption(HdmiCec.OPTION_CEC_SERVICE_CONTROL, HdmiCec.DISABLED);
+ mCecController.setOption(HdmiTvClient.OPTION_CEC_SERVICE_CONTROL, HdmiTvClient.DISABLED);
}
boolean isProhibitMode() {
diff --git a/services/core/java/com/android/server/hdmi/HdmiUtils.java b/services/core/java/com/android/server/hdmi/HdmiUtils.java
index 51d26efbfae3..3a43f8347b6c 100644
--- a/services/core/java/com/android/server/hdmi/HdmiUtils.java
+++ b/services/core/java/com/android/server/hdmi/HdmiUtils.java
@@ -16,8 +16,7 @@
package com.android.server.hdmi;
-import android.hardware.hdmi.HdmiCec;
-import android.hardware.hdmi.HdmiCecMessage;
+import android.hardware.hdmi.HdmiCecDeviceInfo;
import android.util.Slog;
import android.util.SparseArray;
@@ -30,9 +29,100 @@ import java.util.List;
*/
final class HdmiUtils {
+ private static final int[] ADDRESS_TO_TYPE = {
+ HdmiCecDeviceInfo.DEVICE_TV, // ADDR_TV
+ HdmiCecDeviceInfo.DEVICE_RECORDER, // ADDR_RECORDER_1
+ HdmiCecDeviceInfo.DEVICE_RECORDER, // ADDR_RECORDER_2
+ HdmiCecDeviceInfo.DEVICE_TUNER, // ADDR_TUNER_1
+ HdmiCecDeviceInfo.DEVICE_PLAYBACK, // ADDR_PLAYBACK_1
+ HdmiCecDeviceInfo.DEVICE_AUDIO_SYSTEM, // ADDR_AUDIO_SYSTEM
+ HdmiCecDeviceInfo.DEVICE_TUNER, // ADDR_TUNER_2
+ HdmiCecDeviceInfo.DEVICE_TUNER, // ADDR_TUNER_3
+ HdmiCecDeviceInfo.DEVICE_PLAYBACK, // ADDR_PLAYBACK_2
+ HdmiCecDeviceInfo.DEVICE_RECORDER, // ADDR_RECORDER_3
+ HdmiCecDeviceInfo.DEVICE_TUNER, // ADDR_TUNER_4
+ HdmiCecDeviceInfo.DEVICE_PLAYBACK, // ADDR_PLAYBACK_3
+ HdmiCecDeviceInfo.DEVICE_RESERVED,
+ HdmiCecDeviceInfo.DEVICE_RESERVED,
+ HdmiCecDeviceInfo.DEVICE_TV, // ADDR_SPECIFIC_USE
+ };
+
+ private static final String[] DEFAULT_NAMES = {
+ "TV",
+ "Recorder_1",
+ "Recorder_2",
+ "Tuner_1",
+ "Playback_1",
+ "AudioSystem",
+ "Tuner_2",
+ "Tuner_3",
+ "Playback_2",
+ "Recorder_3",
+ "Tuner_4",
+ "Playback_3",
+ "Reserved_1",
+ "Reserved_2",
+ "Secondary_TV",
+ };
+
private HdmiUtils() { /* cannot be instantiated */ }
/**
+ * 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}).
+ *
+ * @param type device type
+ * @return true if the given type is valid
+ */
+ static boolean isValidType(int type) {
+ return (HdmiCecDeviceInfo.DEVICE_TV <= type && type <= HdmiCecDeviceInfo.DEVICE_AUDIO_SYSTEM)
+ && type != HdmiCecDeviceInfo.DEVICE_RESERVED;
+ }
+
+ /**
+ * Check if the given logical address is valid. A logical address is valid
+ * if it is one allocated for an actual device which allows communication
+ * with other logical devices.
+ *
+ * @param address logical address
+ * @return true if the given address is valid
+ */
+ static boolean isValidAddress(int address) {
+ return (Constants.ADDR_TV <= address && address <= Constants.ADDR_SPECIFIC_USE);
+ }
+
+ /**
+ * Return the device type for the given logical address.
+ *
+ * @param address logical address
+ * @return device type for the given logical address; DEVICE_INACTIVE
+ * if the address is not valid.
+ */
+ static int getTypeFromAddress(int address) {
+ if (isValidAddress(address)) {
+ return ADDRESS_TO_TYPE[address];
+ }
+ return HdmiCecDeviceInfo.DEVICE_INACTIVE;
+ }
+
+ /**
+ * Return the default device name for a logical address. This is the name
+ * by which the logical device is known to others until a name is
+ * set explicitly using HdmiCecService.setOsdName.
+ *
+ * @param address logical address
+ * @return default device name; empty string if the address is not valid
+ */
+ static String getDefaultDeviceName(int address) {
+ if (isValidAddress(address)) {
+ return DEFAULT_NAMES[address];
+ }
+ return "";
+ }
+
+ /**
* Verify if the given address is for the given device type. If not it will throw
* {@link IllegalArgumentException}.
*
@@ -41,7 +131,7 @@ final class HdmiUtils {
* @throw IllegalArgumentException
*/
static void verifyAddressType(int logicalAddress, int deviceType) {
- int actualDeviceType = HdmiCec.getTypeFromAddress(logicalAddress);
+ int actualDeviceType = getTypeFromAddress(logicalAddress);
if (actualDeviceType != deviceType) {
throw new IllegalArgumentException("Device type missmatch:[Expected:" + deviceType
+ ", Actual:" + actualDeviceType);
@@ -74,7 +164,7 @@ final class HdmiUtils {
static boolean parseCommandParamSystemAudioStatus(HdmiCecMessage cmd) {
// TODO: Handle the exception when the length is wrong.
return cmd.getParams().length > 0
- && cmd.getParams()[0] == HdmiConstants.SYSTEM_AUDIO_STATUS_ON;
+ && cmd.getParams()[0] == Constants.SYSTEM_AUDIO_STATUS_ON;
}
/**
@@ -192,5 +282,4 @@ final class HdmiUtils {
}
return true;
}
-
}
diff --git a/services/core/java/com/android/server/hdmi/HotplugDetectionAction.java b/services/core/java/com/android/server/hdmi/HotplugDetectionAction.java
index 8ee92f356368..c2999810b522 100644
--- a/services/core/java/com/android/server/hdmi/HotplugDetectionAction.java
+++ b/services/core/java/com/android/server/hdmi/HotplugDetectionAction.java
@@ -16,9 +16,7 @@
package com.android.server.hdmi;
-import android.hardware.hdmi.HdmiCec;
import android.hardware.hdmi.HdmiCecDeviceInfo;
-import android.hardware.hdmi.HdmiCecMessage;
import android.util.Slog;
import com.android.server.hdmi.HdmiControlService.DevicePollingCallback;
@@ -46,7 +44,8 @@ final class HotplugDetectionAction extends FeatureAction {
private static final int STATE_WAIT_FOR_NEXT_POLLING = 1;
// All addresses except for broadcast (unregistered address).
- private static final int NUM_OF_ADDRESS = HdmiCec.ADDR_SPECIFIC_USE - HdmiCec.ADDR_TV + 1;
+ private static final int NUM_OF_ADDRESS = Constants.ADDR_SPECIFIC_USE
+ - Constants.ADDR_TV + 1;
private int mTimeoutCount = 0;
@@ -126,8 +125,8 @@ final class HotplugDetectionAction extends FeatureAction {
public void onPollingFinished(List<Integer> ackedAddress) {
checkHotplug(ackedAddress, false);
}
- }, HdmiConstants.POLL_ITERATION_IN_ORDER
- | HdmiConstants.POLL_STRATEGY_REMOTES_DEVICES, POLL_RETRY_COUNT);
+ }, Constants.POLL_ITERATION_IN_ORDER
+ | Constants.POLL_STRATEGY_REMOTES_DEVICES, POLL_RETRY_COUNT);
}
private void pollAudioSystem() {
@@ -138,8 +137,8 @@ final class HotplugDetectionAction extends FeatureAction {
public void onPollingFinished(List<Integer> ackedAddress) {
checkHotplug(ackedAddress, true);
}
- }, HdmiConstants.POLL_ITERATION_IN_ORDER
- | HdmiConstants.POLL_STRATEGY_SYSTEM_AUDIO, POLL_RETRY_COUNT);
+ }, Constants.POLL_ITERATION_IN_ORDER
+ | Constants.POLL_STRATEGY_SYSTEM_AUDIO, POLL_RETRY_COUNT);
}
private void checkHotplug(List<Integer> ackedAddress, boolean audioOnly) {
@@ -167,7 +166,7 @@ final class HotplugDetectionAction extends FeatureAction {
BitSet set = new BitSet(NUM_OF_ADDRESS);
for (HdmiCecDeviceInfo info : infoList) {
if (audioOnly) {
- if (info.getDeviceType() == HdmiCec.DEVICE_AUDIO_SYSTEM) {
+ if (info.getDeviceType() == HdmiCecDeviceInfo.DEVICE_AUDIO_SYSTEM) {
set.set(info.getLogicalAddress());
}
} else {
@@ -233,7 +232,7 @@ final class HotplugDetectionAction extends FeatureAction {
}
private void mayDisableSystemAudioAndARC(int address) {
- if (HdmiCec.getTypeFromAddress(address) != HdmiCec.DEVICE_AUDIO_SYSTEM) {
+ if (HdmiUtils.getTypeFromAddress(address) != HdmiCecDeviceInfo.DEVICE_AUDIO_SYSTEM) {
return;
}
diff --git a/services/core/java/com/android/server/hdmi/NewDeviceAction.java b/services/core/java/com/android/server/hdmi/NewDeviceAction.java
index 5cb6e9f6e153..9f7bb6071d40 100644
--- a/services/core/java/com/android/server/hdmi/NewDeviceAction.java
+++ b/services/core/java/com/android/server/hdmi/NewDeviceAction.java
@@ -15,9 +15,7 @@
*/
package com.android.server.hdmi;
-import android.hardware.hdmi.HdmiCec;
import android.hardware.hdmi.HdmiCecDeviceInfo;
-import android.hardware.hdmi.HdmiCecMessage;
import android.util.Slog;
import java.io.UnsupportedEncodingException;
@@ -65,12 +63,13 @@ final class NewDeviceAction extends FeatureAction {
super(source);
mDeviceLogicalAddress = deviceLogicalAddress;
mDevicePhysicalAddress = devicePhysicalAddress;
- mVendorId = HdmiCec.UNKNOWN_VENDOR_ID;
+ mVendorId = Constants.UNKNOWN_VENDOR_ID;
}
@Override
public boolean start() {
- if (HdmiCec.getTypeFromAddress(getSourceAddress()) == HdmiCec.DEVICE_AUDIO_SYSTEM) {
+ if (HdmiUtils.getTypeFromAddress(getSourceAddress())
+ == HdmiCecDeviceInfo.DEVICE_AUDIO_SYSTEM) {
if (tv().getAvrDeviceInfo() == null) {
// TODO: Start system audio initiation action
}
@@ -82,7 +81,7 @@ final class NewDeviceAction extends FeatureAction {
}
mState = STATE_WAITING_FOR_SET_OSD_NAME;
- if (mayProcessCommandIfCached(mDeviceLogicalAddress, HdmiCec.MESSAGE_SET_OSD_NAME)) {
+ if (mayProcessCommandIfCached(mDeviceLogicalAddress, Constants.MESSAGE_SET_OSD_NAME)) {
return true;
}
@@ -111,7 +110,7 @@ final class NewDeviceAction extends FeatureAction {
}
if (mState == STATE_WAITING_FOR_SET_OSD_NAME) {
- if (opcode == HdmiCec.MESSAGE_SET_OSD_NAME) {
+ if (opcode == Constants.MESSAGE_SET_OSD_NAME) {
try {
mDisplayName = new String(params, "US-ASCII");
} catch (UnsupportedEncodingException e) {
@@ -119,15 +118,15 @@ final class NewDeviceAction extends FeatureAction {
}
requestVendorId();
return true;
- } else if (opcode == HdmiCec.MESSAGE_FEATURE_ABORT) {
+ } else if (opcode == Constants.MESSAGE_FEATURE_ABORT) {
int requestOpcode = params[1] & 0xFF;
- if (requestOpcode == HdmiCec.MESSAGE_SET_OSD_NAME) {
+ if (requestOpcode == Constants.MESSAGE_SET_OSD_NAME) {
requestVendorId();
return true;
}
}
} else if (mState == STATE_WAITING_FOR_DEVICE_VENDOR_ID) {
- if (opcode == HdmiCec.MESSAGE_DEVICE_VENDOR_ID) {
+ if (opcode == Constants.MESSAGE_DEVICE_VENDOR_ID) {
if (params.length == 3) {
mVendorId = HdmiUtils.threeBytesToInt(params);
} else {
@@ -136,9 +135,9 @@ final class NewDeviceAction extends FeatureAction {
addDeviceInfo();
finish();
return true;
- } else if (opcode == HdmiCec.MESSAGE_FEATURE_ABORT) {
+ } else if (opcode == Constants.MESSAGE_FEATURE_ABORT) {
int requestOpcode = params[1] & 0xFF;
- if (requestOpcode == HdmiCec.MESSAGE_DEVICE_VENDOR_ID) {
+ if (requestOpcode == Constants.MESSAGE_DEVICE_VENDOR_ID) {
addDeviceInfo();
finish();
return true;
@@ -160,7 +159,8 @@ final class NewDeviceAction extends FeatureAction {
// At first, transit to waiting status for <Device Vendor Id>.
mState = STATE_WAITING_FOR_DEVICE_VENDOR_ID;
// If the message is already in cache, process it.
- if (mayProcessCommandIfCached(mDeviceLogicalAddress, HdmiCec.MESSAGE_DEVICE_VENDOR_ID)) {
+ if (mayProcessCommandIfCached(mDeviceLogicalAddress,
+ Constants.MESSAGE_DEVICE_VENDOR_ID)) {
return;
}
sendCommand(HdmiCecMessageBuilder.buildGiveDeviceVendorIdCommand(getSourceAddress(),
@@ -170,11 +170,11 @@ final class NewDeviceAction extends FeatureAction {
private void addDeviceInfo() {
if (mDisplayName == null) {
- mDisplayName = HdmiCec.getDefaultDeviceName(mDeviceLogicalAddress);
+ mDisplayName = HdmiUtils.getDefaultDeviceName(mDeviceLogicalAddress);
}
tv().addCecDevice(new HdmiCecDeviceInfo(
mDeviceLogicalAddress, mDevicePhysicalAddress,
- HdmiCec.getTypeFromAddress(mDeviceLogicalAddress),
+ HdmiUtils.getTypeFromAddress(mDeviceLogicalAddress),
mVendorId, mDisplayName));
}
diff --git a/services/core/java/com/android/server/hdmi/OneTouchPlayAction.java b/services/core/java/com/android/server/hdmi/OneTouchPlayAction.java
index ebb906a5c216..40ce7ede178b 100644
--- a/services/core/java/com/android/server/hdmi/OneTouchPlayAction.java
+++ b/services/core/java/com/android/server/hdmi/OneTouchPlayAction.java
@@ -15,8 +15,6 @@
*/
package com.android.server.hdmi;
-import android.hardware.hdmi.HdmiCec;
-import android.hardware.hdmi.HdmiCecMessage;
import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.IHdmiControlCallback;
import android.os.RemoteException;
@@ -98,11 +96,11 @@ final class OneTouchPlayAction extends FeatureAction {
if (mState != STATE_WAITING_FOR_REPORT_POWER_STATUS) {
return false;
}
- if (cmd.getOpcode() == HdmiCec.MESSAGE_REPORT_POWER_STATUS) {
+ if (cmd.getOpcode() == Constants.MESSAGE_REPORT_POWER_STATUS) {
int status = cmd.getParams()[0];
- if (status == HdmiCec.POWER_STATUS_ON) {
+ if (status == HdmiControlManager.POWER_STATUS_ON) {
broadcastActiveSource();
- invokeCallback(HdmiCec.RESULT_SUCCESS);
+ invokeCallback(HdmiControlManager.RESULT_SUCCESS);
finish();
}
return true;
@@ -121,7 +119,7 @@ final class OneTouchPlayAction extends FeatureAction {
addTimer(mState, FeatureAction.TIMEOUT_MS);
} else {
// Couldn't wake up the TV for whatever reason. Report failure.
- invokeCallback(HdmiCec.RESULT_TIMEOUT);
+ invokeCallback(HdmiControlManager.RESULT_TIMEOUT);
finish();
}
}
diff --git a/services/core/java/com/android/server/hdmi/RequestArcAction.java b/services/core/java/com/android/server/hdmi/RequestArcAction.java
index a2e08f1c7366..cf446070d858 100644
--- a/services/core/java/com/android/server/hdmi/RequestArcAction.java
+++ b/services/core/java/com/android/server/hdmi/RequestArcAction.java
@@ -16,8 +16,8 @@
package com.android.server.hdmi;
-import android.hardware.hdmi.HdmiCec;
-import android.hardware.hdmi.HdmiCecMessage;
+import android.hardware.hdmi.HdmiCecDeviceInfo;
+
import android.util.Slog;
/**
@@ -42,8 +42,8 @@ abstract class RequestArcAction extends FeatureAction {
*/
RequestArcAction(HdmiCecLocalDevice source, int avrAddress) {
super(source);
- HdmiUtils.verifyAddressType(getSourceAddress(), HdmiCec.DEVICE_TV);
- HdmiUtils.verifyAddressType(avrAddress, HdmiCec.DEVICE_AUDIO_SYSTEM);
+ HdmiUtils.verifyAddressType(getSourceAddress(), HdmiCecDeviceInfo.DEVICE_TV);
+ HdmiUtils.verifyAddressType(avrAddress, HdmiCecDeviceInfo.DEVICE_AUDIO_SYSTEM);
mAvrAddress = avrAddress;
}
@@ -58,7 +58,7 @@ abstract class RequestArcAction extends FeatureAction {
// Handles only <Feature Abort> here and, both <Initiate ARC> and <Terminate ARC>
// are handled in HdmiControlService itself because both can be
// received wihtout <Request ARC Initiation> or <Request ARC Termination>.
- case HdmiCec.MESSAGE_FEATURE_ABORT:
+ case Constants.MESSAGE_FEATURE_ABORT:
disableArcTransmission();
finish();
return true;
diff --git a/services/core/java/com/android/server/hdmi/RequestArcInitiationAction.java b/services/core/java/com/android/server/hdmi/RequestArcInitiationAction.java
index 55fb65ae588d..692f9613260d 100644
--- a/services/core/java/com/android/server/hdmi/RequestArcInitiationAction.java
+++ b/services/core/java/com/android/server/hdmi/RequestArcInitiationAction.java
@@ -16,8 +16,6 @@
package com.android.server.hdmi;
-import android.hardware.hdmi.HdmiCecMessage;
-
/**
* Feature action that handles ARC action initiated by TV devices.
*
@@ -42,7 +40,7 @@ final class RequestArcInitiationAction extends RequestArcAction {
sendCommand(command, new HdmiControlService.SendMessageCallback() {
@Override
public void onSendCompleted(int error) {
- if (error == HdmiConstants.SEND_RESULT_SUCCESS) {
+ if (error == Constants.SEND_RESULT_SUCCESS) {
mState = STATE_WATING_FOR_REQUEST_ARC_REQUEST_RESPONSE;
addTimer(mState, TIMEOUT_MS);
} else {
diff --git a/services/core/java/com/android/server/hdmi/RequestArcTerminationAction.java b/services/core/java/com/android/server/hdmi/RequestArcTerminationAction.java
index 62ca8f69cbfd..31cbe32ac493 100644
--- a/services/core/java/com/android/server/hdmi/RequestArcTerminationAction.java
+++ b/services/core/java/com/android/server/hdmi/RequestArcTerminationAction.java
@@ -16,8 +16,6 @@
package com.android.server.hdmi;
-import android.hardware.hdmi.HdmiCecMessage;
-
/**
* Feature action to handle <Request ARC Termination>.
*
@@ -42,7 +40,7 @@ final class RequestArcTerminationAction extends RequestArcAction {
sendCommand(command, new HdmiControlService.SendMessageCallback() {
@Override
public void onSendCompleted(int error) {
- if (error == HdmiConstants.SEND_RESULT_SUCCESS) {
+ if (error == Constants.SEND_RESULT_SUCCESS) {
mState = STATE_WATING_FOR_REQUEST_ARC_REQUEST_RESPONSE;
addTimer(mState, TIMEOUT_MS);
} else {
diff --git a/services/core/java/com/android/server/hdmi/RoutingControlAction.java b/services/core/java/com/android/server/hdmi/RoutingControlAction.java
index 04e5cac403ce..46dc45311594 100644
--- a/services/core/java/com/android/server/hdmi/RoutingControlAction.java
+++ b/services/core/java/com/android/server/hdmi/RoutingControlAction.java
@@ -17,9 +17,8 @@
package com.android.server.hdmi;
import android.annotation.Nullable;
-import android.hardware.hdmi.HdmiCec;
import android.hardware.hdmi.HdmiCecDeviceInfo;
-import android.hardware.hdmi.HdmiCecMessage;
+import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.IHdmiControlCallback;
import android.os.RemoteException;
import android.util.Slog;
@@ -86,7 +85,7 @@ final class RoutingControlAction extends FeatureAction {
int opcode = cmd.getOpcode();
byte[] params = cmd.getParams();
if (mState == STATE_WAIT_FOR_ROUTING_INFORMATION
- && opcode == HdmiCec.MESSAGE_ROUTING_INFORMATION) {
+ && opcode == Constants.MESSAGE_ROUTING_INFORMATION) {
// Keep updating the physicalAddress as we receive <Routing Information>.
// If the routing path doesn't belong to the currently active one, we should
// ignore it since it might have come from other routing change sequence.
@@ -100,7 +99,7 @@ final class RoutingControlAction extends FeatureAction {
addTimer(mState, TIMEOUT_ROUTING_INFORMATION_MS);
return true;
} else if (mState == STATE_WAIT_FOR_REPORT_POWER_STATUS
- && opcode == HdmiCec.MESSAGE_REPORT_POWER_STATUS) {
+ && opcode == Constants.MESSAGE_REPORT_POWER_STATUS) {
handleReportPowerStatus(cmd.getParams()[0]);
return true;
}
@@ -115,7 +114,7 @@ final class RoutingControlAction extends FeatureAction {
tv().updateActivePortId(tv().pathToPortId(mCurrentRoutingPath));
}
}
- invokeCallback(HdmiCec.RESULT_SUCCESS);
+ invokeCallback(HdmiControlManager.RESULT_SUCCESS);
finish();
}
@@ -124,7 +123,8 @@ final class RoutingControlAction extends FeatureAction {
}
private static boolean isPowerOnOrTransient(int status) {
- return status == HdmiCec.POWER_STATUS_ON || status == HdmiCec.POWER_STATUS_TRANSIENT_TO_ON;
+ return status == HdmiControlManager.POWER_STATUS_ON
+ || status == HdmiControlManager.POWER_STATUS_TRANSIENT_TO_ON;
}
private void sendSetStreamPath() {
@@ -146,7 +146,8 @@ final class RoutingControlAction extends FeatureAction {
queryDevicePowerStatus(deviceLogicalAddress, new SendMessageCallback() {
@Override
public void onSendCompleted(int error) {
- handlDevicePowerStatusAckResult(error == HdmiCec.RESULT_SUCCESS);
+ handlDevicePowerStatusAckResult(
+ error == HdmiControlManager.RESULT_SUCCESS);
}
});
} else {
@@ -158,7 +159,7 @@ final class RoutingControlAction extends FeatureAction {
tv().updateActivePortId(tv().pathToPortId(mCurrentRoutingPath));
sendSetStreamPath();
}
- invokeCallback(HdmiCec.RESULT_SUCCESS);
+ invokeCallback(HdmiControlManager.RESULT_SUCCESS);
finish();
return;
}
diff --git a/services/core/java/com/android/server/hdmi/SendKeyAction.java b/services/core/java/com/android/server/hdmi/SendKeyAction.java
index a525cda78fb8..814e43e9ea66 100644
--- a/services/core/java/com/android/server/hdmi/SendKeyAction.java
+++ b/services/core/java/com/android/server/hdmi/SendKeyAction.java
@@ -15,9 +15,8 @@
*/
package com.android.server.hdmi;
-import static com.android.server.hdmi.HdmiConstants.IRT_MS;
+import static com.android.server.hdmi.Constants.IRT_MS;
-import android.hardware.hdmi.HdmiCecMessage;
import android.util.Slog;
import android.view.KeyEvent;
diff --git a/services/core/java/com/android/server/hdmi/SetArcTransmissionStateAction.java b/services/core/java/com/android/server/hdmi/SetArcTransmissionStateAction.java
index cdedd6b3bf42..15375f373720 100644
--- a/services/core/java/com/android/server/hdmi/SetArcTransmissionStateAction.java
+++ b/services/core/java/com/android/server/hdmi/SetArcTransmissionStateAction.java
@@ -16,8 +16,8 @@
package com.android.server.hdmi;
-import android.hardware.hdmi.HdmiCec;
-import android.hardware.hdmi.HdmiCecMessage;
+import android.hardware.hdmi.HdmiCecDeviceInfo;
+
import android.util.Slog;
/**
@@ -45,8 +45,8 @@ final class SetArcTransmissionStateAction extends FeatureAction {
SetArcTransmissionStateAction(HdmiCecLocalDevice source, int avrAddress,
boolean enabled) {
super(source);
- HdmiUtils.verifyAddressType(getSourceAddress(), HdmiCec.DEVICE_TV);
- HdmiUtils.verifyAddressType(avrAddress, HdmiCec.DEVICE_AUDIO_SYSTEM);
+ HdmiUtils.verifyAddressType(getSourceAddress(), HdmiCecDeviceInfo.DEVICE_TV);
+ HdmiUtils.verifyAddressType(avrAddress, HdmiCecDeviceInfo.DEVICE_AUDIO_SYSTEM);
mAvrAddress = avrAddress;
mEnabled = enabled;
}
@@ -68,7 +68,7 @@ final class SetArcTransmissionStateAction extends FeatureAction {
sendCommand(command, new HdmiControlService.SendMessageCallback() {
@Override
public void onSendCompleted(int error) {
- if (error == HdmiConstants.SEND_RESULT_SUCCESS) {
+ if (error == Constants.SEND_RESULT_SUCCESS) {
// Enable ARC status immediately after sending <Report Arc Initiated>.
// If AVR responds with <Feature Abort>, disable ARC status again.
// This is different from spec that says that turns ARC status to
@@ -110,7 +110,7 @@ final class SetArcTransmissionStateAction extends FeatureAction {
}
int opcode = cmd.getOpcode();
- if (opcode == HdmiCec.MESSAGE_FEATURE_ABORT) {
+ if (opcode == Constants.MESSAGE_FEATURE_ABORT) {
setArcStatus(false);
}
finish();
diff --git a/services/core/java/com/android/server/hdmi/SystemAudioAction.java b/services/core/java/com/android/server/hdmi/SystemAudioAction.java
index 959a38e83ee9..dab8ae9fe6ee 100644
--- a/services/core/java/com/android/server/hdmi/SystemAudioAction.java
+++ b/services/core/java/com/android/server/hdmi/SystemAudioAction.java
@@ -17,8 +17,8 @@
package com.android.server.hdmi;
import android.annotation.Nullable;
-import android.hardware.hdmi.HdmiCec;
-import android.hardware.hdmi.HdmiCecMessage;
+import android.hardware.hdmi.HdmiCecDeviceInfo;
+import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.IHdmiControlCallback;
import android.os.RemoteException;
import android.util.Slog;
@@ -59,7 +59,7 @@ abstract class SystemAudioAction extends FeatureAction {
SystemAudioAction(HdmiCecLocalDevice source, int avrAddress, boolean targetStatus,
IHdmiControlCallback callback) {
super(source);
- HdmiUtils.verifyAddressType(avrAddress, HdmiCec.DEVICE_AUDIO_SYSTEM);
+ HdmiUtils.verifyAddressType(avrAddress, HdmiCecDeviceInfo.DEVICE_AUDIO_SYSTEM);
mAvrLogicalAddress = avrAddress;
mTargetAudioStatus = targetStatus;
mCallback = callback;
@@ -73,12 +73,12 @@ abstract class SystemAudioAction extends FeatureAction {
sendCommand(command, new HdmiControlService.SendMessageCallback() {
@Override
public void onSendCompleted(int error) {
- if (error == HdmiConstants.SEND_RESULT_SUCCESS) {
+ if (error == Constants.SEND_RESULT_SUCCESS) {
mState = STATE_WAIT_FOR_SET_SYSTEM_AUDIO_MODE;
addTimer(mState, mTargetAudioStatus ? ON_TIMEOUT_MS : OFF_TIMEOUT_MS);
} else {
setSystemAudioMode(false);
- finishWithCallback(HdmiCec.RESULT_EXCEPTION);
+ finishWithCallback(HdmiControlManager.RESULT_EXCEPTION);
}
}
});
@@ -88,7 +88,7 @@ abstract class SystemAudioAction extends FeatureAction {
if (!mTargetAudioStatus // Don't retry for Off case.
|| mSendRetryCount++ >= MAX_SEND_RETRY_COUNT) {
setSystemAudioMode(false);
- finishWithCallback(HdmiCec.RESULT_TIMEOUT);
+ finishWithCallback(HdmiControlManager.RESULT_TIMEOUT);
return;
}
sendSystemAudioModeRequest();
@@ -103,7 +103,7 @@ abstract class SystemAudioAction extends FeatureAction {
switch (mState) {
case STATE_WAIT_FOR_SET_SYSTEM_AUDIO_MODE:
// TODO: Handle <FeatureAbort> of <SystemAudioModeRequest>
- if (cmd.getOpcode() != HdmiCec.MESSAGE_SET_SYSTEM_AUDIO_MODE
+ if (cmd.getOpcode() != Constants.MESSAGE_SET_SYSTEM_AUDIO_MODE
|| !HdmiUtils.checkCommandSource(cmd, mAvrLogicalAddress, TAG)) {
return false;
}
@@ -116,7 +116,7 @@ abstract class SystemAudioAction extends FeatureAction {
// Unexpected response, consider the request is newly initiated by AVR.
// To return 'false' will initiate new SystemAudioActionFromAvr by the control
// service.
- finishWithCallback(HdmiCec.RESULT_EXCEPTION);
+ finishWithCallback(HdmiControlManager.RESULT_EXCEPTION);
return false;
}
default:
diff --git a/services/core/java/com/android/server/hdmi/SystemAudioActionFromAvr.java b/services/core/java/com/android/server/hdmi/SystemAudioActionFromAvr.java
index ef7e837a0cc2..a56507762321 100644
--- a/services/core/java/com/android/server/hdmi/SystemAudioActionFromAvr.java
+++ b/services/core/java/com/android/server/hdmi/SystemAudioActionFromAvr.java
@@ -16,7 +16,8 @@
package com.android.server.hdmi;
-import android.hardware.hdmi.HdmiCec;
+import android.hardware.hdmi.HdmiCecDeviceInfo;
+import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.IHdmiControlCallback;
/**
@@ -36,7 +37,7 @@ final class SystemAudioActionFromAvr extends SystemAudioAction {
SystemAudioActionFromAvr(HdmiCecLocalDevice source, int avrAddress,
boolean targetStatus, IHdmiControlCallback callback) {
super(source, avrAddress, targetStatus, callback);
- HdmiUtils.verifyAddressType(getSourceAddress(), HdmiCec.DEVICE_TV);
+ HdmiUtils.verifyAddressType(getSourceAddress(), HdmiCecDeviceInfo.DEVICE_TV);
}
@Override
@@ -48,13 +49,13 @@ final class SystemAudioActionFromAvr extends SystemAudioAction {
private void handleSystemAudioActionFromAvr() {
if (mTargetAudioStatus == tv().getSystemAudioMode()) {
- finishWithCallback(HdmiCec.RESULT_SUCCESS);
+ finishWithCallback(HdmiControlManager.RESULT_SUCCESS);
return;
}
if (tv().isProhibitMode()) {
sendCommand(HdmiCecMessageBuilder.buildFeatureAbortCommand(
getSourceAddress(), mAvrLogicalAddress,
- HdmiCec.MESSAGE_SET_SYSTEM_AUDIO_MODE, HdmiConstants.ABORT_REFUSED));
+ Constants.MESSAGE_SET_SYSTEM_AUDIO_MODE, Constants.ABORT_REFUSED));
mTargetAudioStatus = false;
sendSystemAudioModeRequest();
return;
@@ -67,7 +68,7 @@ final class SystemAudioActionFromAvr extends SystemAudioAction {
startAudioStatusAction();
} else {
setSystemAudioMode(false);
- finishWithCallback(HdmiCec.RESULT_SUCCESS);
+ finishWithCallback(HdmiControlManager.RESULT_SUCCESS);
}
}
}
diff --git a/services/core/java/com/android/server/hdmi/SystemAudioActionFromTv.java b/services/core/java/com/android/server/hdmi/SystemAudioActionFromTv.java
index 2d8f3fcc832d..2146c4ef3e49 100644
--- a/services/core/java/com/android/server/hdmi/SystemAudioActionFromTv.java
+++ b/services/core/java/com/android/server/hdmi/SystemAudioActionFromTv.java
@@ -16,7 +16,7 @@
package com.android.server.hdmi;
-import android.hardware.hdmi.HdmiCec;
+import android.hardware.hdmi.HdmiCecDeviceInfo;
import android.hardware.hdmi.IHdmiControlCallback;
@@ -36,7 +36,7 @@ final class SystemAudioActionFromTv extends SystemAudioAction {
SystemAudioActionFromTv(HdmiCecLocalDevice sourceAddress, int avrAddress,
boolean targetStatus, IHdmiControlCallback callback) {
super(sourceAddress, avrAddress, targetStatus, callback);
- HdmiUtils.verifyAddressType(getSourceAddress(), HdmiCec.DEVICE_TV);
+ HdmiUtils.verifyAddressType(getSourceAddress(), HdmiCecDeviceInfo.DEVICE_TV);
}
@Override
diff --git a/services/core/java/com/android/server/hdmi/SystemAudioAutoInitiationAction.java b/services/core/java/com/android/server/hdmi/SystemAudioAutoInitiationAction.java
index 6f4164baf184..a2b4bebcf3cf 100644
--- a/services/core/java/com/android/server/hdmi/SystemAudioAutoInitiationAction.java
+++ b/services/core/java/com/android/server/hdmi/SystemAudioAutoInitiationAction.java
@@ -16,9 +16,6 @@
package com.android.server.hdmi;
-import android.hardware.hdmi.HdmiCec;
-import android.hardware.hdmi.HdmiCecMessage;
-
import com.android.server.hdmi.HdmiControlService.SendMessageCallback;
/**
@@ -50,7 +47,7 @@ final class SystemAudioAutoInitiationAction extends FeatureAction {
mAvrAddress), new SendMessageCallback() {
@Override
public void onSendCompleted(int error) {
- if (error != HdmiConstants.SEND_RESULT_SUCCESS) {
+ if (error != Constants.SEND_RESULT_SUCCESS) {
tv().setSystemAudioMode(false);
finish();
}
@@ -65,7 +62,7 @@ final class SystemAudioAutoInitiationAction extends FeatureAction {
}
switch (cmd.getOpcode()) {
- case HdmiCec.MESSAGE_SYSTEM_AUDIO_MODE_STATUS:
+ case Constants.MESSAGE_SYSTEM_AUDIO_MODE_STATUS:
handleSystemAudioModeStatusMessage();
return true;
default:
diff --git a/services/core/java/com/android/server/hdmi/SystemAudioStatusAction.java b/services/core/java/com/android/server/hdmi/SystemAudioStatusAction.java
index fb616749a2a5..941033f748e3 100644
--- a/services/core/java/com/android/server/hdmi/SystemAudioStatusAction.java
+++ b/services/core/java/com/android/server/hdmi/SystemAudioStatusAction.java
@@ -17,8 +17,7 @@
package com.android.server.hdmi;
import android.annotation.Nullable;
-import android.hardware.hdmi.HdmiCec;
-import android.hardware.hdmi.HdmiCecMessage;
+import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.IHdmiControlCallback;
import android.os.RemoteException;
import android.util.Slog;
@@ -57,7 +56,7 @@ final class SystemAudioStatusAction extends FeatureAction {
new SendMessageCallback() {
@Override
public void onSendCompleted(int error) {
- if (error != HdmiConstants.SEND_RESULT_SUCCESS) {
+ if (error != Constants.SEND_RESULT_SUCCESS) {
handleSendGiveAudioStatusFailure();
}
}
@@ -67,7 +66,7 @@ final class SystemAudioStatusAction extends FeatureAction {
private void handleSendGiveAudioStatusFailure() {
// Inform to all application that the audio status (volumn, mute) of
// the audio amplifier is unknown.
- tv().setAudioStatus(false, HdmiConstants.UNKNOWN_VOLUME);
+ tv().setAudioStatus(false, Constants.UNKNOWN_VOLUME);
int uiCommand = tv().getSystemAudioMode()
? HdmiCecKeycode.CEC_KEYCODE_RESTORE_VOLUME_FUNCTION // SystemAudioMode: ON
@@ -75,7 +74,7 @@ final class SystemAudioStatusAction extends FeatureAction {
sendUserControlPressedAndReleased(mAvrAddress, uiCommand);
// Still return SUCCESS to callback.
- finishWithCallback(HdmiCec.RESULT_SUCCESS);
+ finishWithCallback(HdmiControlManager.RESULT_SUCCESS);
}
@Override
@@ -85,7 +84,7 @@ final class SystemAudioStatusAction extends FeatureAction {
}
switch (cmd.getOpcode()) {
- case HdmiCec.MESSAGE_REPORT_AUDIO_STATUS:
+ case Constants.MESSAGE_REPORT_AUDIO_STATUS:
handleReportAudioStatus(cmd);
return true;
}
@@ -104,7 +103,7 @@ final class SystemAudioStatusAction extends FeatureAction {
// Toggle AVR's mute status to match with the system audio status.
sendUserControlPressedAndReleased(mAvrAddress, HdmiCecKeycode.CEC_KEYCODE_MUTE);
}
- finishWithCallback(HdmiCec.RESULT_SUCCESS);
+ finishWithCallback(HdmiControlManager.RESULT_SUCCESS);
} else {
Slog.e(TAG, "Invalid <Report Audio Status> message:" + cmd);
handleSendGiveAudioStatusFailure();
diff --git a/services/core/java/com/android/server/hdmi/VendorSpecificAction.java b/services/core/java/com/android/server/hdmi/VendorSpecificAction.java
index c954b5020ee5..ff21a576aec5 100644
--- a/services/core/java/com/android/server/hdmi/VendorSpecificAction.java
+++ b/services/core/java/com/android/server/hdmi/VendorSpecificAction.java
@@ -1,7 +1,5 @@
package com.android.server.hdmi;
-import android.hardware.hdmi.HdmiCecMessage;
-
/**
* Handles vendor-specific commands that require a sequence of command exchange,
* or need to manage some states to complete the processing.
diff --git a/services/core/java/com/android/server/hdmi/VolumeControlAction.java b/services/core/java/com/android/server/hdmi/VolumeControlAction.java
index 350ce36bfa08..3701f885790d 100644
--- a/services/core/java/com/android/server/hdmi/VolumeControlAction.java
+++ b/services/core/java/com/android/server/hdmi/VolumeControlAction.java
@@ -16,10 +16,8 @@
package com.android.server.hdmi;
-import static com.android.server.hdmi.HdmiConstants.IRT_MS;
+import static com.android.server.hdmi.Constants.IRT_MS;
-import android.hardware.hdmi.HdmiCec;
-import android.hardware.hdmi.HdmiCecMessage;
import android.util.Slog;
import com.android.internal.util.Preconditions;
@@ -156,10 +154,10 @@ final class VolumeControlAction extends FeatureAction {
}
switch (cmd.getOpcode()) {
- case HdmiCec.MESSAGE_REPORT_AUDIO_STATUS:
+ case Constants.MESSAGE_REPORT_AUDIO_STATUS:
handleReportAudioStatus(cmd);
return true;
- case HdmiCec.MESSAGE_FEATURE_ABORT:
+ case Constants.MESSAGE_FEATURE_ABORT:
// TODO: handle feature abort.
finish();
return true;