From: samanway Date: Tue, 3 Sep 2019 15:54:59 +0000 (+0530) Subject: [CONPRO-1483] Implementation of API for setting scanfilter UUIDs X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=90afb16ca1f0ea14f547be55c019e2ad15ca8adb;p=platform%2Fupstream%2Fiotivity.git [CONPRO-1483] Implementation of API for setting scanfilter UUIDs - Currently, IoTivity sets the custom UUIDs to set scanfilters for Android BLE client by hard coding UUIDs - This patch implements CASetLEScanUuid API to set the UUIDs to add more scanfilters Change-Id: I167bb7b7b24589e88d4b7c8120cea9b72a5918b1 Signed-off-by: samanway-dey Signed-off-by: Sudipto --- diff --git a/android/android_api/base/jni/JniCaInterface.c b/android/android_api/base/jni/JniCaInterface.c index 2a7861b..4694820 100644 --- a/android/android_api/base/jni/JniCaInterface.c +++ b/android/android_api/base/jni/JniCaInterface.c @@ -323,6 +323,25 @@ Java_org_iotivity_ca_CaInterface_caBtPairingTerminate(JNIEnv *env, jclass clazz) } JNIEXPORT void JNICALL +Java_org_iotivity_ca_CaInterface_setLeScanUuidImpl(JNIEnv *env, jclass clazz, jstring uuid, jint uuid_type) +{ + LOGI("setLeScanUuidImpl"); + (void)env; + (void)clazz; + if (uuid) + { + //convert java string to native string + const char* nativeUuid = (*env)->GetStringUTFChars(env, uuid, NULL); + if (!nativeUuid) + { + LOGE("Native UUID is null"); + return; + } + CASetLEScanUuid(nativeUuid, uuid_type); + } +} + +JNIEXPORT void JNICALL Java_org_iotivity_ca_CaInterface_caBtPairingStartScan(JNIEnv *env, jclass clazz) { LOGI("caBtPairingStartScan"); diff --git a/android/android_api/base/jni/JniCaInterface.h b/android/android_api/base/jni/JniCaInterface.h index d13b47e..34efa10 100644 --- a/android/android_api/base/jni/JniCaInterface.h +++ b/android/android_api/base/jni/JniCaInterface.h @@ -105,6 +105,13 @@ extern "C" { Java_org_iotivity_ca_CaInterface_caBtPairingStopScan(JNIEnv *, jclass); /* + * Class: Java_org_iotivity_ca_CaInterface_setLEScanUuidImpl + * Method: setLeScanUuidImpl + * Signature: (Ljava/lang/String;I)V + */ + JNIEXPORT void JNICALL + Java_org_iotivity_ca_CaInterface_setLeScanUuidImpl(JNIEnv *, jclass, jstring, jint); + /* * Class: Java_org_iotivity_ca_CaInterface_caBtPairingCreateBond * Method: caBtPairingCreateBond * Signature: (Landroid/bluetooth/BluetoothDevice;)V diff --git a/android/android_api/base/src/main/java/org/iotivity/ca/CaInterface.java b/android/android_api/base/src/main/java/org/iotivity/ca/CaInterface.java index 73fec6c..9fa0659 100644 --- a/android/android_api/base/src/main/java/org/iotivity/ca/CaInterface.java +++ b/android/android_api/base/src/main/java/org/iotivity/ca/CaInterface.java @@ -38,6 +38,11 @@ public class CaInterface { private static volatile boolean isConnectionManagerInitialized = false; private static volatile boolean isBtPairingInitialized = false; + public enum UuidType { + SERVICE_UUID, + MANUFACTURER_DATA + } + public static native void initialize(Activity activity, Context context); /** @@ -204,6 +209,18 @@ public class CaInterface { private static native void stopLeScanImpl(); /** + * set UUID for scanfilter. + * there can be two ways to set scanfilters, firstly setting service UUIDs as filter and + * other way is setting manufacture data based filter. + * @param uuid service uuid or manufacture data. + * @param uuid_type 0 for service uuid, 1 for manufacture data. + */ + public synchronized static void setLeScanUuid(String uuid, int uuid_type){ + CaInterface.setLeScanUuidImpl(uuid, uuid_type); + } + private static native void setLeScanUuidImpl(String uuid, int uuid_type); + + /** * start BLE Advertising. */ public synchronized static void startLeAdvertising(){ diff --git a/resource/csdk/connectivity/api/cautilinterface.h b/resource/csdk/connectivity/api/cautilinterface.h index 0d1bbfb..1b14968 100644 --- a/resource/csdk/connectivity/api/cautilinterface.h +++ b/resource/csdk/connectivity/api/cautilinterface.h @@ -286,6 +286,15 @@ CAResult_t CAUtilStartLEScan(); CAResult_t CAUtilClientDisconnect(); #endif +#if defined(__ANDROID__) +/** + * set UUID for setting scanfilter, which will add another scanfilter for BLE scanning in android client based on the UUID or manufacture data provided + * @param[in] uuid service UUID string or manufacture Data + * @param[in] uuid_type Type of scanfilter to be added i.e. service UUID based or manufacture data based + */ +void CASetLEScanUuid(char* uuid, int uuid_type); +#endif + #ifdef __ANDROID__ /** * initialize util client for android @@ -298,7 +307,7 @@ CAResult_t CAUtilClientDisconnect(); CAResult_t CAUtilClientInitialize(JNIEnv *env, JavaVM *jvm, jobject context); /** - * terminate util client for android + * terminate util client for android. * @param[in] env JNI interface pointer. * * @return ::CA_STATUS_OK or ::CA_STATUS_FAILED or ::CA_MEMORY_ALLOC_FAILED diff --git a/resource/csdk/connectivity/src/bt_le_adapter/android/caleclient.c b/resource/csdk/connectivity/src/bt_le_adapter/android/caleclient.c index 83ed0ae..9bf9330 100644 --- a/resource/csdk/connectivity/src/bt_le_adapter/android/caleclient.c +++ b/resource/csdk/connectivity/src/bt_le_adapter/android/caleclient.c @@ -30,6 +30,7 @@ #include "caleinterface.h" #include "caadapterutils.h" +#include "uarraylist.h" #include "logger.h" #include "oic_malloc.h" #include "oic_string.h" @@ -121,6 +122,15 @@ static int32_t g_jniIntSdk = -1; static bool g_setHighQoS = true; static bool g_setFullScanFlag = false; jclass g_LEInterface = NULL; +static int g_manufactureDataCount = 0; +static int g_serviceUuidCount = 0; + +// List of Service UUIDs +static u_arraylist_t* g_serviceUuidList = NULL; + +// List of Manufacture Data +static u_arraylist_t* g_manufactureDataList = NULL; + /** * check if retry logic for connection routine has to be stopped or not. * in case of error value including this method, connection routine has to be stopped. @@ -421,11 +431,62 @@ error_exit: return CA_STATUS_FAILED; } +void CALEClientAddUuid(char* uuid, int uuid_type) +{ + OIC_LOG(DEBUG, TAG, "CALEClientAddUuid"); + VERIFY_NON_NULL_VOID(uuid, TAG, "uuid is null"); + + if (uuid_type == CA_LE_TYPE_CUSTOM_UUID) + { + if (g_manufactureDataCount == 0) + { + g_manufactureDataList = u_arraylist_create(); + OIC_LOG(DEBUG, TAG, "List of manufacture data created"); + } + for (int i = 0; i < g_manufactureDataCount; i++) + { + char *str = u_arraylist_get(g_manufactureDataList, i); + if (!strcmp(uuid, str)) + { + OIC_LOG(DEBUG, TAG, "UUID already set before"); + return; + } + } + g_manufactureDataCount++; + bool result = u_arraylist_add(g_manufactureDataList, uuid); + OIC_LOG_V(DEBUG, TAG, "Adding manufacture data: %s", u_arraylist_get(g_manufactureDataList, g_manufactureDataCount - 1)); + } + else //uuid_type == CA_LE_TYPE_SERVICE_UUID + { + if (g_serviceUuidCount == 0) + { + g_serviceUuidList = u_arraylist_create(); + OIC_LOG(DEBUG, TAG, "List of service uuid created"); + } + for (int i = 0; i < g_serviceUuidCount; i++) + { + char *str = u_arraylist_get(g_serviceUuidList, i); + if (!strcmp(uuid, str)) + { + OIC_LOG(DEBUG, TAG, "UUID already set before"); + return; + } + } + g_serviceUuidCount++; + bool result = u_arraylist_add(g_serviceUuidList, uuid); + OIC_LOG_V(DEBUG, TAG, "Adding service UUID: %s", u_arraylist_get(g_serviceUuidList, g_serviceUuidCount - 1)); + } +} + CAResult_t CALEClientInitialize() { OIC_LOG(DEBUG, TAG, "CALEClientInitialize"); CALEClientJniInit(); + CALEClientAddUuid(OIC_GATT_SERVICE_UUID, CA_LE_TYPE_SERVICE_UUID); + CALEClientAddUuid(OIC_GATT_CUSTOM_UUID, CA_LE_TYPE_CUSTOM_UUID); + CALEClientAddUuid(OIC_GATT_CUSTOM_UUID2, CA_LE_TYPE_CUSTOM_UUID); + CALEClientAddUuid(OIC_GATT_CUSTOM_UUID3, CA_LE_TYPE_CUSTOM_UUID); if (!g_jvm) { @@ -570,6 +631,9 @@ void CALEClientTerminate() g_LEInterface = NULL; } + u_arraylist_free(&g_serviceUuidList); + u_arraylist_free(&g_manufactureDataList); + CALEDeleteSendBuffer(env); if (g_uuidList) @@ -1767,6 +1831,7 @@ CAResult_t CALEClientStartScanWithUUIDImplForV21(JNIEnv *env, jobjectArray uuids VERIFY_NON_NULL(uuids, TAG, "uuids is null"); VERIFY_NON_NULL(env, TAG, "env is null"); + int i, j; if (!CALEIsEnableBTAdapter(env)) { OIC_LOG(INFO, TAG, "BT adapter is not enabled"); @@ -1821,53 +1886,35 @@ CAResult_t CALEClientStartScanWithUUIDImplForV21(JNIEnv *env, jobjectArray uuids } // call scanfilter.Builder() - jobject jni_obj_scanfilterBuilder = (*env)->NewObject(env, jni_cid_scanfilterBuilder, - jni_mid_scanfilterBuilderCtor); - if (!jni_obj_scanfilterBuilder) + jobject jni_obj_servicescanfilterBuilder[g_serviceUuidCount]; + for (i = 0; i < g_serviceUuidCount; i++) { - OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_scanfilterBuilder is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_cid_scanfilterBuilder); - return CA_STATUS_FAILED; - } - - // call scanfilter.Builder() - jobject jni_obj_scanfilterBuilder2 = (*env)->NewObject(env, jni_cid_scanfilterBuilder, + jni_obj_servicescanfilterBuilder[i] = (*env)->NewObject(env, jni_cid_scanfilterBuilder, jni_mid_scanfilterBuilderCtor); - if (!jni_obj_scanfilterBuilder2) - { - OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_scanfilterBuilder2 is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_cid_scanfilterBuilder); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder); - return CA_STATUS_FAILED; + if (!jni_obj_servicescanfilterBuilder[i]) + { + OIC_LOG_V(ERROR, TAG, "scanfilter: jni_obj_servicescanfilterBuilder[%d] is null", i); + (*env)->DeleteLocalRef(env, jni_cid_scanfilterBuilder); + for (j = 0; j < i; j++) + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilterBuilder[j]); + return CA_STATUS_FAILED; + } } // call scanfilter.Builder() - jobject jni_obj_scanfilterBuilder3 = (*env)->NewObject(env, jni_cid_scanfilterBuilder, - jni_mid_scanfilterBuilderCtor); - if (!jni_obj_scanfilterBuilder3) + jobject jni_obj_customscanfilterBuilder[g_manufactureDataCount]; + for (i = 0; i < g_manufactureDataCount; i++) { - OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_scanfilterBuilder3 is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_cid_scanfilterBuilder); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder2); - return CA_STATUS_FAILED; - } - - // call scanfilter.Builder() - jobject jni_obj_scanfilterBuilder4 = (*env)->NewObject(env, jni_cid_scanfilterBuilder, + jni_obj_customscanfilterBuilder[i] = (*env)->NewObject(env, jni_cid_scanfilterBuilder, jni_mid_scanfilterBuilderCtor); - if (!jni_obj_scanfilterBuilder4) - { - OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_scanfilterBuilder4 is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_cid_scanfilterBuilder); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder2); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder3); - return CA_STATUS_FAILED; + if (!jni_obj_customscanfilterBuilder[i]) + { + OIC_LOG_V(ERROR, TAG, "scanfilter: jni_obj_customscanfilterBuilder[%d] is null", i); + (*env)->DeleteLocalRef(env, jni_cid_scanfilterBuilder); + for (j = 0; j < i; j++) + (*env)->DeleteLocalRef(env, jni_obj_customscanfilterBuilder[j]); + return CA_STATUS_FAILED; + } } // get scanfilter.Builder.setServiceUuid method id @@ -1880,10 +1927,14 @@ CAResult_t CALEClientStartScanWithUUIDImplForV21(JNIEnv *env, jobjectArray uuids OIC_LOG(ERROR, TAG, "scanfilter: jni_mid_setServiceUuid is null"); CACheckJNIException(env); (*env)->DeleteLocalRef(env, jni_cid_scanfilterBuilder); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder2); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder3); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); + for (i = 0; i < g_serviceUuidCount; i++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilterBuilder[i]); + } + for (i = 0; i < g_manufactureDataCount; i++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilterBuilder[i]); + } return CA_STATUS_FAILED; } @@ -1897,10 +1948,14 @@ CAResult_t CALEClientStartScanWithUUIDImplForV21(JNIEnv *env, jobjectArray uuids OIC_LOG(ERROR, TAG, "scanfilter: jni_mid_setManufacturerData is null"); CACheckJNIException(env); (*env)->DeleteLocalRef(env, jni_cid_scanfilterBuilder); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder2); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder3); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); + for (i = 0; i < g_serviceUuidCount; i++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilterBuilder[i]); + } + for (i = 0; i < g_manufactureDataCount; i++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilterBuilder[i]); + } return CA_STATUS_FAILED; } // get scanfilter.Builder.build method id @@ -1914,200 +1969,146 @@ CAResult_t CALEClientStartScanWithUUIDImplForV21(JNIEnv *env, jobjectArray uuids OIC_LOG(ERROR, TAG, "scanfilter: jni_mid_build_scanfilterBuilder is null"); CACheckJNIException(env); (*env)->DeleteLocalRef(env, jni_cid_scanfilterBuilder); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder2); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder3); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); + for (i = 0; i < g_serviceUuidCount; i++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilterBuilder[i]); + } + for (i = 0; i < g_manufactureDataCount; i++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilterBuilder[i]); + } return CA_STATUS_FAILED; } (*env)->DeleteLocalRef(env, jni_cid_scanfilterBuilder); - // call ParcelUuid.fromSting(uuid) - jobject jni_obj_parcelUuid = CALEGetParcelUuidFromString(env, OIC_GATT_SERVICE_UUID); - if (!jni_obj_parcelUuid) + jobject jni_obj_parcelUuid, jni_obj_setServiceUuid; + jobject jni_obj_servicescanfilter[g_serviceUuidCount]; + + for (i = 0; i < g_serviceUuidCount; i++) { - OIC_LOG(ERROR, TAG, "scanSettings: jni_obj_parcelUuid is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder2); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder3); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); - return CA_STATUS_FAILED; - } + // call ParcelUuid.fromSting(uuid) + jni_obj_parcelUuid = CALEGetParcelUuidFromString(env, u_arraylist_get(g_serviceUuidList, i)); + if (!jni_obj_parcelUuid) + { + OIC_LOG(ERROR, TAG, "scanSettings: jni_obj_parcelUuid is null"); + CACheckJNIException(env); + for (j = i; j < g_serviceUuidCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilterBuilder[j]); + } + for (j = 0; j < g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilterBuilder[j]); + } + return CA_STATUS_FAILED; + } - // call setServiceUuid(uuid) - jobject jni_obj_setServiceUuid = (*env)->CallObjectMethod(env, - jni_obj_scanfilterBuilder, + // call setServiceUuid(uuid) + jni_obj_setServiceUuid = (*env)->CallObjectMethod(env, + jni_obj_servicescanfilterBuilder[i], jni_mid_setServiceUuid, jni_obj_parcelUuid); - if (!jni_obj_setServiceUuid) - { - OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_setServiceUuid is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder2); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder3); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); + if (!jni_obj_setServiceUuid) + { + OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_setServiceUuid is null"); + CACheckJNIException(env); + for (j = i; j < g_serviceUuidCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilterBuilder[j]); + } + for (j = 0; j < g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilterBuilder[j]); + } + (*env)->DeleteLocalRef(env, jni_obj_parcelUuid); + return CA_STATUS_FAILED; + } (*env)->DeleteLocalRef(env, jni_obj_parcelUuid); - return CA_STATUS_FAILED; - } - (*env)->DeleteLocalRef(env, jni_obj_parcelUuid); - (*env)->DeleteLocalRef(env, jni_obj_setServiceUuid); + (*env)->DeleteLocalRef(env, jni_obj_setServiceUuid); - // call build() - jobject jni_obj_scanfilter = (*env)->CallObjectMethod(env, - jni_obj_scanfilterBuilder, + // call build() + jni_obj_servicescanfilter[i] = (*env)->CallObjectMethod(env, + jni_obj_servicescanfilterBuilder[i], jni_mid_build_scanfilterBuilder); - if (!jni_obj_scanfilter) - { - OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_scanfilter is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder2); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder3); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); - return CA_STATUS_FAILED; - } - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder); + if (!jni_obj_servicescanfilter[i]) + { + OIC_LOG_V(ERROR, TAG, "scanfilter: jni_obj_scanfilter[%d] is null", i); + CACheckJNIException(env); + for (j = i; j < g_serviceUuidCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilterBuilder[j]); + } + for (j = 0; j < g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilterBuilder[j]); + } + return CA_STATUS_FAILED; + } + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilterBuilder[i]); - OIC_LOG(DEBUG, TAG, "Service UUID scanfilter set"); + OIC_LOG_V(DEBUG, TAG, "Total %d Service UUID based scanfilter(s) created by now", i + 1); + } jint jni_int_manId; jbyteArray jni_byte_manData; + jobject jni_obj_setManufacturerData; + jobject jni_obj_customscanfilter[g_manufactureDataCount]; // set manufactererId jni_int_manId = MANUFACTURE_ID; - // call utility function to set manufacturerData - jni_byte_manData = CALEGetManufacturerData(env, OIC_GATT_CUSTOM_UUID); - if(!jni_byte_manData) - { - OIC_LOG(ERROR, TAG, "scanSettings: jni_byte_manData is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder2); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder3); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); - return CA_STATUS_FAILED; - } - - // call set(uuid) - jobject jni_obj_setManufacturerData = (*env)->CallObjectMethod(env, - jni_obj_scanfilterBuilder2, - jni_mid_setManufacturerData, - jni_int_manId, - jni_byte_manData); - if (!jni_obj_setManufacturerData) - { - OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_setManufacturerData is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder2); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder3); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); - return CA_STATUS_FAILED; - } - (*env)->DeleteLocalRef(env, jni_byte_manData); - (*env)->DeleteLocalRef(env, jni_obj_setManufacturerData); - - // call build() - jobject jni_obj_scanfilter2 = (*env)->CallObjectMethod(env, - jni_obj_scanfilterBuilder2, - jni_mid_build_scanfilterBuilder); - if (!jni_obj_scanfilter2) + // set custom scanfilters + for (i = 0; i < g_manufactureDataCount; i++) { - OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_scanfilter2 is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder2); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder3); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); - return CA_STATUS_FAILED; - } - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder2); - - OIC_LOG(DEBUG, TAG, "First custom UUID scanfilter set"); - - // call utility function to set manufacturerData - jni_byte_manData = CALEGetManufacturerData(env, OIC_GATT_CUSTOM_UUID2); - if(!jni_byte_manData) - { - OIC_LOG(ERROR, TAG, "scanSettings: jni_byte_manData is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder3); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); - return CA_STATUS_FAILED; - } + // call utility function to set manufacturerData + jni_byte_manData = CALEGetManufacturerData(env, u_arraylist_get(g_manufactureDataList, i)); + if (!jni_byte_manData) + { + OIC_LOG(ERROR, TAG, "scanSettings: jni_byte_manData is null"); + CACheckJNIException(env); + for(j = i; j < g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilterBuilder[j]); + } + return CA_STATUS_FAILED; + } - // call set(uuid) - jni_obj_setManufacturerData = (*env)->CallObjectMethod(env, - jni_obj_scanfilterBuilder3, + // call set(uuid) + jni_obj_setManufacturerData = (*env)->CallObjectMethod(env, + jni_obj_customscanfilterBuilder[i], jni_mid_setManufacturerData, jni_int_manId, jni_byte_manData); + if (!jni_obj_setManufacturerData) + { + OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_setManufacturerData is null"); + CACheckJNIException(env); + for (j = i; j < g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilterBuilder[j]); + } + return CA_STATUS_FAILED; + } + (*env)->DeleteLocalRef(env, jni_byte_manData); + (*env)->DeleteLocalRef(env, jni_obj_setManufacturerData); + + // call build() + jni_obj_customscanfilter[i] = (*env)->CallObjectMethod(env, + jni_obj_customscanfilterBuilder[i], + jni_mid_build_scanfilterBuilder); + if (!jni_obj_customscanfilter[i]) + { + OIC_LOG_V(ERROR, TAG, "scanfilter: jni_obj_customscanfilter[%d] is null", i); + CACheckJNIException(env); + for (j = i; j < g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilterBuilder[j]); + } + return CA_STATUS_FAILED; + } + (*env)->DeleteLocalRef(env, jni_obj_customscanfilterBuilder[i]); - if (!jni_obj_setManufacturerData) - { - OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_setManufacturerData is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder3); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); - return CA_STATUS_FAILED; - } - (*env)->DeleteLocalRef(env, jni_byte_manData); - (*env)->DeleteLocalRef(env, jni_obj_setManufacturerData); - - // call build() - jobject jni_obj_scanfilter3 = (*env)->CallObjectMethod(env, - jni_obj_scanfilterBuilder3, - jni_mid_build_scanfilterBuilder); - if (!jni_obj_scanfilter3) - { - OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_scanfilter3 is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder3); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); - return CA_STATUS_FAILED; - } - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder3); - OIC_LOG(DEBUG, TAG, "Second custom UUID scanfilter set"); - - // call utility function to set manufacturerData - jni_byte_manData = CALEGetManufacturerData(env, OIC_GATT_CUSTOM_UUID3); - if(!jni_byte_manData) - { - OIC_LOG(ERROR, TAG, "scanSettings: jni_byte_manData is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); - return CA_STATUS_FAILED; - } - - // call set(uuid) - jni_obj_setManufacturerData = (*env)->CallObjectMethod(env, - jni_obj_scanfilterBuilder4, - jni_mid_setManufacturerData, - jni_int_manId, - jni_byte_manData); - - if (!jni_obj_setManufacturerData) - { - OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_setManufacturerData is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); - return CA_STATUS_FAILED; - } - (*env)->DeleteLocalRef(env, jni_byte_manData); - (*env)->DeleteLocalRef(env, jni_obj_setManufacturerData); - - // call build() - jobject jni_obj_scanfilter4 = (*env)->CallObjectMethod(env, - jni_obj_scanfilterBuilder4, - jni_mid_build_scanfilterBuilder); - if (!jni_obj_scanfilter4) - { - OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_scanfilter4 is null"); - CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); - return CA_STATUS_FAILED; + OIC_LOG_V(DEBUG, TAG, "Total %d manufacture data based scanfilter(s) created by now", i + 1); } - (*env)->DeleteLocalRef(env, jni_obj_scanfilterBuilder4); - OIC_LOG(DEBUG, TAG, "Third custom UUID scanfilter set"); // get scanSettings.Builder class id jclass jni_cid_scanSettingsBuilder = (*env)->FindClass(env, @@ -2117,7 +2118,14 @@ CAResult_t CALEClientStartScanWithUUIDImplForV21(JNIEnv *env, jobjectArray uuids { OIC_LOG(ERROR, TAG, "scanSettings: jni_cid_scanSettingsBuilder is null"); CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilter); + for (j = 0; j< g_serviceUuidCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilter[j]); + } + for (j = 0; j< g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilter[j]); + } return CA_STATUS_FAILED; } @@ -2128,7 +2136,14 @@ CAResult_t CALEClientStartScanWithUUIDImplForV21(JNIEnv *env, jobjectArray uuids { OIC_LOG(ERROR, TAG, "scanSettings: jni_mid_scanSettingsBuilderCtor is null"); CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilter); + for (j = 0; j< g_serviceUuidCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilter[j]); + } + for (j = 0; j< g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilter[j]); + } (*env)->DeleteLocalRef(env, jni_cid_scanSettingsBuilder); return CA_STATUS_FAILED; } @@ -2142,7 +2157,14 @@ CAResult_t CALEClientStartScanWithUUIDImplForV21(JNIEnv *env, jobjectArray uuids { OIC_LOG(ERROR, TAG, "scanSettings: jni_mid_setScanMode is null"); CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilter); + for (j = 0; j< g_serviceUuidCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilter[j]); + } + for (j = 0; j< g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilter[j]); + } (*env)->DeleteLocalRef(env, jni_cid_scanSettingsBuilder); return CA_STATUS_FAILED; } @@ -2157,7 +2179,14 @@ CAResult_t CALEClientStartScanWithUUIDImplForV21(JNIEnv *env, jobjectArray uuids { OIC_LOG(ERROR, TAG, "scanSettings: jni_mid_build_scanSettings is null"); CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilter); + for (j = 0; j< g_serviceUuidCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilter[j]); + } + for (j = 0; j< g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilter[j]); + } (*env)->DeleteLocalRef(env, jni_cid_scanSettingsBuilder); return CA_STATUS_FAILED; } @@ -2169,7 +2198,14 @@ CAResult_t CALEClientStartScanWithUUIDImplForV21(JNIEnv *env, jobjectArray uuids { OIC_LOG(ERROR, TAG, "scanfilter: jni_obj_scanSettingBuilder is null"); CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilter); + for (j = 0; j< g_serviceUuidCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilter[j]); + } + for (j = 0; j< g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilter[j]); + } (*env)->DeleteLocalRef(env, jni_cid_scanSettingsBuilder); return CA_STATUS_FAILED; } @@ -2180,7 +2216,14 @@ CAResult_t CALEClientStartScanWithUUIDImplForV21(JNIEnv *env, jobjectArray uuids { OIC_LOG(ERROR, TAG, "ArrayList: jni_cid_arrayList is null"); CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilter); + for (j = 0; j< g_serviceUuidCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilter[j]); + } + for (j = 0; j< g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilter[j]); + } (*env)->DeleteLocalRef(env, jni_obj_scanSettingBuilder); return CA_STATUS_FAILED; } @@ -2190,7 +2233,14 @@ CAResult_t CALEClientStartScanWithUUIDImplForV21(JNIEnv *env, jobjectArray uuids { OIC_LOG(ERROR, TAG, "ArrayList: jni_mid_arrayListCtor is null"); CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilter); + for (j = 0; j< g_serviceUuidCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilter[j]); + } + for (j = 0; j< g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilter[j]); + } (*env)->DeleteLocalRef(env, jni_cid_arrayList); (*env)->DeleteLocalRef(env, jni_obj_scanSettingBuilder); return CA_STATUS_FAILED; @@ -2202,7 +2252,14 @@ CAResult_t CALEClientStartScanWithUUIDImplForV21(JNIEnv *env, jobjectArray uuids { OIC_LOG(ERROR, TAG, "ArrayList: jni_mid_arrayListAdd is null"); CACheckJNIException(env); - (*env)->DeleteLocalRef(env, jni_obj_scanfilter); + for (j = 0; j< g_serviceUuidCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilter[j]); + } + for (j = 0; j< g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilter[j]); + } (*env)->DeleteLocalRef(env, jni_cid_arrayList); (*env)->DeleteLocalRef(env, jni_obj_scanSettingBuilder); return CA_STATUS_FAILED; @@ -2212,66 +2269,66 @@ CAResult_t CALEClientStartScanWithUUIDImplForV21(JNIEnv *env, jobjectArray uuids if (!jni_obj_filterList) { OIC_LOG(ERROR, TAG, "ArrayList: jni_obj_filterList is null"); - (*env)->DeleteLocalRef(env, jni_obj_scanfilter); + for (j = 0; j< g_serviceUuidCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilter[j]); + } + for (j = 0; j< g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilter[j]); + } (*env)->DeleteLocalRef(env, jni_cid_arrayList); (*env)->DeleteLocalRef(env, jni_obj_scanSettingBuilder); return CA_STATUS_FAILED; } (*env)->DeleteLocalRef(env, jni_cid_arrayList); - jboolean jni_bool_arrayListIsAdded = (*env)->CallBooleanMethod(env, jni_obj_filterList, - jni_mid_arrayListAdd, - jni_obj_scanfilter); - if (!jni_bool_arrayListIsAdded) + jboolean jni_bool_arrayListIsAdded; + for (i = 0; i < g_serviceUuidCount; i++) { - OIC_LOG(ERROR, TAG, "ArrayList: jni_bool_arrayListIsAdded is null"); - (*env)->DeleteLocalRef(env, jni_obj_filterList); - (*env)->DeleteLocalRef(env, jni_obj_scanfilter); - (*env)->DeleteLocalRef(env, jni_obj_scanSettingBuilder); - return CA_STATUS_FAILED; - } - (*env)->DeleteLocalRef(env, jni_obj_scanfilter); - - jni_bool_arrayListIsAdded = (*env)->CallBooleanMethod(env, jni_obj_filterList, + jni_bool_arrayListIsAdded = (*env)->CallBooleanMethod(env, jni_obj_filterList, jni_mid_arrayListAdd, - jni_obj_scanfilter2); - if (!jni_bool_arrayListIsAdded) - { - OIC_LOG(ERROR, TAG, "ArrayList: jni_bool_arrayListIsAdded is null"); - (*env)->DeleteLocalRef(env, jni_obj_filterList); - (*env)->DeleteLocalRef(env, jni_obj_scanfilter2); - (*env)->DeleteLocalRef(env, jni_obj_scanSettingBuilder); - return CA_STATUS_FAILED; + jni_obj_servicescanfilter[i]); + if (!jni_bool_arrayListIsAdded) + { + OIC_LOG(ERROR, TAG, "ArrayList: jni_bool_arrayListIsAdded is null"); + (*env)->DeleteLocalRef(env, jni_obj_filterList); + for(j = i; j < g_serviceUuidCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilter[j]); + } + for(j = 0; j < g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilter[j]); + } + (*env)->DeleteLocalRef(env, jni_obj_scanSettingBuilder); + return CA_STATUS_FAILED; + } + (*env)->DeleteLocalRef(env, jni_obj_servicescanfilter[i]); + OIC_LOG_V(INFO, TAG, "%d st/nd/th service uuid based scanFilters Added", i + 1); } - (*env)->DeleteLocalRef(env, jni_obj_scanfilter2); - jni_bool_arrayListIsAdded = (*env)->CallBooleanMethod(env, jni_obj_filterList, - jni_mid_arrayListAdd, - jni_obj_scanfilter3); - if (!jni_bool_arrayListIsAdded) + for (i = 0; i < g_manufactureDataCount; i++) { - OIC_LOG(ERROR, TAG, "ArrayList: jni_bool_arrayListIsAdded is null"); - (*env)->DeleteLocalRef(env, jni_obj_filterList); - (*env)->DeleteLocalRef(env, jni_obj_scanfilter3); - (*env)->DeleteLocalRef(env, jni_obj_scanSettingBuilder); - return CA_STATUS_FAILED; - } - (*env)->DeleteLocalRef(env, jni_obj_scanfilter3); - - jni_bool_arrayListIsAdded = (*env)->CallBooleanMethod(env, jni_obj_filterList, + jni_bool_arrayListIsAdded = (*env)->CallBooleanMethod(env, jni_obj_filterList, jni_mid_arrayListAdd, - jni_obj_scanfilter4); - if (!jni_bool_arrayListIsAdded) - { - OIC_LOG(ERROR, TAG, "ArrayList: jni_bool_arrayListIsAdded is null"); - (*env)->DeleteLocalRef(env, jni_obj_filterList); - (*env)->DeleteLocalRef(env, jni_obj_scanfilter4); - (*env)->DeleteLocalRef(env, jni_obj_scanSettingBuilder); - return CA_STATUS_FAILED; + jni_obj_customscanfilter[i]); + if (!jni_bool_arrayListIsAdded) + { + OIC_LOG(ERROR, TAG, "ArrayList: jni_bool_arrayListIsAdded is null"); + (*env)->DeleteLocalRef(env, jni_obj_filterList); + for(j = i; j < g_manufactureDataCount; j++) + { + (*env)->DeleteLocalRef(env, jni_obj_customscanfilter[j]); + } + (*env)->DeleteLocalRef(env, jni_obj_scanSettingBuilder); + return CA_STATUS_FAILED; + } + (*env)->DeleteLocalRef(env, jni_obj_customscanfilter[i]); + OIC_LOG_V(INFO, TAG, "%d st/nd/th manufacture data based scanFilters Added", i + 1); } - (*env)->DeleteLocalRef(env, jni_obj_scanfilter4); - OIC_LOG(INFO, TAG, "ScanFilters Added"); + OIC_LOG(INFO, TAG, "All ScanFilters Added"); // get ScanSettings.SCAN_MODE_BALANCED jint value jint jni_int_scanBalancedMode = CALEGetConstantsValue(env, CLASSPATH_LE_SCANSETTINGS, "SCAN_MODE_BALANCED"); diff --git a/resource/csdk/connectivity/src/bt_le_adapter/android/caleclient.h b/resource/csdk/connectivity/src/bt_le_adapter/android/caleclient.h index e05a0d4..f108cea 100644 --- a/resource/csdk/connectivity/src/bt_le_adapter/android/caleclient.h +++ b/resource/csdk/connectivity/src/bt_le_adapter/android/caleclient.h @@ -71,6 +71,12 @@ void CALEClientJNISetContext(); CAResult_t CALEClientCreateJniInterfaceObject(); /** + * set UUID for setting scanfilter + * @param[in] uuid UUID string(service UUID or manufacture data) + * @param[in] uuid_type Type of UUID i.e. service UUID or manufacture data + */ +void CALEClientAddUuid(char* uuid, int uuid_type); +/** * initialize client for BLE. * @return ::CA_STATUS_OK or ERROR CODES (::CAResult_t error codes in cacommon.h). */ 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 ca3091b..e41acfa 100644 --- a/resource/csdk/connectivity/src/bt_le_adapter/android/caleutils.c +++ b/resource/csdk/connectivity/src/bt_le_adapter/android/caleutils.c @@ -150,6 +150,29 @@ error_exit: return NULL; } +static int CALEGetIntFromHex(char c) +{ + if(c >= '0' && c <= '9') + return c - '0'; + switch (c) + { + case 'A': + return 10; + case 'B': + return 11; + case 'C': + return 12; + case 'D': + return 13; + case 'E': + return 14; + case 'F': + return 15; + default: + return -1; + } +} + jbyteArray CALEGetManufacturerData(JNIEnv *env, const char* uuid) { VERIFY_NON_NULL_RET(env, TAG, "env is null", NULL); @@ -157,21 +180,14 @@ jbyteArray CALEGetManufacturerData(JNIEnv *env, const char* uuid) jbyteArray jni_byte_Data = (*env)->NewByteArray(env, 2); uint8_t data_array[2]; - if(uuid[7] == '9') - { - // OIC_GATT_CUSTOM_UUID - data_array[0] = 66, data_array[1] = 9; - } - else if(uuid[7] == '4') - { - // OIC_GATT_CUSTOM_UUID2 - data_array[0] = 66, data_array[1] = 4; - } - else - { - // OIC_GATT_CUSTOM_UUID3 - data_array[0] = 66, data_array[1] = 12; - } + int c1,c2,c3,c4; + c1 = CALEGetIntFromHex(uuid[4]); + c2 = CALEGetIntFromHex(uuid[5]); + c3 = CALEGetIntFromHex(uuid[6]); + c4 = CALEGetIntFromHex(uuid[7]); + data_array[0] = c1 * 16 + c2; + data_array[1] = c3 * 16 + c4; + OIC_LOG_V(DEBUG, TAG, "data_array[0]: %d, data_array[1]: %d", data_array[0], data_array[1]); (*env)->SetByteArrayRegion(env, jni_byte_Data, 0, 2, data_array); return jni_byte_Data; diff --git a/resource/csdk/connectivity/src/bt_le_adapter/android/caleutils.h b/resource/csdk/connectivity/src/bt_le_adapter/android/caleutils.h index 1a5013a..ee52303 100644 --- a/resource/csdk/connectivity/src/bt_le_adapter/android/caleutils.h +++ b/resource/csdk/connectivity/src/bt_le_adapter/android/caleutils.h @@ -40,9 +40,13 @@ extern "C" #define CA_LE_CONNECTION_STATE 2 #define CA_LE_SEND_STATE 3 #define CA_LE_DESCRIPTOR_FOUND 4 +#define CA_LE_TYPE_SERVICE_UUID 0 +#define CA_LE_TYPE_CUSTOM_UUID 1 /* Service UUID */ static const char OIC_GATT_SERVICE_UUID[] = CA_GATT_SERVICE_UUID; + +/* Manufacture Data */ static const char OIC_GATT_CUSTOM_UUID[] = CA_GATT_CUSTOM_UUID; static const char OIC_GATT_CUSTOM_UUID2[] = CA_GATT_CUSTOM_UUID2; static const char OIC_GATT_CUSTOM_UUID3[] = CA_GATT_CUSTOM_UUID3; diff --git a/resource/csdk/connectivity/util/inc/camanagerleinterface.h b/resource/csdk/connectivity/util/inc/camanagerleinterface.h index f0bf2b9..19b0bc7 100644 --- a/resource/csdk/connectivity/util/inc/camanagerleinterface.h +++ b/resource/csdk/connectivity/util/inc/camanagerleinterface.h @@ -111,6 +111,13 @@ void CAManagerLEDisconnect(); #if defined(__ANDROID__) && defined(LE_ADAPTER) /** + * set UUID for setting scanfilter + * @param[in] uuid service UUID string or manufacture data. + * @param[in] uuid_type Type of scanfilter to be set i.e. service UUID based or manufacture data based. + */ +void CASetScanUuid(char* uuid, int uuid_type); + +/** * initialize client connection manager * @param[in] env JNI interface pointer. * @param[in] jvm invocation inferface for JAVA virtual machine. diff --git a/resource/csdk/connectivity/util/src/camanager/bt_le_manager/android/caleconnectionmanager.c b/resource/csdk/connectivity/util/src/camanager/bt_le_manager/android/caleconnectionmanager.c index 532ee70..a906685 100644 --- a/resource/csdk/connectivity/util/src/camanager/bt_le_manager/android/caleconnectionmanager.c +++ b/resource/csdk/connectivity/util/src/camanager/bt_le_manager/android/caleconnectionmanager.c @@ -43,6 +43,12 @@ static JavaVM *g_jvm = NULL; static jobject g_context = NULL; static jobject g_connectedDeviceSet = NULL; +void CASetScanUuid(char* uuid, int uuid_type) +{ + OIC_LOG(DEBUG, TAG, "CASetScanUuid"); + + CALEClientAddUuid(uuid, uuid_type); +} CAResult_t CASetLEClientAutoConnectionDeviceInfo(const char* address) { diff --git a/resource/csdk/connectivity/util/src/cautilinterface.c b/resource/csdk/connectivity/util/src/cautilinterface.c index 60d8384..5321cd4 100644 --- a/resource/csdk/connectivity/util/src/cautilinterface.c +++ b/resource/csdk/connectivity/util/src/cautilinterface.c @@ -28,8 +28,24 @@ #ifdef TCP_ADAPTER #include "catcpadapter.h" #endif + #define TAG "OIC_CA_COMMON_UTILS" +#if defined(__ANDROID__) + +void CASetLEScanUuid(char* uuid, int uuid_type) +{ + OIC_LOG(DEBUG, TAG, "CASetLEScanUuid"); +#ifdef LE_ADAPTER + CASetScanUuid(uuid, uuid_type); +#else + OIC_LOG(DEBUG, TAG, "it is not supported"); +#endif + return; +} + +#endif + CAResult_t CARegisterNetworkMonitorHandler(CAAdapterStateChangedCB adapterStateCB, CAConnectionStateChangedCB connStateCB) { OIC_LOG(DEBUG, TAG, "CARegisterNetworkMonitorHandler");