Merge "Convert @UsbDataStatus into bit field flags."

This commit is contained in:
Badhri Jagan Sridharan
2022-02-15 07:30:29 +00:00
committed by Android (Google) Code Review
8 changed files with 313 additions and 152 deletions

View File

@@ -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
}
}

View File

@@ -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);
}
}

View File

@@ -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;
}
};
}

View File

@@ -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);
}
}

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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);

View File

@@ -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: "