/* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.midi; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; /** * This class contains information to describe a MIDI device. * For now we only have information that can be retrieved easily for USB devices, * but we will probably expand this in the future. * * This class is just an immutable object to encapsulate the MIDI device description. * Use the MidiDevice class to actually communicate with devices. * * @hide */ public class MidiDeviceInfo implements Parcelable { private static final String TAG = "MidiDeviceInfo"; /** * Constant representing USB MIDI devices for {@link #getType} */ public static final int TYPE_USB = 1; /** * Constant representing virtual (software based) MIDI devices for {@link #getType} */ public static final int TYPE_VIRTUAL = 2; private final int mType; // USB or virtual private final int mId; // unique ID generated by MidiService private final int mInputPortCount; private final int mOutputPortCount; private final Bundle mProperties; /** * Bundle key for the device's manufacturer name property. * Used with the {@link android.os.Bundle} returned by {@link #getProperties}. * Matches the USB device manufacturer name string for USB MIDI devices. */ public static final String PROPERTY_MANUFACTURER = "manufacturer"; /** * Bundle key for the device's model name property. * Used with the {@link android.os.Bundle} returned by {@link #getProperties} * Matches the USB device product name string for USB MIDI devices. */ public static final String PROPERTY_MODEL = "model"; /** * Bundle key for the device's serial number property. * Used with the {@link android.os.Bundle} returned by {@link #getProperties} * Matches the USB device serial number for USB MIDI devices. */ public static final String PROPERTY_SERIAL_NUMBER = "serial_number"; /** * Bundle key for the device's {@link android.hardware.usb.UsbDevice}. * Only set for USB MIDI devices. * Used with the {@link android.os.Bundle} returned by {@link #getProperties} */ public static final String PROPERTY_USB_DEVICE = "usb_device"; /** * Bundle key for the device's ALSA card number. * Only set for USB MIDI devices. * Used with the {@link android.os.Bundle} returned by {@link #getProperties} */ public static final String PROPERTY_ALSA_CARD = "alsa_card"; /** * Bundle key for the device's ALSA device number. * Only set for USB MIDI devices. * Used with the {@link android.os.Bundle} returned by {@link #getProperties} */ public static final String PROPERTY_ALSA_DEVICE = "alsa_device"; /** * MidiDeviceInfo should only be instantiated by MidiService implementation * @hide */ public MidiDeviceInfo(int type, int id, int numInputPorts, int numOutputPorts, Bundle properties) { mType = type; mId = id; mInputPortCount = numInputPorts; mOutputPortCount = numOutputPorts; mProperties = properties; } /** * Returns the type of the device. * * @return the device's type */ public int getType() { return mType; } /** * Returns the ID of the device. * This ID is generated by the MIDI service and is not persistent across device unplugs. * * @return the device's ID */ public int getId() { return mId; } /** * Returns the device's number of input ports. * * @return the number of input ports */ public int getInputPortCount() { return mInputPortCount; } /** * Returns the device's number of output ports. * * @return the number of output ports */ public int getOutputPortCount() { return mOutputPortCount; } /** * Returns the {@link android.os.Bundle} containing the device's properties. * * @return the device's properties */ public Bundle getProperties() { return mProperties; } @Override public boolean equals(Object o) { if (o instanceof MidiDeviceInfo) { return (((MidiDeviceInfo)o).mId == mId); } else { return false; } } @Override public int hashCode() { return mId; } @Override public String toString() { return ("MidiDeviceInfo[mType=" + mType + ",mInputPortCount=" + mInputPortCount + ",mOutputPortCount=" + mOutputPortCount + ",mProperties=" + mProperties); } public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { public MidiDeviceInfo createFromParcel(Parcel in) { int type = in.readInt(); int id = in.readInt(); int inputPorts = in.readInt(); int outputPorts = in.readInt(); Bundle properties = in.readBundle(); return new MidiDeviceInfo(type, id, inputPorts, outputPorts, properties); } public MidiDeviceInfo[] newArray(int size) { return new MidiDeviceInfo[size]; } }; public int describeContents() { return 0; } public void writeToParcel(Parcel parcel, int flags) { parcel.writeInt(mType); parcel.writeInt(mId); parcel.writeInt(mInputPortCount); parcel.writeInt(mOutputPortCount); parcel.writeBundle(mProperties); } }