blob: 1f0f45a91917f6406e16bf13cfe068bd129f1023 [file] [log] [blame]
Jinsuk Kim0340bbc2014-06-05 11:07:47 +09001/*
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 */
16package android.hardware.hdmi;
17
18import android.annotation.SystemApi;
19import android.os.Parcel;
20import android.os.Parcelable;
21
22/**
23 * A class to encapsulate HDMI port information. Contains the capability of the ports such as
24 * HDMI-CEC, MHL, ARC(Audio Return Channel), and physical address assigned to each port.
25 *
26 * @hide
27 */
28@SystemApi
29public final class HdmiPortInfo implements Parcelable {
30 /** HDMI port type: Input */
31 public static final int PORT_INPUT = 0;
32
33 /** HDMI port type: Output */
34 public static final int PORT_OUTPUT = 1;
35
36 private final int mId;
37 private final int mType;
38 private final int mAddress;
39 private final boolean mCecSupported;
40 private final boolean mArcSupported;
41 private final boolean mMhlSupported;
42
43 /**
44 * Constructor.
45 *
46 * @param id identifier assigned to each port. 1 for HDMI port 1
47 * @param type HDMI port input/output type
48 * @param address physical address of the port
49 * @param cec {@code true} if HDMI-CEC is supported on the port
50 * @param mhl {@code true} if MHL is supported on the port
51 * @param arc {@code true} if audio return channel is supported on the port
52 */
53 public HdmiPortInfo(int id, int type, int address, boolean cec, boolean mhl, boolean arc) {
54 mId = id;
55 mType = type;
56 mAddress = address;
57 mCecSupported = cec;
58 mArcSupported = arc;
59 mMhlSupported = mhl;
60 }
61
62 /**
63 * Returns the port id.
64 *
65 * @return port id
66 */
67 public int getId() {
68 return mId;
69 }
70
71 /**
72 * Returns the port type.
73 *
74 * @return port type
75 */
76 public int getType() {
77 return mType;
78 }
79
80 /**
81 * Returns the port address.
82 *
83 * @return port address
84 */
85 public int getAddress() {
86 return mAddress;
87 }
88
89 /**
90 * Returns {@code true} if the port supports HDMI-CEC signaling.
91 *
92 * @return {@code true} if the port supports HDMI-CEC signaling.
93 */
94 public boolean isCecSupported() {
95 return mCecSupported;
96 }
97
98 /**
99 * Returns {@code true} if the port supports MHL signaling.
100 *
101 * @return {@code true} if the port supports MHL signaling.
102 */
103 public boolean isMhlSupported() {
104 return mMhlSupported;
105 }
106
107 /**
108 * Returns {@code true} if the port supports audio return channel.
109 *
110 * @return {@code true} if the port supports audio return channel
111 */
112 public boolean isArcSupported() {
113 return mArcSupported;
114 }
115
116 /**
Yuncheol Heo2b0da5c2014-10-22 14:32:27 +0900117 * Describes the kinds of special objects contained in this Parcelable's
Jinsuk Kim0340bbc2014-06-05 11:07:47 +0900118 * marshalled representation.
119 */
120 @Override
121 public int describeContents() {
122 return 0;
123 }
124
125
126 /**
127 * A helper class to deserialize {@link HdmiPortInfo} for a parcel.
128 */
129 public static final Parcelable.Creator<HdmiPortInfo> CREATOR =
130 new Parcelable.Creator<HdmiPortInfo>() {
131 @Override
132 public HdmiPortInfo createFromParcel(Parcel source) {
133 int id = source.readInt();
134 int type = source.readInt();
135 int address = source.readInt();
136 boolean cec = (source.readInt() == 1);
137 boolean arc = (source.readInt() == 1);
138 boolean mhl = (source.readInt() == 1);
Yuncheol Heo417a9562014-11-14 06:43:31 +0900139 return new HdmiPortInfo(id, type, address, cec, mhl, arc);
Jinsuk Kim0340bbc2014-06-05 11:07:47 +0900140 }
141
142 @Override
143 public HdmiPortInfo[] newArray(int size) {
144 return new HdmiPortInfo[size];
145 }
146 };
147
148 /**
Yuncheol Heo2b0da5c2014-10-22 14:32:27 +0900149 * Serializes this object into a {@link Parcel}.
Jinsuk Kim0340bbc2014-06-05 11:07:47 +0900150 *
151 * @param dest The Parcel in which the object should be written.
152 * @param flags Additional flags about how the object should be written.
153 * May be 0 or {@link Parcelable#PARCELABLE_WRITE_RETURN_VALUE}.
154 */
155 @Override
156 public void writeToParcel(Parcel dest, int flags) {
157 dest.writeInt(mId);
158 dest.writeInt(mType);
159 dest.writeInt(mAddress);
160 dest.writeInt(mCecSupported ? 1 : 0);
161 dest.writeInt(mArcSupported ? 1 : 0);
162 dest.writeInt(mMhlSupported ? 1 : 0);
163 }
Jinsuk Kimf4eb72d2014-07-25 13:02:51 +0900164
165 @Override
166 public String toString() {
167 StringBuffer s = new StringBuffer();
168 s.append("port_id: ").append(mId).append(", ");
Terry Heo959d2db2014-08-28 16:45:41 +0900169 s.append("address: ").append(String.format("0x%04x", mAddress)).append(", ");
Jinsuk Kimf4eb72d2014-07-25 13:02:51 +0900170 s.append("cec: ").append(mCecSupported).append(", ");
171 s.append("arc: ").append(mArcSupported).append(", ");
172 s.append("mhl: ").append(mMhlSupported);
173 return s.toString();
174 }
Yuncheol Heo417a9562014-11-14 06:43:31 +0900175
176 @Override
177 public boolean equals(Object o) {
178 if (!(o instanceof HdmiPortInfo)) {
179 return false;
180 }
181 final HdmiPortInfo other = (HdmiPortInfo) o;
182 return mId == other.mId && mType == other.mType && mAddress == other.mAddress
183 && mCecSupported == other.mCecSupported && mArcSupported == other.mArcSupported
184 && mMhlSupported == other.mMhlSupported;
185 }
Jinsuk Kim0340bbc2014-06-05 11:07:47 +0900186}