1c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov/*
2c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov * Copyright (C) 2017 The Android Open Source Project
3c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov *
4c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov * Licensed under the Apache License, Version 2.0 (the "License");
5c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov * you may not use this file except in compliance with the License.
6c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov * You may obtain a copy of the License at
7c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov *
8c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov *      http://www.apache.org/licenses/LICENSE-2.0
9c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov *
10c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov * Unless required by applicable law or agreed to in writing, software
11c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov * distributed under the License is distributed on an "AS IS" BASIS,
12c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov * See the License for the specific language governing permissions and
14c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov * limitations under the License.
15c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov */
16c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov
17c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov//#define LOG_NDEBUG 0
18c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov#define LOG_TAG "Midi-JNI"
19c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov
20c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov#include <android_util_Binder.h>
2171f672b98a0c31001ca28de86d9ac99fef0812b1Paul McLean#include <midi/midi_internal.h>
22c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov#include <nativehelper/jni.h>
23c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov#include <utils/Log.h>
24c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov
25c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganovusing namespace android;
26c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganovusing namespace android::media::midi;
27c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov
2871f672b98a0c31001ca28de86d9ac99fef0812b1Paul McLeanextern "C" jlong Java_android_media_midi_MidiDevice_native_1mirrorToNative(
2971f672b98a0c31001ca28de86d9ac99fef0812b1Paul McLean        JNIEnv *env, jobject, jobject midiDeviceServer, jint id)
30c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov{
3171f672b98a0c31001ca28de86d9ac99fef0812b1Paul McLean    // ALOGI("native_mirrorToNative(%p)...", midiDeviceServer);
32c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov    sp<IBinder> serverBinder = ibinderForJavaObject(env, midiDeviceServer);
33c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov    if (serverBinder.get() == NULL) {
34c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov        ALOGE("Could not obtain IBinder from passed jobject");
35c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov        return -EINVAL;
36c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov    }
3771f672b98a0c31001ca28de86d9ac99fef0812b1Paul McLean
3871f672b98a0c31001ca28de86d9ac99fef0812b1Paul McLean    AMIDI_Device* devicePtr = new AMIDI_Device;
3971f672b98a0c31001ca28de86d9ac99fef0812b1Paul McLean    devicePtr->server = new BpMidiDeviceServer(serverBinder);
4071f672b98a0c31001ca28de86d9ac99fef0812b1Paul McLean    devicePtr->deviceId = id;
4171f672b98a0c31001ca28de86d9ac99fef0812b1Paul McLean
4271f672b98a0c31001ca28de86d9ac99fef0812b1Paul McLean    return (jlong)devicePtr;
43c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov}
44c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov
4571f672b98a0c31001ca28de86d9ac99fef0812b1Paul McLeanextern "C" void Java_android_media_midi_MidiDevice_native_removeFromNative(
4671f672b98a0c31001ca28de86d9ac99fef0812b1Paul McLean        JNIEnv *, jobject , jlong nativeToken)
47c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov{
4871f672b98a0c31001ca28de86d9ac99fef0812b1Paul McLean    AMIDI_Device* devicePtr = (AMIDI_Device*)nativeToken;
4971f672b98a0c31001ca28de86d9ac99fef0812b1Paul McLean    delete devicePtr;
50c276c59eb5d0f36a1133ad718e5e1244390f4688Mikhail Naganov}
51