176c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown/* 276c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * Copyright (C) 2015 The Android Open Source Project 376c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * 476c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 576c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * you may not use this file except in compliance with the License. 676c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * You may obtain a copy of the License at 776c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * 876c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * http://www.apache.org/licenses/LICENSE-2.0 976c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * 1076c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * Unless required by applicable law or agreed to in writing, software 1176c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 1276c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1376c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * See the License for the specific language governing permissions and 1476c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * limitations under the License. 1576c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown */ 1676c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown 1776c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brownpackage android.hardware.usb; 1876c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown 1976c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brownimport android.os.Parcel; 2076c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brownimport android.os.Parcelable; 2176c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown 2276c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown/** 2376c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * Describes the status of a USB port. 2476c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * <p> 2576c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * This object is immutable. 2676c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * </p> 2776c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * 2876c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * @hide 2976c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown */ 3076c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brownpublic final class UsbPortStatus implements Parcelable { 3176c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown private final int mCurrentMode; 3276c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown private final int mCurrentPowerRole; 3376c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown private final int mCurrentDataRole; 3476c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown private final int mSupportedRoleCombinations; 3576c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown 3676c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown /** @hide */ 3776c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown public UsbPortStatus(int currentMode, int currentPowerRole, int currentDataRole, 3876c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown int supportedRoleCombinations) { 3976c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown mCurrentMode = currentMode; 4076c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown mCurrentPowerRole = currentPowerRole; 4176c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown mCurrentDataRole = currentDataRole; 4276c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown mSupportedRoleCombinations = supportedRoleCombinations; 4376c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown } 4476c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown 4576c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown /** 4676c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * Returns true if there is anything connected to the port. 4776c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * 4876c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * @return True if there is anything connected to the port. 4976c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown */ 5076c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown public boolean isConnected() { 5176c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown return mCurrentMode != 0; 5276c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown } 5376c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown 5476c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown /** 5576c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * Gets the current mode of the port. 5676c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * 5776c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * @return The current mode: {@link UsbPort#MODE_DFP}, {@link UsbPort#MODE_UFP}, 5876c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * or 0 if nothing is connected. 5976c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown */ 6076c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown public int getCurrentMode() { 6176c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown return mCurrentMode; 6276c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown } 6376c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown 6476c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown /** 6576c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * Gets the current power role of the port. 6676c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * 6776c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * @return The current power role: {@link UsbPort#POWER_ROLE_SOURCE}, 6876c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * {@link UsbPort#POWER_ROLE_SINK}, or 0 if nothing is connected. 6976c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown */ 7076c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown public int getCurrentPowerRole() { 7176c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown return mCurrentPowerRole; 7276c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown } 7376c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown 7476c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown /** 7576c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * Gets the current data role of the port. 7676c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * 7776c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * @return The current data role: {@link UsbPort#DATA_ROLE_HOST}, 7876c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * {@link UsbPort#DATA_ROLE_DEVICE}, or 0 if nothing is connected. 7976c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown */ 8076c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown public int getCurrentDataRole() { 8176c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown return mCurrentDataRole; 8276c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown } 8376c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown 8476c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown /** 8576c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * Returns true if the specified power and data role combination is supported 8676c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * given what is currently connected to the port. 8776c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * 8876c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * @param powerRole The power role to check: {@link UsbPort#POWER_ROLE_SOURCE} 8976c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * or {@link UsbPort#POWER_ROLE_SINK}, or 0 if no power role. 9076c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * @param dataRole The data role to check: either {@link UsbPort#DATA_ROLE_HOST} 9176c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown * or {@link UsbPort#DATA_ROLE_DEVICE}, or 0 if no data role. 9276c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown */ 9376c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown public boolean isRoleCombinationSupported(int powerRole, int dataRole) { 9476c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown return (mSupportedRoleCombinations & 9576c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown UsbPort.combineRolesAsBit(powerRole, dataRole)) != 0; 9676c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown } 9776c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown 9876c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown /** @hide */ 9976c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown public int getSupportedRoleCombinations() { 10076c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown return mSupportedRoleCombinations; 10176c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown } 10276c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown 10376c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown @Override 10476c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown public String toString() { 10576c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown return "UsbPortStatus{connected=" + isConnected() 10676c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown + ", currentMode=" + UsbPort.modeToString(mCurrentMode) 10776c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown + ", currentPowerRole=" + UsbPort.powerRoleToString(mCurrentPowerRole) 10876c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown + ", currentDataRole=" + UsbPort.dataRoleToString(mCurrentDataRole) 10976c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown + ", supportedRoleCombinations=" 11076c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown + UsbPort.roleCombinationsToString(mSupportedRoleCombinations) 11176c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown + "}"; 11276c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown } 11376c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown 11476c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown @Override 11576c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown public int describeContents() { 11676c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown return 0; 11776c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown } 11876c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown 11976c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown @Override 12076c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown public void writeToParcel(Parcel dest, int flags) { 12176c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown dest.writeInt(mCurrentMode); 12276c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown dest.writeInt(mCurrentPowerRole); 12376c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown dest.writeInt(mCurrentDataRole); 12476c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown dest.writeInt(mSupportedRoleCombinations); 12576c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown } 12676c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown 12776c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown public static final Parcelable.Creator<UsbPortStatus> CREATOR = 12876c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown new Parcelable.Creator<UsbPortStatus>() { 12976c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown @Override 13076c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown public UsbPortStatus createFromParcel(Parcel in) { 13176c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown int currentMode = in.readInt(); 13276c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown int currentPowerRole = in.readInt(); 13376c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown int currentDataRole = in.readInt(); 13476c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown int supportedRoleCombinations = in.readInt(); 13576c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown return new UsbPortStatus(currentMode, currentPowerRole, currentDataRole, 13676c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown supportedRoleCombinations); 13776c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown } 13876c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown 13976c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown @Override 14076c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown public UsbPortStatus[] newArray(int size) { 14176c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown return new UsbPortStatus[size]; 14276c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown } 14376c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown }; 14476c4c6668a1486bc003ab0c585bb1f41d16e27a7Jeff Brown} 145