161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang/*
261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang * Copyright (C) 2014 The Android Open Source Project
361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang *
461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang * Licensed under the Apache License, Version 2.0 (the "License");
561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang * you may not use this file except in compliance with the License.
661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang * You may obtain a copy of the License at
761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang *
861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang *      http://www.apache.org/licenses/LICENSE-2.0
961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang *
1061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang * Unless required by applicable law or agreed to in writing, software
1161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang * distributed under the License is distributed on an "AS IS" BASIS,
1261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang * See the License for the specific language governing permissions and
1461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang * limitations under the License.
1561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang */
1661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
1761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jangpackage android.hardware.hdmi;
1861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
1961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jangimport android.annotation.SystemApi;
2061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jangimport android.os.Parcel;
2161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jangimport android.os.Parcelable;
2261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
2361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang/**
2461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang * A class to encapsulate device information for HDMI devices including CEC and MHL. In terms of
2561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang * CEC, this container includes basic information such as logical address, physical address and
2661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang * device type, and additional information like vendor id and osd name. In terms of MHL device, this
2761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang * container includes adopter id and device type. Otherwise, it keeps the information of other type
2861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang * devices for which only port ID, physical address are meaningful.
2961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang *
3061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang * @hide
3161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang */
3261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang@SystemApi
3361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jangpublic class HdmiDeviceInfo implements Parcelable {
3461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
3561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /** TV device type. */
3661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public static final int DEVICE_TV = 0;
3761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
3861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /** Recording device type. */
3961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public static final int DEVICE_RECORDER = 1;
4061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
4161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /** Device type reserved for future usage. */
4261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public static final int DEVICE_RESERVED = 2;
4361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
4461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /** Tuner device type. */
4561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public static final int DEVICE_TUNER = 3;
4661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
4761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /** Playback device type. */
4861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public static final int DEVICE_PLAYBACK = 4;
4961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
5061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /** Audio system device type. */
5161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public static final int DEVICE_AUDIO_SYSTEM = 5;
5261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
5361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /** @hide Pure CEC switch device type. */
5461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public static final int DEVICE_PURE_CEC_SWITCH = 6;
5561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
5661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /** @hide Video processor device type. */
5761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public static final int DEVICE_VIDEO_PROCESSOR = 7;
5861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
5961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    // Value indicating the device is not an active source.
6061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public static final int DEVICE_INACTIVE = -1;
6161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
6261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /**
6361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * Logical address used to indicate the source comes from internal device. The logical address
6461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * of TV(0) is used.
6561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     */
6661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public static final int ADDR_INTERNAL = 0;
6761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
6861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /**
6961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * Physical address used to indicate the source comes from internal device. The physical address
7061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * of TV(0) is used.
7161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     */
7261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public static final int PATH_INTERNAL = 0x0000;
7361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
7461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /** Invalid physical address (routing path) */
7561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public static final int PATH_INVALID = 0xFFFF;
7661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
7761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /** Invalid port ID */
7861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public static final int PORT_INVALID = -1;
7961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
80cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim    /** Invalid device ID */
81cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim    public static final int ID_INVALID = 0xFFFF;
82cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim
83cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim    /** Device info used to indicate an inactivated device. */
84cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim    public static final HdmiDeviceInfo INACTIVE_DEVICE = new HdmiDeviceInfo();
85cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim
868960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim    private static final int HDMI_DEVICE_TYPE_CEC = 0;
878960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim    private static final int HDMI_DEVICE_TYPE_MHL = 1;
888960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim    private static final int HDMI_DEVICE_TYPE_HARDWARE = 2;
898960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim
90cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim    // Type used to indicate the device that has relinquished its active source status.
91cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim    private static final int HDMI_DEVICE_TYPE_INACTIVE = 100;
92cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim
938960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim    // Offset used for id value. MHL devices, for instance, will be assigned the value from
948960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim    // ID_OFFSET_MHL.
958960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim    private static final int ID_OFFSET_CEC = 0x0;
968960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim    private static final int ID_OFFSET_MHL = 0x80;
978960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim    private static final int ID_OFFSET_HARDWARE = 0xC0;
9861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
9961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    // Common parameters for all device.
1008960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim    private final int mId;
10161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    private final int mHdmiDeviceType;
10261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    private final int mPhysicalAddress;
10361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    private final int mPortId;
10461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
10561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    // CEC only parameters.
10661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    private final int mLogicalAddress;
10761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    private final int mDeviceType;
10861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    private final int mVendorId;
10961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    private final String mDisplayName;
11061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    private final int mDevicePowerStatus;
11161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
11261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    // MHL only parameters.
11361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    private final int mDeviceId;
11461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    private final int mAdopterId;
11561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
11661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /**
11761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * A helper class to deserialize {@link HdmiDeviceInfo} for a parcel.
11861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     */
11961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public static final Parcelable.Creator<HdmiDeviceInfo> CREATOR =
12061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang            new Parcelable.Creator<HdmiDeviceInfo>() {
12161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                @Override
12261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                public HdmiDeviceInfo createFromParcel(Parcel source) {
12361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                    int hdmiDeviceType = source.readInt();
12461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                    int physicalAddress = source.readInt();
12561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                    int portId = source.readInt();
12661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
12761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                    switch (hdmiDeviceType) {
12861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                        case HDMI_DEVICE_TYPE_CEC:
12961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                            int logicalAddress = source.readInt();
13061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                            int deviceType = source.readInt();
13161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                            int vendorId = source.readInt();
13261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                            int powerStatus = source.readInt();
13361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                            String displayName = source.readString();
13461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                            return new HdmiDeviceInfo(logicalAddress, physicalAddress, portId,
13561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                                    deviceType, vendorId, displayName, powerStatus);
13661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                        case HDMI_DEVICE_TYPE_MHL:
13761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                            int deviceId = source.readInt();
13861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                            int adopterId = source.readInt();
13961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                            return new HdmiDeviceInfo(physicalAddress, portId, adopterId, deviceId);
1408960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim                        case HDMI_DEVICE_TYPE_HARDWARE:
14161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                            return new HdmiDeviceInfo(physicalAddress, portId);
142cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim                        case HDMI_DEVICE_TYPE_INACTIVE:
143cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim                            return HdmiDeviceInfo.INACTIVE_DEVICE;
14461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                        default:
14561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                            return null;
14661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                    }
14761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                }
14861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
14961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                @Override
15061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                public HdmiDeviceInfo[] newArray(int size) {
15161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                    return new HdmiDeviceInfo[size];
15261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                }
15361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang            };
15461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
15561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /**
15661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * Constructor. Used to initialize the instance for CEC device.
15761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     *
15861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * @param logicalAddress logical address of HDMI-CEC device
15961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * @param physicalAddress physical address of HDMI-CEC device
16061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * @param portId HDMI port ID (1 for HDMI1)
16161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * @param deviceType type of device
16261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * @param vendorId vendor id of device. Used for vendor specific command.
16361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * @param displayName name of device
16461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * @param powerStatus device power status
16561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * @hide
16661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     */
16761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public HdmiDeviceInfo(int logicalAddress, int physicalAddress, int portId, int deviceType,
16861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang            int vendorId, String displayName, int powerStatus) {
16961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        mHdmiDeviceType = HDMI_DEVICE_TYPE_CEC;
17061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        mPhysicalAddress = physicalAddress;
17161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        mPortId = portId;
17261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
1738960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim        mId = idForCecDevice(logicalAddress);
17461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        mLogicalAddress = logicalAddress;
17561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        mDeviceType = deviceType;
17661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        mVendorId = vendorId;
17761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        mDevicePowerStatus = powerStatus;
17861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        mDisplayName = displayName;
17961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
18061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        mDeviceId = -1;
18161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        mAdopterId = -1;
18261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    }
18361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
18461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /**
18561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * Constructor. Used to initialize the instance for CEC device.
18661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     *
18761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * @param logicalAddress logical address of HDMI-CEC device
18861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * @param physicalAddress physical address of HDMI-CEC device
18961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * @param portId HDMI port ID (1 for HDMI1)
19061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * @param deviceType type of device
19161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * @param vendorId vendor id of device. Used for vendor specific command.
19261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * @param displayName name of device
19361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * @hide
19461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     */
19561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public HdmiDeviceInfo(int logicalAddress, int physicalAddress, int portId, int deviceType,
19661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang            int vendorId, String displayName) {
19761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        this(logicalAddress, physicalAddress, portId, deviceType,
19861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                vendorId, displayName, HdmiControlManager.POWER_STATUS_UNKNOWN);
19961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    }
20061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
20161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /**
2028960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim     * Constructor. Used to initialize the instance for device representing hardware port.
20361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     *
2048960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim     * @param physicalAddress physical address of the port
20561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * @param portId HDMI port ID (1 for HDMI1)
20661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * @hide
20761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     */
20861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public HdmiDeviceInfo(int physicalAddress, int portId) {
2098960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim        mHdmiDeviceType = HDMI_DEVICE_TYPE_HARDWARE;
21061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        mPhysicalAddress = physicalAddress;
21161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        mPortId = portId;
21261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
2138960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim        mId = idForHardware(portId);
21461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        mLogicalAddress = -1;
21561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        mDeviceType = DEVICE_RESERVED;
21661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        mVendorId = 0;
21761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        mDevicePowerStatus = HdmiControlManager.POWER_STATUS_UNKNOWN;
21861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        mDisplayName = "HDMI" + portId;
21961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
22061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        mDeviceId = -1;
22161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        mAdopterId = -1;
22261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    }
22361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
22461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /**
22561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * Constructor. Used to initialize the instance for MHL device.
22661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     *
22761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * @param physicalAddress physical address of HDMI device
22861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * @param portId portId HDMI port ID (1 for HDMI1)
22961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * @param adopterId adopter id of MHL
23061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * @param deviceId device id of MHL
23161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * @hide
23261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     */
23361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public HdmiDeviceInfo(int physicalAddress, int portId, int adopterId, int deviceId) {
23461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        mHdmiDeviceType = HDMI_DEVICE_TYPE_MHL;
23561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        mPhysicalAddress = physicalAddress;
23661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        mPortId = portId;
23761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
2388960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim        mId = idForMhlDevice(portId);
23961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        mLogicalAddress = -1;
24061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        mDeviceType = DEVICE_RESERVED;
24161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        mVendorId = 0;
24261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        mDevicePowerStatus = HdmiControlManager.POWER_STATUS_UNKNOWN;
243ed0864557b3340ab7db00e2dc95b29c4b8bb485dJinsuk Kim        mDisplayName = "Mobile";
24461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
24561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        mDeviceId = adopterId;
24661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        mAdopterId = deviceId;
24761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    }
24861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
24961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /**
250cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim     * Constructor. Used to initialize the instance representing an inactivated device.
251cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim     * Can be passed input change listener to indicate the active source yielded
252cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim     * its status, hence the listener should take an appropriate action such as
253cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim     * switching to other input.
254cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim     */
255cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim    public HdmiDeviceInfo() {
256cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim        mHdmiDeviceType = HDMI_DEVICE_TYPE_INACTIVE;
257cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim        mPhysicalAddress = PATH_INVALID;
258cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim        mId = ID_INVALID;
259cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim
260cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim        mLogicalAddress = -1;
261cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim        mDeviceType = DEVICE_INACTIVE;
262cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim        mPortId = PORT_INVALID;
263cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim        mDevicePowerStatus = HdmiControlManager.POWER_STATUS_UNKNOWN;
264cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim        mDisplayName = "Inactive";
265cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim        mVendorId = 0;
266cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim
267cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim        mDeviceId = -1;
268cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim        mAdopterId = -1;
269cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim    }
270cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim
271cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim    /**
2722b0da5c4c84305f1d391dc78b85e244c9fd92456Yuncheol Heo     * Returns the id of the device.
2738960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim     */
2748960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim    public int getId() {
2758960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim        return mId;
2768960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim    }
2778960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim
2788960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim    /**
2792b0da5c4c84305f1d391dc78b85e244c9fd92456Yuncheol Heo     * Returns the id to be used for CEC device.
2808960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim     *
2818960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim     * @param address logical address of CEC device
2828960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim     * @return id for CEC device
2838960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim     */
2848960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim    public static int idForCecDevice(int address) {
2858960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim        // The id is generated based on the logical address.
2868960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim        return ID_OFFSET_CEC + address;
2878960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim    }
2888960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim
2898960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim    /**
2902b0da5c4c84305f1d391dc78b85e244c9fd92456Yuncheol Heo     * Returns the id to be used for MHL device.
2918960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim     *
2928960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim     * @param portId port which the MHL device is connected to
2938960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim     * @return id for MHL device
2948960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim     */
2958960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim    public static int idForMhlDevice(int portId) {
2968960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim        // The id is generated based on the port id since there can be only one MHL device per port.
2978960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim        return ID_OFFSET_MHL + portId;
2988960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim    }
2998960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim
3008960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim    /**
3012b0da5c4c84305f1d391dc78b85e244c9fd92456Yuncheol Heo     * Returns the id to be used for hardware port.
3028960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim     *
3038960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim     * @param portId port id
3048960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim     * @return id for hardware port
3058960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim     */
3068960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim    public static int idForHardware(int portId) {
3078960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim        return ID_OFFSET_HARDWARE + portId;
3088960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim    }
3098960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim
3108960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim    /**
3112b0da5c4c84305f1d391dc78b85e244c9fd92456Yuncheol Heo     * Returns the CEC logical address of the device.
31261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     */
31361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public int getLogicalAddress() {
31461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        return mLogicalAddress;
31561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    }
31661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
31761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /**
3182b0da5c4c84305f1d391dc78b85e244c9fd92456Yuncheol Heo     * Returns the physical address of the device.
31961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     */
32061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public int getPhysicalAddress() {
32161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        return mPhysicalAddress;
32261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    }
32361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
32461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /**
3252b0da5c4c84305f1d391dc78b85e244c9fd92456Yuncheol Heo     * Returns the port ID.
32661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     */
32761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public int getPortId() {
32861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        return mPortId;
32961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    }
33061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
33161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /**
3322b0da5c4c84305f1d391dc78b85e244c9fd92456Yuncheol Heo     * Returns CEC type of the device. For more details, refer constants between {@link #DEVICE_TV}
33361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * and {@link #DEVICE_INACTIVE}.
33461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     */
33561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public int getDeviceType() {
33661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        return mDeviceType;
33761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    }
33861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
33961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /**
3402b0da5c4c84305f1d391dc78b85e244c9fd92456Yuncheol Heo     * Returns device's power status. It should be one of the following values.
34161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * <ul>
34261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * <li>{@link HdmiControlManager#POWER_STATUS_ON}
34361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * <li>{@link HdmiControlManager#POWER_STATUS_STANDBY}
34461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * <li>{@link HdmiControlManager#POWER_STATUS_TRANSIENT_TO_ON}
34561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * <li>{@link HdmiControlManager#POWER_STATUS_TRANSIENT_TO_STANDBY}
34661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * <li>{@link HdmiControlManager#POWER_STATUS_UNKNOWN}
34761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * </ul>
34861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     */
34961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public int getDevicePowerStatus() {
35061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        return mDevicePowerStatus;
35161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    }
35261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
35361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /**
3542b0da5c4c84305f1d391dc78b85e244c9fd92456Yuncheol Heo     * Returns MHL device id. Return -1 for non-MHL device.
35561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     */
35661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public int getDeviceId() {
35761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        return mDeviceId;
35861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    }
35961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
36061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /**
3612b0da5c4c84305f1d391dc78b85e244c9fd92456Yuncheol Heo     * Returns MHL adopter id. Return -1 for non-MHL device.
36261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     */
36361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public int getAdopterId() {
36461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        return mAdopterId;
36561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    }
36661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
36761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /**
3682b0da5c4c84305f1d391dc78b85e244c9fd92456Yuncheol Heo     * Returns {@code true} if the device is of a type that can be an input source.
36961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     */
37061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public boolean isSourceType() {
371e416d0f67bfed9c8a65573091016d49777c56e8fJinsuk Kim        if (isCecDevice()) {
372e416d0f67bfed9c8a65573091016d49777c56e8fJinsuk Kim            return mDeviceType == DEVICE_PLAYBACK
373e416d0f67bfed9c8a65573091016d49777c56e8fJinsuk Kim                    || mDeviceType == DEVICE_RECORDER
374e416d0f67bfed9c8a65573091016d49777c56e8fJinsuk Kim                    || mDeviceType == DEVICE_TUNER;
375e416d0f67bfed9c8a65573091016d49777c56e8fJinsuk Kim        } else if (isMhlDevice()) {
376e416d0f67bfed9c8a65573091016d49777c56e8fJinsuk Kim            return true;
377e416d0f67bfed9c8a65573091016d49777c56e8fJinsuk Kim        } else {
378e416d0f67bfed9c8a65573091016d49777c56e8fJinsuk Kim            return false;
379e416d0f67bfed9c8a65573091016d49777c56e8fJinsuk Kim        }
38061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    }
38161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
38261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /**
3832b0da5c4c84305f1d391dc78b85e244c9fd92456Yuncheol Heo     * Returns {@code true} if the device represents an HDMI-CEC device. {@code false} if the device
38461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * is either MHL or other device.
38561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     */
38661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public boolean isCecDevice() {
38761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        return mHdmiDeviceType == HDMI_DEVICE_TYPE_CEC;
38861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    }
38961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
39061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /**
3912b0da5c4c84305f1d391dc78b85e244c9fd92456Yuncheol Heo     * Returns {@code true} if the device represents an MHL device. {@code false} if the device is
39261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * either CEC or other device.
39361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     */
39461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public boolean isMhlDevice() {
39561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        return mHdmiDeviceType == HDMI_DEVICE_TYPE_MHL;
39661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    }
39761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
39861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /**
399cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim     * Return {@code true} if the device represents an inactivated device that relinquishes
400cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim     * its status as active source by &lt;Active Source&gt; (HDMI-CEC) or Content-off (MHL).
401cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim     */
402cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim    public boolean isInactivated() {
403cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim        return mHdmiDeviceType == HDMI_DEVICE_TYPE_INACTIVE;
404cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim    }
405cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim
406cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim    /**
4072b0da5c4c84305f1d391dc78b85e244c9fd92456Yuncheol Heo     * Returns display (OSD) name of the device.
40861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     */
40961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public String getDisplayName() {
41061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        return mDisplayName;
41161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    }
41261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
41361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /**
4142b0da5c4c84305f1d391dc78b85e244c9fd92456Yuncheol Heo     * Returns vendor id of the device. Vendor id is used to distinguish devices built by other
41561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * manufactures. This is required for vendor-specific command on CEC standard.
41661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     */
41761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public int getVendorId() {
41861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        return mVendorId;
41961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    }
42061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
42161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /**
4222b0da5c4c84305f1d391dc78b85e244c9fd92456Yuncheol Heo     * Describes the kinds of special objects contained in this Parcelable's marshalled
42361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * representation.
42461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     */
42561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    @Override
42661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public int describeContents() {
42761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        return 0;
42861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    }
42961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
43061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    /**
4312b0da5c4c84305f1d391dc78b85e244c9fd92456Yuncheol Heo     * Serializes this object into a {@link Parcel}.
43261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     *
43361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * @param dest The Parcel in which the object should be written.
43461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     * @param flags Additional flags about how the object should be written. May be 0 or
43561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     *            {@link Parcelable#PARCELABLE_WRITE_RETURN_VALUE}.
43661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang     */
43761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    @Override
43861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public void writeToParcel(Parcel dest, int flags) {
43961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        dest.writeInt(mHdmiDeviceType);
44061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        dest.writeInt(mPhysicalAddress);
44161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        dest.writeInt(mPortId);
44261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        switch (mHdmiDeviceType) {
44361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang            case HDMI_DEVICE_TYPE_CEC:
44461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                dest.writeInt(mLogicalAddress);
44561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                dest.writeInt(mDeviceType);
44661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                dest.writeInt(mVendorId);
44761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                dest.writeInt(mDevicePowerStatus);
44861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                dest.writeString(mDisplayName);
44961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                break;
45061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang            case HDMI_DEVICE_TYPE_MHL:
45161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                dest.writeInt(mDeviceId);
45261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                dest.writeInt(mAdopterId);
45361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                break;
454cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim            case HDMI_DEVICE_TYPE_INACTIVE:
455cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim                // flow through
45661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang            default:
45761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                // no-op
45861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        }
45961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    }
46061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
46161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    @Override
46261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public String toString() {
46361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        StringBuffer s = new StringBuffer();
46461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        switch (mHdmiDeviceType) {
46561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang            case HDMI_DEVICE_TYPE_CEC:
46661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                s.append("CEC: ");
46787f22a2870ac363a5849a7252c1bd44ce2b809c2Jinsuk Kim                s.append("logical_address: ").append(String.format("0x%02X", mLogicalAddress));
46887f22a2870ac363a5849a7252c1bd44ce2b809c2Jinsuk Kim                s.append(" ");
4698960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim                s.append("device_type: ").append(mDeviceType).append(" ");
4708960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim                s.append("vendor_id: ").append(mVendorId).append(" ");
4718960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim                s.append("display_name: ").append(mDisplayName).append(" ");
4728960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim                s.append("power_status: ").append(mDevicePowerStatus).append(" ");
47361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                break;
47461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang            case HDMI_DEVICE_TYPE_MHL:
47561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                s.append("MHL: ");
47687f22a2870ac363a5849a7252c1bd44ce2b809c2Jinsuk Kim                s.append("device_id: ").append(String.format("0x%04X", mDeviceId)).append(" ");
47787f22a2870ac363a5849a7252c1bd44ce2b809c2Jinsuk Kim                s.append("adopter_id: ").append(String.format("0x%04X", mAdopterId)).append(" ");
47861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                break;
47961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
4808960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim            case HDMI_DEVICE_TYPE_HARDWARE:
4818960d1b1552729e3dfd33deee951ac75933ad8e5Jinsuk Kim                s.append("Hardware: ");
482cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim                break;
483cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim            case HDMI_DEVICE_TYPE_INACTIVE:
484cb8661c08f4a7b00eaa2ede06a30c32dd3cbc53bJinsuk Kim                s.append("Inactivated: ");
48561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                break;
48661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang            default:
48761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                return "";
48861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        }
48987f22a2870ac363a5849a7252c1bd44ce2b809c2Jinsuk Kim        s.append("physical_address: ").append(String.format("0x%04X", mPhysicalAddress));
49087f22a2870ac363a5849a7252c1bd44ce2b809c2Jinsuk Kim        s.append(" ");
49161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        s.append("port_id: ").append(mPortId);
49261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        return s.toString();
49361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    }
49461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
49561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    @Override
49661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    public boolean equals(Object obj) {
49761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        if (!(obj instanceof HdmiDeviceInfo)) {
49861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang            return false;
49961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        }
50061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang
50161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        HdmiDeviceInfo other = (HdmiDeviceInfo) obj;
50261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang        return mHdmiDeviceType == other.mHdmiDeviceType
50361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                && mPhysicalAddress == other.mPhysicalAddress
50461f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                && mPortId == other.mPortId
50561f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                && mLogicalAddress == other.mLogicalAddress
50661f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                && mDeviceType == other.mDeviceType
50761f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                && mVendorId == other.mVendorId
50861f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                && mDevicePowerStatus == other.mDevicePowerStatus
50961f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                && mDisplayName.equals(other.mDisplayName)
51061f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                && mDeviceId == other.mDeviceId
51161f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang                && mAdopterId == other.mAdopterId;
51261f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang    }
51361f4fbd2e8436a1ecd478c2a1f516d064a24d43bJungshik Jang}
514