3 #include <android/log.h>
6 #include "oic_malloc.h"
7 #include "uthreadpool.h"
8 #include "uarraylist.h"
10 #define TAG PCF("CA_LE_UTILS")
12 #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
13 #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
15 #define METHODID_OBJECTNONPARAM "()Landroid/bluetooth/BluetoothAdapter;"
16 #define METHODID_STRINGNONPARAM "()Ljava/lang/String;"
17 #define CLASSPATH_BT_ADPATER "android/bluetooth/BluetoothAdapter"
19 jobject CALEGetUuidFromString(JNIEnv *env, const char* uuid)
22 OIC_LOG_V(DEBUG, TAG, "CALEGetUuidFromString");
24 jclass jni_cid_UUID = (*env)->FindClass(env, "java/util/UUID");
26 jmethodID jni_mid_fromString = (*env)->GetStaticMethodID(env, jni_cid_UUID,
27 "fromString", "(Ljava/lang/String;)Ljava/util/UUID;");
29 jstring str_uuid = (*env)->NewStringUTF(env, uuid);
31 jobject jni_obj_uuid = (*env)->CallStaticObjectMethod(env, jni_cid_UUID,
32 jni_mid_fromString, str_uuid);
35 OIC_LOG_V(DEBUG, TAG, "Fail to get jni uuid object");
42 jobject CALEGetParcelUuid(JNIEnv *env, jobject uuid)
44 OIC_LOG_V(DEBUG, TAG, "CALEGetParcelUuid");
46 jclass jni_cid_ParcelUuid = (*env)->FindClass(env, "android/os/ParcelUuid");
48 jmethodID jni_mid_ParcelUuid = (*env)->GetMethodID(env, jni_cid_ParcelUuid,
49 "<init>", "(Ljava/util/UUID;)V");
51 jobject jni_ParcelUuid = (*env)->NewObject(env, jni_cid_ParcelUuid,
52 jni_mid_ParcelUuid, uuid);
55 OIC_LOG_V(DEBUG, TAG, "Fail to get jni ParcelUuid");
59 return jni_ParcelUuid;
62 jstring CALEGetLocalDeviceAddress(JNIEnv* env)
64 jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER);
65 if(!jni_cid_BTAdapter)
67 OIC_LOG(DEBUG, TAG, "[BLE][Native] getAddress: jni_cid_BTAdapter is null");
71 jmethodID jni_mid_getDefaultAdapter =
72 (*env)->GetStaticMethodID(env, jni_cid_BTAdapter, "getDefaultAdapter", METHODID_OBJECTNONPARAM);
73 if(!jni_mid_getDefaultAdapter)
75 OIC_LOG(DEBUG, TAG, "[BLE][Native] getAddress: jni_mid_getDefaultAdapter is null");
79 jmethodID jni_mid_getAddress = (*env)->GetMethodID(env, jni_cid_BTAdapter, "getAddress", METHODID_STRINGNONPARAM);
80 if(!jni_mid_getAddress)
82 OIC_LOG(DEBUG, TAG, "[BLE][Native] getAddress: jni_mid_getAddress is null");
86 jobject jni_obj_BTAdapter = (*env)->CallStaticObjectMethod(env, jni_cid_BTAdapter, jni_mid_getDefaultAdapter);
87 if(!jni_obj_BTAdapter)
89 OIC_LOG(DEBUG, TAG, "[BLE][Native] getAddress: jni_obj_BTAdapter is null");
93 jstring jni_str_address = (jstring)(*env)->CallObjectMethod(env, jni_obj_BTAdapter, jni_mid_getAddress);
96 OIC_LOG(DEBUG, TAG, "[BLE][Native] getAddress: jni_str_address is null");
100 return jni_str_address;
103 jobjectArray CALEBondedDevices(JNIEnv *env)
105 jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER);
106 if(!jni_cid_BTAdapter)
108 OIC_LOG(DEBUG, TAG, "[BLE][Native] getBondedDevices: jni_cid_BTAdapter is null");
112 jmethodID jni_mid_getDefaultAdapter =
113 (*env)->GetStaticMethodID(env, jni_cid_BTAdapter, "getDefaultAdapter", METHODID_OBJECTNONPARAM);
115 jobject jni_obj_BTAdapter = (*env)->CallStaticObjectMethod(env, jni_cid_BTAdapter, jni_mid_getDefaultAdapter);
116 if(!jni_obj_BTAdapter)
118 OIC_LOG(DEBUG, TAG, "[BLE][Native] getBondedDevices: bluetooth adapter is null");
122 // Get a list of currently paired devices
123 jmethodID jni_mid_getBondedDevices = (*env)->GetMethodID(env, jni_cid_BTAdapter,
124 "getBondedDevices", "()Ljava/util/Set;");
125 if(!jni_mid_getBondedDevices)
127 OIC_LOG(DEBUG, TAG, "[BLE][Native] getBondedDevices: jni_mid_getBondedDevicesr is null");
131 jobject jni_obj_setPairedDevices = (*env)->CallObjectMethod(env, jni_obj_BTAdapter, jni_mid_getBondedDevices);
132 if(!jni_obj_setPairedDevices)
134 OIC_LOG(DEBUG, TAG, "[BLE][Native] getBondedDevices: jni_obj_setPairedDevices is null");
138 // Convert the set to an object array
139 // object[] array = Set<BluetoothDevice>.toArray();
140 jclass jni_cid_Set = (*env)->FindClass(env, "java/util/Set");
141 jmethodID jni_mid_toArray = (*env)->GetMethodID(env, jni_cid_Set, "toArray", "()[Ljava/lang/Object;");
145 OIC_LOG(DEBUG, TAG, "[BLE][Native] getBondedDevices: jni_mid_toArray is null");
149 jobjectArray jni_arrayPairedDevices = (jobjectArray)((*env)->CallObjectMethod(env,
150 jni_obj_setPairedDevices, jni_mid_toArray));
151 if(!jni_arrayPairedDevices)
153 OIC_LOG(DEBUG, TAG, "[BLE][Native] getBondedDevices: jni_arrayPairedDevices is null");
157 return jni_arrayPairedDevices;
160 jint CALEGetBTStateOnInfo(JNIEnv *env)
162 jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER);
163 if(!jni_cid_BTAdapter)
165 OIC_LOG(DEBUG, TAG, "[BLE][Native] getBTStateOnInfo: jni_cid_BTAdapter is null");
169 jfieldID jni_fid_stateon = (*env)->GetStaticFieldID(env, jni_cid_BTAdapter, "STATE_ON", "I");
170 if (jni_fid_stateon == 0)
172 OIC_LOG(DEBUG, TAG, "[BLE][Native] get_field_state is 0");
175 jint jni_int_val = (*env)->GetStaticIntField(env, jni_cid_BTAdapter, jni_fid_stateon);
177 OIC_LOG_V(DEBUG, TAG, "[BLE][Native] bluetooth STATE_ON state integer value : %d", jni_int_val);
182 jboolean CALEIsEnableBTAdapter(JNIEnv *env)
184 jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER);
185 if(!jni_cid_BTAdapter)
187 OIC_LOG(DEBUG, TAG, "[BLE][Native] jni_cid_BTAdapter: jni_cid_BTAdapter is null");
191 jmethodID jni_mid_getDefaultAdapter =
192 (*env)->GetStaticMethodID(env, jni_cid_BTAdapter, "getDefaultAdapter", METHODID_OBJECTNONPARAM);
193 if(!jni_mid_getDefaultAdapter)
195 OIC_LOG(DEBUG, TAG, "[BLE][Native] jni_mid_getDefaultAdapter is null");
199 jobject jni_obj_BTAdapter = (*env)->CallStaticObjectMethod(env, jni_cid_BTAdapter, jni_mid_getDefaultAdapter);
200 if(!jni_obj_BTAdapter)
202 OIC_LOG(DEBUG, TAG, "[BLE][Native] jni_obj_BTAdapter is null");
207 jmethodID jni_mid_isEnable = (*env)->GetMethodID(env, jni_cid_BTAdapter, "isEnabled",
209 if(!jni_mid_isEnable)
211 OIC_LOG(DEBUG, TAG, "[BLE][Native] jni_mid_isEnable is null");
215 jboolean jni_isEnable = (*env)->CallBooleanMethod(env, jni_obj_BTAdapter, jni_mid_isEnable);
216 OIC_LOG_V(DEBUG, TAG, "[BLE][Native] adapter state is %d", jni_isEnable);
221 jstring CALEGetAddressFromBTDevice(JNIEnv *env, jobject bluetoothDevice)
223 jclass jni_cid_device_list = (*env)->FindClass(env, "android/bluetooth/BluetoothDevice");
224 if(!jni_cid_device_list)
226 OIC_LOG(DEBUG, TAG, "[BLE][Native] jni_cid_device_list is null");
230 jmethodID jni_mid_getAddress = (*env)->GetMethodID(env, jni_cid_device_list, "getAddress",
231 "()Ljava/lang/String;");
232 if(!jni_mid_getAddress)
234 OIC_LOG(DEBUG, TAG, "[BLE][Native] jni_mid_getAddress is null");
238 jstring jni_address = (jstring)(*env)->CallObjectMethod(env, bluetoothDevice, jni_mid_getAddress);
241 OIC_LOG(DEBUG, TAG, "[BLE][Native] jni_address is null");