Merge "Add dump of USB descriptors to the dumpsys for UsbHostManager service." into oc-mr1-dev

am: e7b8f6d24a

Change-Id: I4b510bccbb6b71a92f1fa6938195466ecd3956dc
This commit is contained in:
Paul McLean
2017-09-06 01:50:42 +00:00
committed by android-build-merger
6 changed files with 61 additions and 36 deletions

View File

@@ -22,8 +22,10 @@ import android.content.Context;
import android.hardware.usb.UsbConfiguration; import android.hardware.usb.UsbConfiguration;
import android.hardware.usb.UsbConstants; import android.hardware.usb.UsbConstants;
import android.hardware.usb.UsbDevice; import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbDeviceConnection;
import android.hardware.usb.UsbEndpoint; import android.hardware.usb.UsbEndpoint;
import android.hardware.usb.UsbInterface; import android.hardware.usb.UsbInterface;
import android.hardware.usb.UsbManager;
import android.os.Bundle; import android.os.Bundle;
import android.os.ParcelFileDescriptor; import android.os.ParcelFileDescriptor;
import android.text.TextUtils; import android.text.TextUtils;
@@ -32,8 +34,11 @@ import android.util.Slog;
import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.GuardedBy;
import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.IndentingPrintWriter;
import com.android.server.usb.descriptors.UsbDescriptorParser; 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.ArrayList;
import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
/** /**
@@ -43,6 +48,8 @@ public class UsbHostManager {
private static final String TAG = UsbHostManager.class.getSimpleName(); private static final String TAG = UsbHostManager.class.getSimpleName();
private static final boolean DEBUG = false; private static final boolean DEBUG = false;
private final Context mContext;
// contains all connected USB devices // contains all connected USB devices
private final HashMap<String, UsbDevice> mDevices = new HashMap<>(); private final HashMap<String, UsbDevice> mDevices = new HashMap<>();
@@ -69,6 +76,8 @@ public class UsbHostManager {
public UsbHostManager(Context context, UsbAlsaManager alsaManager, public UsbHostManager(Context context, UsbAlsaManager alsaManager,
UsbSettingsManager settingsManager) { UsbSettingsManager settingsManager) {
mContext = context;
mHostBlacklist = context.getResources().getStringArray( mHostBlacklist = context.getResources().getStringArray(
com.android.internal.R.array.config_usbHostBlacklist); com.android.internal.R.array.config_usbHostBlacklist);
mUsbAlsaManager = alsaManager; mUsbAlsaManager = alsaManager;
@@ -339,6 +348,33 @@ public class UsbHostManager {
if (mUsbDeviceConnectionHandler != null) { if (mUsbDeviceConnectionHandler != null) {
pw.println("Default USB Host Connection handler: " + mUsbDeviceConnectionHandler); 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());
}
}
} }
} }

View File

@@ -102,6 +102,6 @@ public class UsbASFormat extends UsbACInterface {
public void report(ReportCanvas canvas) { public void report(ReportCanvas canvas) {
super.report(canvas); super.report(canvas);
canvas.write(UsbStrings.getFormatName(getFormatType())); canvas.writeParagraph(UsbStrings.getFormatName(getFormatType()), /*emphasis*/false);
} }
} }

View File

@@ -130,8 +130,8 @@ public final class UsbDeviceDescriptor extends UsbDescriptor {
String subClasStr = UsbStrings.getClassName(devSubClass); String subClasStr = UsbStrings.getClassName(devSubClass);
canvas.writeListItem("Class " + devClass + ": " + classStr + " Subclass" canvas.writeListItem("Class " + devClass + ": " + classStr + " Subclass"
+ devSubClass + ": " + subClasStr); + devSubClass + ": " + subClasStr);
canvas.writeListItem("Vendor ID: " + getVendorID() canvas.writeListItem("Vendor ID: " + ReportCanvas.getHexString(getVendorID())
+ " Product ID: " + getProductID() + " Product ID: " + ReportCanvas.getHexString(getProductID())
+ " Product Release: " + ReportCanvas.getBCDString(getDeviceRelease())); + " Product Release: " + ReportCanvas.getBCDString(getDeviceRelease()));
byte mfgIndex = getMfgIndex(); byte mfgIndex = getMfgIndex();

View File

@@ -40,6 +40,12 @@ public final class TextReportCanvas extends ReportCanvas {
mStringBuilder = stringBuilder; mStringBuilder = stringBuilder;
} }
private void writeListIndent() {
for (int space = 0; space < mListIndent; space++) {
mStringBuilder.append(" ");
}
}
@Override @Override
public void write(String text) { public void write(String text) {
mStringBuilder.append(text); mStringBuilder.append(text);
@@ -47,7 +53,8 @@ public final class TextReportCanvas extends ReportCanvas {
@Override @Override
public void openHeader(int level) { public void openHeader(int level) {
mStringBuilder.append("[" + level + " - "); writeListIndent();
mStringBuilder.append("[");
} }
@Override @Override
@@ -56,7 +63,8 @@ public final class TextReportCanvas extends ReportCanvas {
} }
@Override @Override
public void openParagraph(boolean inRed) { public void openParagraph(boolean emphasis) {
writeListIndent();
} }
@Override @Override
@@ -75,24 +83,14 @@ public final class TextReportCanvas extends ReportCanvas {
closeParagraph(); closeParagraph();
} }
private void writeListIndent() {
for (int space = 0; space < mListIndent; space++) {
mStringBuilder.append(" ");
}
}
@Override @Override
public void openList() { public void openList() {
mListIndent += LIST_INDENT_AMNT; mListIndent += LIST_INDENT_AMNT;
writeListIndent();
mStringBuilder.append("---->\n");
} }
@Override @Override
public void closeList() { public void closeList() {
writeListIndent();
mListIndent -= LIST_INDENT_AMNT; mListIndent -= LIST_INDENT_AMNT;
mStringBuilder.append("<----\n");
} }
@Override @Override

View File

@@ -38,6 +38,10 @@ public final class UsbStrings {
private static HashMap<Integer, String> sTerminalNames; private static HashMap<Integer, String> sTerminalNames;
private static HashMap<Integer, String> sFormatNames; private static HashMap<Integer, String> sFormatNames;
static {
allocUsbStrings();
}
private static void initDescriptorNames() { private static void initDescriptorNames() {
sDescriptorNames = new HashMap<Byte, String>(); sDescriptorNames = new HashMap<Byte, String>();
sDescriptorNames.put(UsbDescriptor.DESCRIPTORTYPE_DEVICE, "Device"); sDescriptorNames.put(UsbDescriptor.DESCRIPTORTYPE_DEVICE, "Device");
@@ -246,7 +250,7 @@ public final class UsbStrings {
/** /**
* Initializes string tables. * Initializes string tables.
*/ */
public static void allocUsbStrings() { private static void allocUsbStrings() {
initDescriptorNames(); initDescriptorNames();
initACControlInterfaceNames(); initACControlInterfaceNames();
initACStreamingInterfaceNames(); initACStreamingInterfaceNames();
@@ -257,19 +261,6 @@ public final class UsbStrings {
initFormatNames(); 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. * Retrieves the name for the specified descriptor ID.
*/ */

View File

@@ -37,10 +37,10 @@ public final class UsbDescriptorsACInterfaceNode extends UsbDescriptorsTreeNode
@Override @Override
public void report(ReportCanvas canvas) { public void report(ReportCanvas canvas) {
canvas.openListItem(); canvas.writeListItem("AC Interface type: 0x"
canvas.writeParagraph("AC Interface type:0x" + Integer.toHexString(mACInterface.getSubtype()));
+ Integer.toHexString(mACInterface.getSubtype()), false); canvas.openList();
mACInterface.report(canvas); mACInterface.report(canvas);
canvas.closeListItem(); canvas.closeList();
} }
} }