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

This commit is contained in:
TreeHugger Robot
2017-09-06 01:36:41 +00:00
committed by Android (Google) Code Review
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.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());
}
}
}
}

View File

@@ -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);
}
}

View File

@@ -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();

View File

@@ -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

View File

@@ -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.
*/

View File

@@ -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();
}
}