diff --git a/services/usb/java/com/android/server/usb/UsbHostManager.java b/services/usb/java/com/android/server/usb/UsbHostManager.java index ce0dcc3453ec6..c657a1b4cc985 100644 --- a/services/usb/java/com/android/server/usb/UsbHostManager.java +++ b/services/usb/java/com/android/server/usb/UsbHostManager.java @@ -22,8 +22,10 @@ import android.content.Context; import android.hardware.usb.UsbConfiguration; import android.hardware.usb.UsbConstants; import android.hardware.usb.UsbDevice; +import android.hardware.usb.UsbDeviceConnection; import android.hardware.usb.UsbEndpoint; import android.hardware.usb.UsbInterface; +import android.hardware.usb.UsbManager; import android.os.Bundle; import android.os.ParcelFileDescriptor; import android.text.TextUtils; @@ -32,8 +34,11 @@ import android.util.Slog; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.IndentingPrintWriter; import com.android.server.usb.descriptors.UsbDescriptorParser; +import com.android.server.usb.descriptors.report.TextReportCanvas; +import com.android.server.usb.descriptors.tree.UsbDescriptorsTree; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; /** @@ -43,6 +48,8 @@ public class UsbHostManager { private static final String TAG = UsbHostManager.class.getSimpleName(); private static final boolean DEBUG = false; + private final Context mContext; + // contains all connected USB devices private final HashMap mDevices = new HashMap<>(); @@ -69,6 +76,8 @@ public class UsbHostManager { public UsbHostManager(Context context, UsbAlsaManager alsaManager, UsbSettingsManager settingsManager) { + mContext = context; + mHostBlacklist = context.getResources().getStringArray( com.android.internal.R.array.config_usbHostBlacklist); mUsbAlsaManager = alsaManager; @@ -265,8 +274,8 @@ public class UsbHostManager { if (parser.parseDevice(mNewDevice.getDeviceName())) { isInputHeadset = parser.isInputHeadset(); isOutputHeadset = parser.isOutputHeadset(); - Slog.i(TAG, "---- isHeadset[in:" + isInputHeadset - + " , out:" + isOutputHeadset + "]"); + Slog.i(TAG, "---- isHeadset[in: " + isInputHeadset + + " , out: " + isOutputHeadset + "]"); } mUsbAlsaManager.usbDeviceAdded(mNewDevice, isInputHeadset, isOutputHeadset); @@ -339,6 +348,33 @@ public class UsbHostManager { if (mUsbDeviceConnectionHandler != null) { pw.println("Default USB Host Connection handler: " + mUsbDeviceConnectionHandler); } + + Collection devices = mDevices.values(); + if (devices.size() != 0) { + pw.println("USB Peripheral Descriptors"); + for (UsbDevice device : devices) { + StringBuilder stringBuilder = new StringBuilder(); + + UsbDescriptorParser parser = new UsbDescriptorParser(); + if (parser.parseDevice(device.getDeviceName())) { + UsbDescriptorsTree descriptorTree = new UsbDescriptorsTree(); + descriptorTree.parse(parser); + + UsbManager usbManager = + (UsbManager) mContext.getSystemService(Context.USB_SERVICE); + UsbDeviceConnection connection = usbManager.openDevice(device); + + descriptorTree.report(new TextReportCanvas(connection, stringBuilder)); + connection.close(); + + stringBuilder.append("isHeadset[in: " + parser.isInputHeadset() + + " , out: " + parser.isOutputHeadset() + "]"); + } else { + stringBuilder.append("Error Parsing USB Descriptors"); + } + pw.println(stringBuilder.toString()); + } + } } } diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbASFormat.java b/services/usb/java/com/android/server/usb/descriptors/UsbASFormat.java index 305ae2f273724..7a92f9e197ec2 100644 --- a/services/usb/java/com/android/server/usb/descriptors/UsbASFormat.java +++ b/services/usb/java/com/android/server/usb/descriptors/UsbASFormat.java @@ -102,6 +102,6 @@ public class UsbASFormat extends UsbACInterface { public void report(ReportCanvas canvas) { super.report(canvas); - canvas.write(UsbStrings.getFormatName(getFormatType())); + canvas.writeParagraph(UsbStrings.getFormatName(getFormatType()), /*emphasis*/false); } } diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbDeviceDescriptor.java b/services/usb/java/com/android/server/usb/descriptors/UsbDeviceDescriptor.java index c8fa69451ac86..d5cb89ea82e62 100644 --- a/services/usb/java/com/android/server/usb/descriptors/UsbDeviceDescriptor.java +++ b/services/usb/java/com/android/server/usb/descriptors/UsbDeviceDescriptor.java @@ -130,8 +130,8 @@ public final class UsbDeviceDescriptor extends UsbDescriptor { String subClasStr = UsbStrings.getClassName(devSubClass); canvas.writeListItem("Class " + devClass + ": " + classStr + " Subclass" + devSubClass + ": " + subClasStr); - canvas.writeListItem("Vendor ID: " + getVendorID() - + " Product ID: " + getProductID() + canvas.writeListItem("Vendor ID: " + ReportCanvas.getHexString(getVendorID()) + + " Product ID: " + ReportCanvas.getHexString(getProductID()) + " Product Release: " + ReportCanvas.getBCDString(getDeviceRelease())); byte mfgIndex = getMfgIndex(); diff --git a/services/usb/java/com/android/server/usb/descriptors/report/TextReportCanvas.java b/services/usb/java/com/android/server/usb/descriptors/report/TextReportCanvas.java index 33746ba82bc6d..a43569d40a673 100644 --- a/services/usb/java/com/android/server/usb/descriptors/report/TextReportCanvas.java +++ b/services/usb/java/com/android/server/usb/descriptors/report/TextReportCanvas.java @@ -40,6 +40,12 @@ public final class TextReportCanvas extends ReportCanvas { mStringBuilder = stringBuilder; } + private void writeListIndent() { + for (int space = 0; space < mListIndent; space++) { + mStringBuilder.append(" "); + } + } + @Override public void write(String text) { mStringBuilder.append(text); @@ -47,7 +53,8 @@ public final class TextReportCanvas extends ReportCanvas { @Override public void openHeader(int level) { - mStringBuilder.append("[" + level + " - "); + writeListIndent(); + mStringBuilder.append("["); } @Override @@ -56,7 +63,8 @@ public final class TextReportCanvas extends ReportCanvas { } @Override - public void openParagraph(boolean inRed) { + public void openParagraph(boolean emphasis) { + writeListIndent(); } @Override @@ -75,30 +83,20 @@ public final class TextReportCanvas extends ReportCanvas { closeParagraph(); } - private void writeListIndent() { - for (int space = 0; space < mListIndent; space++) { - mStringBuilder.append(" "); - } - } - @Override public void openList() { mListIndent += LIST_INDENT_AMNT; - writeListIndent(); - mStringBuilder.append("---->\n"); } @Override public void closeList() { - writeListIndent(); mListIndent -= LIST_INDENT_AMNT; - mStringBuilder.append("<----\n"); } @Override public void openListItem() { writeListIndent(); - mStringBuilder.append(" - "); + mStringBuilder.append("- "); } @Override diff --git a/services/usb/java/com/android/server/usb/descriptors/report/UsbStrings.java b/services/usb/java/com/android/server/usb/descriptors/report/UsbStrings.java index ff58a2672b3fb..64ecebc29db6e 100644 --- a/services/usb/java/com/android/server/usb/descriptors/report/UsbStrings.java +++ b/services/usb/java/com/android/server/usb/descriptors/report/UsbStrings.java @@ -38,6 +38,10 @@ public final class UsbStrings { private static HashMap sTerminalNames; private static HashMap sFormatNames; + static { + allocUsbStrings(); + } + private static void initDescriptorNames() { sDescriptorNames = new HashMap(); sDescriptorNames.put(UsbDescriptor.DESCRIPTORTYPE_DEVICE, "Device"); @@ -246,7 +250,7 @@ public final class UsbStrings { /** * Initializes string tables. */ - public static void allocUsbStrings() { + private static void allocUsbStrings() { initDescriptorNames(); initACControlInterfaceNames(); initACStreamingInterfaceNames(); @@ -257,19 +261,6 @@ public final class UsbStrings { initFormatNames(); } - /** - * Deinitializes string tables. - */ - public static void releaseUsbStrings() { - sDescriptorNames = null; - sACControlInterfaceNames = null; - sACStreamingInterfaceNames = null; - sClassNames = null; - sAudioSubclassNames = null; - sAudioEncodingNames = null; - sTerminalNames = null; - } - /** * Retrieves the name for the specified descriptor ID. */ diff --git a/services/usb/java/com/android/server/usb/descriptors/tree/UsbDescriptorsACInterfaceNode.java b/services/usb/java/com/android/server/usb/descriptors/tree/UsbDescriptorsACInterfaceNode.java index 49caca5c8dd08..6dbf415ce7f91 100644 --- a/services/usb/java/com/android/server/usb/descriptors/tree/UsbDescriptorsACInterfaceNode.java +++ b/services/usb/java/com/android/server/usb/descriptors/tree/UsbDescriptorsACInterfaceNode.java @@ -37,10 +37,10 @@ public final class UsbDescriptorsACInterfaceNode extends UsbDescriptorsTreeNode @Override public void report(ReportCanvas canvas) { - canvas.openListItem(); - canvas.writeParagraph("AC Interface type:0x" - + Integer.toHexString(mACInterface.getSubtype()), false); + canvas.writeListItem("AC Interface type: 0x" + + Integer.toHexString(mACInterface.getSubtype())); + canvas.openList(); mACInterface.report(canvas); - canvas.closeListItem(); + canvas.closeList(); } }