summaryrefslogtreecommitdiff
path: root/resource/csdk/connectivity
diff options
context:
space:
mode:
authorsamanway <samanway@samanway.sa.corp.samsungelectronics.net>2019-09-03 21:24:59 +0530
committerSudipto <sudipto.bal@samsung.com>2019-09-03 21:24:59 +0530
commitb98490d733fdce1c6e6ae4056cb0cceb6876b817 (patch)
treea5b5d875976a9a6b8eaf7f9d1072aa69dca7725d /resource/csdk/connectivity
parentc3f37d6a7a7ec6cc892e97b5278bd4f8ef3e3c74 (diff)
downloadiotivity-b98490d733fdce1c6e6ae4056cb0cceb6876b817.tar.gz
iotivity-b98490d733fdce1c6e6ae4056cb0cceb6876b817.tar.bz2
iotivity-b98490d733fdce1c6e6ae4056cb0cceb6876b817.zip
[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 <samanway.dey@samsung.com> Signed-off-by: Sudipto <sudipto.bal@samsung.com>
Diffstat (limited to 'resource/csdk/connectivity')
-rw-r--r--resource/csdk/connectivity/api/cautilinterface.h11
-rw-r--r--resource/csdk/connectivity/src/bt_le_adapter/android/caleclient.c599
-rw-r--r--resource/csdk/connectivity/src/bt_le_adapter/android/caleclient.h6
-rw-r--r--resource/csdk/connectivity/src/bt_le_adapter/android/caleutils.c46
-rw-r--r--resource/csdk/connectivity/src/bt_le_adapter/android/caleutils.h4
-rw-r--r--resource/csdk/connectivity/util/inc/camanagerleinterface.h7
-rw-r--r--resource/csdk/connectivity/util/src/camanager/bt_le_manager/android/caleconnectionmanager.c6
-rw-r--r--resource/csdk/connectivity/util/src/cautilinterface.c16
8 files changed, 408 insertions, 287 deletions
diff --git a/resource/csdk/connectivity/api/cautilinterface.h b/resource/csdk/connectivity/api/cautilinterface.h
index 0d1bbfb1d..1b1496870 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 83ed0ae2c..9bf93301f 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 e05a0d4af..f108cea7d 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 ca3091bc9..e41acfabe 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 1a5013ada..ee523031a 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 f0bf2b9e3..19b0bc731 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 532ee7013..a9066851e 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 60d838418..5321cd444 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");