Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2ddb5aff authored by Badhri Jagan Sridharan's avatar Badhri Jagan Sridharan
Browse files

Add additional status flags to UsbDataStatus

This change introduces two new values to UsbDataStatus interface
to denote status of Usb data. Previously, UsbDataStatus interface
contained DISABLED_DOCK which indicated that USB data is disabled
due to a docking event. Depending on the hardware design, some
architectures might only disable USB host mode or USB gadget
mode selectively when docked. This change adds interface values
to denote them. DISABLED_DOCK_HOST_MODE indicates USB host mode
disabled due to docking event. DISABLED_DOCK_DEVICE_MODE indicates
device mode disabled due to docking event. DISABLED_DOCK needs to
be set when either of DISABLED_DOCK_HOST_MODE or
DISABLED_DOCK_DEVICE_MODE is set.

Bug: 250522538
Change-Id: Icaca2d2b704661261905bfaf79a03808ddc39895
parent 3eab0a19
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -5758,6 +5758,8 @@ package android.hardware.usb {
    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_DOCK_DEVICE_MODE = 128; // 0x80
    field public static final int DATA_STATUS_DISABLED_DOCK_HOST_MODE = 64; // 0x40
    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
+11 −0
Original line number Diff line number Diff line
@@ -46,6 +46,8 @@ import static android.hardware.usb.UsbPortStatus.DATA_STATUS_DISABLED_CONTAMINAN
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 static android.hardware.usb.UsbPortStatus.DATA_STATUS_DISABLED_DOCK_HOST_MODE;
import static android.hardware.usb.UsbPortStatus.DATA_STATUS_DISABLED_DOCK_DEVICE_MODE;
import static android.hardware.usb.UsbPortStatus.COMPLIANCE_WARNING_DEBUG_ACCESSORY;
import static android.hardware.usb.UsbPortStatus.COMPLIANCE_WARNING_BC_1_2;
import static android.hardware.usb.UsbPortStatus.COMPLIANCE_WARNING_MISSING_RP;
@@ -676,6 +678,15 @@ public final class UsbPort {
            statusString.append("disabled-debug, ");
        }

        if ((usbDataStatus & DATA_STATUS_DISABLED_DOCK_HOST_MODE) ==
            DATA_STATUS_DISABLED_DOCK_HOST_MODE) {
            statusString.append("disabled-host-dock, ");
        }

        if ((usbDataStatus & DATA_STATUS_DISABLED_DOCK_DEVICE_MODE) ==
            DATA_STATUS_DISABLED_DOCK_DEVICE_MODE) {
            statusString.append("disabled-device-dock, ");
        }
        return statusString.toString().replaceAll(", $", "");
    }

+35 −2
Original line number Diff line number Diff line
@@ -219,7 +219,11 @@ public final class UsbPortStatus implements Parcelable {
    public static final int DATA_STATUS_DISABLED_CONTAMINANT = 1 << 2;

    /**
     * USB data is disabled due to docking event.
     * This flag indicates that some or all data modes are disabled
     * due to docking event, and the specific sub-statuses viz.,
     * {@link #DATA_STATUS_DISABLED_DOCK_HOST_MODE},
     * {@link #DATA_STATUS_DISABLED_DOCK_DEVICE_MODE}
     * can be checked for individual modes.
     */
    public static final int DATA_STATUS_DISABLED_DOCK = 1 << 3;

@@ -234,6 +238,18 @@ public final class UsbPortStatus implements Parcelable {
     */
    public static final int DATA_STATUS_DISABLED_DEBUG = 1 << 5;

    /**
     * USB host mode is disabled due to docking event.
     * {@link #DATA_STATUS_DISABLED_DOCK} will be set as well.
     */
    public static final int DATA_STATUS_DISABLED_DOCK_HOST_MODE = 1 << 6;

    /**
     * USB device mode is disabled due to docking event.
     * {@link #DATA_STATUS_DISABLED_DOCK} will be set as well.
     */
    public static final int DATA_STATUS_DISABLED_DOCK_DEVICE_MODE = 1 << 7;

    /**
     * Unknown whether a power brick is connected.
     */
@@ -329,6 +345,8 @@ public final class UsbPortStatus implements Parcelable {
            DATA_STATUS_DISABLED_OVERHEAT,
            DATA_STATUS_DISABLED_CONTAMINANT,
            DATA_STATUS_DISABLED_DOCK,
            DATA_STATUS_DISABLED_DOCK_HOST_MODE,
            DATA_STATUS_DISABLED_DOCK_DEVICE_MODE,
            DATA_STATUS_DISABLED_FORCE,
            DATA_STATUS_DISABLED_DEBUG
    })
@@ -357,6 +375,20 @@ public final class UsbPortStatus implements Parcelable {
        mSupportedRoleCombinations = supportedRoleCombinations;
        mContaminantProtectionStatus = contaminantProtectionStatus;
        mContaminantDetectionStatus = contaminantDetectionStatus;

        // Older implementations that only set the DISABLED_DOCK_MODE will have the other two
        // set at the HAL interface level, so the "dock mode only" state shouldn't be visible here.
        // But the semantics are ensured here.
        int disabledDockModes = (usbDataStatus &
            (DATA_STATUS_DISABLED_DOCK_HOST_MODE | DATA_STATUS_DISABLED_DOCK_DEVICE_MODE));
        if (disabledDockModes != 0) {
            // Set DATA_STATUS_DISABLED_DOCK when one of DATA_STATUS_DISABLED_DOCK_*_MODE is set
            usbDataStatus |= DATA_STATUS_DISABLED_DOCK;
        } else {
            // Clear DATA_STATUS_DISABLED_DOCK when none of DATA_STATUS_DISABLED_DOCK_*_MODE is set
            usbDataStatus &= ~DATA_STATUS_DISABLED_DOCK;
        }

        mUsbDataStatus = usbDataStatus;
        mPowerTransferLimited = powerTransferLimited;
        mPowerBrickConnectionStatus = powerBrickConnectionStatus;
@@ -472,7 +504,8 @@ public final class UsbPortStatus implements Parcelable {
     *         {@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}
     *         {@link #DATA_STATUS_DISABLED_DEBUG}, {@link #DATA_STATUS_DISABLED_DOCK_HOST_MODE},
     *         {@link #DATA_STATUS_DISABLED_DOCK_DEVICE_MODE}
     */
    public @UsbDataStatus int getUsbDataStatus() {
        return mUsbDataStatus;
+41 −14
Original line number Diff line number Diff line
@@ -80,38 +80,46 @@ public final class UsbPortAidl implements UsbPortHal {
    /**
     * USB data status is not known.
     */
    public static final int USB_DATA_STATUS_UNKNOWN = 0;
    public static final int AIDL_USB_DATA_STATUS_UNKNOWN = 0;

    /**
     * USB data is enabled.
     */
    public static final int USB_DATA_STATUS_ENABLED = 1;
    public static final int AIDL_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;
    public static final int AIDL_USB_DATA_STATUS_DISABLED_OVERHEAT = 2;

    /**
     * USB data is disabled due to contaminated port.
     */
    public static final int USB_DATA_STATUS_DISABLED_CONTAMINANT = 3;
    public static final int AIDL_USB_DATA_STATUS_DISABLED_CONTAMINANT = 3;

    /**
     * USB data is disabled due to docking event.
     * USB data(both host mode and device mode) is disabled due to docking event.
     */
    public static final int USB_DATA_STATUS_DISABLED_DOCK = 4;
    public static final int AIDL_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;
    public static final int AIDL_USB_DATA_STATUS_DISABLED_FORCE = 5;

    /**
     * USB data is disabled for debug.
     */
    public static final int USB_DATA_STATUS_DISABLED_DEBUG = 6;
    public static final int AIDL_USB_DATA_STATUS_DISABLED_DEBUG = 6;
    /**
     * USB host mode disabled due to docking event.
     */
    public static final int AIDL_USB_DATA_STATUS_DISABLED_DOCK_HOST_MODE = 7;
    /**
     * USB device mode disabled due to docking event.
     */
    public static final int AIDL_USB_DATA_STATUS_DISABLED_DOCK_DEVICE_MODE = 8;

    public @UsbHalVersion int getUsbHalVersion() throws RemoteException {
        synchronized (mLock) {
@@ -529,24 +537,43 @@ public final class UsbPortAidl implements UsbPortHal {
            int usbDataStatus = UsbPortStatus.DATA_STATUS_UNKNOWN;
            for (int i = 0; i < usbDataStatusHal.length; i++) {
                switch (usbDataStatusHal[i]) {
                    case USB_DATA_STATUS_ENABLED:
                    case AIDL_USB_DATA_STATUS_ENABLED:
                        usbDataStatus |= UsbPortStatus.DATA_STATUS_ENABLED;
                        break;
                    case USB_DATA_STATUS_DISABLED_OVERHEAT:
                    case AIDL_USB_DATA_STATUS_DISABLED_OVERHEAT:
                        usbDataStatus |= UsbPortStatus.DATA_STATUS_DISABLED_OVERHEAT;
                        break;
                    case USB_DATA_STATUS_DISABLED_CONTAMINANT:
                    case AIDL_USB_DATA_STATUS_DISABLED_CONTAMINANT:
                        usbDataStatus |= UsbPortStatus.DATA_STATUS_DISABLED_CONTAMINANT;
                        break;
                    case USB_DATA_STATUS_DISABLED_DOCK:
                    /* Indicates both host and gadget mode being disabled. */
                    case AIDL_USB_DATA_STATUS_DISABLED_DOCK:
                        usbDataStatus |= UsbPortStatus.DATA_STATUS_DISABLED_DOCK;
                        usbDataStatus |= UsbPortStatus.DATA_STATUS_DISABLED_DOCK_HOST_MODE;
                        usbDataStatus |= UsbPortStatus.DATA_STATUS_DISABLED_DOCK_DEVICE_MODE;
                        break;
                    case USB_DATA_STATUS_DISABLED_FORCE:
                    case AIDL_USB_DATA_STATUS_DISABLED_FORCE:
                        usbDataStatus |= UsbPortStatus.DATA_STATUS_DISABLED_FORCE;
                        break;
                    case USB_DATA_STATUS_DISABLED_DEBUG:
                    case AIDL_USB_DATA_STATUS_DISABLED_DEBUG:
                        usbDataStatus |= UsbPortStatus.DATA_STATUS_DISABLED_DEBUG;
                        break;
                    /*
                     * Set DATA_STATUS_DISABLED_DOCK when DATA_STATUS_DISABLED_DOCK_HOST_MODE
                     * is set.
                     */
                    case AIDL_USB_DATA_STATUS_DISABLED_DOCK_HOST_MODE:
                        usbDataStatus |= UsbPortStatus.DATA_STATUS_DISABLED_DOCK_HOST_MODE;
                        usbDataStatus |= UsbPortStatus.DATA_STATUS_DISABLED_DOCK;
                        break;
                    /*
                     * Set DATA_STATUS_DISABLED_DOCK when DATA_STATUS_DISABLED_DEVICE_DOCK
                     * is set.
                     */
                    case AIDL_USB_DATA_STATUS_DISABLED_DOCK_DEVICE_MODE:
                        usbDataStatus |= UsbPortStatus.DATA_STATUS_DISABLED_DOCK_DEVICE_MODE;
                        usbDataStatus |= UsbPortStatus.DATA_STATUS_DISABLED_DOCK;
                        break;
                    default:
                        usbDataStatus |= UsbPortStatus.DATA_STATUS_UNKNOWN;
                }