Merge "USB MIDI: Rename as UsbAlsaMidiDevice"
This commit is contained in:
@@ -284,7 +284,8 @@ message UsbAlsaManagerProto {
|
||||
|
||||
optional int32 cards_parser = 1;
|
||||
repeated UsbAlsaDeviceProto alsa_devices = 2;
|
||||
repeated UsbMidiDeviceProto midi_devices = 3;
|
||||
reserved 3; // previously midi_devices, now unused
|
||||
repeated UsbAlsaMidiDeviceProto alsa_midi_devices = 4;
|
||||
}
|
||||
|
||||
message UsbAlsaDeviceProto {
|
||||
@@ -299,7 +300,7 @@ message UsbAlsaDeviceProto {
|
||||
optional string address = 6;
|
||||
}
|
||||
|
||||
message UsbMidiDeviceProto {
|
||||
message UsbAlsaMidiDeviceProto {
|
||||
option (android.msg_privacy).dest = DEST_AUTOMATIC;
|
||||
|
||||
optional int32 card = 1;
|
||||
|
||||
@@ -20484,12 +20484,12 @@ Lcom/android/server/usage/UsageStatsService;
|
||||
Lcom/android/server/usage/UsageStatsShellCommand;
|
||||
Lcom/android/server/usage/UserUsageStatsService$StatsUpdatedListener;
|
||||
Lcom/android/server/usb/UsbAlsaJackDetector;
|
||||
Lcom/android/server/usb/UsbAlsaMidiDevice$2;
|
||||
Lcom/android/server/usb/UsbAlsaMidiDevice$3;
|
||||
Lcom/android/server/usb/UsbAlsaMidiDevice$InputReceiverProxy;
|
||||
Lcom/android/server/usb/UsbAlsaMidiDevice;
|
||||
Lcom/android/server/usb/UsbDeviceManager;
|
||||
Lcom/android/server/usb/UsbHostManager;
|
||||
Lcom/android/server/usb/UsbMidiDevice$2;
|
||||
Lcom/android/server/usb/UsbMidiDevice$3;
|
||||
Lcom/android/server/usb/UsbMidiDevice$InputReceiverProxy;
|
||||
Lcom/android/server/usb/UsbMidiDevice;
|
||||
Lcom/android/server/usb/descriptors/UsbDescriptor;
|
||||
Lcom/android/server/usb/descriptors/UsbInterfaceDescriptor;
|
||||
Lcom/android/server/utils/AlarmQueue$1;
|
||||
|
||||
@@ -62,9 +62,9 @@ cc_library_static {
|
||||
"com_android_server_tv_TvInputHal.cpp",
|
||||
"com_android_server_vr_VrManagerService.cpp",
|
||||
"com_android_server_UsbAlsaJackDetector.cpp",
|
||||
"com_android_server_UsbAlsaMidiDevice.cpp",
|
||||
"com_android_server_UsbDeviceManager.cpp",
|
||||
"com_android_server_UsbDescriptorParser.cpp",
|
||||
"com_android_server_UsbMidiDevice.cpp",
|
||||
"com_android_server_UsbHostManager.cpp",
|
||||
"com_android_server_vibrator_VibratorController.cpp",
|
||||
"com_android_server_vibrator_VibratorManagerService.cpp",
|
||||
|
||||
@@ -14,27 +14,25 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#define LOG_TAG "UsbMidiDeviceJNI"
|
||||
#define LOG_TAG "UsbAlsaMidiDeviceJNI"
|
||||
#define LOG_NDEBUG 0
|
||||
#include "utils/Log.h"
|
||||
|
||||
#include "jni.h"
|
||||
#include <nativehelper/JNIPlatformHelp.h>
|
||||
#include <nativehelper/ScopedLocalRef.h>
|
||||
#include "android_runtime/AndroidRuntime.h"
|
||||
#include "android_runtime/Log.h"
|
||||
|
||||
#include <asm/byteorder.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <nativehelper/JNIPlatformHelp.h>
|
||||
#include <nativehelper/ScopedLocalRef.h>
|
||||
#include <sound/asound.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
namespace android
|
||||
{
|
||||
#include "android_runtime/AndroidRuntime.h"
|
||||
#include "android_runtime/Log.h"
|
||||
#include "jni.h"
|
||||
#include "utils/Log.h"
|
||||
|
||||
namespace android {
|
||||
|
||||
static jclass sFileDescriptorClass;
|
||||
static jfieldID sPipeFDField;
|
||||
@@ -46,10 +44,10 @@ static jfieldID sPipeFDField;
|
||||
// 1. Input O_RDONLY file descriptor
|
||||
// 2. Special input file descriptor to block the input thread
|
||||
// 3. Output O_WRONLY file descriptor
|
||||
static jobjectArray android_server_UsbMidiDevice_open(JNIEnv *env, jobject thiz, jint card,
|
||||
jint device, jint numInputs,
|
||||
jint numOutputs) {
|
||||
char path[100];
|
||||
static jobjectArray android_server_UsbAlsaMidiDevice_open(JNIEnv *env, jobject thiz, jint card,
|
||||
jint device, jint numInputs,
|
||||
jint numOutputs) {
|
||||
char path[100];
|
||||
int fd;
|
||||
|
||||
snprintf(path, sizeof(path), "/dev/snd/midiC%dD%d", card, device);
|
||||
@@ -126,9 +124,7 @@ release_fds:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
android_server_UsbMidiDevice_close(JNIEnv *env, jobject thiz, jobjectArray fds)
|
||||
{
|
||||
static void android_server_UsbAlsaMidiDevice_close(JNIEnv *env, jobject thiz, jobjectArray fds) {
|
||||
// write to mPipeFD to unblock input thread
|
||||
jint pipeFD = env->GetIntField(thiz, sPipeFDField);
|
||||
write(pipeFD, &pipeFD, sizeof(pipeFD));
|
||||
@@ -144,12 +140,12 @@ android_server_UsbMidiDevice_close(JNIEnv *env, jobject thiz, jobjectArray fds)
|
||||
|
||||
static JNINativeMethod method_table[] = {
|
||||
{"nativeOpen", "(IIII)[Ljava/io/FileDescriptor;",
|
||||
(void *)android_server_UsbMidiDevice_open},
|
||||
{"nativeClose", "([Ljava/io/FileDescriptor;)V", (void *)android_server_UsbMidiDevice_close},
|
||||
(void *)android_server_UsbAlsaMidiDevice_open},
|
||||
{"nativeClose", "([Ljava/io/FileDescriptor;)V",
|
||||
(void *)android_server_UsbAlsaMidiDevice_close},
|
||||
};
|
||||
|
||||
int register_android_server_UsbMidiDevice(JNIEnv *env)
|
||||
{
|
||||
int register_android_server_UsbAlsaMidiDevice(JNIEnv *env) {
|
||||
jclass clazz = env->FindClass("java/io/FileDescriptor");
|
||||
if (clazz == NULL) {
|
||||
ALOGE("Can't find java/io/FileDescriptor");
|
||||
@@ -157,19 +153,19 @@ int register_android_server_UsbMidiDevice(JNIEnv *env)
|
||||
}
|
||||
sFileDescriptorClass = (jclass)env->NewGlobalRef(clazz);
|
||||
|
||||
clazz = env->FindClass("com/android/server/usb/UsbMidiDevice");
|
||||
clazz = env->FindClass("com/android/server/usb/UsbAlsaMidiDevice");
|
||||
if (clazz == NULL) {
|
||||
ALOGE("Can't find com/android/server/usb/UsbMidiDevice");
|
||||
ALOGE("Can't find com/android/server/usb/UsbAlsaMidiDevice");
|
||||
return -1;
|
||||
}
|
||||
sPipeFDField = env->GetFieldID(clazz, "mPipeFD", "I");
|
||||
if (sPipeFDField == NULL) {
|
||||
ALOGE("Can't find UsbMidiDevice.mPipeFD");
|
||||
ALOGE("Can't find UsbAlsaMidiDevice.mPipeFD");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return jniRegisterNativeMethods(env, "com/android/server/usb/UsbMidiDevice",
|
||||
method_table, NELEM(method_table));
|
||||
return jniRegisterNativeMethods(env, "com/android/server/usb/UsbAlsaMidiDevice", method_table,
|
||||
NELEM(method_table));
|
||||
}
|
||||
|
||||
};
|
||||
}; // namespace android
|
||||
@@ -35,8 +35,8 @@ int register_android_server_storage_AppFuse(JNIEnv* env);
|
||||
int register_android_server_SerialService(JNIEnv* env);
|
||||
int register_android_server_SystemServer(JNIEnv* env);
|
||||
int register_android_server_UsbAlsaJackDetector(JNIEnv* env);
|
||||
int register_android_server_UsbAlsaMidiDevice(JNIEnv* env);
|
||||
int register_android_server_UsbDeviceManager(JNIEnv* env);
|
||||
int register_android_server_UsbMidiDevice(JNIEnv* env);
|
||||
int register_android_server_UsbHostManager(JNIEnv* env);
|
||||
int register_android_server_vr_VrManagerService(JNIEnv* env);
|
||||
int register_android_server_vibrator_VibratorController(JavaVM* vm, JNIEnv* env);
|
||||
@@ -90,8 +90,8 @@ extern "C" jint JNI_OnLoad(JavaVM* vm, void* /* reserved */)
|
||||
register_android_server_InputManager(env);
|
||||
register_android_server_LightsService(env);
|
||||
register_android_server_UsbDeviceManager(env);
|
||||
register_android_server_UsbMidiDevice(env);
|
||||
register_android_server_UsbAlsaJackDetector(env);
|
||||
register_android_server_UsbAlsaMidiDevice(env);
|
||||
register_android_server_UsbHostManager(env);
|
||||
register_android_server_vr_VrManagerService(env);
|
||||
register_android_server_vibrator_VibratorController(vm, env);
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
-keep,allowoptimization,allowaccessmodification class com.android.server.storage.AppFuseBridge { *; }
|
||||
-keep,allowoptimization,allowaccessmodification class com.android.server.tv.TvInputHal { *; }
|
||||
-keep,allowoptimization,allowaccessmodification class com.android.server.usb.UsbAlsaJackDetector { *; }
|
||||
-keep,allowoptimization,allowaccessmodification class com.android.server.usb.UsbMidiDevice { *; }
|
||||
-keep,allowoptimization,allowaccessmodification class com.android.server.usb.UsbAlsaMidiDevice { *; }
|
||||
-keep,allowoptimization,allowaccessmodification class com.android.server.vibrator.VibratorController$OnVibrationCompleteListener { *; }
|
||||
-keep,allowoptimization,allowaccessmodification class com.android.server.vibrator.VibratorManagerService$OnSyncedVibrationCompleteListener { *; }
|
||||
-keepclasseswithmembers,allowoptimization,allowaccessmodification class com.android.server.** {
|
||||
|
||||
@@ -119,11 +119,11 @@ public final class UsbAlsaManager {
|
||||
/**
|
||||
* List of connected MIDI devices
|
||||
*/
|
||||
private final HashMap<String, UsbMidiDevice>
|
||||
mMidiDevices = new HashMap<String, UsbMidiDevice>();
|
||||
private final HashMap<String, UsbAlsaMidiDevice>
|
||||
mMidiDevices = new HashMap<String, UsbAlsaMidiDevice>();
|
||||
|
||||
// UsbMidiDevice for USB peripheral mode (gadget) device
|
||||
private UsbMidiDevice mPeripheralMidiDevice = null;
|
||||
// UsbAlsaMidiDevice for USB peripheral mode (gadget) device
|
||||
private UsbAlsaMidiDevice mPeripheralMidiDevice = null;
|
||||
|
||||
private final HashSet<Integer> mAlsaCards = new HashSet<>();
|
||||
private final FileObserver mAlsaObserver = new FileObserver(new File(ALSA_DIRECTORY),
|
||||
@@ -331,11 +331,11 @@ public final class UsbAlsaManager {
|
||||
Slog.d(TAG, "numLegacyMidiOutputs:" + numLegacyMidiOutputs);
|
||||
}
|
||||
|
||||
UsbMidiDevice usbMidiDevice = UsbMidiDevice.create(mContext, properties,
|
||||
UsbAlsaMidiDevice midiDevice = UsbAlsaMidiDevice.create(mContext, properties,
|
||||
cardRec.getCardNum(), 0 /*device*/, numLegacyMidiInputs,
|
||||
numLegacyMidiOutputs);
|
||||
if (usbMidiDevice != null) {
|
||||
mMidiDevices.put(deviceAddress, usbMidiDevice);
|
||||
if (midiDevice != null) {
|
||||
mMidiDevices.put(deviceAddress, midiDevice);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -355,10 +355,10 @@ public final class UsbAlsaManager {
|
||||
}
|
||||
|
||||
// MIDI
|
||||
UsbMidiDevice usbMidiDevice = mMidiDevices.remove(deviceAddress);
|
||||
if (usbMidiDevice != null) {
|
||||
UsbAlsaMidiDevice midiDevice = mMidiDevices.remove(deviceAddress);
|
||||
if (midiDevice != null) {
|
||||
Slog.i(TAG, "USB MIDI Device Removed: " + deviceAddress);
|
||||
IoUtils.closeQuietly(usbMidiDevice);
|
||||
IoUtils.closeQuietly(midiDevice);
|
||||
}
|
||||
|
||||
logDevices("usbDeviceRemoved()");
|
||||
@@ -381,7 +381,7 @@ public final class UsbAlsaManager {
|
||||
com.android.internal.R.string.usb_midi_peripheral_product_name));
|
||||
properties.putInt(MidiDeviceInfo.PROPERTY_ALSA_CARD, card);
|
||||
properties.putInt(MidiDeviceInfo.PROPERTY_ALSA_DEVICE, device);
|
||||
mPeripheralMidiDevice = UsbMidiDevice.create(mContext, properties, card, device,
|
||||
mPeripheralMidiDevice = UsbAlsaMidiDevice.create(mContext, properties, card, device,
|
||||
1 /* numInputs */, 1 /* numOutputs */);
|
||||
} else if (!enabled && mPeripheralMidiDevice != null) {
|
||||
IoUtils.closeQuietly(mPeripheralMidiDevice);
|
||||
@@ -500,9 +500,9 @@ public final class UsbAlsaManager {
|
||||
}
|
||||
|
||||
for (String deviceAddr : mMidiDevices.keySet()) {
|
||||
// A UsbMidiDevice does not have a handle to the UsbDevice anymore
|
||||
mMidiDevices.get(deviceAddr).dump(deviceAddr, dump, "midi_devices",
|
||||
UsbAlsaManagerProto.MIDI_DEVICES);
|
||||
// A UsbAlsaMidiDevice does not have a handle to the UsbDevice anymore
|
||||
mMidiDevices.get(deviceAddr).dump(deviceAddr, dump, "alsa_midi_devices",
|
||||
UsbAlsaManagerProto.ALSA_MIDI_DEVICES);
|
||||
}
|
||||
|
||||
dump.end(token);
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
* 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 an
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
@@ -24,7 +24,7 @@ import android.media.midi.MidiDeviceStatus;
|
||||
import android.media.midi.MidiManager;
|
||||
import android.media.midi.MidiReceiver;
|
||||
import android.os.Bundle;
|
||||
import android.service.usb.UsbMidiDeviceProto;
|
||||
import android.service.usb.UsbAlsaMidiDeviceProto;
|
||||
import android.system.ErrnoException;
|
||||
import android.system.Os;
|
||||
import android.system.OsConstants;
|
||||
@@ -43,8 +43,12 @@ import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
public final class UsbMidiDevice implements Closeable {
|
||||
private static final String TAG = "UsbMidiDevice";
|
||||
/**
|
||||
* Opens device connections to MIDI 1.0 endpoints.
|
||||
* These endpoints will use ALSA.
|
||||
*/
|
||||
public final class UsbAlsaMidiDevice implements Closeable {
|
||||
private static final String TAG = "UsbAlsaMidiDevice";
|
||||
|
||||
private final int mAlsaCard;
|
||||
private final int mAlsaDevice;
|
||||
@@ -142,13 +146,13 @@ public final class UsbMidiDevice implements Closeable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an UsbMidiDevice based on the input parameters. Read/Write streams
|
||||
* Creates an UsbAlsaMidiDevice based on the input parameters. Read/Write streams
|
||||
* will be created individually as some devices don't have the same number of
|
||||
* inputs and outputs.
|
||||
*/
|
||||
public static UsbMidiDevice create(Context context, Bundle properties, int card,
|
||||
public static UsbAlsaMidiDevice create(Context context, Bundle properties, int card,
|
||||
int device, int numInputs, int numOutputs) {
|
||||
UsbMidiDevice midiDevice = new UsbMidiDevice(card, device, numInputs, numOutputs);
|
||||
UsbAlsaMidiDevice midiDevice = new UsbAlsaMidiDevice(card, device, numInputs, numOutputs);
|
||||
if (!midiDevice.register(context, properties)) {
|
||||
IoUtils.closeQuietly(midiDevice);
|
||||
Log.e(TAG, "createDeviceServer failed");
|
||||
@@ -157,7 +161,7 @@ public final class UsbMidiDevice implements Closeable {
|
||||
return midiDevice;
|
||||
}
|
||||
|
||||
private UsbMidiDevice(int card, int device, int numInputs, int numOutputs) {
|
||||
private UsbAlsaMidiDevice(int card, int device, int numInputs, int numOutputs) {
|
||||
mAlsaCard = card;
|
||||
mAlsaDevice = device;
|
||||
mNumInputs = numInputs;
|
||||
@@ -217,7 +221,7 @@ public final class UsbMidiDevice implements Closeable {
|
||||
|
||||
if (inputStreamCount > 0) {
|
||||
// Create input thread which will read from all output ports of the physical device
|
||||
new Thread("UsbMidiDevice input thread") {
|
||||
new Thread("UsbAlsaMidiDevice input thread") {
|
||||
@Override
|
||||
public void run() {
|
||||
byte[] buffer = new byte[BUFFER_SIZE];
|
||||
@@ -272,13 +276,13 @@ public final class UsbMidiDevice implements Closeable {
|
||||
final FileOutputStream outputStreamF = mOutputStreams[port];
|
||||
final int portF = port;
|
||||
|
||||
new Thread("UsbMidiDevice output thread " + port) {
|
||||
new Thread("UsbAlsaMidiDevice output thread " + port) {
|
||||
@Override
|
||||
public void run() {
|
||||
while (true) {
|
||||
MidiEvent event;
|
||||
try {
|
||||
event = (MidiEvent)eventSchedulerF.waitNextEvent();
|
||||
event = (MidiEvent) eventSchedulerF.waitNextEvent();
|
||||
} catch (InterruptedException e) {
|
||||
// try again
|
||||
continue;
|
||||
@@ -303,9 +307,9 @@ public final class UsbMidiDevice implements Closeable {
|
||||
}
|
||||
|
||||
private boolean register(Context context, Bundle properties) {
|
||||
MidiManager midiManager = (MidiManager)context.getSystemService(Context.MIDI_SERVICE);
|
||||
MidiManager midiManager = context.getSystemService(MidiManager.class);
|
||||
if (midiManager == null) {
|
||||
Log.e(TAG, "No MidiManager in UsbMidiDevice.register()");
|
||||
Log.e(TAG, "No MidiManager in UsbAlsaMidiDevice.register()");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -365,9 +369,9 @@ public final class UsbMidiDevice implements Closeable {
|
||||
long id) {
|
||||
long token = dump.start(idName, id);
|
||||
|
||||
dump.write("device_address", UsbMidiDeviceProto.DEVICE_ADDRESS, deviceAddr);
|
||||
dump.write("card", UsbMidiDeviceProto.CARD, mAlsaCard);
|
||||
dump.write("device", UsbMidiDeviceProto.DEVICE, mAlsaDevice);
|
||||
dump.write("device_address", UsbAlsaMidiDeviceProto.DEVICE_ADDRESS, deviceAddr);
|
||||
dump.write("card", UsbAlsaMidiDeviceProto.CARD, mAlsaCard);
|
||||
dump.write("device", UsbAlsaMidiDeviceProto.DEVICE, mAlsaDevice);
|
||||
|
||||
dump.end(token);
|
||||
}
|
||||
Reference in New Issue
Block a user