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