1 /*
2  * Copyright (c) 2014 The Android Open Source Project
3  * Copyright (C) 2012 The Android Open Source Project
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 #ifndef COM_ANDROID_BLUETOOTH_H
19 #define COM_ANDROID_BLUETOOTH_H
20 
21 #include "JNIHelp.h"
22 #include "android_runtime/AndroidRuntime.h"
23 #include "android_runtime/Log.h"
24 #include "hardware/bluetooth.h"
25 #include "hardware/hardware.h"
26 #include "jni.h"
27 #include "nativehelper/ScopedLocalRef.h"
28 #include "utils/Log.h"
29 
30 namespace android {
31 
32 JNIEnv* getCallbackEnv();
33 
34 class CallbackEnv {
35 public:
CallbackEnv(const char * methodName)36     CallbackEnv(const char *methodName) : mName(methodName) {
37         mCallbackEnv = getCallbackEnv();
38     }
39 
~CallbackEnv()40     ~CallbackEnv() {
41       if (mCallbackEnv && mCallbackEnv->ExceptionCheck()) {
42           ALOGE("An exception was thrown by callback '%s'.", mName);
43           LOGE_EX(mCallbackEnv);
44           mCallbackEnv->ExceptionClear();
45       }
46     }
47 
valid()48     bool valid() const {
49       JNIEnv *env = AndroidRuntime::getJNIEnv();
50       if (!mCallbackEnv || (mCallbackEnv != env)) {
51           ALOGE("%s: Callback env fail: env: %p, callback: %p", mName, env, mCallbackEnv);
52           return false;
53       }
54       return true;
55     }
56 
57     JNIEnv *operator-> () const {
58         return mCallbackEnv;
59     }
60 
get()61     JNIEnv *get() const {
62         return mCallbackEnv;
63     }
64 
65 private:
66     JNIEnv *mCallbackEnv;
67     const char *mName;
68 
69     DISALLOW_COPY_AND_ASSIGN(CallbackEnv);
70 };
71 
72 const bt_interface_t* getBluetoothInterface();
73 
74 int register_com_android_bluetooth_hfp(JNIEnv* env);
75 
76 int register_com_android_bluetooth_hfpclient(JNIEnv* env);
77 
78 int register_com_android_bluetooth_a2dp(JNIEnv* env);
79 
80 int register_com_android_bluetooth_a2dp_sink(JNIEnv* env);
81 
82 int register_com_android_bluetooth_avrcp(JNIEnv* env);
83 
84 int register_com_android_bluetooth_avrcp_controller(JNIEnv* env);
85 
86 int register_com_android_bluetooth_hid(JNIEnv* env);
87 
88 int register_com_android_bluetooth_hidd(JNIEnv* env);
89 
90 int register_com_android_bluetooth_hdp(JNIEnv* env);
91 
92 int register_com_android_bluetooth_pan(JNIEnv* env);
93 
94 int register_com_android_bluetooth_gatt (JNIEnv* env);
95 
96 int register_com_android_bluetooth_sdp (JNIEnv* env);
97 
98 }
99 
100 #endif /* COM_ANDROID_BLUETOOTH_H */
101