/* * 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; import android.os.Parcel; import android.os.Parcelable; /** * A class to encapsulate HDMI port information. Contains the capability of the ports such as * HDMI-CEC, MHL, ARC(Audio Return Channel), and physical address assigned to each port. * * @hide */ @SystemApi public final class HdmiPortInfo implements Parcelable { /** HDMI port type: Input */ public static final int PORT_INPUT = 0; /** HDMI port type: Output */ public static final int PORT_OUTPUT = 1; private final int mId; private final int mType; private final int mAddress; private final boolean mCecSupported; private final boolean mArcSupported; private final boolean mMhlSupported; /** * Constructor. * * @param id identifier assigned to each port. 1 for HDMI port 1 * @param type HDMI port input/output type * @param address physical address of the port * @param cec {@code true} if HDMI-CEC is supported on the port * @param mhl {@code true} if MHL is supported on the port * @param arc {@code true} if audio return channel is supported on the port */ public HdmiPortInfo(int id, int type, int address, boolean cec, boolean mhl, boolean arc) { mId = id; mType = type; mAddress = address; mCecSupported = cec; mArcSupported = arc; mMhlSupported = mhl; } /** * Returns the port id. * * @return port id */ public int getId() { return mId; } /** * Returns the port type. * * @return port type */ public int getType() { return mType; } /** * Returns the port address. * * @return port address */ public int getAddress() { return mAddress; } /** * Returns {@code true} if the port supports HDMI-CEC signaling. * * @return {@code true} if the port supports HDMI-CEC signaling. */ public boolean isCecSupported() { return mCecSupported; } /** * Returns {@code true} if the port supports MHL signaling. * * @return {@code true} if the port supports MHL signaling. */ public boolean isMhlSupported() { return mMhlSupported; } /** * Returns {@code true} if the port supports audio return channel. * * @return {@code true} if the port supports audio return channel */ public boolean isArcSupported() { return mArcSupported; } /** * Describes the kinds of special objects contained in this Parcelable's * marshalled representation. */ @Override public int describeContents() { return 0; } /** * A helper class to deserialize {@link HdmiPortInfo} for a parcel. */ public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public HdmiPortInfo createFromParcel(Parcel source) { int id = source.readInt(); int type = source.readInt(); int address = source.readInt(); boolean cec = (source.readInt() == 1); boolean arc = (source.readInt() == 1); boolean mhl = (source.readInt() == 1); return new HdmiPortInfo(id, type, address, cec, mhl, arc); } @Override public HdmiPortInfo[] newArray(int size) { return new HdmiPortInfo[size]; } }; /** * Serializes this object into a {@link Parcel}. * * @param dest The Parcel in which the object should be written. * @param flags Additional flags about how the object should be written. * May be 0 or {@link Parcelable#PARCELABLE_WRITE_RETURN_VALUE}. */ @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(mId); dest.writeInt(mType); dest.writeInt(mAddress); dest.writeInt(mCecSupported ? 1 : 0); dest.writeInt(mArcSupported ? 1 : 0); dest.writeInt(mMhlSupported ? 1 : 0); } @Override public String toString() { StringBuffer s = new StringBuffer(); s.append("port_id: ").append(mId).append(", "); s.append("address: ").append(String.format("0x%04x", mAddress)).append(", "); s.append("cec: ").append(mCecSupported).append(", "); s.append("arc: ").append(mArcSupported).append(", "); s.append("mhl: ").append(mMhlSupported); return s.toString(); } @Override public boolean equals(Object o) { if (!(o instanceof HdmiPortInfo)) { return false; } final HdmiPortInfo other = (HdmiPortInfo) o; return mId == other.mId && mType == other.mType && mAddress == other.mAddress && mCecSupported == other.mCecSupported && mArcSupported == other.mArcSupported && mMhlSupported == other.mMhlSupported; } }