284 lines
9.6 KiB
Java
284 lines
9.6 KiB
Java
![]() |
/*
|
|||
|
* Copyright (C) 2022 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.usb;
|
|||
|
|
|||
|
import android.Manifest;
|
|||
|
import android.annotation.CheckResult;
|
|||
|
import android.annotation.IntDef;
|
|||
|
import android.annotation.NonNull;
|
|||
|
import android.annotation.RequiresPermission;
|
|||
|
import android.annotation.SystemApi;
|
|||
|
import android.os.Parcel;
|
|||
|
import android.os.Parcelable;
|
|||
|
|
|||
|
import java.lang.annotation.Retention;
|
|||
|
import java.lang.annotation.RetentionPolicy;
|
|||
|
import java.util.Objects;
|
|||
|
|
|||
|
/**
|
|||
|
* Holds information related to DisplayPort Alt Mode statuses
|
|||
|
*
|
|||
|
* @hide
|
|||
|
*/
|
|||
|
@SystemApi
|
|||
|
public final class DisplayPortAltModeInfo implements Parcelable {
|
|||
|
private final @DisplayPortAltModeStatus int mPartnerSinkStatus;
|
|||
|
private final @DisplayPortAltModeStatus int mCableStatus;
|
|||
|
private final int mNumLanes;
|
|||
|
private final boolean mHotPlugDetect;
|
|||
|
private final @LinkTrainingStatus int mLinkTrainingStatus;
|
|||
|
|
|||
|
/**
|
|||
|
* Port Partners:
|
|||
|
* The port partner status is currently unknown for one of the following reasons:
|
|||
|
* <ul>
|
|||
|
* <li> No port partner is connected to the device
|
|||
|
* <li> The USB Power Delivery Discover Identity command has not been issued to the port
|
|||
|
* partner via SOP messaging.
|
|||
|
* </ul>
|
|||
|
* <p>
|
|||
|
* Cables:
|
|||
|
* The cable’s capabilities are not yet known to the device, or no cable is plugged in.
|
|||
|
*/
|
|||
|
public static final int DISPLAYPORT_ALT_MODE_STATUS_UNKNOWN = 0;
|
|||
|
|
|||
|
/**
|
|||
|
* Port Partners:
|
|||
|
* The current port partner does not list DisplayPort as one of its Alt Modes, or does not list
|
|||
|
* the capability to act as a DisplayPort Source or Sink device, or a compatible configuration
|
|||
|
* could not be established.
|
|||
|
* <p>
|
|||
|
* Cables:
|
|||
|
* The cable/adapter’s capabilities do not list DisplayPort as one of its Alt Modes, or a
|
|||
|
* compatible configuration could not be established.
|
|||
|
*/
|
|||
|
public static final int DISPLAYPORT_ALT_MODE_STATUS_NOT_CAPABLE = 1;
|
|||
|
|
|||
|
/**
|
|||
|
* Port Partners:
|
|||
|
* The current port partner lists compatible DisplayPort capabilities with the device, however
|
|||
|
* may not yet have entered DisplayPort Alt Mode or has configured its port for data
|
|||
|
* transmission.
|
|||
|
* <p>
|
|||
|
* Cables:
|
|||
|
* The Type-C cable/adapter’s capabilities have been discovered and list DisplayPort Alt Mode
|
|||
|
* as one of its capabilities, however may not yet have entered DisplayPort Alt Mode or has been
|
|||
|
* configured for data transmission.
|
|||
|
*/
|
|||
|
public static final int DISPLAYPORT_ALT_MODE_STATUS_CAPABLE_DISABLED = 2;
|
|||
|
|
|||
|
/**
|
|||
|
* Port Partners:
|
|||
|
* The port partner and device are both configured for DisplayPort Alt Mode.
|
|||
|
* <p>
|
|||
|
* Cables:
|
|||
|
* The Type-C cable/adapter is configured for DisplayPort Alt Mode.
|
|||
|
*/
|
|||
|
public static final int DISPLAYPORT_ALT_MODE_STATUS_ENABLED = 3;
|
|||
|
|
|||
|
/*
|
|||
|
* Indicates that DisplayPort Alt Mode link training has not initiated or completed.
|
|||
|
*/
|
|||
|
public static final int LINK_TRAINING_STATUS_UNKNOWN = 0;
|
|||
|
|
|||
|
/*
|
|||
|
* Indicates that DisplayPort Alt Mode link training has completed and the optimal data
|
|||
|
* transmission settings between the device and the connected port partner have successfully
|
|||
|
* been negotiated.
|
|||
|
*/
|
|||
|
public static final int LINK_TRAINING_STATUS_SUCCESS = 1;
|
|||
|
|
|||
|
/*
|
|||
|
* Indicates that DisplayPort Alt Mode link training has completed but no data transmission
|
|||
|
* settings between the device and the connected port partner could be established, and that the
|
|||
|
* link initialization has terminated.
|
|||
|
*/
|
|||
|
public static final int LINK_TRAINING_STATUS_FAILURE = 2;
|
|||
|
|
|||
|
/** @hide */
|
|||
|
@IntDef(prefix = { "DISPLAYPORT_ALT_MODE_STATUS_" }, value = {
|
|||
|
DISPLAYPORT_ALT_MODE_STATUS_UNKNOWN,
|
|||
|
DISPLAYPORT_ALT_MODE_STATUS_NOT_CAPABLE,
|
|||
|
DISPLAYPORT_ALT_MODE_STATUS_CAPABLE_DISABLED,
|
|||
|
DISPLAYPORT_ALT_MODE_STATUS_ENABLED,
|
|||
|
})
|
|||
|
@Retention(RetentionPolicy.SOURCE)
|
|||
|
public @interface DisplayPortAltModeStatus {}
|
|||
|
|
|||
|
/** @hide */
|
|||
|
@IntDef(prefix = { "LINK_TRAINING_STATUS_" }, value = {
|
|||
|
LINK_TRAINING_STATUS_UNKNOWN,
|
|||
|
LINK_TRAINING_STATUS_SUCCESS,
|
|||
|
LINK_TRAINING_STATUS_FAILURE,
|
|||
|
})
|
|||
|
@Retention(RetentionPolicy.SOURCE)
|
|||
|
public @interface LinkTrainingStatus {}
|
|||
|
|
|||
|
/** @hide */
|
|||
|
public DisplayPortAltModeInfo() {
|
|||
|
mPartnerSinkStatus = DISPLAYPORT_ALT_MODE_STATUS_UNKNOWN;
|
|||
|
mCableStatus = DISPLAYPORT_ALT_MODE_STATUS_UNKNOWN;
|
|||
|
mNumLanes = 0;
|
|||
|
mHotPlugDetect = false;
|
|||
|
mLinkTrainingStatus = LINK_TRAINING_STATUS_UNKNOWN;
|
|||
|
}
|
|||
|
|
|||
|
/** @hide */
|
|||
|
public DisplayPortAltModeInfo(int partnerSinkStatus, int cableStatus,
|
|||
|
int numLanes, boolean hotPlugDetect, int linkTrainingStatus) {
|
|||
|
mPartnerSinkStatus = partnerSinkStatus;
|
|||
|
mCableStatus = cableStatus;
|
|||
|
mNumLanes = numLanes;
|
|||
|
mHotPlugDetect = hotPlugDetect;
|
|||
|
mLinkTrainingStatus = linkTrainingStatus;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Returns the DisplayPort Alt Mode Status for a port partner acting as a sink.
|
|||
|
*
|
|||
|
*/
|
|||
|
public @DisplayPortAltModeStatus int getPartnerSinkStatus() {
|
|||
|
return mPartnerSinkStatus;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Returns the DisplayPort Alt Mode Status for the attached cable
|
|||
|
*
|
|||
|
*/
|
|||
|
public @DisplayPortAltModeStatus int getCableStatus() {
|
|||
|
return mCableStatus;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Returns the number of lanes used to transmit display data.
|
|||
|
*
|
|||
|
*/
|
|||
|
public int getNumberOfLanes() {
|
|||
|
return mNumLanes;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Returns whether or not the Hot Plug Detect (HPD) value of the connected DisplayPort Alt Mode
|
|||
|
* partner sink is active.
|
|||
|
*/
|
|||
|
public boolean isHotPlugDetectActive() {
|
|||
|
return mHotPlugDetect;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Returns the DisplayPort Alt Mode link training status.
|
|||
|
*/
|
|||
|
public @LinkTrainingStatus int getLinkTrainingStatus() {
|
|||
|
return mLinkTrainingStatus;
|
|||
|
}
|
|||
|
|
|||
|
@Override
|
|||
|
public int describeContents() {
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
@Override
|
|||
|
public void writeToParcel(@NonNull Parcel dest, int flags) {
|
|||
|
dest.writeInt(mPartnerSinkStatus);
|
|||
|
dest.writeInt(mCableStatus);
|
|||
|
dest.writeInt(mNumLanes);
|
|||
|
dest.writeBoolean(mHotPlugDetect);
|
|||
|
dest.writeInt(mLinkTrainingStatus);
|
|||
|
}
|
|||
|
|
|||
|
private String displayPortAltModeStatusToString(@DisplayPortAltModeStatus int status) {
|
|||
|
switch (status) {
|
|||
|
case DISPLAYPORT_ALT_MODE_STATUS_NOT_CAPABLE:
|
|||
|
return "not capable";
|
|||
|
case DISPLAYPORT_ALT_MODE_STATUS_CAPABLE_DISABLED:
|
|||
|
return "capable disabled";
|
|||
|
case DISPLAYPORT_ALT_MODE_STATUS_ENABLED:
|
|||
|
return "enabled";
|
|||
|
default:
|
|||
|
return "unknown";
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private String linkTrainingStatusToString(@LinkTrainingStatus int status) {
|
|||
|
switch (status) {
|
|||
|
case LINK_TRAINING_STATUS_SUCCESS:
|
|||
|
return "success";
|
|||
|
case LINK_TRAINING_STATUS_FAILURE:
|
|||
|
return "failure";
|
|||
|
default:
|
|||
|
return "unknown";
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
@NonNull
|
|||
|
@Override
|
|||
|
public String toString() {
|
|||
|
return "DisplayPortAltModeInfo{partnerSink="
|
|||
|
+ displayPortAltModeStatusToString(mPartnerSinkStatus)
|
|||
|
+ ", cable="
|
|||
|
+ displayPortAltModeStatusToString(mCableStatus)
|
|||
|
+ ", numLanes="
|
|||
|
+ mNumLanes
|
|||
|
+ ", hotPlugDetect="
|
|||
|
+ mHotPlugDetect
|
|||
|
+ ", linkTrainingStatus="
|
|||
|
+ linkTrainingStatusToString(mLinkTrainingStatus)
|
|||
|
+ "}";
|
|||
|
}
|
|||
|
|
|||
|
@Override
|
|||
|
public boolean equals(Object o) {
|
|||
|
if (this == o) {
|
|||
|
return true;
|
|||
|
}
|
|||
|
if (!(o instanceof DisplayPortAltModeInfo)) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
DisplayPortAltModeInfo other = (DisplayPortAltModeInfo) o;
|
|||
|
return this.mPartnerSinkStatus == other.mPartnerSinkStatus
|
|||
|
&& this.mCableStatus == other.mCableStatus
|
|||
|
&& this.mNumLanes == other.mNumLanes
|
|||
|
&& this.mHotPlugDetect == other.mHotPlugDetect
|
|||
|
&& this.mLinkTrainingStatus == other.mLinkTrainingStatus;
|
|||
|
}
|
|||
|
|
|||
|
@Override
|
|||
|
public int hashCode() {
|
|||
|
return Objects.hash(mPartnerSinkStatus, mCableStatus, mNumLanes, mHotPlugDetect,
|
|||
|
mLinkTrainingStatus);
|
|||
|
}
|
|||
|
|
|||
|
public static final @NonNull Parcelable.Creator<DisplayPortAltModeInfo> CREATOR =
|
|||
|
new Parcelable.Creator<DisplayPortAltModeInfo>() {
|
|||
|
@Override
|
|||
|
public DisplayPortAltModeInfo createFromParcel(Parcel in) {
|
|||
|
int partnerSinkStatus = in.readInt();
|
|||
|
int cableStatus = in.readInt();
|
|||
|
int numLanes = in.readInt();
|
|||
|
boolean hotPlugDetect = in.readBoolean();
|
|||
|
int linkTrainingStatus = in.readInt();
|
|||
|
return new DisplayPortAltModeInfo(partnerSinkStatus, cableStatus, numLanes,
|
|||
|
hotPlugDetect, linkTrainingStatus);
|
|||
|
}
|
|||
|
|
|||
|
@Override
|
|||
|
public DisplayPortAltModeInfo[] newArray(int size) {
|
|||
|
return new DisplayPortAltModeInfo[size];
|
|||
|
}
|
|||
|
};
|
|||
|
}
|