X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=resource%2Fcsdk%2Fconnectivity%2Fsrc%2Fbt_le_adapter%2Fandroid%2Fcaleutils.c;h=04c5f8b7cdc5b88e988892a8c39250ab841abbd3;hb=refs%2Ftags%2Faccepted%2Ftizen%2Funified%2F20171010.063815;hp=7c7bcdf388e91ae3f12b69f1d8b6fcc80ee9fb09;hpb=0e7762704ad69d816015184a55177d17c701188b;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/csdk/connectivity/src/bt_le_adapter/android/caleutils.c b/resource/csdk/connectivity/src/bt_le_adapter/android/caleutils.c index 7c7bcdf..04c5f8b 100644 --- a/resource/csdk/connectivity/src/bt_le_adapter/android/caleutils.c +++ b/resource/csdk/connectivity/src/bt_le_adapter/android/caleutils.c @@ -39,7 +39,7 @@ jobject CALEGetUuidFromString(JNIEnv *env, const char* uuid) if (!jni_cid_UUID) { OIC_LOG(ERROR, TAG, "jni_cid_UUID is not available"); - return NULL; + goto error_exit; } jmethodID jni_mid_fromString = (*env)->GetStaticMethodID(env, jni_cid_UUID, "fromString", @@ -48,14 +48,14 @@ jobject CALEGetUuidFromString(JNIEnv *env, const char* uuid) if (!jni_mid_fromString) { OIC_LOG(ERROR, TAG, "jni_mid_fromString is not available"); - return NULL; + goto error_exit; } jstring str_uuid = (*env)->NewStringUTF(env, uuid); if (!str_uuid) { OIC_LOG(ERROR, TAG, "str_uuid is not available"); - return NULL; + goto error_exit; } jobject jni_obj_uuid = (*env)->CallStaticObjectMethod(env, jni_cid_UUID, jni_mid_fromString, @@ -63,10 +63,14 @@ jobject CALEGetUuidFromString(JNIEnv *env, const char* uuid) if (!jni_obj_uuid) { OIC_LOG(ERROR, TAG, "Fail to get jni uuid object"); - return NULL; + goto error_exit; } return jni_obj_uuid; + +error_exit: + CACheckJNIException(env); + return NULL; } jobject CALEGetParcelUuid(JNIEnv *env, jobject uuid) @@ -78,7 +82,7 @@ jobject CALEGetParcelUuid(JNIEnv *env, jobject uuid) if (!jni_cid_ParcelUuid) { OIC_LOG(ERROR, TAG, "jni_cid_ParcelUuid is not available"); - return NULL; + goto error_exit; } jmethodID jni_mid_ParcelUuid = (*env)->GetMethodID(env, jni_cid_ParcelUuid, "", @@ -86,33 +90,74 @@ jobject CALEGetParcelUuid(JNIEnv *env, jobject uuid) if (!jni_mid_ParcelUuid) { OIC_LOG(ERROR, TAG, "jni_mid_ParcelUuid is not available"); - return NULL; + goto error_exit; } jobject jni_ParcelUuid = (*env)->NewObject(env, jni_cid_ParcelUuid, jni_mid_ParcelUuid, uuid); if (!jni_ParcelUuid) { OIC_LOG(ERROR, TAG, "Fail to get jni ParcelUuid"); - return NULL; + goto error_exit; } return jni_ParcelUuid; +error_exit: + CACheckJNIException(env); + return NULL; } -bool CALEIsBondedDevice(JNIEnv *env, jobject bluetoothDevice) +jobject CALEGetParcelUuidFromString(JNIEnv *env, const char* uuid) { - VERIFY_NON_NULL_RET(env, TAG, "env is null", false); - VERIFY_NON_NULL_RET(bluetoothDevice, TAG, "bluetoothDevice is null", false); + VERIFY_NON_NULL_RET(env, TAG, "env is null", NULL); + VERIFY_NON_NULL_RET(uuid, TAG, "uuid is null", NULL); + + jclass jni_cid_ParcelUuid = (*env)->FindClass(env, "android/os/ParcelUuid"); + if (!jni_cid_ParcelUuid) + { + OIC_LOG(ERROR, TAG, "jni_cid_ParcelUuid is not available"); + goto error_exit; + } - jclass jni_cid_device_list = (*env)->FindClass(env, "android/bluetooth/BluetoothDevice"); - if (!jni_cid_device_list) + jmethodID jni_mid_fromString = (*env)->GetStaticMethodID(env, jni_cid_ParcelUuid, + "fromString", + "(Ljava/lang/String;)" + "Landroid/os/ParcelUuid;"); + if (!jni_mid_fromString) { - OIC_LOG(ERROR, TAG, "jni_cid_device_list is null"); - return false; + OIC_LOG(ERROR, TAG, "jni_mid_fromString is not available"); + goto error_exit; } - jmethodID jni_mid_getBondState = (*env)->GetMethodID(env, jni_cid_device_list, "getBondState", - "()I"); + jstring str_uuid = (*env)->NewStringUTF(env, uuid); + if (!str_uuid) + { + OIC_LOG(ERROR, TAG, "str_uuid is not available"); + goto error_exit; + } + + jobject jni_obj_parcelUuid = (*env)->CallStaticObjectMethod(env, jni_cid_ParcelUuid, + jni_mid_fromString, + str_uuid); + if (!jni_obj_parcelUuid) + { + OIC_LOG(ERROR, TAG, "Fail to get jni uuid object"); + goto error_exit; + } + + return jni_obj_parcelUuid; +error_exit: + CACheckJNIException(env); + return NULL; +} + +bool CALEIsBondedDevice(JNIEnv *env, jobject bluetoothDevice) +{ + VERIFY_NON_NULL_RET(env, TAG, "env is null", false); + VERIFY_NON_NULL_RET(bluetoothDevice, TAG, "bluetoothDevice is null", false); + + jmethodID jni_mid_getBondState = CAGetJNIMethodID(env, "android/bluetooth/BluetoothDevice", + "getBondState", + "()I"); if (!jni_mid_getBondState) { OIC_LOG(ERROR, TAG, "jni_mid_getBondState is null"); @@ -120,7 +165,7 @@ bool CALEIsBondedDevice(JNIEnv *env, jobject bluetoothDevice) } jint jni_bondState = (jint)(*env)->CallIntMethod(env, bluetoothDevice, jni_mid_getBondState); - + CACheckJNIException(env); OIC_LOG_V(DEBUG, TAG, "bond state is %d", jni_bondState); if (BOND_BONDED == jni_bondState) @@ -145,19 +190,19 @@ jobjectArray CALEGetBondedDevices(JNIEnv *env) if (!jni_cid_BTAdapter) { OIC_LOG(ERROR, TAG, "getBondedDevices: jni_cid_BTAdapter is null"); - return NULL; + goto error_exit; } jmethodID jni_mid_getDefaultAdapter = (*env)->GetStaticMethodID(env, jni_cid_BTAdapter, "getDefaultAdapter", METHODID_OBJECTNONPARAM); - + CACheckJNIException(env); jobject jni_obj_BTAdapter = (*env)->CallStaticObjectMethod(env, jni_cid_BTAdapter, jni_mid_getDefaultAdapter); if (!jni_obj_BTAdapter) { OIC_LOG(ERROR, TAG, "getBondedDevices: bluetooth adapter is null"); - return NULL; + goto error_exit; } // Get a list of currently paired devices @@ -167,7 +212,7 @@ jobjectArray CALEGetBondedDevices(JNIEnv *env) if (!jni_mid_getBondedDevices) { OIC_LOG(ERROR, TAG, "getBondedDevices: jni_mid_getBondedDevicesr is null"); - return NULL; + goto error_exit; } jobject jni_obj_setPairedDevices = (*env)->CallObjectMethod(env, jni_obj_BTAdapter, @@ -175,18 +220,11 @@ jobjectArray CALEGetBondedDevices(JNIEnv *env) if (!jni_obj_setPairedDevices) { OIC_LOG(ERROR, TAG, "getBondedDevices: jni_obj_setPairedDevices is null"); - return NULL; + goto error_exit; } - jclass jni_cid_Set = (*env)->FindClass(env, "java/util/Set"); - if (!jni_cid_Set) - { - OIC_LOG(ERROR, TAG, "getBondedDevices : jni_cid_Set is null"); - return NULL; - } - - jmethodID jni_mid_toArray = (*env)->GetMethodID(env, jni_cid_Set, "toArray", - "()[Ljava/lang/Object;"); + jmethodID jni_mid_toArray = CAGetJNIMethodID(env, "java/util/Set", "toArray", + "()[Ljava/lang/Object;"); if (!jni_mid_toArray) { OIC_LOG(ERROR, TAG, "getBondedDevices: jni_mid_toArray is null"); @@ -198,10 +236,14 @@ jobjectArray CALEGetBondedDevices(JNIEnv *env) if (!jni_arrayPairedDevices) { OIC_LOG(ERROR, TAG, "getBondedDevices: jni_arrayPairedDevices is null"); - return NULL; + goto error_exit; } return jni_arrayPairedDevices; + +error_exit: + CACheckJNIException(env); + return NULL; } jint CALEGetBTStateOnInfo(JNIEnv *env) @@ -212,6 +254,7 @@ jint CALEGetBTStateOnInfo(JNIEnv *env) if (!jni_cid_BTAdapter) { OIC_LOG(ERROR, TAG, "getBTStateOnInfo: jni_cid_BTAdapter is null"); + CACheckJNIException(env); return -1; } @@ -219,10 +262,12 @@ jint CALEGetBTStateOnInfo(JNIEnv *env) if (!jni_fid_stateon) { OIC_LOG(ERROR, TAG, "get_field_state is not available"); + CACheckJNIException(env); return -1; } jint jni_int_val = (*env)->GetStaticIntField(env, jni_cid_BTAdapter, jni_fid_stateon); + CACheckJNIException(env); OIC_LOG_V(DEBUG, TAG, "bluetooth.STATE_ON state integer value : %d", jni_int_val); return jni_int_val; @@ -249,6 +294,7 @@ jint CALEGetBuildVersion(JNIEnv *env) if (!jni_cls_version) { OIC_LOG(ERROR, TAG, "jni_cls_version is null"); + CACheckJNIException(env); return -1; } @@ -256,10 +302,12 @@ jint CALEGetBuildVersion(JNIEnv *env) if (!jni_fid_sdk) { OIC_LOG(ERROR, TAG, "jni_fid_sdk is null"); + CACheckJNIException(env); return -1; } jint jni_int_sdk = (*env)->GetStaticIntField(env, jni_cls_version, jni_fid_sdk); + CACheckJNIException(env); OIC_LOG_V(DEBUG, TAG, "sdk version is %d", jni_int_sdk); return jni_int_sdk; @@ -275,6 +323,7 @@ jint CALEGetBuildVersionCodeForName(JNIEnv *env, const char* versionName) if (!jni_cls_version) { OIC_LOG(ERROR, TAG, "jni_cls_version is null"); + CACheckJNIException(env); return -1; } @@ -282,10 +331,12 @@ jint CALEGetBuildVersionCodeForName(JNIEnv *env, const char* versionName) if (!jni_fid_version) { OIC_LOG(ERROR, TAG, "jni_fid_version is null"); + CACheckJNIException(env); return -1; } jint jni_int_version = (*env)->GetStaticIntField(env, jni_cls_version, jni_fid_version); + CACheckJNIException(env); OIC_LOG_V(DEBUG, TAG, "version [%s] is %d",versionName, jni_int_version); return jni_int_version; @@ -299,6 +350,7 @@ jboolean CALEIsEnableBTAdapter(JNIEnv *env) if (!jni_cid_BTAdapter) { OIC_LOG(ERROR, TAG, "jni_cid_BTAdapter: jni_cid_BTAdapter is null"); + CACheckJNIException(env); return JNI_FALSE; } @@ -308,6 +360,8 @@ jboolean CALEIsEnableBTAdapter(JNIEnv *env) if (!jni_mid_getDefaultAdapter) { OIC_LOG(ERROR, TAG, "jni_mid_getDefaultAdapter is null"); + CACheckJNIException(env); + (*env)->DeleteLocalRef(env, jni_cid_BTAdapter); return JNI_FALSE; } @@ -316,6 +370,8 @@ jboolean CALEIsEnableBTAdapter(JNIEnv *env) if (!jni_obj_BTAdapter) { OIC_LOG(ERROR, TAG, "jni_obj_BTAdapter is null"); + CACheckJNIException(env); + (*env)->DeleteLocalRef(env, jni_cid_BTAdapter); return JNI_FALSE; } @@ -324,12 +380,18 @@ jboolean CALEIsEnableBTAdapter(JNIEnv *env) if (!jni_mid_isEnable) { OIC_LOG(ERROR, TAG, "jni_mid_isEnable is null"); + CACheckJNIException(env); + (*env)->DeleteLocalRef(env, jni_cid_BTAdapter); + (*env)->DeleteLocalRef(env, jni_obj_BTAdapter); return JNI_FALSE; } jboolean jni_isEnable = (*env)->CallBooleanMethod(env, jni_obj_BTAdapter, jni_mid_isEnable); + CACheckJNIException(env); OIC_LOG_V(DEBUG, TAG, "adapter state is %d", jni_isEnable); + (*env)->DeleteLocalRef(env, jni_cid_BTAdapter); + (*env)->DeleteLocalRef(env, jni_obj_BTAdapter); return jni_isEnable; } @@ -338,15 +400,9 @@ jstring CALEGetAddressFromBTDevice(JNIEnv *env, jobject bluetoothDevice) VERIFY_NON_NULL_RET(env, TAG, "env is null", NULL); VERIFY_NON_NULL_RET(bluetoothDevice, TAG, "bluetoothDevice is null", NULL); - jclass jni_cid_device_list = (*env)->FindClass(env, "android/bluetooth/BluetoothDevice"); - if (!jni_cid_device_list) - { - OIC_LOG(ERROR, TAG, "jni_cid_device_list is null"); - return NULL; - } - - jmethodID jni_mid_getAddress = (*env)->GetMethodID(env, jni_cid_device_list, "getAddress", - "()Ljava/lang/String;"); + jmethodID jni_mid_getAddress = CAGetJNIMethodID(env, "android/bluetooth/BluetoothDevice", + "getAddress", + "()Ljava/lang/String;"); if (!jni_mid_getAddress) { OIC_LOG(ERROR, TAG, "jni_mid_getAddress is null"); @@ -358,6 +414,7 @@ jstring CALEGetAddressFromBTDevice(JNIEnv *env, jobject bluetoothDevice) if (!jni_address) { OIC_LOG(ERROR, TAG, "jni_address is null"); + CACheckJNIException(env); return NULL; } @@ -366,8 +423,6 @@ jstring CALEGetAddressFromBTDevice(JNIEnv *env, jobject bluetoothDevice) jint CALEGetConstantsValue(JNIEnv *env, const char* classType, const char* name) { - OIC_LOG(DEBUG, TAG, "CALEGetConstantsValue"); - VERIFY_NON_NULL_RET(env, TAG, "env", -1); VERIFY_NON_NULL_RET(classType, TAG, "classType", -1); VERIFY_NON_NULL_RET(name, TAG, "name", -1); @@ -376,6 +431,7 @@ jint CALEGetConstantsValue(JNIEnv *env, const char* classType, const char* name) if (!jni_cid) { OIC_LOG(ERROR, TAG, "jni_cid is null"); + CACheckJNIException(env); return -1; } @@ -384,8 +440,101 @@ jint CALEGetConstantsValue(JNIEnv *env, const char* classType, const char* name) if (!jni_fieldID) { OIC_LOG(ERROR, TAG, "jni_fieldID is null"); + CACheckJNIException(env); return -1; } - return (*env)->GetStaticIntField(env, jni_cid, jni_fieldID); + jint jni_id = (*env)->GetStaticIntField(env, jni_cid, jni_fieldID); + CACheckJNIException(env); + return jni_id; +} + +jobject CALEGetRemoteDevice(JNIEnv *env, jstring address) +{ + OIC_LOG(DEBUG, TAG, "CALEGetRemoteDevice"); + + VERIFY_NON_NULL_RET(env, TAG, "env is null", NULL); + VERIFY_NON_NULL_RET(address, TAG, "address is null", NULL); + + jclass jni_cid_BTAdapter = (*env)->FindClass(env, CLASSPATH_BT_ADAPTER); + if (!jni_cid_BTAdapter) + { + OIC_LOG(ERROR, TAG, "jni_cid_BTAdapter is null"); + goto error_exit; + } + + // get remote bt adapter method + jmethodID jni_mid_getDefaultAdapter = (*env)->GetStaticMethodID(env, jni_cid_BTAdapter, + "getDefaultAdapter", + METHODID_OBJECTNONPARAM); + if (!jni_mid_getDefaultAdapter) + { + OIC_LOG(ERROR, TAG, "jni_mid_getDefaultAdapter is null"); + goto error_exit; + } + + // gat bt adapter object + jobject jni_obj_BTAdapter = (*env)->CallStaticObjectMethod(env, jni_cid_BTAdapter, + jni_mid_getDefaultAdapter); + if (!jni_obj_BTAdapter) + { + OIC_LOG(ERROR, TAG, "jni_obj_BTAdapter is null"); + goto error_exit; + } + + jmethodID jni_mid_getRemoteDevice = (*env)->GetMethodID(env, jni_cid_BTAdapter, + "getRemoteDevice", + METHODID_BT_REMOTE_DEVICE); + if (!jni_mid_getRemoteDevice) + { + OIC_LOG(ERROR, TAG, "jni_mid_getRemoteDevice is null"); + goto error_exit; + } + + jobject jni_obj_device = (*env)->CallObjectMethod(env, jni_obj_BTAdapter, + jni_mid_getRemoteDevice, + address); + if (!jni_obj_device) + { + OIC_LOG(ERROR, TAG, "jni_obj_device is null"); + goto error_exit; + } + return jni_obj_device; + +error_exit: + CACheckJNIException(env); + return NULL; +} + +jstring CALEGetAddressFromGatt(JNIEnv *env, jobject gatt) +{ + OIC_LOG(DEBUG, TAG, "CALEGetAddressFromGatt"); + + VERIFY_NON_NULL_RET(env, TAG, "env is null", NULL); + VERIFY_NON_NULL_RET(gatt, TAG, "gatt is null", NULL); + + jmethodID jni_mid_getDevice = CAGetJNIMethodID(env, CLASSPATH_BT_GATT, "getDevice", + METHODID_BT_DEVICE); + if (!jni_mid_getDevice) + { + OIC_LOG(ERROR, TAG, "jni_mid_getDevice is null"); + return NULL; + } + + jobject jni_obj_device = (*env)->CallObjectMethod(env, gatt, jni_mid_getDevice); + if (!jni_obj_device) + { + OIC_LOG(ERROR, TAG, "jni_obj_device is null"); + CACheckJNIException(env); + return NULL; + } + + jstring jni_address = CALEGetAddressFromBTDevice(env, jni_obj_device); + if (!jni_address) + { + OIC_LOG(ERROR, TAG, "jni_address is null"); + return NULL; + } + + return jni_address; }