| // 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; |
| } |
| } |