Merge "Add dump of USB descriptors to the dumpsys for UsbHostManager service." into oc-mr1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
e7b8f6d24a
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user