Adding MIDI 2.0 host mode support to Android. MIDI 2.0 peripherals create an alternative setting for Universal Midi Packets (UMP). UMP packets can be passed directly through as the host has full control. Instead of going through the ALSA, UMP packets can be sent directly through a UsbDeviceConnection. This CL also adds public apis to expose whether the pipe supports UMP. This for MidiDeviceInfo in Java and AMidi in c++. Bug: 201003646 Bug: 214447324 Test: Verified that the MIDI 1.0 path still works as before. Test: Tested that MIDI 2.0 packets are passed through the pipe with MIDIScope and MIDIKeyboard Test: atest MidiSoloTest Test: atest CtsMidiTestCases Test: NativeMidiEchoTest Change-Id: Idff8a3b9bdd05857239260fc3e6af7253f8f992f
43 lines
1.8 KiB
C
43 lines
1.8 KiB
C
/*
|
|
* Copyright (C) 2018 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.
|
|
*/
|
|
|
|
#ifndef ANDROID_MEDIA_AMIDI_INTERNAL_H_
|
|
#define ANDROID_MEDIA_AMIDI_INTERNAL_H_
|
|
|
|
#include <jni.h>
|
|
|
|
#include "android/media/midi/BpMidiDeviceServer.h"
|
|
|
|
typedef struct {
|
|
int32_t type; /* one of AMIDI_DEVICE_TYPE_* constants */
|
|
int32_t inputPortCount; /* number of input (send) ports associated with the device */
|
|
int32_t outputPortCount; /* number of output (received) ports associated with the device */
|
|
int32_t defaultProtocol; /* one of the AMIDI_DEVICE_PROTOCOL_* constants */
|
|
} AMidiDeviceInfo;
|
|
|
|
struct AMidiDevice {
|
|
android::sp<android::media::midi::BpMidiDeviceServer>
|
|
server; /* The Binder interface to the MIDI server (from the Java MidiDevice) */
|
|
int32_t deviceId; /* The integer id of the device assigned in the Java API */
|
|
JavaVM* javaVM; /* The Java VM (so we can obtain the JNIEnv in the
|
|
AMidiDevice_close function) */
|
|
jobject midiDeviceObj; /* NewGlobalRef() reference to the Java MidiDevice associated with
|
|
this native AMidiDevice. */
|
|
AMidiDeviceInfo deviceInfo; /* Attributes of the device. */
|
|
};
|
|
|
|
#endif // ANDROID_MEDIA_AMIDI_INTERNAL_H_
|