summaryrefslogtreecommitdiff
path: root/services/usb/java
diff options
context:
space:
mode:
author Paul McLean <pmclean@google.com> 2017-08-31 13:20:26 -0600
committer Paul McLean <pmclean@google.com> 2017-09-05 14:30:01 -0600
commit53215d1f7d79c6577b32c3b71db6db6435c95f09 (patch)
tree4b7c9a3af8a3d226cd9b0e54b536fb0eedc16891 /services/usb/java
parent563a5637d71db27e0fc95082601198e29d80a15e (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')
-rw-r--r--services/usb/java/com/android/server/usb/UsbHostManager.java40
-rw-r--r--services/usb/java/com/android/server/usb/descriptors/UsbASFormat.java2
-rw-r--r--services/usb/java/com/android/server/usb/descriptors/UsbDeviceDescriptor.java4
-rw-r--r--services/usb/java/com/android/server/usb/descriptors/report/TextReportCanvas.java24
-rw-r--r--services/usb/java/com/android/server/usb/descriptors/report/UsbStrings.java19
-rw-r--r--services/usb/java/com/android/server/usb/descriptors/tree/UsbDescriptorsACInterfaceNode.java8
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();
}
}