3 #include <android/log.h>
4 #include "caedrutils.h"
6 #include "oic_malloc.h"
7 #include "uthreadpool.h"
8 #include "uarraylist.h"
10 #define TAG PCF("CA_EDR_UTILS")
12 static const char *METHODID_OBJECTNONPARAM = "()Landroid/bluetooth/BluetoothAdapter;";
13 static const char *METHODID_STRINGNONPARAM = "()Ljava/lang/String;";
14 static const char *CLASSPATH_BT_ADPATER = "android/bluetooth/BluetoothAdapter";
20 // get address from bluetooth socket
21 jstring CAEDRNativeGetAddressFromDeviceSocket(JNIEnv *env, jobject bluetoothSocketObj)
23 if(!bluetoothSocketObj)
28 jclass jni_cid_BTSocket = (*env)->FindClass(env, "android/bluetooth/BluetoothSocket");
31 OIC_LOG_V(DEBUG, TAG, "[EDR] getRemoteAddress: jni_cid_BTSocket is null");
35 jmethodID jni_mid_getRemoteDevice = (*env)->GetMethodID(env, jni_cid_BTSocket, "getRemoteDevice",
36 "()Landroid/bluetooth/BluetoothDevice;");
37 if(!jni_mid_getRemoteDevice)
39 OIC_LOG_V(DEBUG, TAG, "[EDR] getRemoteAddress: jni_mid_getRemoteDevice is null");
43 jobject jni_obj_remoteBTDevice = (*env)->CallObjectMethod(env, bluetoothSocketObj, jni_mid_getRemoteDevice);
44 if(!jni_obj_remoteBTDevice)
46 OIC_LOG_V(DEBUG, TAG, "[EDR] getRemoteAddress: jni_obj_remoteBTDevice is null");
50 jclass jni_cid_BTDevice = (*env)->FindClass(env, "android/bluetooth/BluetoothDevice");
51 jmethodID j_mid_getAddress = (*env)->GetMethodID(env, jni_cid_BTDevice, "getAddress", "()Ljava/lang/String;");
53 jstring j_str_address = (*env)->CallObjectMethod(env, jni_obj_remoteBTDevice, j_mid_getAddress);
56 const char * address = (*env)->GetStringUTFChars(env, j_str_address, NULL);
57 OIC_LOG_V(DEBUG, TAG, "[EDR] getRemoteAddress: ~~ remote device address is %s", address);
58 // (*env)->ReleaseStringUTFChars(env, j_str_address, address);
65 jstring CAEDRNativeGetLocalDeviceAddress(JNIEnv* env)
67 jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER);
68 if(!jni_cid_BTAdapter)
70 OIC_LOG(DEBUG, TAG, "[EDR][Native] getAddress: jni_cid_BTAdapter is null");
74 jmethodID jni_mid_getDefaultAdapter =
75 (*env)->GetStaticMethodID(env, jni_cid_BTAdapter, "getDefaultAdapter", METHODID_OBJECTNONPARAM);
76 if(!jni_mid_getDefaultAdapter)
78 OIC_LOG(DEBUG, TAG, "[EDR][Native] getAddress: jni_mid_getDefaultAdapter is null");
82 jmethodID jni_mid_getAddress = (*env)->GetMethodID(env, jni_cid_BTAdapter, "getAddress", METHODID_STRINGNONPARAM);
83 if(!jni_mid_getAddress)
85 OIC_LOG(DEBUG, TAG, "[EDR][Native] getAddress: jni_mid_getAddress is null");
89 jobject jni_obj_BTAdapter = (*env)->CallStaticObjectMethod(env, jni_cid_BTAdapter, jni_mid_getDefaultAdapter);
90 if(!jni_obj_BTAdapter)
92 OIC_LOG(DEBUG, TAG, "[EDR][Native] getAddress: jni_obj_BTAdapter is null");
96 jstring jni_str_address = (jstring)(*env)->CallObjectMethod(env, jni_obj_BTAdapter, jni_mid_getAddress);
99 OIC_LOG(DEBUG, TAG, "[EDR][Native] getAddress: jni_str_address is null");
103 return jni_str_address;
106 jobjectArray CAEDRNativeGetBondedDevices(JNIEnv *env)
108 jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER);
109 if(!jni_cid_BTAdapter)
111 OIC_LOG(DEBUG, TAG, "[EDR][Native] getBondedDevices: jni_cid_BTAdapter is null");
115 jmethodID jni_mid_getDefaultAdapter =
116 (*env)->GetStaticMethodID(env, jni_cid_BTAdapter, "getDefaultAdapter", METHODID_OBJECTNONPARAM);
118 jobject jni_obj_BTAdapter = (*env)->CallStaticObjectMethod(env, jni_cid_BTAdapter, jni_mid_getDefaultAdapter);
119 if(!jni_obj_BTAdapter)
121 OIC_LOG(DEBUG, TAG, "[EDR][Native] getBondedDevices: bluetooth adapter is null");
125 // Get a list of currently paired devices
126 jmethodID jni_mid_getBondedDevices = (*env)->GetMethodID(env, jni_cid_BTAdapter,
127 "getBondedDevices", "()Ljava/util/Set;");
128 if(!jni_mid_getBondedDevices)
130 OIC_LOG(DEBUG, TAG, "[EDR][Native] getBondedDevices: jni_mid_getBondedDevicesr is null");
134 jobject jni_obj_setPairedDevices = (*env)->CallObjectMethod(env, jni_obj_BTAdapter, jni_mid_getBondedDevices);
135 if(!jni_obj_setPairedDevices)
137 OIC_LOG(DEBUG, TAG, "[EDR][Native] getBondedDevices: jni_obj_setPairedDevices is null");
141 // Convert the set to an object array
142 // object[] array = Set<BluetoothDevice>.toArray();
143 jclass jni_cid_Set = (*env)->FindClass(env, "java/util/Set");
144 jmethodID jni_mid_toArray = (*env)->GetMethodID(env, jni_cid_Set, "toArray", "()[Ljava/lang/Object;");
148 OIC_LOG(DEBUG, TAG, "[EDR][Native] getBondedDevices: jni_mid_toArray is null");
152 jobjectArray jni_arrayPairedDevices = (jobjectArray)((*env)->CallObjectMethod(env,
153 jni_obj_setPairedDevices, jni_mid_toArray));
154 if(!jni_arrayPairedDevices)
156 OIC_LOG(DEBUG, TAG, "[EDR][Native] getBondedDevices: jni_arrayPairedDevices is null");
160 return jni_arrayPairedDevices;
163 jint CAEDRNativeGetBTStateOnInfo(JNIEnv *env)
165 jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER);
166 if(!jni_cid_BTAdapter)
168 OIC_LOG(DEBUG, TAG, "[EDR][Native] getBTStateOnInfo: jni_cid_BTAdapter is null");
172 jfieldID jni_fid_stateon = (*env)->GetStaticFieldID(env, jni_cid_BTAdapter, "STATE_ON", "I");
173 if (jni_fid_stateon == 0)
175 OIC_LOG(DEBUG, TAG, "[EDR][Native] get_field_state is 0");
178 jint jni_int_val = (*env)->GetStaticIntField(env, jni_cid_BTAdapter, jni_fid_stateon);
180 OIC_LOG_V(DEBUG, TAG, "[EDR][Native] bluetooth STATE_ON state integer value : %d", jni_int_val);
185 jboolean CAEDRNativeIsEnableBTAdapter(JNIEnv *env)
187 jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADPATER);
188 if(!jni_cid_BTAdapter)
190 OIC_LOG(DEBUG, TAG, "[EDR][Native] jni_cid_BTAdapter: jni_cid_BTAdapter is null");
194 jmethodID jni_mid_getDefaultAdapter =
195 (*env)->GetStaticMethodID(env, jni_cid_BTAdapter, "getDefaultAdapter", METHODID_OBJECTNONPARAM);
196 if(!jni_mid_getDefaultAdapter)
198 OIC_LOG(DEBUG, TAG, "[EDR][Native] jni_mid_getDefaultAdapter is null");
202 jobject jni_obj_BTAdapter = (*env)->CallStaticObjectMethod(env, jni_cid_BTAdapter, jni_mid_getDefaultAdapter);
203 if(!jni_obj_BTAdapter)
205 OIC_LOG(DEBUG, TAG, "[EDR][Native] jni_obj_BTAdapter is null");
210 jmethodID jni_mid_isEnable = (*env)->GetMethodID(env, jni_cid_BTAdapter, "isEnabled",
212 if(!jni_mid_isEnable)
214 OIC_LOG(DEBUG, TAG, "[EDR][Native] jni_mid_isEnable is null");
218 jboolean jni_isEnable = (*env)->CallBooleanMethod(env, jni_obj_BTAdapter, jni_mid_isEnable);
219 OIC_LOG_V(DEBUG, TAG, "[EDR][Native] adapter state is %d", jni_isEnable);
224 jstring CAEDRNativeGetAddressFromBTDevice(JNIEnv *env, jobject bluetoothDevice)
226 jclass jni_cid_device_list = (*env)->FindClass(env, "android/bluetooth/BluetoothDevice");
227 if(!jni_cid_device_list)
229 OIC_LOG(DEBUG, TAG, "[EDR][Native] jni_cid_device_list is null");
233 jmethodID jni_mid_getAddress = (*env)->GetMethodID(env, jni_cid_device_list, "getAddress",
234 "()Ljava/lang/String;");
235 if(!jni_mid_getAddress)
237 OIC_LOG(DEBUG, TAG, "[EDR][Native] jni_mid_getAddress is null");
241 jstring jni_address = (jstring)(*env)->CallObjectMethod(env, bluetoothDevice, jni_mid_getAddress);
244 OIC_LOG(DEBUG, TAG, "[EDR][Native] jni_address is null");