blob: 7baa7eab2b4dd0b92e77e1c64b7c631e9aa83998 [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.midi;
import android.annotation.TargetApi;
import android.media.midi.MidiDevice;
import android.media.midi.MidiInputPort;
import android.os.Build;
import org.chromium.base.Log;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import java.io.IOException;
/**
* A class implementing midi::MidiOutputPortAndroid functionality.
*/
// Note "OutputPort" is named in the Web MIDI manner. It corresponds to MidiInputPort class in the
// Android API.
@JNINamespace("midi")
@TargetApi(Build.VERSION_CODES.M)
class MidiOutputPortAndroid {
/**
* The underlying port.
*/
private MidiInputPort mPort;
/**
* The device this port belongs to.
*/
private final MidiDevice mDevice;
/**
* The index of the port in the associated device.
*/
private final int mIndex;
private static final String TAG = "midi";
/**
* constructor
* @param device The device this port belongs to.
* @param index The index of the port in the associated device.
*/
MidiOutputPortAndroid(MidiDevice device, int index) {
mDevice = device;
mIndex = index;
}
/**
* Opens this port.
* @return true when the operation succeeds or the port is already open.
*/
@CalledByNative
boolean open() {
if (mPort != null) {
return true;
}
mPort = mDevice.openInputPort(mIndex);
return mPort != null;
}
/**
* Sends the data to the underlying output port.
*/
@CalledByNative
void send(byte[] bs) {
if (mPort == null) {
return;
}
try {
mPort.send(bs, 0, bs.length);
} catch (IOException e) {
// We can do nothing here. Just ignore the error.
Log.e(TAG, "MidiOutputPortAndroid.send: " + e);
}
}
/**
* Closes the port.
*/
@CalledByNative
void close() {
if (mPort == null) {
return;
}
try {
mPort.close();
} catch (IOException e) {
// We can do nothing here. Just ignore the error.
}
mPort = null;
}
}