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

Commit 218945aa authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Add MIDI info to USB dumpsys" into tm-dev am: b45f0e8a

parents 7f001a8a b45f0e8a
Loading
Loading
Loading
Loading
+37 −0
Original line number Diff line number Diff line
@@ -110,6 +110,7 @@ message UsbHostManagerProto {
    repeated UsbDeviceProto devices = 2;
    optional int32 num_connects = 3;
    repeated UsbConnectionRecordProto connections = 4;
    repeated UsbDirectMidiDeviceProto midi_devices = 5;
}

message UsbDeviceProto {
@@ -305,6 +306,42 @@ message UsbMidiDeviceProto {
    optional string device_address = 3;
}

message UsbDirectMidiDeviceProto {
    option (android.msg_privacy).dest = DEST_AUTOMATIC;

    optional int32 num_inputs = 1;
    optional int32 num_outputs = 2;
    optional bool is_universal = 3;
    optional string name = 4;
    optional UsbMidiBlockParserProto block_parser = 5;
}

message UsbMidiBlockParserProto {
    option (android.msg_privacy).dest = DEST_AUTOMATIC;

    optional int32 length = 1;
    optional int32 descriptor_type = 2;
    optional int32 descriptor_subtype = 3;
    optional int32 total_length = 4;
    repeated UsbGroupTerminalBlockProto block = 5;
}

message UsbGroupTerminalBlockProto {
    option (android.msg_privacy).dest = DEST_AUTOMATIC;

    optional int32 length = 1;
    optional int32 descriptor_type = 2;
    optional int32 descriptor_subtype = 3;
    optional int32 group_block_id = 4;
    optional int32 group_terminal_block_type = 5;
    optional int32 group_terminal = 6;
    optional int32 num_group_terminals = 7;
    optional int32 block_item = 8;
    optional int32 midi_protocol = 9;
    optional int32 max_input_bandwidth = 10;
    optional int32 max_output_bandwidth = 11;
}

message UsbSettingsManagerProto {
    option (android.msg_privacy).dest = DEST_AUTOMATIC;

+22 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.server.usb;

import android.annotation.NonNull;
import android.content.Context;
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbDeviceConnection;
@@ -28,10 +29,12 @@ import android.media.midi.MidiDeviceStatus;
import android.media.midi.MidiManager;
import android.media.midi.MidiReceiver;
import android.os.Bundle;
import android.service.usb.UsbDirectMidiDeviceProto;
import android.util.Log;

import com.android.internal.midi.MidiEventScheduler;
import com.android.internal.midi.MidiEventScheduler.MidiEvent;
import com.android.internal.util.dump.DualDumpOutputStream;
import com.android.server.usb.descriptors.UsbDescriptorParser;
import com.android.server.usb.descriptors.UsbEndpointDescriptor;
import com.android.server.usb.descriptors.UsbInterfaceDescriptor;
@@ -52,6 +55,7 @@ public final class UsbDirectMidiDevice implements Closeable {
    private static final boolean DEBUG = false;

    private Context mContext;
    private String mName;
    private UsbDevice mUsbDevice;
    private UsbDescriptorParser mParser;
    private ArrayList<UsbInterfaceDescriptor> mUsbInterfaces;
@@ -477,7 +481,7 @@ public final class UsbDirectMidiDevice implements Closeable {
        } else {
            name += " MIDI 1.0";
        }
        Log.e(TAG, name);
        mName = name;
        properties.putString(MidiDeviceInfo.PROPERTY_NAME, name);
        properties.putString(MidiDeviceInfo.PROPERTY_MANUFACTURER, manufacturer);
        properties.putString(MidiDeviceInfo.PROPERTY_PRODUCT, product);
@@ -573,4 +577,21 @@ public final class UsbDirectMidiDevice implements Closeable {
        }
        return true;
    }

    /**
     * Write a description of the device to a dump stream.
     */
    public void dump(@NonNull DualDumpOutputStream dump, @NonNull String idName, long id) {
        long token = dump.start(idName, id);

        dump.write("num_inputs", UsbDirectMidiDeviceProto.NUM_INPUTS, mNumInputs);
        dump.write("num_outputs", UsbDirectMidiDeviceProto.NUM_OUTPUTS, mNumOutputs);
        dump.write("is_universal", UsbDirectMidiDeviceProto.IS_UNIVERSAL, mIsUniversalMidiDevice);
        dump.write("name", UsbDirectMidiDeviceProto.NAME, mName);
        if (mIsUniversalMidiDevice) {
            mMidiBlockParser.dump(dump, "block_parser", UsbDirectMidiDeviceProto.BLOCK_PARSER);
        }

        dump.end(token);
    }
}
+6 −0
Original line number Diff line number Diff line
@@ -588,6 +588,12 @@ public class UsbHostManager {
            for (ConnectionRecord rec : mConnections) {
                rec.dump(dump, "connections", UsbHostManagerProto.CONNECTIONS);
            }

            for (ArrayList<UsbDirectMidiDevice> directMidiDevices : mMidiDevices.values()) {
                for (UsbDirectMidiDevice directMidiDevice : directMidiDevices) {
                    directMidiDevice.dump(dump, "midi_devices", UsbHostManagerProto.MIDI_DEVICES);
                }
            }
        }

        dump.end(token);
+53 −0
Original line number Diff line number Diff line
@@ -15,10 +15,15 @@
 */
package com.android.server.usb.descriptors;

import android.annotation.NonNull;
import android.hardware.usb.UsbConstants;
import android.hardware.usb.UsbDeviceConnection;
import android.service.usb.UsbGroupTerminalBlockProto;
import android.service.usb.UsbMidiBlockParserProto;
import android.util.Log;

import com.android.internal.util.dump.DualDumpOutputStream;

import java.util.ArrayList;

/**
@@ -70,6 +75,34 @@ public class UsbMidiBlockParser {
            mMaxOutputBandwidth = stream.unpackUsbShort();
            return mLength;
        }

        /**
         * Write the state of the block to a dump stream.
         */
        public void dump(@NonNull DualDumpOutputStream dump, @NonNull String idName, long id) {
            long token = dump.start(idName, id);

            dump.write("length", UsbGroupTerminalBlockProto.LENGTH, mLength);
            dump.write("descriptor_type", UsbGroupTerminalBlockProto.DESCRIPTOR_TYPE,
                    mDescriptorType);
            dump.write("descriptor_subtype", UsbGroupTerminalBlockProto.DESCRIPTOR_SUBTYPE,
                    mDescriptorSubtype);
            dump.write("group_block_id", UsbGroupTerminalBlockProto.GROUP_BLOCK_ID, mGroupBlockId);
            dump.write("group_terminal_block_type",
                    UsbGroupTerminalBlockProto.GROUP_TERMINAL_BLOCK_TYPE, mGroupTerminalBlockType);
            dump.write("group_terminal", UsbGroupTerminalBlockProto.GROUP_TERMINAL,
                    mGroupTerminal);
            dump.write("num_group_terminals", UsbGroupTerminalBlockProto.NUM_GROUP_TERMINALS,
                    mNumGroupTerminals);
            dump.write("block_item", UsbGroupTerminalBlockProto.BLOCK_ITEM, mBlockItem);
            dump.write("midi_protocol", UsbGroupTerminalBlockProto.MIDI_PROTOCOL, mMidiProtocol);
            dump.write("max_input_bandwidth", UsbGroupTerminalBlockProto.MAX_INPUT_BANDWIDTH,
                    mMaxInputBandwidth);
            dump.write("max_output_bandwidth", UsbGroupTerminalBlockProto.MAX_OUTPUT_BANDWIDTH,
                    mMaxOutputBandwidth);

            dump.end(token);
        }
    }

    private ArrayList<GroupTerminalBlock> mGroupTerminalBlocks =
@@ -170,4 +203,24 @@ public class UsbMidiBlockParser {
        }
        return DEFAULT_MIDI_TYPE;
    }

    /**
     * Write the state of the parser to a dump stream.
     */
    public void dump(@NonNull DualDumpOutputStream dump, @NonNull String idName, long id) {
        long token = dump.start(idName, id);

        dump.write("length", UsbMidiBlockParserProto.LENGTH, mHeaderLength);
        dump.write("descriptor_type", UsbMidiBlockParserProto.DESCRIPTOR_TYPE,
                mHeaderDescriptorType);
        dump.write("descriptor_subtype", UsbMidiBlockParserProto.DESCRIPTOR_SUBTYPE,
                mHeaderDescriptorSubtype);
        dump.write("total_length", UsbMidiBlockParserProto.TOTAL_LENGTH, mTotalLength);
        for (GroupTerminalBlock groupTerminalBlock : mGroupTerminalBlocks) {
            groupTerminalBlock.dump(dump, "block", UsbMidiBlockParserProto.BLOCK);
        }

        dump.end(token);
    }

}