1 /******************************************************************
3 * Copyright 2014 Samsung Electronics All Rights Reserved.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
19 ******************************************************************/
23 #include <android/log.h>
24 #include "caleutils.h"
26 #include "oic_malloc.h"
27 #include "uthreadpool.h"
28 #include "uarraylist.h"
30 #define TAG PCF("CA_LE_UTILS")
32 #define METHODID_OBJECTNONPARAM "()Landroid/bluetooth/BluetoothAdapter;"
33 #define METHODID_STRINGNONPARAM "()Ljava/lang/String;"
34 #define CLASSPATH_BT_ADPATER "android/bluetooth/BluetoothAdapter"
36 jobject CALEGetUuidFromString(JNIEnv *env, const char* uuid)
39 OIC_LOG(DEBUG, TAG, "CALEGetUuidFromString");
41 jclass jni_cid_UUID = (*env)->FindClass(env, "java/util/UUID");
43 jmethodID jni_mid_fromString = (*env)->GetStaticMethodID(
44 env, jni_cid_UUID, "fromString", "(Ljava/lang/String;)Ljava/util/UUID;");
46 jstring str_uuid = (*env)->NewStringUTF(env, uuid);
48 jobject jni_obj_uuid = (*env)->CallStaticObjectMethod(env, jni_cid_UUID, jni_mid_fromString,
52 OIC_LOG(DEBUG, TAG, "Fail to get jni uuid object");
59 jobject CALEGetParcelUuid(JNIEnv *env, jobject uuid)
61 OIC_LOG(DEBUG, TAG, "CALEGetParcelUuid");
63 jclass jni_cid_ParcelUuid = (*env)->FindClass(env, "android/os/ParcelUuid");
65 jmethodID jni_mid_ParcelUuid = (*env)->GetMethodID(env, jni_cid_ParcelUuid, "<init>",
66 "(Ljava/util/UUID;)V");
68 jobject jni_ParcelUuid = (*env)->NewObject(env, jni_cid_ParcelUuid, jni_mid_ParcelUuid, uuid);
71 OIC_LOG(DEBUG, TAG, "Fail to get jni ParcelUuid");
75 return jni_ParcelUuid;
78 jstring CALEGetLocalDeviceAddress(JNIEnv* env)
80 jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER);
81 if (!jni_cid_BTAdapter)
83 OIC_LOG(DEBUG, TAG, "[BLE][Native] getAddress: jni_cid_BTAdapter is null");
87 jmethodID jni_mid_getDefaultAdapter = (*env)->GetStaticMethodID(env, jni_cid_BTAdapter,
89 METHODID_OBJECTNONPARAM);
90 if (!jni_mid_getDefaultAdapter)
92 OIC_LOG(DEBUG, TAG, "[BLE][Native] getAddress: jni_mid_getDefaultAdapter is null");
96 jmethodID jni_mid_getAddress = (*env)->GetMethodID(env, jni_cid_BTAdapter, "getAddress",
97 METHODID_STRINGNONPARAM);
98 if (!jni_mid_getAddress)
100 OIC_LOG(DEBUG, TAG, "[BLE][Native] getAddress: jni_mid_getAddress is null");
104 jobject jni_obj_BTAdapter = (*env)->CallStaticObjectMethod(env, jni_cid_BTAdapter,
105 jni_mid_getDefaultAdapter);
106 if (!jni_obj_BTAdapter)
108 OIC_LOG(DEBUG, TAG, "[BLE][Native] getAddress: jni_obj_BTAdapter is null");
112 jstring jni_str_address = (jstring)(*env)->CallObjectMethod(env, jni_obj_BTAdapter,
114 if (!jni_str_address)
116 OIC_LOG(DEBUG, TAG, "[BLE][Native] getAddress: jni_str_address is null");
120 return jni_str_address;
123 jobjectArray CALEBondedDevices(JNIEnv *env)
125 jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER);
126 if (!jni_cid_BTAdapter)
128 OIC_LOG(DEBUG, TAG, "[BLE][Native] getBondedDevices: jni_cid_BTAdapter is null");
132 jmethodID jni_mid_getDefaultAdapter = (*env)->GetStaticMethodID(env, jni_cid_BTAdapter,
134 METHODID_OBJECTNONPARAM);
136 jobject jni_obj_BTAdapter = (*env)->CallStaticObjectMethod(env, jni_cid_BTAdapter,
137 jni_mid_getDefaultAdapter);
138 if (!jni_obj_BTAdapter)
140 OIC_LOG(DEBUG, TAG, "[BLE][Native] getBondedDevices: bluetooth adapter is null");
144 // Get a list of currently paired devices
145 jmethodID jni_mid_getBondedDevices = (*env)->GetMethodID(env, jni_cid_BTAdapter,
147 "()Ljava/util/Set;");
148 if (!jni_mid_getBondedDevices)
150 OIC_LOG(DEBUG, TAG, "[BLE][Native] getBondedDevices: jni_mid_getBondedDevicesr is null");
154 jobject jni_obj_setPairedDevices = (*env)->CallObjectMethod(env, jni_obj_BTAdapter,
155 jni_mid_getBondedDevices);
156 if (!jni_obj_setPairedDevices)
158 OIC_LOG(DEBUG, TAG, "[BLE][Native] getBondedDevices: jni_obj_setPairedDevices is null");
162 // Convert the set to an object array
163 // object[] array = Set<BluetoothDevice>.toArray();
164 jclass jni_cid_Set = (*env)->FindClass(env, "java/util/Set");
165 jmethodID jni_mid_toArray = (*env)->GetMethodID(env, jni_cid_Set, "toArray",
166 "()[Ljava/lang/Object;");
168 if (!jni_mid_toArray)
170 OIC_LOG(DEBUG, TAG, "[BLE][Native] getBondedDevices: jni_mid_toArray is null");
174 jobjectArray jni_arrayPairedDevices = (jobjectArray)(
175 (*env)->CallObjectMethod(env, jni_obj_setPairedDevices, jni_mid_toArray));
176 if (!jni_arrayPairedDevices)
178 OIC_LOG(DEBUG, TAG, "[BLE][Native] getBondedDevices: jni_arrayPairedDevices is null");
182 return jni_arrayPairedDevices;
185 jint CALEGetBTStateOnInfo(JNIEnv *env)
187 jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER);
188 if (!jni_cid_BTAdapter)
190 OIC_LOG(DEBUG, TAG, "[BLE][Native] getBTStateOnInfo: jni_cid_BTAdapter is null");
194 jfieldID jni_fid_stateon = (*env)->GetStaticFieldID(env, jni_cid_BTAdapter, "STATE_ON", "I");
195 if (jni_fid_stateon == 0)
197 OIC_LOG(DEBUG, TAG, "[BLE][Native] get_field_state is 0");
200 jint jni_int_val = (*env)->GetStaticIntField(env, jni_cid_BTAdapter, jni_fid_stateon);
202 OIC_LOG_V(DEBUG, TAG, "[BLE][Native] bluetooth STATE_ON state integer value : %d", jni_int_val);
207 jboolean CALEIsEnableBTAdapter(JNIEnv *env)
209 jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER);
210 if (!jni_cid_BTAdapter)
212 OIC_LOG(DEBUG, TAG, "[BLE][Native] jni_cid_BTAdapter: jni_cid_BTAdapter is null");
216 jmethodID jni_mid_getDefaultAdapter = (*env)->GetStaticMethodID(env, jni_cid_BTAdapter,
218 METHODID_OBJECTNONPARAM);
219 if (!jni_mid_getDefaultAdapter)
221 OIC_LOG(DEBUG, TAG, "[BLE][Native] jni_mid_getDefaultAdapter is null");
225 jobject jni_obj_BTAdapter = (*env)->CallStaticObjectMethod(env, jni_cid_BTAdapter,
226 jni_mid_getDefaultAdapter);
227 if (!jni_obj_BTAdapter)
229 OIC_LOG(DEBUG, TAG, "[BLE][Native] jni_obj_BTAdapter is null");
234 jmethodID jni_mid_isEnable = (*env)->GetMethodID(env, jni_cid_BTAdapter, "isEnabled", "()Z");
235 if (!jni_mid_isEnable)
237 OIC_LOG(DEBUG, TAG, "[BLE][Native] jni_mid_isEnable is null");
241 jboolean jni_isEnable = (*env)->CallBooleanMethod(env, jni_obj_BTAdapter, jni_mid_isEnable);
242 OIC_LOG_V(DEBUG, TAG, "[BLE][Native] adapter state is %d", jni_isEnable);
247 jstring CALEGetAddressFromBTDevice(JNIEnv *env, jobject bluetoothDevice)
249 jclass jni_cid_device_list = (*env)->FindClass(env, "android/bluetooth/BluetoothDevice");
250 if (!jni_cid_device_list)
252 OIC_LOG(DEBUG, TAG, "[BLE][Native] jni_cid_device_list is null");
256 jmethodID jni_mid_getAddress = (*env)->GetMethodID(env, jni_cid_device_list, "getAddress",
257 "()Ljava/lang/String;");
258 if (!jni_mid_getAddress)
260 OIC_LOG(DEBUG, TAG, "[BLE][Native] jni_mid_getAddress is null");
264 jstring jni_address = (jstring)(*env)->CallObjectMethod(env, bluetoothDevice,
268 OIC_LOG(DEBUG, TAG, "[BLE][Native] jni_address is null");