1 /* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package android.hardware.hdmi; 17 18 import android.annotation.NonNull; 19 import android.annotation.Nullable; 20 import android.annotation.SystemApi; 21 import android.os.Parcel; 22 import android.os.Parcelable; 23 24 /** 25 * A class to encapsulate HDMI port information. Contains the capability of the ports such as 26 * HDMI-CEC, MHL, ARC(Audio Return Channel), and physical address assigned to each port. 27 * 28 * @hide 29 */ 30 @SystemApi 31 public final class HdmiPortInfo implements Parcelable { 32 /** HDMI port type: Input */ 33 public static final int PORT_INPUT = 0; 34 35 /** HDMI port type: Output */ 36 public static final int PORT_OUTPUT = 1; 37 38 private final int mId; 39 private final int mType; 40 private final int mAddress; 41 private final boolean mCecSupported; 42 private final boolean mArcSupported; 43 private final boolean mMhlSupported; 44 45 /** 46 * Constructor. 47 * 48 * @param id identifier assigned to each port. 1 for HDMI port 1 49 * @param type HDMI port input/output type 50 * @param address physical address of the port 51 * @param cec {@code true} if HDMI-CEC is supported on the port 52 * @param mhl {@code true} if MHL is supported on the port 53 * @param arc {@code true} if audio return channel is supported on the port 54 */ HdmiPortInfo(int id, int type, int address, boolean cec, boolean mhl, boolean arc)55 public HdmiPortInfo(int id, int type, int address, boolean cec, boolean mhl, boolean arc) { 56 mId = id; 57 mType = type; 58 mAddress = address; 59 mCecSupported = cec; 60 mArcSupported = arc; 61 mMhlSupported = mhl; 62 } 63 64 /** 65 * Returns the port id. 66 * 67 * @return port id 68 */ getId()69 public int getId() { 70 return mId; 71 } 72 73 /** 74 * Returns the port type. 75 * 76 * @return port type 77 */ getType()78 public int getType() { 79 return mType; 80 } 81 82 /** 83 * Returns the port address. 84 * 85 * @return port address 86 */ getAddress()87 public int getAddress() { 88 return mAddress; 89 } 90 91 /** 92 * Returns {@code true} if the port supports HDMI-CEC signaling. 93 * 94 * @return {@code true} if the port supports HDMI-CEC signaling. 95 */ isCecSupported()96 public boolean isCecSupported() { 97 return mCecSupported; 98 } 99 100 /** 101 * Returns {@code true} if the port supports MHL signaling. 102 * 103 * @return {@code true} if the port supports MHL signaling. 104 */ isMhlSupported()105 public boolean isMhlSupported() { 106 return mMhlSupported; 107 } 108 109 /** 110 * Returns {@code true} if the port supports audio return channel. 111 * 112 * @return {@code true} if the port supports audio return channel 113 */ isArcSupported()114 public boolean isArcSupported() { 115 return mArcSupported; 116 } 117 118 /** 119 * Describes the kinds of special objects contained in this Parcelable's 120 * marshalled representation. 121 */ 122 @Override describeContents()123 public int describeContents() { 124 return 0; 125 } 126 127 128 /** 129 * A helper class to deserialize {@link HdmiPortInfo} for a parcel. 130 */ 131 public static final @android.annotation.NonNull Parcelable.Creator<HdmiPortInfo> CREATOR = 132 new Parcelable.Creator<HdmiPortInfo>() { 133 @Override 134 public HdmiPortInfo createFromParcel(Parcel source) { 135 int id = source.readInt(); 136 int type = source.readInt(); 137 int address = source.readInt(); 138 boolean cec = (source.readInt() == 1); 139 boolean arc = (source.readInt() == 1); 140 boolean mhl = (source.readInt() == 1); 141 return new HdmiPortInfo(id, type, address, cec, mhl, arc); 142 } 143 144 @Override 145 public HdmiPortInfo[] newArray(int size) { 146 return new HdmiPortInfo[size]; 147 } 148 }; 149 150 /** 151 * Serializes this object into a {@link Parcel}. 152 * 153 * @param dest The Parcel in which the object should be written. 154 * @param flags Additional flags about how the object should be written. 155 * May be 0 or {@link Parcelable#PARCELABLE_WRITE_RETURN_VALUE}. 156 */ 157 @Override writeToParcel(Parcel dest, int flags)158 public void writeToParcel(Parcel dest, int flags) { 159 dest.writeInt(mId); 160 dest.writeInt(mType); 161 dest.writeInt(mAddress); 162 dest.writeInt(mCecSupported ? 1 : 0); 163 dest.writeInt(mArcSupported ? 1 : 0); 164 dest.writeInt(mMhlSupported ? 1 : 0); 165 } 166 167 @NonNull 168 @Override toString()169 public String toString() { 170 StringBuffer s = new StringBuffer(); 171 s.append("port_id: ").append(mId).append(", "); 172 s.append("address: ").append(String.format("0x%04x", mAddress)).append(", "); 173 s.append("cec: ").append(mCecSupported).append(", "); 174 s.append("arc: ").append(mArcSupported).append(", "); 175 s.append("mhl: ").append(mMhlSupported); 176 return s.toString(); 177 } 178 179 @Override equals(@ullable Object o)180 public boolean equals(@Nullable Object o) { 181 if (!(o instanceof HdmiPortInfo)) { 182 return false; 183 } 184 final HdmiPortInfo other = (HdmiPortInfo) o; 185 return mId == other.mId && mType == other.mType && mAddress == other.mAddress 186 && mCecSupported == other.mCecSupported && mArcSupported == other.mArcSupported 187 && mMhlSupported == other.mMhlSupported; 188 } 189 } 190