Convert @UsbDataStatus into bit field flags.
getUsbDataStatus now returns bit field values of @UsbDataStatus. Also renaming from USB_DATA_STATUS_* to DATA_STATUS_* based on review comments. Bug: 216640242 Signed-off-by: Badhri Jagan Sridharan <badhri@google.com> Change-Id: I96ade3dd7041a4094e57907069a872909a62e72f
This commit is contained in:
@@ -5318,9 +5318,9 @@ package android.hardware.usb {
|
||||
method public int getCurrentDataRole();
|
||||
method public int getCurrentMode();
|
||||
method public int getCurrentPowerRole();
|
||||
method public int getPowerBrickStatus();
|
||||
method public int getPowerBrickConnectionStatus();
|
||||
method public int getSupportedRoleCombinations();
|
||||
method @Nullable public int[] getUsbDataStatus();
|
||||
method public int getUsbDataStatus();
|
||||
method public boolean isConnected();
|
||||
method public boolean isPowerTransferLimited();
|
||||
method public boolean isRoleCombinationSupported(int, int);
|
||||
@@ -5329,6 +5329,13 @@ package android.hardware.usb {
|
||||
field public static final int DATA_ROLE_DEVICE = 2; // 0x2
|
||||
field public static final int DATA_ROLE_HOST = 1; // 0x1
|
||||
field public static final int DATA_ROLE_NONE = 0; // 0x0
|
||||
field public static final int DATA_STATUS_DISABLED_CONTAMINANT = 4; // 0x4
|
||||
field public static final int DATA_STATUS_DISABLED_DEBUG = 32; // 0x20
|
||||
field public static final int DATA_STATUS_DISABLED_DOCK = 8; // 0x8
|
||||
field public static final int DATA_STATUS_DISABLED_FORCE = 16; // 0x10
|
||||
field public static final int DATA_STATUS_DISABLED_OVERHEAT = 2; // 0x2
|
||||
field public static final int DATA_STATUS_ENABLED = 1; // 0x1
|
||||
field public static final int DATA_STATUS_UNKNOWN = 0; // 0x0
|
||||
field public static final int MODE_AUDIO_ACCESSORY = 4; // 0x4
|
||||
field public static final int MODE_DEBUG_ACCESSORY = 8; // 0x8
|
||||
field public static final int MODE_DFP = 2; // 0x2
|
||||
@@ -5340,13 +5347,6 @@ package android.hardware.usb {
|
||||
field public static final int POWER_ROLE_NONE = 0; // 0x0
|
||||
field public static final int POWER_ROLE_SINK = 2; // 0x2
|
||||
field public static final int POWER_ROLE_SOURCE = 1; // 0x1
|
||||
field public static final int USB_DATA_STATUS_DISABLED_CONTAMINANT = 3; // 0x3
|
||||
field public static final int USB_DATA_STATUS_DISABLED_DEBUG = 6; // 0x6
|
||||
field public static final int USB_DATA_STATUS_DISABLED_DOCK = 4; // 0x4
|
||||
field public static final int USB_DATA_STATUS_DISABLED_FORCE = 5; // 0x5
|
||||
field public static final int USB_DATA_STATUS_DISABLED_OVERHEAT = 2; // 0x2
|
||||
field public static final int USB_DATA_STATUS_ENABLED = 1; // 0x1
|
||||
field public static final int USB_DATA_STATUS_UNKNOWN = 0; // 0x0
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -39,13 +39,13 @@ import static android.hardware.usb.UsbPortStatus.POWER_BRICK_STATUS_CONNECTED;
|
||||
import static android.hardware.usb.UsbPortStatus.POWER_ROLE_NONE;
|
||||
import static android.hardware.usb.UsbPortStatus.POWER_ROLE_SINK;
|
||||
import static android.hardware.usb.UsbPortStatus.POWER_ROLE_SOURCE;
|
||||
import static android.hardware.usb.UsbPortStatus.USB_DATA_STATUS_UNKNOWN;
|
||||
import static android.hardware.usb.UsbPortStatus.USB_DATA_STATUS_ENABLED;
|
||||
import static android.hardware.usb.UsbPortStatus.USB_DATA_STATUS_DISABLED_OVERHEAT;
|
||||
import static android.hardware.usb.UsbPortStatus.USB_DATA_STATUS_DISABLED_CONTAMINANT;
|
||||
import static android.hardware.usb.UsbPortStatus.USB_DATA_STATUS_DISABLED_DOCK;
|
||||
import static android.hardware.usb.UsbPortStatus.USB_DATA_STATUS_DISABLED_FORCE;
|
||||
import static android.hardware.usb.UsbPortStatus.USB_DATA_STATUS_DISABLED_DEBUG;
|
||||
import static android.hardware.usb.UsbPortStatus.DATA_STATUS_UNKNOWN;
|
||||
import static android.hardware.usb.UsbPortStatus.DATA_STATUS_ENABLED;
|
||||
import static android.hardware.usb.UsbPortStatus.DATA_STATUS_DISABLED_OVERHEAT;
|
||||
import static android.hardware.usb.UsbPortStatus.DATA_STATUS_DISABLED_CONTAMINANT;
|
||||
import static android.hardware.usb.UsbPortStatus.DATA_STATUS_DISABLED_DOCK;
|
||||
import static android.hardware.usb.UsbPortStatus.DATA_STATUS_DISABLED_FORCE;
|
||||
import static android.hardware.usb.UsbPortStatus.DATA_STATUS_DISABLED_DEBUG;
|
||||
|
||||
import android.Manifest;
|
||||
import android.annotation.CheckResult;
|
||||
@@ -400,7 +400,7 @@ public final class UsbPort {
|
||||
}
|
||||
|
||||
/**
|
||||
* Enables Usb data when disabled due to {@link UsbPort#USB_DATA_STATUS_DISABLED_DOCK}
|
||||
* Enables Usb data when disabled due to {@link UsbPort#DATA_STATUS_DISABLED_DOCK}
|
||||
*
|
||||
* @return {@link #ENABLE_USB_DATA_WHILE_DOCKED_SUCCESS} when request completes successfully or
|
||||
* {@link #ENABLE_USB_DATA_WHILE_DOCKED_ERROR_INTERNAL} when request fails due to
|
||||
@@ -421,7 +421,8 @@ public final class UsbPort {
|
||||
+ " callingUid:" + Binder.getCallingUid());
|
||||
UsbPortStatus portStatus = getStatus();
|
||||
if (portStatus != null &&
|
||||
!usbDataStatusToString(portStatus.getUsbDataStatus()).contains("disabled-dock")) {
|
||||
(portStatus.getUsbDataStatus() & DATA_STATUS_DISABLED_DOCK) !=
|
||||
DATA_STATUS_DISABLED_DOCK) {
|
||||
return ENABLE_USB_DATA_WHILE_DOCKED_ERROR_DATA_ENABLED;
|
||||
}
|
||||
|
||||
@@ -584,44 +585,43 @@ public final class UsbPort {
|
||||
|
||||
/** @hide */
|
||||
public static String usbDataStatusToString(int usbDataStatus) {
|
||||
switch (usbDataStatus) {
|
||||
case USB_DATA_STATUS_UNKNOWN:
|
||||
return "unknown";
|
||||
case USB_DATA_STATUS_ENABLED:
|
||||
return "enabled";
|
||||
case USB_DATA_STATUS_DISABLED_OVERHEAT:
|
||||
return "disabled-overheat";
|
||||
case USB_DATA_STATUS_DISABLED_CONTAMINANT:
|
||||
return "disabled-contaminant";
|
||||
case USB_DATA_STATUS_DISABLED_DOCK:
|
||||
return "disabled-dock";
|
||||
case USB_DATA_STATUS_DISABLED_FORCE:
|
||||
return "disabled-force";
|
||||
case USB_DATA_STATUS_DISABLED_DEBUG:
|
||||
return "disabled-debug";
|
||||
default:
|
||||
return Integer.toString(usbDataStatus);
|
||||
}
|
||||
}
|
||||
StringBuilder statusString = new StringBuilder();
|
||||
|
||||
/** @hide */
|
||||
public static String usbDataStatusToString(int[] usbDataStatus) {
|
||||
StringBuilder modeString = new StringBuilder();
|
||||
if (usbDataStatus == null) {
|
||||
if (usbDataStatus == DATA_STATUS_UNKNOWN) {
|
||||
return "unknown";
|
||||
}
|
||||
for (int i = 0; i < usbDataStatus.length; i++) {
|
||||
modeString.append(usbDataStatusToString(usbDataStatus[i]));
|
||||
if (i < usbDataStatus.length - 1) {
|
||||
modeString.append(", ");
|
||||
}
|
||||
|
||||
if ((usbDataStatus & DATA_STATUS_ENABLED) == DATA_STATUS_ENABLED) {
|
||||
return "enabled";
|
||||
}
|
||||
return modeString.toString();
|
||||
|
||||
if ((usbDataStatus & DATA_STATUS_DISABLED_OVERHEAT) == DATA_STATUS_DISABLED_OVERHEAT) {
|
||||
statusString.append("disabled-overheat, ");
|
||||
}
|
||||
|
||||
if ((usbDataStatus & DATA_STATUS_DISABLED_CONTAMINANT)
|
||||
== DATA_STATUS_DISABLED_CONTAMINANT) {
|
||||
statusString.append("disabled-contaminant, ");
|
||||
}
|
||||
|
||||
if ((usbDataStatus & DATA_STATUS_DISABLED_DOCK) == DATA_STATUS_DISABLED_DOCK) {
|
||||
statusString.append("disabled-dock, ");
|
||||
}
|
||||
|
||||
if ((usbDataStatus & DATA_STATUS_DISABLED_FORCE) == DATA_STATUS_DISABLED_FORCE) {
|
||||
statusString.append("disabled-force, ");
|
||||
}
|
||||
|
||||
if ((usbDataStatus & DATA_STATUS_DISABLED_DEBUG) == DATA_STATUS_DISABLED_DEBUG) {
|
||||
statusString.append("disabled-debug, ");
|
||||
}
|
||||
|
||||
return statusString.toString().replaceAll(", $", "");
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
public static String powerBrickStatusToString(int powerBrickStatus) {
|
||||
switch (powerBrickStatus) {
|
||||
public static String powerBrickConnectionStatusToString(int powerBrickConnectionStatus) {
|
||||
switch (powerBrickConnectionStatus) {
|
||||
case POWER_BRICK_STATUS_UNKNOWN:
|
||||
return "unknown";
|
||||
case POWER_BRICK_STATUS_CONNECTED:
|
||||
@@ -629,7 +629,7 @@ public final class UsbPort {
|
||||
case POWER_BRICK_STATUS_DISCONNECTED:
|
||||
return "disconnected";
|
||||
default:
|
||||
return Integer.toString(powerBrickStatus);
|
||||
return Integer.toString(powerBrickConnectionStatus);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -44,8 +44,8 @@ public final class UsbPortStatus implements Parcelable {
|
||||
private final @ContaminantProtectionStatus int mContaminantProtectionStatus;
|
||||
private final @ContaminantDetectionStatus int mContaminantDetectionStatus;
|
||||
private final boolean mPowerTransferLimited;
|
||||
private final @UsbDataStatus int[] mUsbDataStatus;
|
||||
private final @PowerBrickStatus int mPowerBrickStatus;
|
||||
private final @UsbDataStatus int mUsbDataStatus;
|
||||
private final @PowerBrickConnectionStatus int mPowerBrickConnectionStatus;
|
||||
|
||||
/**
|
||||
* Power role: This USB port does not have a power role.
|
||||
@@ -198,38 +198,38 @@ public final class UsbPortStatus implements Parcelable {
|
||||
/**
|
||||
* USB data status is not known.
|
||||
*/
|
||||
public static final int USB_DATA_STATUS_UNKNOWN = 0;
|
||||
public static final int DATA_STATUS_UNKNOWN = 0;
|
||||
|
||||
/**
|
||||
* USB data is enabled.
|
||||
*/
|
||||
public static final int USB_DATA_STATUS_ENABLED = 1;
|
||||
public static final int DATA_STATUS_ENABLED = 1 << 0;
|
||||
|
||||
/**
|
||||
* USB data is disabled as the port is too hot.
|
||||
*/
|
||||
public static final int USB_DATA_STATUS_DISABLED_OVERHEAT = 2;
|
||||
public static final int DATA_STATUS_DISABLED_OVERHEAT = 1 << 1;
|
||||
|
||||
/**
|
||||
* USB data is disabled due to contaminated port.
|
||||
*/
|
||||
public static final int USB_DATA_STATUS_DISABLED_CONTAMINANT = 3;
|
||||
public static final int DATA_STATUS_DISABLED_CONTAMINANT = 1 << 2;
|
||||
|
||||
/**
|
||||
* USB data is disabled due to docking event.
|
||||
*/
|
||||
public static final int USB_DATA_STATUS_DISABLED_DOCK = 4;
|
||||
public static final int DATA_STATUS_DISABLED_DOCK = 1 << 3;
|
||||
|
||||
/**
|
||||
* USB data is disabled by
|
||||
* {@link UsbPort#enableUsbData UsbPort.enableUsbData}.
|
||||
*/
|
||||
public static final int USB_DATA_STATUS_DISABLED_FORCE = 5;
|
||||
public static final int DATA_STATUS_DISABLED_FORCE = 1 << 4;
|
||||
|
||||
/**
|
||||
* USB data is disabled for debug.
|
||||
*/
|
||||
public static final int USB_DATA_STATUS_DISABLED_DEBUG = 6;
|
||||
public static final int DATA_STATUS_DISABLED_DEBUG = 1 << 5;
|
||||
|
||||
/**
|
||||
* Unknown whether a power brick is connected.
|
||||
@@ -276,14 +276,14 @@ public final class UsbPortStatus implements Parcelable {
|
||||
@interface UsbPortMode{}
|
||||
|
||||
/** @hide */
|
||||
@IntDef(prefix = { "USB_DATA_STATUS_" }, value = {
|
||||
USB_DATA_STATUS_UNKNOWN,
|
||||
USB_DATA_STATUS_ENABLED,
|
||||
USB_DATA_STATUS_DISABLED_OVERHEAT,
|
||||
USB_DATA_STATUS_DISABLED_CONTAMINANT,
|
||||
USB_DATA_STATUS_DISABLED_DOCK,
|
||||
USB_DATA_STATUS_DISABLED_FORCE,
|
||||
USB_DATA_STATUS_DISABLED_DEBUG
|
||||
@IntDef(prefix = { "DATA_STATUS_" }, flag = true, value = {
|
||||
DATA_STATUS_UNKNOWN,
|
||||
DATA_STATUS_ENABLED,
|
||||
DATA_STATUS_DISABLED_OVERHEAT,
|
||||
DATA_STATUS_DISABLED_CONTAMINANT,
|
||||
DATA_STATUS_DISABLED_DOCK,
|
||||
DATA_STATUS_DISABLED_FORCE,
|
||||
DATA_STATUS_DISABLED_DEBUG
|
||||
})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@interface UsbDataStatus{}
|
||||
@@ -295,13 +295,14 @@ public final class UsbPortStatus implements Parcelable {
|
||||
POWER_BRICK_STATUS_CONNECTED,
|
||||
})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@interface PowerBrickStatus{}
|
||||
@interface PowerBrickConnectionStatus{}
|
||||
|
||||
/** @hide */
|
||||
public UsbPortStatus(int currentMode, int currentPowerRole, int currentDataRole,
|
||||
int supportedRoleCombinations, int contaminantProtectionStatus,
|
||||
int contaminantDetectionStatus, @UsbDataStatus int[] usbDataStatus,
|
||||
boolean powerTransferLimited, @PowerBrickStatus int powerBrickStatus) {
|
||||
int contaminantDetectionStatus, @UsbDataStatus int usbDataStatus,
|
||||
boolean powerTransferLimited,
|
||||
@PowerBrickConnectionStatus int powerBrickConnectionStatus) {
|
||||
mCurrentMode = currentMode;
|
||||
mCurrentPowerRole = currentPowerRole;
|
||||
mCurrentDataRole = currentDataRole;
|
||||
@@ -310,7 +311,7 @@ public final class UsbPortStatus implements Parcelable {
|
||||
mContaminantDetectionStatus = contaminantDetectionStatus;
|
||||
mUsbDataStatus = usbDataStatus;
|
||||
mPowerTransferLimited = powerTransferLimited;
|
||||
mPowerBrickStatus = powerBrickStatus;
|
||||
mPowerBrickConnectionStatus = powerBrickConnectionStatus;
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
@@ -323,8 +324,8 @@ public final class UsbPortStatus implements Parcelable {
|
||||
mSupportedRoleCombinations = supportedRoleCombinations;
|
||||
mContaminantProtectionStatus = contaminantProtectionStatus;
|
||||
mContaminantDetectionStatus = contaminantDetectionStatus;
|
||||
mUsbDataStatus = new int[]{USB_DATA_STATUS_UNKNOWN};
|
||||
mPowerBrickStatus = POWER_BRICK_STATUS_UNKNOWN;
|
||||
mUsbDataStatus = DATA_STATUS_UNKNOWN;
|
||||
mPowerBrickConnectionStatus = POWER_BRICK_STATUS_UNKNOWN;
|
||||
mPowerTransferLimited = false;
|
||||
}
|
||||
|
||||
@@ -411,13 +412,13 @@ public final class UsbPortStatus implements Parcelable {
|
||||
/**
|
||||
* Returns UsbData status.
|
||||
*
|
||||
* @return Current USB data status of the port: {@link #USB_DATA_STATUS_UNKNOWN}
|
||||
* or {@link #USB_DATA_STATUS_ENABLED} or {@link #USB_DATA_STATUS_DIASBLED_OVERHEAT}
|
||||
* or {@link #USB_DATA_STATUS_DISABLED_CONTAMINANT}
|
||||
* or {@link #USB_DATA_STATUS_DISABLED_DOCK} or {@link #USB_DATA_STATUS_DISABLED_FORCE}
|
||||
* or {@link #USB_DATA_STATUS_DISABLED_DEBUG}
|
||||
* @return Current USB data status of the port with one or more of the following values
|
||||
* {@link #DATA_STATUS_UNKNOWN}, {@link #DATA_STATUS_ENABLED},
|
||||
* {@link #DATA_STATUS_DISABLED_OVERHEAT}, {@link #DATA_STATUS_DISABLED_CONTAMINANT},
|
||||
* {@link #DATA_STATUS_DISABLED_DOCK}, {@link #DATA_STATUS_DISABLED_FORCE},
|
||||
* {@link #DATA_STATUS_DISABLED_DEBUG}
|
||||
*/
|
||||
public @UsbDataStatus @Nullable int[] getUsbDataStatus() {
|
||||
public @UsbDataStatus int getUsbDataStatus() {
|
||||
return mUsbDataStatus;
|
||||
}
|
||||
|
||||
@@ -432,14 +433,14 @@ public final class UsbPortStatus implements Parcelable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Let's the caller know if a power brick is connected to the USB port.
|
||||
* Returns the connection status of the power brick.
|
||||
*
|
||||
* @return {@link #POWER_BRICK_STATUS_UNKNOWN}
|
||||
* or {@link #POWER_BRICK_STATUS_CONNECTED}
|
||||
* or {@link #POWER_BRICK_STATUS_DISCONNECTED}
|
||||
*/
|
||||
public @PowerBrickStatus int getPowerBrickStatus() {
|
||||
return mPowerBrickStatus;
|
||||
public @PowerBrickConnectionStatus int getPowerBrickConnectionStatus() {
|
||||
return mPowerBrickConnectionStatus;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@@ -459,8 +460,9 @@ public final class UsbPortStatus implements Parcelable {
|
||||
+ UsbPort.usbDataStatusToString(getUsbDataStatus())
|
||||
+ ", isPowerTransferLimited="
|
||||
+ isPowerTransferLimited()
|
||||
+", powerBrickStatus="
|
||||
+ UsbPort.powerBrickStatusToString(getPowerBrickStatus())
|
||||
+", powerBrickConnectionStatus="
|
||||
+ UsbPort
|
||||
.powerBrickConnectionStatusToString(getPowerBrickConnectionStatus())
|
||||
+ "}";
|
||||
}
|
||||
|
||||
@@ -477,10 +479,9 @@ public final class UsbPortStatus implements Parcelable {
|
||||
dest.writeInt(mSupportedRoleCombinations);
|
||||
dest.writeInt(mContaminantProtectionStatus);
|
||||
dest.writeInt(mContaminantDetectionStatus);
|
||||
dest.writeInt(mUsbDataStatus.length);
|
||||
dest.writeIntArray(mUsbDataStatus);
|
||||
dest.writeInt(mUsbDataStatus);
|
||||
dest.writeBoolean(mPowerTransferLimited);
|
||||
dest.writeInt(mPowerBrickStatus);
|
||||
dest.writeInt(mPowerBrickConnectionStatus);
|
||||
}
|
||||
|
||||
public static final @NonNull Parcelable.Creator<UsbPortStatus> CREATOR =
|
||||
@@ -493,14 +494,13 @@ public final class UsbPortStatus implements Parcelable {
|
||||
int supportedRoleCombinations = in.readInt();
|
||||
int contaminantProtectionStatus = in.readInt();
|
||||
int contaminantDetectionStatus = in.readInt();
|
||||
int[] usbDataStatus = new int[in.readInt()];
|
||||
in.readIntArray(usbDataStatus);
|
||||
int usbDataStatus = in.readInt();
|
||||
boolean powerTransferLimited = in.readBoolean();
|
||||
int powerBrickStatus = in.readInt();
|
||||
int powerBrickConnectionStatus = in.readInt();
|
||||
return new UsbPortStatus(currentMode, currentPowerRole, currentDataRole,
|
||||
supportedRoleCombinations, contaminantProtectionStatus,
|
||||
contaminantDetectionStatus, usbDataStatus, powerTransferLimited,
|
||||
powerBrickStatus);
|
||||
powerBrickConnectionStatus);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -508,4 +508,126 @@ public final class UsbPortStatus implements Parcelable {
|
||||
return new UsbPortStatus[size];
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Builder is used to create {@link UsbPortStatus} objects.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public static final class Builder {
|
||||
private @UsbPortMode int mCurrentMode;
|
||||
private @UsbPowerRole int mCurrentPowerRole;
|
||||
private @UsbDataRole int mCurrentDataRole;
|
||||
private int mSupportedRoleCombinations;
|
||||
private @ContaminantProtectionStatus int mContaminantProtectionStatus;
|
||||
private @ContaminantDetectionStatus int mContaminantDetectionStatus;
|
||||
private boolean mPowerTransferLimited;
|
||||
private @UsbDataStatus int mUsbDataStatus;
|
||||
private @PowerBrickConnectionStatus int mPowerBrickConnectionStatus;
|
||||
|
||||
public Builder() {
|
||||
mCurrentMode = MODE_NONE;
|
||||
mCurrentPowerRole = POWER_ROLE_NONE;
|
||||
mCurrentDataRole = DATA_ROLE_NONE;
|
||||
mContaminantProtectionStatus = CONTAMINANT_PROTECTION_NONE;
|
||||
mContaminantDetectionStatus = CONTAMINANT_DETECTION_NOT_SUPPORTED;
|
||||
mUsbDataStatus = DATA_STATUS_UNKNOWN;
|
||||
mPowerBrickConnectionStatus = POWER_BRICK_STATUS_UNKNOWN;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the current mode of {@link UsbPortStatus}
|
||||
*
|
||||
* @return Instance of {@link Builder}
|
||||
*/
|
||||
@NonNull
|
||||
public Builder setCurrentMode(@UsbPortMode int currentMode) {
|
||||
mCurrentMode = currentMode;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the current power role and data role of {@link UsbPortStatus}
|
||||
*
|
||||
* @return Instance of {@link Builder}
|
||||
*/
|
||||
@NonNull
|
||||
public Builder setCurrentRoles(@UsbPowerRole int currentPowerRole,
|
||||
@UsbDataRole int currentDataRole) {
|
||||
mCurrentPowerRole = currentPowerRole;
|
||||
mCurrentDataRole = currentDataRole;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets supported role combinations of {@link UsbPortStatus}
|
||||
*
|
||||
* @return Instance of {@link Builder}
|
||||
*/
|
||||
@NonNull
|
||||
public Builder setSupportedRoleCombinations(int supportedRoleCombinations) {
|
||||
mSupportedRoleCombinations = supportedRoleCombinations;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets current contaminant status of {@link UsbPortStatus}
|
||||
*
|
||||
* @return Instance of {@link Builder}
|
||||
*/
|
||||
@NonNull
|
||||
public Builder setContaminantStatus(
|
||||
@ContaminantProtectionStatus int contaminantProtectionStatus,
|
||||
@ContaminantDetectionStatus int contaminantDetectionStatus) {
|
||||
mContaminantProtectionStatus = contaminantProtectionStatus;
|
||||
mContaminantDetectionStatus = contaminantDetectionStatus;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets power limit power transfer of {@link UsbPortStatus}
|
||||
*
|
||||
* @return Instance of {@link Builder}
|
||||
*/
|
||||
@NonNull
|
||||
public Builder setPowerTransferLimited(boolean powerTransferLimited) {
|
||||
mPowerTransferLimited = powerTransferLimited;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the USB data status of {@link UsbPortStatus}
|
||||
*
|
||||
* @return Instance of {@link Builder}
|
||||
*/
|
||||
@NonNull
|
||||
public Builder setUsbDataStatus(@UsbDataStatus int usbDataStatus) {
|
||||
mUsbDataStatus = usbDataStatus;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the power brick connection status of {@link UsbPortStatus}
|
||||
*
|
||||
* @return Instance of {@link Builder}
|
||||
*/
|
||||
@NonNull
|
||||
public Builder setPowerBrickConnectionStatus(
|
||||
@PowerBrickConnectionStatus int powerBrickConnectionStatus) {
|
||||
mPowerBrickConnectionStatus = powerBrickConnectionStatus;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the {@link UsbPortStatus} object.
|
||||
*/
|
||||
@NonNull
|
||||
public UsbPortStatus build() {
|
||||
UsbPortStatus status = new UsbPortStatus(mCurrentMode, mCurrentPowerRole,
|
||||
mCurrentDataRole, mSupportedRoleCombinations, mContaminantProtectionStatus,
|
||||
mContaminantDetectionStatus, mUsbDataStatus, mPowerTransferLimited,
|
||||
mPowerBrickConnectionStatus);
|
||||
return status;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -249,7 +249,7 @@ public class DumpUtils {
|
||||
dump.write("is_power_transfer_limited", UsbPortStatusProto.IS_POWER_TRANSFER_LIMITED,
|
||||
status.isPowerTransferLimited());
|
||||
dump.write("usb_power_brick_status", UsbPortStatusProto.USB_POWER_BRICK_STATUS,
|
||||
UsbPort.powerBrickStatusToString(status.getPowerBrickStatus()));
|
||||
UsbPort.powerBrickConnectionStatusToString(status.getPowerBrickConnectionStatus()));
|
||||
dump.end(token);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -384,7 +384,7 @@ public class UsbPortManager {
|
||||
}
|
||||
|
||||
/**
|
||||
* Enables USB data when disabled due to {@link UsbPortStatus#USB_DATA_STATUS_DISABLED_DOCK}
|
||||
* Enables USB data when disabled due to {@link UsbPortStatus#DATA_STATUS_DISABLED_DOCK}
|
||||
*/
|
||||
public void enableUsbDataWhileDocked(@NonNull String portId, long transactionId,
|
||||
IUsbOperationInternal callback, IndentingPrintWriter pw) {
|
||||
@@ -844,7 +844,7 @@ public class UsbPortManager {
|
||||
portInfo.contaminantDetectionStatus,
|
||||
portInfo.usbDataStatus,
|
||||
portInfo.powerTransferLimited,
|
||||
portInfo.powerBrickStatus, pw);
|
||||
portInfo.powerBrickConnectionStatus, pw);
|
||||
}
|
||||
} else {
|
||||
for (RawPortInfo currentPortInfo : newPortInfo) {
|
||||
@@ -859,7 +859,7 @@ public class UsbPortManager {
|
||||
currentPortInfo.contaminantDetectionStatus,
|
||||
currentPortInfo.usbDataStatus,
|
||||
currentPortInfo.powerTransferLimited,
|
||||
currentPortInfo.powerBrickStatus, pw);
|
||||
currentPortInfo.powerBrickConnectionStatus, pw);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -895,9 +895,9 @@ public class UsbPortManager {
|
||||
int contaminantProtectionStatus,
|
||||
boolean supportsEnableContaminantPresenceDetection,
|
||||
int contaminantDetectionStatus,
|
||||
int[] usbDataStatus,
|
||||
int usbDataStatus,
|
||||
boolean powerTransferLimited,
|
||||
int powerBrickStatus,
|
||||
int powerBrickConnectionStatus,
|
||||
IndentingPrintWriter pw) {
|
||||
// Only allow mode switch capability for dual role ports.
|
||||
// Validate that the current mode matches the supported modes we expect.
|
||||
@@ -957,7 +957,7 @@ public class UsbPortManager {
|
||||
currentDataRole, canChangeDataRole,
|
||||
supportedRoleCombinations, contaminantProtectionStatus,
|
||||
contaminantDetectionStatus, usbDataStatus,
|
||||
powerTransferLimited, powerBrickStatus);
|
||||
powerTransferLimited, powerBrickConnectionStatus);
|
||||
mPorts.put(portId, portInfo);
|
||||
} else {
|
||||
// Validate that ports aren't changing definition out from under us.
|
||||
@@ -995,7 +995,7 @@ public class UsbPortManager {
|
||||
currentDataRole, canChangeDataRole,
|
||||
supportedRoleCombinations, contaminantProtectionStatus,
|
||||
contaminantDetectionStatus, usbDataStatus,
|
||||
powerTransferLimited, powerBrickStatus)) {
|
||||
powerTransferLimited, powerBrickConnectionStatus)) {
|
||||
portInfo.mDisposition = PortInfo.DISPOSITION_CHANGED;
|
||||
} else {
|
||||
portInfo.mDisposition = PortInfo.DISPOSITION_READY;
|
||||
@@ -1222,7 +1222,7 @@ public class UsbPortManager {
|
||||
mUsbPortStatus = new UsbPortStatus(currentMode, currentPowerRole, currentDataRole,
|
||||
supportedRoleCombinations, UsbPortStatus.CONTAMINANT_PROTECTION_NONE,
|
||||
UsbPortStatus.CONTAMINANT_DETECTION_NOT_SUPPORTED,
|
||||
new int[]{UsbPortStatus.USB_DATA_STATUS_UNKNOWN}, false,
|
||||
UsbPortStatus.DATA_STATUS_UNKNOWN, false,
|
||||
UsbPortStatus.POWER_BRICK_STATUS_UNKNOWN);
|
||||
dispositionChanged = true;
|
||||
}
|
||||
@@ -1238,31 +1238,12 @@ public class UsbPortManager {
|
||||
return dispositionChanged;
|
||||
}
|
||||
|
||||
private boolean dataStatusEquals(int[] dataStatusL, int[] dataStatusR) {
|
||||
if (dataStatusL == null && dataStatusR == null) {
|
||||
return true;
|
||||
}
|
||||
if ((dataStatusL == null && dataStatusR != null)
|
||||
|| (dataStatusL != null && dataStatusR == null)) {
|
||||
return false;
|
||||
}
|
||||
if (dataStatusL.length != dataStatusR.length) {
|
||||
return false;
|
||||
}
|
||||
for (int i = 0; i < dataStatusL.length; i++) {
|
||||
if (dataStatusL[i] != dataStatusR[i]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean setStatus(int currentMode, boolean canChangeMode,
|
||||
int currentPowerRole, boolean canChangePowerRole,
|
||||
int currentDataRole, boolean canChangeDataRole,
|
||||
int supportedRoleCombinations, int contaminantProtectionStatus,
|
||||
int contaminantDetectionStatus, int[] usbDataStatus,
|
||||
boolean powerTransferLimited, int powerBrickStatus) {
|
||||
int contaminantDetectionStatus, int usbDataStatus,
|
||||
boolean powerTransferLimited, int powerBrickConnectionStatus) {
|
||||
boolean dispositionChanged = false;
|
||||
|
||||
mCanChangeMode = canChangeMode;
|
||||
@@ -1278,15 +1259,16 @@ public class UsbPortManager {
|
||||
!= contaminantProtectionStatus
|
||||
|| mUsbPortStatus.getContaminantDetectionStatus()
|
||||
!= contaminantDetectionStatus
|
||||
|| !dataStatusEquals(mUsbPortStatus.getUsbDataStatus(), usbDataStatus)
|
||||
|| mUsbPortStatus.getUsbDataStatus()
|
||||
!= usbDataStatus
|
||||
|| mUsbPortStatus.isPowerTransferLimited()
|
||||
!= powerTransferLimited
|
||||
|| mUsbPortStatus.getPowerBrickStatus()
|
||||
!= powerBrickStatus) {
|
||||
|| mUsbPortStatus.getPowerBrickConnectionStatus()
|
||||
!= powerBrickConnectionStatus) {
|
||||
mUsbPortStatus = new UsbPortStatus(currentMode, currentPowerRole, currentDataRole,
|
||||
supportedRoleCombinations, contaminantProtectionStatus,
|
||||
contaminantDetectionStatus, usbDataStatus,
|
||||
powerTransferLimited, powerBrickStatus);
|
||||
powerTransferLimited, powerBrickConnectionStatus);
|
||||
dispositionChanged = true;
|
||||
}
|
||||
|
||||
|
||||
@@ -37,9 +37,9 @@ public final class RawPortInfo implements Parcelable {
|
||||
public int contaminantProtectionStatus;
|
||||
public boolean supportsEnableContaminantPresenceDetection;
|
||||
public int contaminantDetectionStatus;
|
||||
public int[] usbDataStatus;
|
||||
public int usbDataStatus;
|
||||
public boolean powerTransferLimited;
|
||||
public int powerBrickStatus;
|
||||
public int powerBrickConnectionStatus;
|
||||
|
||||
public RawPortInfo(String portId, int supportedModes) {
|
||||
this.portId = portId;
|
||||
@@ -49,9 +49,10 @@ public final class RawPortInfo implements Parcelable {
|
||||
this.contaminantProtectionStatus = UsbPortStatus.CONTAMINANT_PROTECTION_NONE;
|
||||
this.supportsEnableContaminantPresenceDetection = false;
|
||||
this.contaminantDetectionStatus = UsbPortStatus.CONTAMINANT_DETECTION_NOT_SUPPORTED;
|
||||
this.usbDataStatus[0] = UsbPortStatus.USB_DATA_STATUS_UNKNOWN;
|
||||
this.usbDataStatus = UsbPortStatus.DATA_STATUS_UNKNOWN;
|
||||
|
||||
this.powerTransferLimited = false;
|
||||
this.powerBrickStatus = UsbPortStatus.POWER_BRICK_STATUS_UNKNOWN;
|
||||
this.powerBrickConnectionStatus = UsbPortStatus.POWER_BRICK_STATUS_UNKNOWN;
|
||||
}
|
||||
|
||||
public RawPortInfo(String portId, int supportedModes, int supportedContaminantProtectionModes,
|
||||
@@ -62,9 +63,9 @@ public final class RawPortInfo implements Parcelable {
|
||||
int contaminantProtectionStatus,
|
||||
boolean supportsEnableContaminantPresenceDetection,
|
||||
int contaminantDetectionStatus,
|
||||
int[] usbDataStatus,
|
||||
int usbDataStatus,
|
||||
boolean powerTransferLimited,
|
||||
int powerBrickStatus) {
|
||||
int powerBrickConnectionStatus) {
|
||||
this.portId = portId;
|
||||
this.supportedModes = supportedModes;
|
||||
this.supportedContaminantProtectionModes = supportedContaminantProtectionModes;
|
||||
@@ -82,7 +83,7 @@ public final class RawPortInfo implements Parcelable {
|
||||
this.contaminantDetectionStatus = contaminantDetectionStatus;
|
||||
this.usbDataStatus = usbDataStatus;
|
||||
this.powerTransferLimited = powerTransferLimited;
|
||||
this.powerBrickStatus = powerBrickStatus;
|
||||
this.powerBrickConnectionStatus = powerBrickConnectionStatus;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -105,10 +106,9 @@ public final class RawPortInfo implements Parcelable {
|
||||
dest.writeInt(contaminantProtectionStatus);
|
||||
dest.writeBoolean(supportsEnableContaminantPresenceDetection);
|
||||
dest.writeInt(contaminantDetectionStatus);
|
||||
dest.writeInt(usbDataStatus.length);
|
||||
dest.writeIntArray(usbDataStatus);
|
||||
dest.writeInt(usbDataStatus);
|
||||
dest.writeBoolean(powerTransferLimited);
|
||||
dest.writeInt(powerBrickStatus);
|
||||
dest.writeInt(powerBrickConnectionStatus);
|
||||
}
|
||||
|
||||
public static final Parcelable.Creator<RawPortInfo> CREATOR =
|
||||
@@ -128,10 +128,9 @@ public final class RawPortInfo implements Parcelable {
|
||||
int contaminantProtectionStatus = in.readInt();
|
||||
boolean supportsEnableContaminantPresenceDetection = in.readBoolean();
|
||||
int contaminantDetectionStatus = in.readInt();
|
||||
int[] usbDataStatus = new int[in.readInt()];
|
||||
in.readIntArray(usbDataStatus);
|
||||
int usbDataStatus = in.readInt();
|
||||
boolean powerTransferLimited = in.readBoolean();
|
||||
int powerBrickStatus = in.readInt();
|
||||
int powerBrickConnectionStatus = in.readInt();
|
||||
return new RawPortInfo(id, supportedModes,
|
||||
supportedContaminantProtectionModes, currentMode, canChangeMode,
|
||||
currentPowerRole, canChangePowerRole,
|
||||
@@ -140,7 +139,7 @@ public final class RawPortInfo implements Parcelable {
|
||||
contaminantProtectionStatus,
|
||||
supportsEnableContaminantPresenceDetection,
|
||||
contaminantDetectionStatus, usbDataStatus,
|
||||
powerTransferLimited, powerBrickStatus);
|
||||
powerTransferLimited, powerBrickConnectionStatus);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -73,6 +73,42 @@ public final class UsbPortAidl implements UsbPortHal {
|
||||
private boolean mSystemReady;
|
||||
private long mTransactionId;
|
||||
|
||||
/**
|
||||
* USB data status is not known.
|
||||
*/
|
||||
public static final int USB_DATA_STATUS_UNKNOWN = 0;
|
||||
|
||||
/**
|
||||
* USB data is enabled.
|
||||
*/
|
||||
public static final int USB_DATA_STATUS_ENABLED = 1;
|
||||
|
||||
/**
|
||||
* USB data is disabled as the port is too hot.
|
||||
*/
|
||||
public static final int USB_DATA_STATUS_DISABLED_OVERHEAT = 2;
|
||||
|
||||
/**
|
||||
* USB data is disabled due to contaminated port.
|
||||
*/
|
||||
public static final int USB_DATA_STATUS_DISABLED_CONTAMINANT = 3;
|
||||
|
||||
/**
|
||||
* USB data is disabled due to docking event.
|
||||
*/
|
||||
public static final int USB_DATA_STATUS_DISABLED_DOCK = 4;
|
||||
|
||||
/**
|
||||
* USB data is disabled by
|
||||
* {@link UsbPort#enableUsbData UsbPort.enableUsbData}.
|
||||
*/
|
||||
public static final int USB_DATA_STATUS_DISABLED_FORCE = 5;
|
||||
|
||||
/**
|
||||
* USB data is disabled for debug.
|
||||
*/
|
||||
public static final int USB_DATA_STATUS_DISABLED_DEBUG = 6;
|
||||
|
||||
public @UsbHalVersion int getUsbHalVersion() throws RemoteException {
|
||||
synchronized (mLock) {
|
||||
if (mProxy == null) {
|
||||
@@ -489,12 +525,34 @@ public final class UsbPortAidl implements UsbPortHal {
|
||||
return supportedContaminantProtectionModes;
|
||||
}
|
||||
|
||||
private int[] toIntArray(byte[] input) {
|
||||
int[] output = new int[input.length];
|
||||
for (int i = 0; i < input.length; i++) {
|
||||
output[i] = input[i];
|
||||
private int toUsbDataStatusInt(byte[] usbDataStatusHal) {
|
||||
int usbDataStatus = UsbPortStatus.DATA_STATUS_UNKNOWN;
|
||||
for (int i = 0; i < usbDataStatusHal.length; i++) {
|
||||
switch (usbDataStatusHal[i]) {
|
||||
case USB_DATA_STATUS_ENABLED:
|
||||
usbDataStatus |= UsbPortStatus.DATA_STATUS_ENABLED;
|
||||
break;
|
||||
case USB_DATA_STATUS_DISABLED_OVERHEAT:
|
||||
usbDataStatus |= UsbPortStatus.DATA_STATUS_DISABLED_OVERHEAT;
|
||||
break;
|
||||
case USB_DATA_STATUS_DISABLED_CONTAMINANT:
|
||||
usbDataStatus |= UsbPortStatus.DATA_STATUS_DISABLED_CONTAMINANT;
|
||||
break;
|
||||
case USB_DATA_STATUS_DISABLED_DOCK:
|
||||
usbDataStatus |= UsbPortStatus.DATA_STATUS_DISABLED_DOCK;
|
||||
break;
|
||||
case USB_DATA_STATUS_DISABLED_FORCE:
|
||||
usbDataStatus |= UsbPortStatus.DATA_STATUS_DISABLED_FORCE;
|
||||
break;
|
||||
case USB_DATA_STATUS_DISABLED_DEBUG:
|
||||
usbDataStatus |= UsbPortStatus.DATA_STATUS_DISABLED_DEBUG;
|
||||
break;
|
||||
default:
|
||||
usbDataStatus |= UsbPortStatus.DATA_STATUS_UNKNOWN;
|
||||
}
|
||||
}
|
||||
return output;
|
||||
UsbPortManager.logAndPrint(Log.INFO, mPw, "AIDL UsbDataStatus:" + usbDataStatus);
|
||||
return usbDataStatus;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -528,7 +586,7 @@ public final class UsbPortAidl implements UsbPortHal {
|
||||
toContaminantProtectionStatus(current.contaminantProtectionStatus),
|
||||
current.supportsEnableContaminantPresenceDetection,
|
||||
current.contaminantDetectionStatus,
|
||||
toIntArray(current.usbDataStatus),
|
||||
toUsbDataStatusInt(current.usbDataStatus),
|
||||
current.powerTransferLimited,
|
||||
current.powerBrickStatus);
|
||||
newPortInfo.add(temp);
|
||||
|
||||
@@ -33,8 +33,8 @@ import static android.hardware.usb.UsbPortStatus.MODE_UFP;
|
||||
import static android.hardware.usb.UsbPortStatus.POWER_BRICK_STATUS_UNKNOWN;
|
||||
import static android.hardware.usb.UsbPortStatus.POWER_ROLE_SINK;
|
||||
import static android.hardware.usb.UsbPortStatus.POWER_ROLE_SOURCE;
|
||||
import static android.hardware.usb.UsbPortStatus.USB_DATA_STATUS_DISABLED_FORCE;
|
||||
import static android.hardware.usb.UsbPortStatus.USB_DATA_STATUS_UNKNOWN;
|
||||
import static android.hardware.usb.UsbPortStatus.DATA_STATUS_DISABLED_FORCE;
|
||||
import static android.hardware.usb.UsbPortStatus.DATA_STATUS_UNKNOWN;
|
||||
|
||||
|
||||
import static com.android.server.usb.UsbPortManager.logAndPrint;
|
||||
@@ -85,7 +85,7 @@ public final class UsbPortHidl implements UsbPortHal {
|
||||
private HALCallback mHALCallback;
|
||||
private boolean mSystemReady;
|
||||
// Workaround since HIDL HAL versions report UsbDataEnabled status in UsbPortStatus;
|
||||
private static int sUsbDataStatus = USB_DATA_STATUS_UNKNOWN;
|
||||
private static int sUsbDataStatus = DATA_STATUS_UNKNOWN;
|
||||
|
||||
public @UsbHalVersion int getUsbHalVersion() throws RemoteException {
|
||||
int version;
|
||||
@@ -375,7 +375,7 @@ public final class UsbPortHidl implements UsbPortHal {
|
||||
}
|
||||
}
|
||||
if (success) {
|
||||
sUsbDataStatus = enable ? USB_DATA_STATUS_UNKNOWN : USB_DATA_STATUS_DISABLED_FORCE;
|
||||
sUsbDataStatus = enable ? DATA_STATUS_UNKNOWN : DATA_STATUS_DISABLED_FORCE;
|
||||
}
|
||||
try {
|
||||
callback.onOperationComplete(success
|
||||
@@ -421,7 +421,7 @@ public final class UsbPortHidl implements UsbPortHal {
|
||||
current.canChangePowerRole,
|
||||
current.currentDataRole, current.canChangeDataRole,
|
||||
false, CONTAMINANT_PROTECTION_NONE,
|
||||
false, CONTAMINANT_DETECTION_NOT_SUPPORTED, new int[sUsbDataStatus],
|
||||
false, CONTAMINANT_DETECTION_NOT_SUPPORTED, sUsbDataStatus,
|
||||
false, POWER_BRICK_STATUS_UNKNOWN);
|
||||
newPortInfo.add(temp);
|
||||
UsbPortManager.logAndPrint(Log.INFO, mPw, "ClientCallback V1_0: "
|
||||
@@ -455,7 +455,7 @@ public final class UsbPortHidl implements UsbPortHal {
|
||||
current.status.canChangePowerRole,
|
||||
current.status.currentDataRole, current.status.canChangeDataRole,
|
||||
false, CONTAMINANT_PROTECTION_NONE,
|
||||
false, CONTAMINANT_DETECTION_NOT_SUPPORTED, new int[sUsbDataStatus],
|
||||
false, CONTAMINANT_DETECTION_NOT_SUPPORTED, sUsbDataStatus,
|
||||
false, POWER_BRICK_STATUS_UNKNOWN);
|
||||
newPortInfo.add(temp);
|
||||
UsbPortManager.logAndPrint(Log.INFO, mPw, "ClientCallback V1_1: "
|
||||
@@ -493,7 +493,7 @@ public final class UsbPortHidl implements UsbPortHal {
|
||||
current.contaminantProtectionStatus,
|
||||
current.supportsEnableContaminantPresenceDetection,
|
||||
current.contaminantDetectionStatus,
|
||||
new int[sUsbDataStatus],
|
||||
sUsbDataStatus,
|
||||
false, POWER_BRICK_STATUS_UNKNOWN);
|
||||
newPortInfo.add(temp);
|
||||
UsbPortManager.logAndPrint(Log.INFO, mPw, "ClientCallback V1_2: "
|
||||
|
||||
Reference in New Issue
Block a user