diff options
| author | 2017-08-31 13:20:26 -0600 | |
|---|---|---|
| committer | 2017-09-05 14:30:01 -0600 | |
| commit | 53215d1f7d79c6577b32c3b71db6db6435c95f09 (patch) | |
| tree | 4b7c9a3af8a3d226cd9b0e54b536fb0eedc16891 /services/usb/java | |
| parent | 563a5637d71db27e0fc95082601198e29d80a15e (diff) | |
Add dump of USB descriptors to the dumpsys for UsbHostManager service.
Cleaned up text formatting.
Bug: 65158441
Change-Id: Ie6531d42bb0d78f2b8af382329a973e629f23c5f
Test: Manual - connected USB headset, ran adb shell dumpsys usb. Examined output.
Diffstat (limited to 'services/usb/java')
6 files changed, 61 insertions, 36 deletions
diff --git a/services/usb/java/com/android/server/usb/UsbHostManager.java b/services/usb/java/com/android/server/usb/UsbHostManager.java index ce0dcc3453ec..c657a1b4cc98 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<String, UsbDevice> 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<UsbDevice> 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 305ae2f27372..7a92f9e197ec 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 c8fa69451ac8..d5cb89ea82e6 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 33746ba82bc6..a43569d40a67 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 ff58a2672b3f..64ecebc29db6 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<Integer, String> sTerminalNames; private static HashMap<Integer, String> sFormatNames; + static { + allocUsbStrings(); + } + private static void initDescriptorNames() { sDescriptorNames = new HashMap<Byte, String>(); 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(); @@ -258,19 +262,6 @@ public final class UsbStrings { } /** - * 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. */ public static String getDescriptorName(byte descriptorID) { 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 49caca5c8dd0..6dbf415ce7f9 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(); } } |