Loading core/java/android/hardware/usb/IUsbManager.aidl +11 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,8 @@ package android.hardware.usb; import android.app.PendingIntent; import android.hardware.usb.UsbAccessory; import android.hardware.usb.UsbDevice; import android.hardware.usb.UsbPort; import android.hardware.usb.UsbPortStatus; import android.os.Bundle; import android.os.ParcelFileDescriptor; Loading Loading @@ -108,4 +110,13 @@ interface IUsbManager /* Clear public keys installed for secure USB debugging */ void clearUsbDebuggingKeys(); /* Gets the list of USB ports. */ UsbPort[] getPorts(); /* Gets the status of the specified USB port. */ UsbPortStatus getPortStatus(in String portId); /* Sets the port's current role. */ void setPortRoles(in String portId, int powerRole, int dataRole); } core/java/android/hardware/usb/UsbManager.java +106 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package android.hardware.usb; import com.android.internal.util.Preconditions; import android.app.PendingIntent; import android.content.Context; import android.os.Bundle; Loading Loading @@ -74,6 +76,22 @@ public class UsbManager { public static final String ACTION_USB_STATE = "android.hardware.usb.action.USB_STATE"; /** * Broadcast Action: A broadcast for USB port changes. * * This intent is sent when a USB port is added, removed, or changes state. * <ul> * <li> {@link #EXTRA_PORT} containing the {@link android.hardware.usb.UsbPort} * for the port. * <li> {@link #EXTRA_PORT_STATUS} containing the {@link android.hardware.usb.UsbPortStatus} * for the port, or null if the port has been removed * </ul> * * @hide */ public static final String ACTION_USB_PORT_CHANGED = "android.hardware.usb.action.USB_PORT_CHANGED"; /** * Broadcast Action: A broadcast for USB device attached event. * Loading Loading @@ -213,6 +231,23 @@ public class UsbManager { */ public static final String USB_FUNCTION_ACCESSORY = "accessory"; /** * Name of extra for {@link #ACTION_USB_PORT_CHANGED} * containing the {@link UsbPort} object for the port. * * @hide */ public static final String EXTRA_PORT = "port"; /** * Name of extra for {@link #ACTION_USB_PORT_CHANGED} * containing the {@link UsbPortStatus} object for the port, or null if the port * was removed. * * @hide */ public static final String EXTRA_PORT_STATUS = "portStatus"; /** * Name of extra for {@link #ACTION_USB_DEVICE_ATTACHED} and * {@link #ACTION_USB_DEVICE_DETACHED} broadcasts Loading Loading @@ -499,6 +534,77 @@ public class UsbManager { return false; } /** * Returns a list of physical USB ports on the device. * <p> * This list is guaranteed to contain all dual-role USB Type C ports but it might * be missing other ports depending on whether the kernel USB drivers have been * updated to publish all of the device's ports through the new "dual_role_usb" * device class (which supports all types of ports despite its name). * </p> * * @return The list of USB ports, or null if none. * * @hide */ public UsbPort[] getPorts() { try { return mService.getPorts(); } catch (RemoteException e) { Log.e(TAG, "RemoteException in getPorts", e); } return null; } /** * Gets the status of the specified USB port. * * @param port The port to query. * @return The status of the specified USB port, or null if unknown. * * @hide */ public UsbPortStatus getPortStatus(UsbPort port) { Preconditions.checkNotNull(port, "port must not be null"); try { return mService.getPortStatus(port.getId()); } catch (RemoteException e) { Log.e(TAG, "RemoteException in getPortStatus", e); } return null; } /** * Sets the desired role combination of the port. * <p> * The supported role combinations depend on what is connected to the port and may be * determined by consulting * {@link UsbPortStatus#isRoleCombinationSupported UsbPortStatus.isRoleCombinationSupported}. * </p><p> * Note: This function is asynchronous and may fail silently without applying * the requested changes. If this function does cause a status change to occur then * a {@link #ACTION_USB_PORT_CHANGED} broadcast will be sent. * </p> * * @param powerRole The desired power role: {@link UsbPort#POWER_ROLE_SOURCE} * or {@link UsbPort#POWER_ROLE_SINK}, or 0 if no power role. * @param dataRole The desired data role: {@link UsbPort#DATA_ROLE_HOST} * or {@link UsbPort#DATA_ROLE_DEVICE}, or 0 if no data role. * * @hide */ public void setPortRoles(UsbPort port, int powerRole, int dataRole) { Preconditions.checkNotNull(port, "port must not be null"); UsbPort.checkRoles(powerRole, dataRole); try { mService.setPortRoles(port.getId(), powerRole, dataRole); } catch (RemoteException e) { Log.e(TAG, "RemoteException in setPortRole", e); } } /** @hide */ public static String addFunction(String functions, String function) { if ("none".equals(functions)) { Loading core/java/android/hardware/usb/UsbPort.aidl 0 → 100644 +19 −0 Original line number Diff line number Diff line /* * Copyright (C) 2015, 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; parcelable UsbPort; core/java/android/hardware/usb/UsbPort.java 0 → 100644 +238 −0 Original line number Diff line number Diff line /* * Copyright (C) 2015 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 com.android.internal.util.Preconditions; import android.os.Parcel; import android.os.Parcelable; /** * Represents a physical USB port and describes its characteristics. * <p> * This object is immutable. * </p> * * @hide */ public final class UsbPort implements Parcelable { private final String mId; private final int mSupportedModes; /** * Mode bit: This USB port can act as a downstream facing port (host). * <p> * Implies that the port supports the {@link #POWER_ROLE_SOURCE} and {@link #DATA_ROLE_HOST} * combination of roles (and possibly others as well). * </p> */ public static final int MODE_DFP = 1 << 0; /** * Mode bit: This USB port can act as an upstream facing port (device). * <p> * Implies that the port supports the {@link #POWER_ROLE_SINK} and {@link #DATA_ROLE_DEVICE} * combination of roles (and possibly others as well). * </p> */ public static final int MODE_UFP = 1 << 1; /** * Mode bit: This USB port can act either as an downstream facing port (host) or as * an upstream facing port (device). * <p> * Implies that the port supports the {@link #POWER_ROLE_SOURCE} and {@link #DATA_ROLE_HOST} * combination of roles and the {@link #POWER_ROLE_SINK} and {@link #DATA_ROLE_DEVICE} * combination of roles (and possibly others as well). * </p> */ public static final int MODE_DUAL = MODE_DFP | MODE_UFP; /** * Power role: This USB port can act as a source (provide power). */ public static final int POWER_ROLE_SOURCE = 1; /** * Power role: This USB port can act as a sink (receive power). */ public static final int POWER_ROLE_SINK = 2; /** * Data role: This USB port can act as a host (access data services). */ public static final int DATA_ROLE_HOST = 1; /** * Data role: This USB port can act as a device (offer data services). */ public static final int DATA_ROLE_DEVICE = 2; private static final int NUM_DATA_ROLES = 3; /** @hide */ public UsbPort(String id, int supportedModes) { mId = id; mSupportedModes = supportedModes; } /** * Gets the unique id of the port. * * @return The unique id of the port; not intended for display. */ public String getId() { return mId; } /** * Gets the supported modes of the port. * <p> * The actual mode of the port may vary depending on what is plugged into it. * </p> * * @return The supported modes: one of {@link #MODE_DFP}, {@link #MODE_UFP}, or * {@link #MODE_DUAL}. */ public int getSupportedModes() { return mSupportedModes; } /** * Combines one power and one data role together into a unique value with * exactly one bit set. This can be used to efficiently determine whether * a combination of roles is supported by testing whether that bit is present * in a bit-field. * * @param powerRole The desired power role: {@link UsbPort#POWER_ROLE_SOURCE} * or {@link UsbPort#POWER_ROLE_SINK}, or 0 if no power role. * @param dataRole The desired data role: {@link UsbPort#DATA_ROLE_HOST} * or {@link UsbPort#DATA_ROLE_DEVICE}, or 0 if no data role. * @hide */ public static int combineRolesAsBit(int powerRole, int dataRole) { checkRoles(powerRole, dataRole); final int index = powerRole * NUM_DATA_ROLES + dataRole; return 1 << index; } /** @hide */ public static String modeToString(int mode) { switch (mode) { case 0: return "none"; case MODE_DFP: return "dfp"; case MODE_UFP: return "ufp"; case MODE_DUAL: return "dual"; default: return Integer.toString(mode); } } /** @hide */ public static String powerRoleToString(int role) { switch (role) { case 0: return "no-power"; case POWER_ROLE_SOURCE: return "source"; case POWER_ROLE_SINK: return "sink"; default: return Integer.toString(role); } } /** @hide */ public static String dataRoleToString(int role) { switch (role) { case 0: return "no-data"; case DATA_ROLE_HOST: return "host"; case DATA_ROLE_DEVICE: return "device"; default: return Integer.toString(role); } } /** @hide */ public static String roleCombinationsToString(int combo) { StringBuilder result = new StringBuilder(); result.append("["); boolean first = true; while (combo != 0) { final int index = Integer.numberOfTrailingZeros(combo); combo &= ~(1 << index); final int powerRole = index / NUM_DATA_ROLES; final int dataRole = index % NUM_DATA_ROLES; if (first) { first = false; } else { result.append(", "); } result.append(powerRoleToString(powerRole)); result.append(':'); result.append(dataRoleToString(dataRole)); } result.append("]"); return result.toString(); } /** @hide */ public static void checkRoles(int powerRole, int dataRole) { Preconditions.checkArgumentInRange(powerRole, 0, POWER_ROLE_SINK, "powerRole"); Preconditions.checkArgumentInRange(dataRole, 0, DATA_ROLE_DEVICE, "dataRole"); } @Override public String toString() { return "UsbPort{id=" + mId + ", supportedModes=" + modeToString(mSupportedModes) + "}"; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(mId); dest.writeInt(mSupportedModes); } public static final Parcelable.Creator<UsbPort> CREATOR = new Parcelable.Creator<UsbPort>() { @Override public UsbPort createFromParcel(Parcel in) { String id = in.readString(); int supportedModes = in.readInt(); return new UsbPort(id, supportedModes); } @Override public UsbPort[] newArray(int size) { return new UsbPort[size]; } }; } core/java/android/hardware/usb/UsbPortStatus.aidl 0 → 100644 +19 −0 Original line number Diff line number Diff line /* * Copyright (C) 2015, 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; parcelable UsbPortStatus; Loading
core/java/android/hardware/usb/IUsbManager.aidl +11 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,8 @@ package android.hardware.usb; import android.app.PendingIntent; import android.hardware.usb.UsbAccessory; import android.hardware.usb.UsbDevice; import android.hardware.usb.UsbPort; import android.hardware.usb.UsbPortStatus; import android.os.Bundle; import android.os.ParcelFileDescriptor; Loading Loading @@ -108,4 +110,13 @@ interface IUsbManager /* Clear public keys installed for secure USB debugging */ void clearUsbDebuggingKeys(); /* Gets the list of USB ports. */ UsbPort[] getPorts(); /* Gets the status of the specified USB port. */ UsbPortStatus getPortStatus(in String portId); /* Sets the port's current role. */ void setPortRoles(in String portId, int powerRole, int dataRole); }
core/java/android/hardware/usb/UsbManager.java +106 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package android.hardware.usb; import com.android.internal.util.Preconditions; import android.app.PendingIntent; import android.content.Context; import android.os.Bundle; Loading Loading @@ -74,6 +76,22 @@ public class UsbManager { public static final String ACTION_USB_STATE = "android.hardware.usb.action.USB_STATE"; /** * Broadcast Action: A broadcast for USB port changes. * * This intent is sent when a USB port is added, removed, or changes state. * <ul> * <li> {@link #EXTRA_PORT} containing the {@link android.hardware.usb.UsbPort} * for the port. * <li> {@link #EXTRA_PORT_STATUS} containing the {@link android.hardware.usb.UsbPortStatus} * for the port, or null if the port has been removed * </ul> * * @hide */ public static final String ACTION_USB_PORT_CHANGED = "android.hardware.usb.action.USB_PORT_CHANGED"; /** * Broadcast Action: A broadcast for USB device attached event. * Loading Loading @@ -213,6 +231,23 @@ public class UsbManager { */ public static final String USB_FUNCTION_ACCESSORY = "accessory"; /** * Name of extra for {@link #ACTION_USB_PORT_CHANGED} * containing the {@link UsbPort} object for the port. * * @hide */ public static final String EXTRA_PORT = "port"; /** * Name of extra for {@link #ACTION_USB_PORT_CHANGED} * containing the {@link UsbPortStatus} object for the port, or null if the port * was removed. * * @hide */ public static final String EXTRA_PORT_STATUS = "portStatus"; /** * Name of extra for {@link #ACTION_USB_DEVICE_ATTACHED} and * {@link #ACTION_USB_DEVICE_DETACHED} broadcasts Loading Loading @@ -499,6 +534,77 @@ public class UsbManager { return false; } /** * Returns a list of physical USB ports on the device. * <p> * This list is guaranteed to contain all dual-role USB Type C ports but it might * be missing other ports depending on whether the kernel USB drivers have been * updated to publish all of the device's ports through the new "dual_role_usb" * device class (which supports all types of ports despite its name). * </p> * * @return The list of USB ports, or null if none. * * @hide */ public UsbPort[] getPorts() { try { return mService.getPorts(); } catch (RemoteException e) { Log.e(TAG, "RemoteException in getPorts", e); } return null; } /** * Gets the status of the specified USB port. * * @param port The port to query. * @return The status of the specified USB port, or null if unknown. * * @hide */ public UsbPortStatus getPortStatus(UsbPort port) { Preconditions.checkNotNull(port, "port must not be null"); try { return mService.getPortStatus(port.getId()); } catch (RemoteException e) { Log.e(TAG, "RemoteException in getPortStatus", e); } return null; } /** * Sets the desired role combination of the port. * <p> * The supported role combinations depend on what is connected to the port and may be * determined by consulting * {@link UsbPortStatus#isRoleCombinationSupported UsbPortStatus.isRoleCombinationSupported}. * </p><p> * Note: This function is asynchronous and may fail silently without applying * the requested changes. If this function does cause a status change to occur then * a {@link #ACTION_USB_PORT_CHANGED} broadcast will be sent. * </p> * * @param powerRole The desired power role: {@link UsbPort#POWER_ROLE_SOURCE} * or {@link UsbPort#POWER_ROLE_SINK}, or 0 if no power role. * @param dataRole The desired data role: {@link UsbPort#DATA_ROLE_HOST} * or {@link UsbPort#DATA_ROLE_DEVICE}, or 0 if no data role. * * @hide */ public void setPortRoles(UsbPort port, int powerRole, int dataRole) { Preconditions.checkNotNull(port, "port must not be null"); UsbPort.checkRoles(powerRole, dataRole); try { mService.setPortRoles(port.getId(), powerRole, dataRole); } catch (RemoteException e) { Log.e(TAG, "RemoteException in setPortRole", e); } } /** @hide */ public static String addFunction(String functions, String function) { if ("none".equals(functions)) { Loading
core/java/android/hardware/usb/UsbPort.aidl 0 → 100644 +19 −0 Original line number Diff line number Diff line /* * Copyright (C) 2015, 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; parcelable UsbPort;
core/java/android/hardware/usb/UsbPort.java 0 → 100644 +238 −0 Original line number Diff line number Diff line /* * Copyright (C) 2015 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 com.android.internal.util.Preconditions; import android.os.Parcel; import android.os.Parcelable; /** * Represents a physical USB port and describes its characteristics. * <p> * This object is immutable. * </p> * * @hide */ public final class UsbPort implements Parcelable { private final String mId; private final int mSupportedModes; /** * Mode bit: This USB port can act as a downstream facing port (host). * <p> * Implies that the port supports the {@link #POWER_ROLE_SOURCE} and {@link #DATA_ROLE_HOST} * combination of roles (and possibly others as well). * </p> */ public static final int MODE_DFP = 1 << 0; /** * Mode bit: This USB port can act as an upstream facing port (device). * <p> * Implies that the port supports the {@link #POWER_ROLE_SINK} and {@link #DATA_ROLE_DEVICE} * combination of roles (and possibly others as well). * </p> */ public static final int MODE_UFP = 1 << 1; /** * Mode bit: This USB port can act either as an downstream facing port (host) or as * an upstream facing port (device). * <p> * Implies that the port supports the {@link #POWER_ROLE_SOURCE} and {@link #DATA_ROLE_HOST} * combination of roles and the {@link #POWER_ROLE_SINK} and {@link #DATA_ROLE_DEVICE} * combination of roles (and possibly others as well). * </p> */ public static final int MODE_DUAL = MODE_DFP | MODE_UFP; /** * Power role: This USB port can act as a source (provide power). */ public static final int POWER_ROLE_SOURCE = 1; /** * Power role: This USB port can act as a sink (receive power). */ public static final int POWER_ROLE_SINK = 2; /** * Data role: This USB port can act as a host (access data services). */ public static final int DATA_ROLE_HOST = 1; /** * Data role: This USB port can act as a device (offer data services). */ public static final int DATA_ROLE_DEVICE = 2; private static final int NUM_DATA_ROLES = 3; /** @hide */ public UsbPort(String id, int supportedModes) { mId = id; mSupportedModes = supportedModes; } /** * Gets the unique id of the port. * * @return The unique id of the port; not intended for display. */ public String getId() { return mId; } /** * Gets the supported modes of the port. * <p> * The actual mode of the port may vary depending on what is plugged into it. * </p> * * @return The supported modes: one of {@link #MODE_DFP}, {@link #MODE_UFP}, or * {@link #MODE_DUAL}. */ public int getSupportedModes() { return mSupportedModes; } /** * Combines one power and one data role together into a unique value with * exactly one bit set. This can be used to efficiently determine whether * a combination of roles is supported by testing whether that bit is present * in a bit-field. * * @param powerRole The desired power role: {@link UsbPort#POWER_ROLE_SOURCE} * or {@link UsbPort#POWER_ROLE_SINK}, or 0 if no power role. * @param dataRole The desired data role: {@link UsbPort#DATA_ROLE_HOST} * or {@link UsbPort#DATA_ROLE_DEVICE}, or 0 if no data role. * @hide */ public static int combineRolesAsBit(int powerRole, int dataRole) { checkRoles(powerRole, dataRole); final int index = powerRole * NUM_DATA_ROLES + dataRole; return 1 << index; } /** @hide */ public static String modeToString(int mode) { switch (mode) { case 0: return "none"; case MODE_DFP: return "dfp"; case MODE_UFP: return "ufp"; case MODE_DUAL: return "dual"; default: return Integer.toString(mode); } } /** @hide */ public static String powerRoleToString(int role) { switch (role) { case 0: return "no-power"; case POWER_ROLE_SOURCE: return "source"; case POWER_ROLE_SINK: return "sink"; default: return Integer.toString(role); } } /** @hide */ public static String dataRoleToString(int role) { switch (role) { case 0: return "no-data"; case DATA_ROLE_HOST: return "host"; case DATA_ROLE_DEVICE: return "device"; default: return Integer.toString(role); } } /** @hide */ public static String roleCombinationsToString(int combo) { StringBuilder result = new StringBuilder(); result.append("["); boolean first = true; while (combo != 0) { final int index = Integer.numberOfTrailingZeros(combo); combo &= ~(1 << index); final int powerRole = index / NUM_DATA_ROLES; final int dataRole = index % NUM_DATA_ROLES; if (first) { first = false; } else { result.append(", "); } result.append(powerRoleToString(powerRole)); result.append(':'); result.append(dataRoleToString(dataRole)); } result.append("]"); return result.toString(); } /** @hide */ public static void checkRoles(int powerRole, int dataRole) { Preconditions.checkArgumentInRange(powerRole, 0, POWER_ROLE_SINK, "powerRole"); Preconditions.checkArgumentInRange(dataRole, 0, DATA_ROLE_DEVICE, "dataRole"); } @Override public String toString() { return "UsbPort{id=" + mId + ", supportedModes=" + modeToString(mSupportedModes) + "}"; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(mId); dest.writeInt(mSupportedModes); } public static final Parcelable.Creator<UsbPort> CREATOR = new Parcelable.Creator<UsbPort>() { @Override public UsbPort createFromParcel(Parcel in) { String id = in.readString(); int supportedModes = in.readInt(); return new UsbPort(id, supportedModes); } @Override public UsbPort[] newArray(int size) { return new UsbPort[size]; } }; }
core/java/android/hardware/usb/UsbPortStatus.aidl 0 → 100644 +19 −0 Original line number Diff line number Diff line /* * Copyright (C) 2015, 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; parcelable UsbPortStatus;