Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 53215d1f authored by Paul McLean's avatar Paul McLean
Browse files

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.
parent 563a5637
Loading
Loading
Loading
Loading
+38 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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());
                }
            }
        }
    }

+1 −1
Original line number Diff line number Diff line
@@ -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);
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -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();
+11 −13
Original line number Diff line number Diff line
@@ -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,24 +83,14 @@ 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
+5 −14
Original line number Diff line number Diff line
@@ -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.
     */
Loading