USB MIDI: Rename as UsbAlsaMidiDevice

UsbMidiDevice is a confusing name for the ALSA MIDI path when
UsbDirectMidiDevice exists. This CL renames UsbMidiDevice as
UsbAlsaMidiDevice.

Bug: 266753421
Test: MIDI Keyboard and MIDI Scope
Change-Id: I6aca2b9c10043bcaa28fee1066cbece66578397a
This commit is contained in:
Robert Wu
2023-01-26 01:44:07 +00:00
parent 0b9b6f13cf
commit 8e7bf0ff3b
8 changed files with 69 additions and 68 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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",

View File

@@ -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

View File

@@ -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);

View File

@@ -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.** {

View File

@@ -110,11 +110,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;
/* package */ UsbAlsaManager(Context context) {
mContext = context;
@@ -304,11 +304,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);
}
}
}
@@ -327,10 +327,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()");
@@ -353,7 +353,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);
@@ -389,9 +389,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);

View File

@@ -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);
}