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

Commit f0a41d1c authored by Mike Lockwood's avatar Mike Lockwood
Browse files

Add support for Bluetooth MIDI devices

The Bluetooth MIDI devices are handled in the BluetoothMidiService APK.
Apps wishing to connect to Bluetooth MIDI devices call MidiManager.openBluetoothDevice()
which binds to BluetoothMidiService in a similar way as virtual devices are implemented.

Change-Id: Ie3fbca757928fd7873a009f9bf9e0ce0be487da6
parent b6f50d35
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -16821,11 +16821,17 @@ package android.media.midi {
  public final class MidiManager {
    method public android.media.midi.MidiDeviceInfo[] getDeviceList();
    method public void openBluetoothDevice(android.bluetooth.BluetoothDevice, android.media.midi.MidiManager.BluetoothOpenCallback, android.os.Handler);
    method public void openDevice(android.media.midi.MidiDeviceInfo, android.media.midi.MidiManager.DeviceOpenCallback, android.os.Handler);
    method public void registerDeviceCallback(android.media.midi.MidiManager.DeviceCallback, android.os.Handler);
    method public void unregisterDeviceCallback(android.media.midi.MidiManager.DeviceCallback);
  }
  public static abstract class MidiManager.BluetoothOpenCallback {
    ctor public MidiManager.BluetoothOpenCallback();
    method public abstract void onDeviceOpened(android.bluetooth.BluetoothDevice, android.media.midi.MidiDevice);
  }
  public static class MidiManager.DeviceCallback {
    ctor public MidiManager.DeviceCallback();
    method public void onDeviceAdded(android.media.midi.MidiDeviceInfo);
+6 −0
Original line number Diff line number Diff line
@@ -18096,11 +18096,17 @@ package android.media.midi {
  public final class MidiManager {
    method public android.media.midi.MidiDeviceInfo[] getDeviceList();
    method public void openBluetoothDevice(android.bluetooth.BluetoothDevice, android.media.midi.MidiManager.BluetoothOpenCallback, android.os.Handler);
    method public void openDevice(android.media.midi.MidiDeviceInfo, android.media.midi.MidiManager.DeviceOpenCallback, android.os.Handler);
    method public void registerDeviceCallback(android.media.midi.MidiManager.DeviceCallback, android.os.Handler);
    method public void unregisterDeviceCallback(android.media.midi.MidiManager.DeviceCallback);
  }
  public static abstract class MidiManager.BluetoothOpenCallback {
    ctor public MidiManager.BluetoothOpenCallback();
    method public abstract void onDeviceOpened(android.bluetooth.BluetoothDevice, android.media.midi.MidiDevice);
  }
  public static class MidiManager.DeviceCallback {
    ctor public MidiManager.DeviceCallback();
    method public void onDeviceAdded(android.media.midi.MidiDeviceInfo);
+13 −1
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@ package com.android.internal.midi;
/**
 * MIDI related constants and static methods.
 */
public class MidiConstants {
public final class MidiConstants {
    public static final byte STATUS_COMMAND_MASK = (byte) 0xF0;
    public static final byte STATUS_CHANNEL_MASK = (byte) 0x0F;

@@ -85,4 +85,16 @@ public class MidiConstants {
        }
        return (goodBytes == 0);
    }

    // Returns true if this command can be used for running status
    public static boolean allowRunningStatus(int command) {
        // only Channel Voice and Channel Mode commands can use running status
        return (command >= STATUS_NOTE_OFF && command < STATUS_SYSTEM_EXCLUSIVE);
    }

    // Returns true if this command cancels running status
    public static boolean cancelsRunningStatus(int command) {
        // System Common messages cancel running status
        return (command >= STATUS_SYSTEM_EXCLUSIVE && command <= STATUS_END_SYSEX);
    }
}
+3 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.media.midi;

import android.media.midi.MidiDeviceInfo;
import android.os.ParcelFileDescriptor;

/** @hide */
@@ -27,4 +28,6 @@ interface IMidiDeviceServer

    // connects the input port pfd to the specified output port
    void connectPorts(IBinder token, in ParcelFileDescriptor pfd, int outputPortNumber);

    MidiDeviceInfo getDeviceInfo();
}
+9 −0
Original line number Diff line number Diff line
@@ -252,6 +252,11 @@ public final class MidiDeviceServer implements Closeable {
                mPortClients.put(token, client);
            }
        }

        @Override
        public MidiDeviceInfo getDeviceInfo() {
            return mDeviceInfo;
        }
    };

    /* package */ MidiDeviceServer(IMidiManager midiManager, MidiReceiver[] inputPortReceivers,
@@ -279,6 +284,10 @@ public final class MidiDeviceServer implements Closeable {
        return mServer;
    }

    public IBinder asBinder() {
        return mServer.asBinder();
    }

    /* package */ void setDeviceInfo(MidiDeviceInfo deviceInfo) {
        if (mDeviceInfo != null) {
            throw new IllegalStateException("setDeviceInfo should only be called once");
Loading